Home | History | Annotate | Download | only in MC
      1 //===- unittests/MC/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 // The target registry code lives in Support, but it relies on linking in all
     11 // LLVM targets. We keep this test with the MC tests, which already do that, to
     12 // keep the SupportTests target small.
     13 
     14 #include "llvm/Support/TargetRegistry.h"
     15 #include "llvm/Support/TargetSelect.h"
     16 #include "gtest/gtest.h"
     17 
     18 using namespace llvm;
     19 
     20 namespace {
     21 
     22 TEST(TargetRegistry, TargetHasArchType) {
     23   // Presence of at least one target will be asserted when done with the loop,
     24   // else this would pass by accident if InitializeAllTargetInfos were omitted.
     25   int Count = 0;
     26 
     27   llvm::InitializeAllTargetInfos();
     28 
     29   for (const Target &T : TargetRegistry::targets()) {
     30     StringRef Name = T.getName();
     31     // There is really no way (at present) to ask a Target whether it targets
     32     // a specific architecture, because the logic for that is buried in a
     33     // predicate.
     34     // We can't ask the predicate "Are you a function that always returns
     35     // false?"
     36     // So given that the cpp backend truly has no target arch, it is skipped.
     37     if (Name != "cpp") {
     38       Triple::ArchType Arch = Triple::getArchTypeForLLVMName(Name);
     39       EXPECT_NE(Arch, Triple::UnknownArch);
     40       ++Count;
     41     }
     42   }
     43   ASSERT_NE(Count, 0);
     44 }
     45 
     46 } // end namespace
     47