[Lldb-commits] [lldb] r354938 - [Utility] Fix ArchSpec.MergeFrom to correctly merge environments
Alex Langford via lldb-commits
lldb-commits at lists.llvm.org
Tue Feb 26 16:47:39 PST 2019
Author: xiaobai
Date: Tue Feb 26 16:47:39 2019
New Revision: 354938
URL: http://llvm.org/viewvc/llvm-project?rev=354938&view=rev
Log:
[Utility] Fix ArchSpec.MergeFrom to correctly merge environments
Summary:
This behavior was originally added in rL252264 (git commit 76a7f365da)
in order to be extra careful with handling platforms like watchos and tvos.
However, as far as triples go, those two (and others) are treated as OSes and
not environments, so that should not really apply here.
Additionally, this behavior is incorrect and can lead to incorrect ArchSpecs.
Because android is specified as an environment and not an OS, not propogating
the environment can lead to modules and targets being misidentified.
Differential Revision: https://reviews.llvm.org/D58664
Modified:
lldb/trunk/source/Utility/ArchSpec.cpp
lldb/trunk/unittests/Utility/ArchSpecTest.cpp
Modified: lldb/trunk/source/Utility/ArchSpec.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/ArchSpec.cpp?rev=354938&r1=354937&r2=354938&view=diff
==============================================================================
--- lldb/trunk/source/Utility/ArchSpec.cpp (original)
+++ lldb/trunk/source/Utility/ArchSpec.cpp Tue Feb 26 16:47:39 2019
@@ -903,9 +903,8 @@ void ArchSpec::MergeFrom(const ArchSpec
UpdateCore();
}
if (!TripleEnvironmentWasSpecified() &&
- other.TripleEnvironmentWasSpecified() && !TripleVendorWasSpecified()) {
- if (other.TripleVendorWasSpecified())
- GetTriple().setEnvironment(other.GetTriple().getEnvironment());
+ other.TripleEnvironmentWasSpecified()) {
+ GetTriple().setEnvironment(other.GetTriple().getEnvironment());
}
// If this and other are both arm ArchSpecs and this ArchSpec is a generic
// "some kind of arm" spec but the other ArchSpec is a specific arm core,
Modified: lldb/trunk/unittests/Utility/ArchSpecTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Utility/ArchSpecTest.cpp?rev=354938&r1=354937&r2=354938&view=diff
==============================================================================
--- lldb/trunk/unittests/Utility/ArchSpecTest.cpp (original)
+++ lldb/trunk/unittests/Utility/ArchSpecTest.cpp Tue Feb 26 16:47:39 2019
@@ -134,22 +134,46 @@ TEST(ArchSpecTest, TestSetTriple) {
}
TEST(ArchSpecTest, MergeFrom) {
- ArchSpec A;
- ArchSpec B("x86_64-pc-linux");
+ {
+ ArchSpec A;
+ ArchSpec B("x86_64-pc-linux");
- EXPECT_FALSE(A.IsValid());
- ASSERT_TRUE(B.IsValid());
- EXPECT_EQ(llvm::Triple::ArchType::x86_64, B.GetTriple().getArch());
- EXPECT_EQ(llvm::Triple::VendorType::PC, B.GetTriple().getVendor());
- EXPECT_EQ(llvm::Triple::OSType::Linux, B.GetTriple().getOS());
- EXPECT_EQ(ArchSpec::eCore_x86_64_x86_64, B.GetCore());
-
- A.MergeFrom(B);
- ASSERT_TRUE(A.IsValid());
- EXPECT_EQ(llvm::Triple::ArchType::x86_64, A.GetTriple().getArch());
- EXPECT_EQ(llvm::Triple::VendorType::PC, A.GetTriple().getVendor());
- EXPECT_EQ(llvm::Triple::OSType::Linux, A.GetTriple().getOS());
- EXPECT_EQ(ArchSpec::eCore_x86_64_x86_64, A.GetCore());
+ EXPECT_FALSE(A.IsValid());
+ ASSERT_TRUE(B.IsValid());
+ EXPECT_EQ(llvm::Triple::ArchType::x86_64, B.GetTriple().getArch());
+ EXPECT_EQ(llvm::Triple::VendorType::PC, B.GetTriple().getVendor());
+ EXPECT_EQ(llvm::Triple::OSType::Linux, B.GetTriple().getOS());
+ EXPECT_EQ(ArchSpec::eCore_x86_64_x86_64, B.GetCore());
+
+ A.MergeFrom(B);
+ ASSERT_TRUE(A.IsValid());
+ EXPECT_EQ(llvm::Triple::ArchType::x86_64, A.GetTriple().getArch());
+ EXPECT_EQ(llvm::Triple::VendorType::PC, A.GetTriple().getVendor());
+ EXPECT_EQ(llvm::Triple::OSType::Linux, A.GetTriple().getOS());
+ EXPECT_EQ(ArchSpec::eCore_x86_64_x86_64, A.GetCore());
+ }
+ {
+ ArchSpec A("aarch64");
+ ArchSpec B("aarch64--linux-android");
+
+ EXPECT_TRUE(A.IsValid());
+ EXPECT_TRUE(B.IsValid());
+
+ EXPECT_EQ(llvm::Triple::ArchType::aarch64, B.GetTriple().getArch());
+ EXPECT_EQ(llvm::Triple::VendorType::UnknownVendor,
+ B.GetTriple().getVendor());
+ EXPECT_EQ(llvm::Triple::OSType::Linux, B.GetTriple().getOS());
+ EXPECT_EQ(llvm::Triple::EnvironmentType::Android,
+ B.GetTriple().getEnvironment());
+
+ A.MergeFrom(B);
+ EXPECT_EQ(llvm::Triple::ArchType::aarch64, A.GetTriple().getArch());
+ EXPECT_EQ(llvm::Triple::VendorType::UnknownVendor,
+ A.GetTriple().getVendor());
+ EXPECT_EQ(llvm::Triple::OSType::Linux, A.GetTriple().getOS());
+ EXPECT_EQ(llvm::Triple::EnvironmentType::Android,
+ A.GetTriple().getEnvironment());
+ }
}
TEST(ArchSpecTest, MergeFromMachOUnknown) {
More information about the lldb-commits
mailing list