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
This commit is contained in:
Torok Edwin 2009-07-14 12:49:22 +00:00
parent 481d15a122
commit 93990d775e
3 changed files with 12 additions and 4 deletions

View File

@ -49,11 +49,15 @@ namespace llvm {
/// This function calls abort(), and prints the optional message to stderr. /// 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 /// Call this instead of assert(0), so that compiler knows the path is not
/// reachable even for NDEBUG builds. /// 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 #ifndef NDEBUG
#define LLVM_UNREACHABLE(msg) llvm_unreachable(msg) #define LLVM_UNREACHABLE(msg) llvm_unreachable(msg, __FILE__, __LINE__)
#else #else
#define LLVM_UNREACHABLE(msg) llvm_unreachable() #define LLVM_UNREACHABLE(msg) llvm_unreachable()
#endif #endif

View File

@ -68,7 +68,7 @@ public:
if (findOption(P->getPassArgument()) != getNumOptions()) { if (findOption(P->getPassArgument()) != getNumOptions()) {
cerr << "Two passes with the same argument (-" cerr << "Two passes with the same argument (-"
<< P->getPassArgument() << ") attempted to be registered!\n"; << P->getPassArgument() << ") attempted to be registered!\n";
llvm_unreachable(); LLVM_UNREACHABLE(0);
} }
addLiteralOption(P->getPassArgument(), P, P->getPassName()); addLiteralOption(P->getPassArgument(), P, P->getPassName());
} }

View File

@ -44,9 +44,13 @@ void llvm_report_error(const std::string &reason) {
exit(1); exit(1);
} }
void llvm_unreachable(const char *msg) { void llvm_unreachable(const char *msg, const char *file, unsigned line) {
if (msg) if (msg)
errs() << msg << "\n"; errs() << msg << "\n";
errs() << "UNREACHABLE executed";
if (file)
errs() << " at " << file << ":" << line;
errs() << "!\n";
abort(); abort();
} }
} }