summaryrefslogtreecommitdiffstats
path: root/llvm/unittests
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-08-03 17:26:41 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-08-03 17:26:41 +0000
commit55ca964e944b610bfa09dd52490772b3d9f92fea (patch)
treef748d9e2304be9b0b442f37f7d606e336bcd39f0 /llvm/unittests
parent910dde7ab2f725732222387af0d93f898afec42b (diff)
downloadbcm5719-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.cpp101
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);
OpenPOWER on IntegriCloud