diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-08-03 17:26:41 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-08-03 17:26:41 +0000 |
| commit | 55ca964e944b610bfa09dd52490772b3d9f92fea (patch) | |
| tree | f748d9e2304be9b0b442f37f7d606e336bcd39f0 /llvm/unittests | |
| parent | 910dde7ab2f725732222387af0d93f898afec42b (diff) | |
| download | bcm5719-llvm-55ca964e944b610bfa09dd52490772b3d9f92fea.tar.gz bcm5719-llvm-55ca964e944b610bfa09dd52490772b3d9f92fea.zip | |
DI: Disallow uniquable DICompileUnits
Since r241097, `DIBuilder` has only created distinct `DICompileUnit`s.
The backend is liable to start relying on that (if it hasn't already),
so make uniquable `DICompileUnit`s illegal and automatically upgrade old
bitcode. This is a nice cleanup, since we can remove an unnecessary
`DenseSet` (and the associated uniquing info) from `LLVMContextImpl`.
Almost all the testcases were updated with this script:
git grep -e '= !DICompileUnit' -l -- test |
grep -v test/Bitcode |
xargs sed -i '' -e 's,= !DICompileUnit,= distinct !DICompileUnit,'
I imagine something similar should work for out-of-tree testcases.
llvm-svn: 243885
Diffstat (limited to 'llvm/unittests')
| -rw-r--r-- | llvm/unittests/IR/MetadataTest.cpp | 101 |
1 files changed, 22 insertions, 79 deletions
diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index 0b068ed7ecc..b3c26eb407f 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -1304,7 +1304,7 @@ TEST_F(DICompileUnitTest, get) { MDTuple *GlobalVariables = getTuple(); MDTuple *ImportedEntities = getTuple(); uint64_t DWOId = 0xc0ffee; - auto *N = DICompileUnit::get( + auto *N = DICompileUnit::getDistinct( Context, SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, Subprograms, GlobalVariables, ImportedEntities, DWOId); @@ -1324,85 +1324,28 @@ TEST_F(DICompileUnitTest, get) { EXPECT_EQ(GlobalVariables, N->getGlobalVariables().get()); EXPECT_EQ(ImportedEntities, N->getImportedEntities().get()); EXPECT_EQ(DWOId, N->getDWOId()); - EXPECT_EQ(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage + 1, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, getFile(), Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, "other", - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - !IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, "other", RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion + 1, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, "other", - EmissionKind, EnumTypes, RetainedTypes, - Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind + 1, - EnumTypes, RetainedTypes, Subprograms, - GlobalVariables, ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, getTuple(), - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - getTuple(), Subprograms, GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, getTuple(), GlobalVariables, - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, getTuple(), - ImportedEntities, DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - getTuple(), DWOId)); - EXPECT_NE(N, DICompileUnit::get(Context, SourceLanguage, File, Producer, - IsOptimized, Flags, RuntimeVersion, - SplitDebugFilename, EmissionKind, EnumTypes, - RetainedTypes, Subprograms, GlobalVariables, - ImportedEntities, DWOId + 1)); TempDICompileUnit Temp = N->clone(); - EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp))); + EXPECT_EQ(dwarf::DW_TAG_compile_unit, Temp->getTag()); + EXPECT_EQ(SourceLanguage, Temp->getSourceLanguage()); + EXPECT_EQ(File, Temp->getFile()); + EXPECT_EQ(Producer, Temp->getProducer()); + EXPECT_EQ(IsOptimized, Temp->isOptimized()); + EXPECT_EQ(Flags, Temp->getFlags()); + EXPECT_EQ(RuntimeVersion, Temp->getRuntimeVersion()); + EXPECT_EQ(SplitDebugFilename, Temp->getSplitDebugFilename()); + EXPECT_EQ(EmissionKind, Temp->getEmissionKind()); + EXPECT_EQ(EnumTypes, Temp->getEnumTypes().get()); + EXPECT_EQ(RetainedTypes, Temp->getRetainedTypes().get()); + EXPECT_EQ(Subprograms, Temp->getSubprograms().get()); + EXPECT_EQ(GlobalVariables, Temp->getGlobalVariables().get()); + EXPECT_EQ(ImportedEntities, Temp->getImportedEntities().get()); + EXPECT_EQ(DWOId, Temp->getDWOId()); + + auto *TempAddress = Temp.get(); + auto *Clone = MDNode::replaceWithPermanent(std::move(Temp)); + EXPECT_TRUE(Clone->isDistinct()); + EXPECT_EQ(TempAddress, Clone); } TEST_F(DICompileUnitTest, replaceArrays) { @@ -1418,7 +1361,7 @@ TEST_F(DICompileUnitTest, replaceArrays) { MDTuple *RetainedTypes = MDTuple::getDistinct(Context, None); MDTuple *ImportedEntities = MDTuple::getDistinct(Context, None); uint64_t DWOId = 0xc0ffee; - auto *N = DICompileUnit::get( + auto *N = DICompileUnit::getDistinct( Context, SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, nullptr, nullptr, ImportedEntities, DWOId); |

