117495274SReid Kleckner //===- unittests/MC/TargetRegistry.cpp ------------------------------------===//
217495274SReid Kleckner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
617495274SReid Kleckner //
717495274SReid Kleckner //===----------------------------------------------------------------------===//
817495274SReid Kleckner
917495274SReid Kleckner // The target registry code lives in Support, but it relies on linking in all
1017495274SReid Kleckner // LLVM targets. We keep this test with the MC tests, which already do that, to
1117495274SReid Kleckner // keep the SupportTests target small.
1217495274SReid Kleckner
13*89b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h"
1417495274SReid Kleckner #include "llvm/Support/TargetSelect.h"
1517495274SReid Kleckner #include "gtest/gtest.h"
1617495274SReid Kleckner
1717495274SReid Kleckner using namespace llvm;
1817495274SReid Kleckner
1917495274SReid Kleckner namespace {
2017495274SReid Kleckner
TEST(TargetRegistry,TargetHasArchType)2117495274SReid Kleckner TEST(TargetRegistry, TargetHasArchType) {
2217495274SReid Kleckner // Presence of at least one target will be asserted when done with the loop,
2317495274SReid Kleckner // else this would pass by accident if InitializeAllTargetInfos were omitted.
2417495274SReid Kleckner int Count = 0;
2517495274SReid Kleckner
2617495274SReid Kleckner llvm::InitializeAllTargetInfos();
2717495274SReid Kleckner
2817495274SReid Kleckner for (const Target &T : TargetRegistry::targets()) {
2917495274SReid Kleckner StringRef Name = T.getName();
3017495274SReid Kleckner // There is really no way (at present) to ask a Target whether it targets
3117495274SReid Kleckner // a specific architecture, because the logic for that is buried in a
3217495274SReid Kleckner // predicate.
3317495274SReid Kleckner // We can't ask the predicate "Are you a function that always returns
3417495274SReid Kleckner // false?"
3517495274SReid Kleckner // So given that the cpp backend truly has no target arch, it is skipped.
3617495274SReid Kleckner if (Name != "cpp") {
3717495274SReid Kleckner Triple::ArchType Arch = Triple::getArchTypeForLLVMName(Name);
3817495274SReid Kleckner EXPECT_NE(Arch, Triple::UnknownArch);
3917495274SReid Kleckner ++Count;
4017495274SReid Kleckner }
4117495274SReid Kleckner }
4217495274SReid Kleckner ASSERT_NE(Count, 0);
4317495274SReid Kleckner }
4417495274SReid Kleckner
4517495274SReid Kleckner } // end namespace
46