diff --git a/flang/include/flang/Optimizer/Builder/IntrinsicCall.h b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h index 71955632e48cd..19c623cc1ec00 100644 --- a/flang/include/flang/Optimizer/Builder/IntrinsicCall.h +++ b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h @@ -196,7 +196,6 @@ struct IntrinsicLibrary { fir::ExtendedValue genAssociated(mlir::Type, llvm::ArrayRef); mlir::Value genAtand(mlir::Type, llvm::ArrayRef); - void genBacktrace(llvm::ArrayRef); fir::ExtendedValue genBesselJn(mlir::Type, llvm::ArrayRef); fir::ExtendedValue genBesselYn(mlir::Type, diff --git a/flang/include/flang/Optimizer/Builder/Runtime/Stop.h b/flang/include/flang/Optimizer/Builder/Runtime/Stop.h index be73cffff021e..6f764badf6f3a 100644 --- a/flang/include/flang/Optimizer/Builder/Runtime/Stop.h +++ b/flang/include/flang/Optimizer/Builder/Runtime/Stop.h @@ -30,9 +30,6 @@ void genExit(fir::FirOpBuilder &, mlir::Location, mlir::Value status); /// Generate call to ABORT intrinsic runtime routine. void genAbort(fir::FirOpBuilder &, mlir::Location); -/// Generate call to BACKTRACE intrinsic runtime routine. -void genBacktrace(fir::FirOpBuilder &builder, mlir::Location loc); - /// Generate call to crash the program with an error message when detecting /// an invalid situation at runtime. void genReportFatalUserError(fir::FirOpBuilder &, mlir::Location, diff --git a/flang/include/flang/Runtime/stop.h b/flang/include/flang/Runtime/stop.h index d442f72bfe1fa..f7c4ffe7403e8 100644 --- a/flang/include/flang/Runtime/stop.h +++ b/flang/include/flang/Runtime/stop.h @@ -29,7 +29,6 @@ NORETURN void RTNAME(ProgramEndStatement)(NO_ARGUMENTS); // Extensions NORETURN void RTNAME(Exit)(int status DEFAULT_VALUE(EXIT_SUCCESS)); NORETURN void RTNAME(Abort)(NO_ARGUMENTS); -void RTNAME(Backtrace)(NO_ARGUMENTS); // Crash with an error message when the program dynamically violates a Fortran // constraint. diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp index 87ce6ed339667..cdea572c14757 100644 --- a/flang/lib/Evaluate/intrinsics.cpp +++ b/flang/lib/Evaluate/intrinsics.cpp @@ -1336,7 +1336,6 @@ static const IntrinsicInterface intrinsicSubroutine[]{ {"stat", AnyInt, Rank::scalar, Optionality::optional, common::Intent::Out}}, {}, Rank::elemental, IntrinsicClass::atomicSubroutine}, - {"backtrace", {}, {}, Rank::elemental, IntrinsicClass::pureSubroutine}, {"co_broadcast", {{"a", AnyData, Rank::anyOrAssumedRank, Optionality::required, common::Intent::InOut}, diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp index acb77694d6ebf..5dfa53e047f42 100644 --- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp +++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp @@ -150,7 +150,6 @@ static constexpr IntrinsicHandler handlers[]{ {"atan2pi", &I::genAtanpi}, {"atand", &I::genAtand}, {"atanpi", &I::genAtanpi}, - {"backtrace", &I::genBacktrace}, {"bessel_jn", &I::genBesselJn, {{{"n1", asValue}, {"n2", asValue}, {"x", asValue}}}, @@ -2683,12 +2682,6 @@ IntrinsicLibrary::genBesselJn(mlir::Type resultType, } } -// Backtrace -void IntrinsicLibrary::genBacktrace(llvm::ArrayRef args) { - assert(args.size() == 0); - fir::runtime::genBacktrace(builder, loc); -} - // BESSEL_YN fir::ExtendedValue IntrinsicLibrary::genBesselYn(mlir::Type resultType, diff --git a/flang/lib/Optimizer/Builder/Runtime/Stop.cpp b/flang/lib/Optimizer/Builder/Runtime/Stop.cpp index 541e5f3b5d11a..411181cc6dd1c 100644 --- a/flang/lib/Optimizer/Builder/Runtime/Stop.cpp +++ b/flang/lib/Optimizer/Builder/Runtime/Stop.cpp @@ -28,13 +28,6 @@ void fir::runtime::genAbort(fir::FirOpBuilder &builder, mlir::Location loc) { builder.create(loc, abortFunc, std::nullopt); } -void fir::runtime::genBacktrace(fir::FirOpBuilder &builder, - mlir::Location loc) { - mlir::func::FuncOp backtraceFunc = - fir::runtime::getRuntimeFunc(loc, builder); - builder.create(loc, backtraceFunc, std::nullopt); -} - void fir::runtime::genReportFatalUserError(fir::FirOpBuilder &builder, mlir::Location loc, llvm::StringRef message) { diff --git a/flang/runtime/stop.cpp b/flang/runtime/stop.cpp index 17d0ca661d9e8..cfb36b4084020 100644 --- a/flang/runtime/stop.cpp +++ b/flang/runtime/stop.cpp @@ -16,11 +16,6 @@ #include #include -#include "llvm/Config/config.h" -#ifdef HAVE_BACKTRACE -#include BACKTRACE_HEADER -#endif - extern "C" { static void DescribeIEEESignaledExceptions() { @@ -157,36 +152,11 @@ void RTNAME(PauseStatementText)(const char *code, std::size_t length) { std::exit(status); } -static void PrintBacktrace() { -#ifdef HAVE_BACKTRACE - // TODO: Need to parse DWARF information to print function line numbers - constexpr int MAX_CALL_STACK{999}; - void *buffer[MAX_CALL_STACK]; - int nptrs{backtrace(buffer, MAX_CALL_STACK)}; - - if (char **symbols{backtrace_symbols(buffer, nptrs)}) { - for (int i = 0; i < nptrs; i++) { - Fortran::runtime::Terminator{}.PrintCrashArgs("#%d %s\n", i, symbols[i]); - } - free(symbols); - } - -#else - - // TODO: Need to implement the version for other platforms. - Fortran::runtime::Terminator{}.PrintCrashArgs( - "Handle the case when a backtrace is not available"); - -#endif -} - [[noreturn]] void RTNAME(Abort)() { - PrintBacktrace(); + // TODO: Add backtrace call, unless with `-fno-backtrace`. std::abort(); } -void RTNAME(Backtrace)() { PrintBacktrace(); } - [[noreturn]] void RTNAME(ReportFatalUserError)( const char *message, const char *source, int line) { Fortran::runtime::Terminator{source, line}.Crash(message); diff --git a/flang/test/Lower/Intrinsics/backtrace.f90 b/flang/test/Lower/Intrinsics/backtrace.f90 deleted file mode 100644 index 9d5e7b4965baf..0000000000000 --- a/flang/test/Lower/Intrinsics/backtrace.f90 +++ /dev/null @@ -1,10 +0,0 @@ -! RUN: bbc -emit-fir %s -o - | FileCheck %s - -! CHECK-LABEL: func.func @_QPbacktrace_test() { -! CHECK: %[[VAL_0:.*]] = fir.call @_FortranABacktrace() {{.*}}: () -> none -! CHECK: return -! CHECK: } - -subroutine backtrace_test() - call backtrace -end subroutine