From: Torok Edwin Date: Tue, 14 Jul 2009 12:49:22 +0000 (+0000) Subject: After converting assert(0) to LLVM_UNREACHABLE we lost file/line location. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=93990d775ea4ac13c9c2614e84fc19a7a2161771 After converting assert(0) to LLVM_UNREACHABLE we lost file/line location. Fix by making the LLVM_UNREACHABLE pass __FILE__ and __LINE__ to llvm_unreachable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75631 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/ErrorHandling.h b/include/llvm/Support/ErrorHandling.h index 07faba75845..c14eed98850 100644 --- a/include/llvm/Support/ErrorHandling.h +++ b/include/llvm/Support/ErrorHandling.h @@ -49,11 +49,15 @@ namespace llvm { /// This function calls abort(), and prints the optional message to stderr. /// Call this instead of assert(0), so that compiler knows the path is not /// reachable even for NDEBUG builds. - void llvm_unreachable(const char *msg=0) NORETURN; + /// Use the LLVM_UNREACHABLE macro instead that adds location info. + void llvm_unreachable(const char *msg=0, const char *file=0, + unsigned line=0) NORETURN; } +/// Macro that calls llvm_unreachable with location info and message in +/// debug mode. In NDEBUG mode it calls llvm_unreachable with no message. #ifndef NDEBUG -#define LLVM_UNREACHABLE(msg) llvm_unreachable(msg) +#define LLVM_UNREACHABLE(msg) llvm_unreachable(msg, __FILE__, __LINE__) #else #define LLVM_UNREACHABLE(msg) llvm_unreachable() #endif diff --git a/include/llvm/Support/PassNameParser.h b/include/llvm/Support/PassNameParser.h index 12c124074d7..559dfd3e977 100644 --- a/include/llvm/Support/PassNameParser.h +++ b/include/llvm/Support/PassNameParser.h @@ -68,7 +68,7 @@ public: if (findOption(P->getPassArgument()) != getNumOptions()) { cerr << "Two passes with the same argument (-" << P->getPassArgument() << ") attempted to be registered!\n"; - llvm_unreachable(); + LLVM_UNREACHABLE(0); } addLiteralOption(P->getPassArgument(), P, P->getPassName()); } diff --git a/lib/Support/ErrorHandling.cpp b/lib/Support/ErrorHandling.cpp index f2e247c5274..be0b3803f15 100644 --- a/lib/Support/ErrorHandling.cpp +++ b/lib/Support/ErrorHandling.cpp @@ -44,9 +44,13 @@ void llvm_report_error(const std::string &reason) { exit(1); } -void llvm_unreachable(const char *msg) { +void llvm_unreachable(const char *msg, const char *file, unsigned line) { if (msg) errs() << msg << "\n"; + errs() << "UNREACHABLE executed"; + if (file) + errs() << " at " << file << ":" << line; + errs() << "!\n"; abort(); } }