Provide slightly more refined error message when trying to lookup a target, and
authorDaniel Dunbar <daniel@zuster.org>
Fri, 17 Jul 2009 15:50:49 +0000 (15:50 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 17 Jul 2009 15:50:49 +0000 (15:50 +0000)
none are registered.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76181 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/TargetRegistry.cpp

index bf631feb686b61e0497f44c4f4ab9039d130a2f8..b3446e6109227872d1f3c601ab9b39a9b47e9e63 100644 (file)
@@ -21,6 +21,11 @@ TargetRegistry::iterator TargetRegistry::begin() {
 const Target *
 TargetRegistry::getClosestStaticTargetForTriple(const std::string &TT,
                                                 std::string &Error) {
+  // Provide special warning when no targets are initialized.
+  if (begin() == end()) {
+    Error = "Unable to find target for this triple (no targets are registered)";
+    return 0;
+  }
   const Target *Best = 0, *EquallyBest = 0;
   unsigned BestQuality = 0;
   for (iterator it = begin(), ie = end(); it != ie; ++it) {
@@ -35,7 +40,7 @@ TargetRegistry::getClosestStaticTargetForTriple(const std::string &TT,
   }
 
   if (!Best) {
-    Error = "No available targets are compatible with this module";
+    Error = "No available targets are compatible with this triple";
     return 0;
   }
 
@@ -53,6 +58,12 @@ TargetRegistry::getClosestStaticTargetForTriple(const std::string &TT,
 const Target *
 TargetRegistry::getClosestStaticTargetForModule(const Module &M,
                                                 std::string &Error) {
+  // Provide special warning when no targets are initialized.
+  if (begin() == end()) {
+    Error = "Unable to find target for this module (no targets are registered)";
+    return 0;
+  }
+
   const Target *Best = 0, *EquallyBest = 0;
   unsigned BestQuality = 0;
   for (iterator it = begin(), ie = end(); it != ie; ++it) {
@@ -84,6 +95,12 @@ TargetRegistry::getClosestStaticTargetForModule(const Module &M,
 
 const Target *
 TargetRegistry::getClosestTargetForJIT(std::string &Error) {
+  // Provide special warning when no targets are initialized.
+  if (begin() == end()) {
+    Error = "No JIT is available for this host (no targets are registered)";
+    return 0;
+  }
+
   const Target *Best = 0, *EquallyBest = 0;
   unsigned BestQuality = 0;
   for (iterator it = begin(), ie = end(); it != ie; ++it) {