[llvm] 3fa946a - [DI] Have createClassType create a class type. (#102624)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 13 03:12:33 PDT 2024
Author: deadalnix
Date: 2024-08-13T12:12:29+02:00
New Revision: 3fa946a8442e1b8d4fdbdc9b9b7e8c12a0f77dcc
URL: https://github.com/llvm/llvm-project/commit/3fa946a8442e1b8d4fdbdc9b9b7e8c12a0f77dcc
DIFF: https://github.com/llvm/llvm-project/commit/3fa946a8442e1b8d4fdbdc9b9b7e8c12a0f77dcc.diff
LOG: [DI] Have createClassType create a class type. (#102624)
I was wondering why my use of createClassType was generating structure
reccords, and it turns out the code is wrong (or for some reason i don't
understand the intended use of the API).
clang itself does not use that part of the API, so this flew under the
radar.
Added:
Modified:
llvm/lib/IR/DIBuilder.cpp
llvm/unittests/IR/DebugInfoTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp
index 30b79b6d6f60fd..0db82cdd6373c8 100644
--- a/llvm/lib/IR/DIBuilder.cpp
+++ b/llvm/lib/IR/DIBuilder.cpp
@@ -509,7 +509,7 @@ DICompositeType *DIBuilder::createClassType(
"createClassType should be called with a valid Context");
auto *R = DICompositeType::get(
- VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
+ VMContext, dwarf::DW_TAG_class_type, Name, File, LineNumber,
getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits,
OffsetInBits, Flags, Elements, RunTimeLang, VTableHolder,
cast_or_null<MDTuple>(TemplateParams), UniqueIdentifier);
diff --git a/llvm/unittests/IR/DebugInfoTest.cpp b/llvm/unittests/IR/DebugInfoTest.cpp
index cac8acbe15a79d..953df224e84dcb 100644
--- a/llvm/unittests/IR/DebugInfoTest.cpp
+++ b/llvm/unittests/IR/DebugInfoTest.cpp
@@ -1244,4 +1244,37 @@ TEST(DIBuilder, HashingDISubprogram) {
EXPECT_EQ(HashDefinition, HashDefinitionAfter);
}
+TEST(DIBuilder, CompositeTypes) {
+ LLVMContext Ctx;
+ std::unique_ptr<Module> M = std::make_unique<Module>("MyModule", Ctx);
+ DIBuilder DIB(*M);
+
+ DIFile *F = DIB.createFile("main.c", "/");
+ DICompileUnit *CU =
+ DIB.createCompileUnit(dwarf::DW_LANG_C, F, "Test", false, "", 0);
+
+ DICompositeType *Class =
+ DIB.createClassType(CU, "MyClass", F, 0, 8, 8, 0, {}, nullptr, {}, 0,
+ nullptr, nullptr, "ClassUniqueIdentifier");
+ EXPECT_EQ(Class->getTag(), dwarf::DW_TAG_class_type);
+
+ DICompositeType *Struct = DIB.createStructType(
+ CU, "MyStruct", F, 0, 8, 8, {}, {}, {}, 0, {}, "StructUniqueIdentifier");
+ EXPECT_EQ(Struct->getTag(), dwarf::DW_TAG_structure_type);
+
+ DICompositeType *Union = DIB.createUnionType(CU, "MyUnion", F, 0, 8, 8, {},
+ {}, 0, "UnionUniqueIdentifier");
+ EXPECT_EQ(Union->getTag(), dwarf::DW_TAG_union_type);
+
+ DICompositeType *Array = DIB.createArrayType(8, 8, nullptr, {});
+ EXPECT_EQ(Array->getTag(), dwarf::DW_TAG_array_type);
+
+ DICompositeType *Vector = DIB.createVectorType(8, 8, nullptr, {});
+ EXPECT_EQ(Vector->getTag(), dwarf::DW_TAG_array_type);
+
+ DICompositeType *Enum = DIB.createEnumerationType(
+ CU, "MyEnum", F, 0, 8, 8, {}, nullptr, 0, "EnumUniqueIdentifier");
+ EXPECT_EQ(Enum->getTag(), dwarf::DW_TAG_enumeration_type);
+}
+
} // end namespace
More information about the llvm-commits
mailing list