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