From: Philip Reames Date: Sun, 26 Apr 2015 22:00:34 +0000 (+0000) Subject: Make the message associated with a fatal error slightly more helpful X-Git-Tag: android-x86-7.1-r4~48819 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c4ab95d900eea5553991be32e11c54ecc6611a2a;p=android-x86%2Fexternal-llvm.git Make the message associated with a fatal error slightly more helpful Looking into 23095, my best guess is that the CodeGen library itself isn't getting linked and initialized properly. To make this slightly more obvious to consumers of LLVM, emit a different error message if we can tell that the registry is empty vs you've simply happened to name a collector which hasn't been registered. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235824 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/GCMetadata.cpp b/lib/CodeGen/GCMetadata.cpp index 16cd9e83b4a..c8116a453d2 100644 --- a/lib/CodeGen/GCMetadata.cpp +++ b/lib/CodeGen/GCMetadata.cpp @@ -148,7 +148,6 @@ bool Printer::doFinalization(Module &M) { return false; } - GCStrategy *GCModuleInfo::getGCStrategy(const StringRef Name) { // TODO: Arguably, just doing a linear search would be faster for small N auto NMI = GCStrategyMap.find(Name); @@ -165,5 +164,14 @@ GCStrategy *GCModuleInfo::getGCStrategy(const StringRef Name) { } } - report_fatal_error(std::string("unsupported GC: ") + Name); + if (GCRegistry::begin() == GCRegistry::end()) { + // In normal operation, the registry should not be empty. There should + // be the builtin GCs if nothing else. The most likely scenario here is + // that we got here without running the initializers used by the Registry + // itself and it's registration mechanism. + const std::string error = ("unsupported GC: " + Name).str() + + " (did you remember to link and initialize the CodeGen library?)"; + report_fatal_error(error); + } else + report_fatal_error(std::string("unsupported GC: ") + Name); }