Home | History | Annotate | Download | only in Support
      1 //===- unittests/Support/TargetRegistry.cpp - -----------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "llvm/Support/TargetRegistry.h"
     11 #include "llvm/Support/TargetSelect.h"
     12 #include "gtest/gtest.h"
     13 
     14 using namespace llvm;
     15 
     16 namespace {
     17 
     18 TEST(TargetRegistry, TargetHasArchType) {
     19   // Presence of at least one target will be asserted when done with the loop,
     20   // else this would pass by accident if InitializeAllTargetInfos were omitted.
     21   int Count = 0;
     22 
     23   llvm::InitializeAllTargetInfos();
     24 
     25   for (const Target &T : TargetRegistry::targets()) {
     26     StringRef Name = T.getName();
     27     // There is really no way (at present) to ask a Target whether it targets
     28     // a specific architecture, because the logic for that is buried in a
     29     // predicate.
     30     // We can't ask the predicate "Are you a function that always returns
     31     // false?"
     32     // So given that the cpp backend truly has no target arch, it is skipped.
     33     if (Name != "cpp") {
     34       Triple::ArchType Arch = Triple::getArchTypeForLLVMName(Name);
     35       EXPECT_NE(Arch, Triple::UnknownArch);
     36       ++Count;
     37     }
     38   }
     39   ASSERT_NE(Count, 0);
     40 }
     41 
     42 } // end namespace
     43