- EXPECT_EQ(EnumTypes, N->getEnumTypes());
- EXPECT_EQ(RetainedTypes, N->getRetainedTypes());
- EXPECT_EQ(Subprograms, N->getSubprograms());
- EXPECT_EQ(GlobalVariables, N->getGlobalVariables());
- EXPECT_EQ(ImportedEntities, N->getImportedEntities());
- EXPECT_EQ(N, MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
-
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage + 1, File, Producer,
- IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, EnumTypes, Producer,
- IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, File, "other",
- IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- !IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- IsOptimized, "other", RuntimeVersion,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- IsOptimized, Flags, RuntimeVersion + 1,
- SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N,
- MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- IsOptimized, Flags, RuntimeVersion, "other",
- EmissionKind, EnumTypes, RetainedTypes,
- Subprograms, GlobalVariables, ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind + 1,
- EnumTypes, RetainedTypes, Subprograms,
- GlobalVariables, ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(Context, SourceLanguage, File, Producer,
- IsOptimized, Flags, RuntimeVersion,
- SplitDebugFilename, EmissionKind, File,
- RetainedTypes, Subprograms, GlobalVariables,
- ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(
- Context, SourceLanguage, File, Producer, IsOptimized, Flags,
- RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
- File, Subprograms, GlobalVariables, ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(
- Context, SourceLanguage, File, Producer, IsOptimized, Flags,
- RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, File, GlobalVariables, ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(
- Context, SourceLanguage, File, Producer, IsOptimized, Flags,
- RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, File, ImportedEntities));
- EXPECT_NE(N, MDCompileUnit::get(
- Context, SourceLanguage, File, Producer, IsOptimized, Flags,
- RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
- RetainedTypes, Subprograms, GlobalVariables, File));
-}
-
-typedef MetadataTest MDSubprogramTest;
-
-TEST_F(MDSubprogramTest, get) {
- Metadata *Scope = MDTuple::getDistinct(Context, None);
+ EXPECT_EQ(EnumTypes, N->getEnumTypes().get());
+ EXPECT_EQ(RetainedTypes, N->getRetainedTypes().get());
+ EXPECT_EQ(Subprograms, N->getSubprograms().get());
+ EXPECT_EQ(GlobalVariables, N->getGlobalVariables().get());
+ EXPECT_EQ(ImportedEntities, N->getImportedEntities().get());
+ EXPECT_EQ(Macros, N->getMacros().get());
+ EXPECT_EQ(DWOId, N->getDWOId());
+
+ TempDICompileUnit Temp = N->clone();
+ 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(Macros, Temp->getMacros().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) {
+ unsigned SourceLanguage = 1;
+ DIFile *File = getFile();
+ StringRef Producer = "some producer";
+ bool IsOptimized = false;
+ StringRef Flags = "flag after flag";
+ unsigned RuntimeVersion = 2;
+ StringRef SplitDebugFilename = "another/file";
+ unsigned EmissionKind = 3;
+ MDTuple *EnumTypes = MDTuple::getDistinct(Context, None);
+ MDTuple *RetainedTypes = MDTuple::getDistinct(Context, None);
+ MDTuple *ImportedEntities = MDTuple::getDistinct(Context, None);
+ uint64_t DWOId = 0xc0ffee;
+ auto *N = DICompileUnit::getDistinct(
+ Context, SourceLanguage, File, Producer, IsOptimized, Flags,
+ RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
+ RetainedTypes, nullptr, nullptr, ImportedEntities, nullptr, DWOId);
+
+ auto *Subprograms = MDTuple::getDistinct(Context, None);
+ EXPECT_EQ(nullptr, N->getSubprograms().get());
+ N->replaceSubprograms(Subprograms);
+ EXPECT_EQ(Subprograms, N->getSubprograms().get());
+ N->replaceSubprograms(nullptr);
+ EXPECT_EQ(nullptr, N->getSubprograms().get());
+
+ auto *GlobalVariables = MDTuple::getDistinct(Context, None);
+ EXPECT_EQ(nullptr, N->getGlobalVariables().get());
+ N->replaceGlobalVariables(GlobalVariables);
+ EXPECT_EQ(GlobalVariables, N->getGlobalVariables().get());
+ N->replaceGlobalVariables(nullptr);
+ EXPECT_EQ(nullptr, N->getGlobalVariables().get());
+
+ auto *Macros = MDTuple::getDistinct(Context, None);
+ EXPECT_EQ(nullptr, N->getMacros().get());
+ N->replaceMacros(Macros);
+ EXPECT_EQ(Macros, N->getMacros().get());
+ N->replaceMacros(nullptr);
+ EXPECT_EQ(nullptr, N->getMacros().get());
+}
+
+typedef MetadataTest DISubprogramTest;
+
+TEST_F(DISubprogramTest, get) {
+ DIScopeRef Scope = getCompositeType();