blob: e18bab4ea31fc187196d82ce7a9f3e4ba372bdf7 [file] [log] [blame]
//===-- Lower/Todo.h --------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
//
//===----------------------------------------------------------------------===//
#ifndef FORTRAN_LOWER_TODO_H
#define FORTRAN_LOWER_TODO_H
#include "flang/Optimizer/Support/FatalError.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
// This is throw-away code used to mark areas of the code that have not yet been
// developed.
#undef TODO
// Use TODO_NOLOC if no mlir location is available to indicate the line in
// Fortran source file that requires an unimplemented feature.
#undef TODO_NOLOC
#undef TODOQUOTE
#define TODOQUOTE(X) #X
#ifdef NDEBUG
// In a release build, just give a message and exit.
#define TODO_NOLOC(ToDoMsg) \
do { \
llvm::errs() << __FILE__ << ':' << __LINE__ << ": not yet implemented " \
<< ToDoMsg << '\n'; \
std::exit(1); \
} while (false)
#undef TODO_DEFN
#define TODO_DEFN(MlirLoc, ToDoMsg, ToDoFile, ToDoLine) \
do { \
mlir::emitError(MlirLoc, ToDoFile \
":" TODOQUOTE(ToDoLine) ": not yet implemented " ToDoMsg); \
std::exit(1); \
} while (false)
#define TODO(MlirLoc, ToDoMsg) TODO_DEFN(MlirLoc, ToDoMsg, __FILE__, __LINE__)
#else
// In a developer build, print a message and give a backtrace.
#undef TODO_NOLOCDEFN
#define TODO_NOLOCDEFN(ToDoMsg, ToDoFile, ToDoLine) \
do { \
llvm::report_fatal_error( \
__FILE__ ":" TODOQUOTE(__LINE__) ": not yet implemented " ToDoMsg); \
} while (false)
#define TODO_NOLOC(ToDoMsg) TODO_NOLOCDEFN(ToDoMsg, __FILE__, __LINE__)
#undef TODO_DEFN
#define TODO_DEFN(MlirLoc, ToDoMsg, ToDoFile, ToDoLine) \
do { \
fir::emitFatalError( \
MlirLoc, \
ToDoFile ":" TODOQUOTE(ToDoLine) ": not yet implemented " ToDoMsg); \
} while (false)
#define TODO(MlirLoc, ToDoMsg) TODO_DEFN(MlirLoc, ToDoMsg, __FILE__, __LINE__)
#endif
#endif // FORTRAN_LOWER_TODO_H