diff options
| author | Alex Langford <apl@fb.com> | 2019-02-26 23:50:19 +0000 |
|---|---|---|
| committer | Alex Langford <apl@fb.com> | 2019-02-26 23:50:19 +0000 |
| commit | bee015efb5ff0864884f7a17cb79373808e1958f (patch) | |
| tree | 80966f9381dda482840b4765d86cb9b6f0b2209a /lldb/unittests/Utility/ArchSpecTest.cpp | |
| parent | 27f79151ec89048103b0427f20b6e4e927718216 (diff) | |
| download | bcm5719-llvm-bee015efb5ff0864884f7a17cb79373808e1958f.tar.gz bcm5719-llvm-bee015efb5ff0864884f7a17cb79373808e1958f.zip | |
[Utility] Remove Triple{Environment,OS,Vendor}IsUnspecifiedUnknown from ArchSpec
Summary:
These functions should always return the opposite of the
`Triple{Environment,OS,Vendor}WasSpecified` functions. Unspecified unknown is
the same as unspecified, which is why one set of functions should give us what
we want. It's possible to have specified unknown, which is why we can't just
rely on checking the enum values of vendor/os/environment. We must also ensure
that the names of these are empty and not "unknown".
Differential Revision: https://reviews.llvm.org/D58653
llvm-svn: 354933
Diffstat (limited to 'lldb/unittests/Utility/ArchSpecTest.cpp')
| -rw-r--r-- | lldb/unittests/Utility/ArchSpecTest.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lldb/unittests/Utility/ArchSpecTest.cpp b/lldb/unittests/Utility/ArchSpecTest.cpp index 4216eb31205..99d07bc71a0 100644 --- a/lldb/unittests/Utility/ArchSpecTest.cpp +++ b/lldb/unittests/Utility/ArchSpecTest.cpp @@ -232,3 +232,76 @@ TEST(ArchSpecTest, OperatorBool) { EXPECT_FALSE(ArchSpec()); EXPECT_TRUE(ArchSpec("x86_64-pc-linux")); } + +TEST(ArchSpecTest, TripleComponentsWereSpecified) { + { + ArchSpec A(""); + ArchSpec B("-"); + ArchSpec C("--"); + ArchSpec D("---"); + + ASSERT_FALSE(A.TripleVendorWasSpecified()); + ASSERT_FALSE(A.TripleOSWasSpecified()); + ASSERT_FALSE(A.TripleEnvironmentWasSpecified()); + + ASSERT_FALSE(B.TripleVendorWasSpecified()); + ASSERT_FALSE(B.TripleOSWasSpecified()); + ASSERT_FALSE(B.TripleEnvironmentWasSpecified()); + + ASSERT_FALSE(C.TripleVendorWasSpecified()); + ASSERT_FALSE(C.TripleOSWasSpecified()); + ASSERT_FALSE(C.TripleEnvironmentWasSpecified()); + + ASSERT_FALSE(D.TripleVendorWasSpecified()); + ASSERT_FALSE(D.TripleOSWasSpecified()); + ASSERT_FALSE(D.TripleEnvironmentWasSpecified()); + } + { + // TODO: llvm::Triple::normalize treats the missing components from these + // triples as specified unknown components instead of unspecified + // components. We need to either change the behavior in llvm or work around + // this in lldb. + ArchSpec A("armv7"); + ArchSpec B("armv7-"); + ArchSpec C("armv7--"); + ArchSpec D("armv7---"); + + ASSERT_FALSE(A.TripleVendorWasSpecified()); + ASSERT_FALSE(A.TripleOSWasSpecified()); + ASSERT_FALSE(A.TripleEnvironmentWasSpecified()); + + ASSERT_TRUE(B.TripleVendorWasSpecified()); + ASSERT_FALSE(B.TripleOSWasSpecified()); + ASSERT_FALSE(B.TripleEnvironmentWasSpecified()); + + ASSERT_TRUE(C.TripleVendorWasSpecified()); + ASSERT_TRUE(C.TripleOSWasSpecified()); + ASSERT_FALSE(C.TripleEnvironmentWasSpecified()); + + ASSERT_TRUE(D.TripleVendorWasSpecified()); + ASSERT_TRUE(D.TripleOSWasSpecified()); + ASSERT_TRUE(D.TripleEnvironmentWasSpecified()); + } + { + ArchSpec A("x86_64-unknown"); + ArchSpec B("powerpc-unknown-linux"); + ArchSpec C("i386-pc-windows-msvc"); + ArchSpec D("aarch64-unknown-linux-android"); + + ASSERT_TRUE(A.TripleVendorWasSpecified()); + ASSERT_FALSE(A.TripleOSWasSpecified()); + ASSERT_FALSE(A.TripleEnvironmentWasSpecified()); + + ASSERT_TRUE(B.TripleVendorWasSpecified()); + ASSERT_TRUE(B.TripleOSWasSpecified()); + ASSERT_FALSE(B.TripleEnvironmentWasSpecified()); + + ASSERT_TRUE(C.TripleVendorWasSpecified()); + ASSERT_TRUE(C.TripleOSWasSpecified()); + ASSERT_TRUE(C.TripleEnvironmentWasSpecified()); + + ASSERT_TRUE(D.TripleVendorWasSpecified()); + ASSERT_TRUE(D.TripleOSWasSpecified()); + ASSERT_TRUE(D.TripleEnvironmentWasSpecified()); + } +} |

