|  | //===- unittests/MC/TargetRegistry.cpp ------------------------------------===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | // The target registry code lives in Support, but it relies on linking in all | 
|  | // LLVM targets. We keep this test with the MC tests, which already do that, to | 
|  | // keep the SupportTests target small. | 
|  |  | 
|  | #include "llvm/Support/TargetRegistry.h" | 
|  | #include "llvm/Support/TargetSelect.h" | 
|  | #include "gtest/gtest.h" | 
|  |  | 
|  | using namespace llvm; | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | TEST(TargetRegistry, TargetHasArchType) { | 
|  | // Presence of at least one target will be asserted when done with the loop, | 
|  | // else this would pass by accident if InitializeAllTargetInfos were omitted. | 
|  | int Count = 0; | 
|  |  | 
|  | llvm::InitializeAllTargetInfos(); | 
|  |  | 
|  | for (const Target &T : TargetRegistry::targets()) { | 
|  | StringRef Name = T.getName(); | 
|  | // There is really no way (at present) to ask a Target whether it targets | 
|  | // a specific architecture, because the logic for that is buried in a | 
|  | // predicate. | 
|  | // We can't ask the predicate "Are you a function that always returns | 
|  | // false?" | 
|  | // So given that the cpp backend truly has no target arch, it is skipped. | 
|  | if (Name != "cpp") { | 
|  | Triple::ArchType Arch = Triple::getArchTypeForLLVMName(Name); | 
|  | EXPECT_NE(Arch, Triple::UnknownArch); | 
|  | ++Count; | 
|  | } | 
|  | } | 
|  | ASSERT_NE(Count, 0); | 
|  | } | 
|  |  | 
|  | } // end namespace |