mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 17:26:07 +00:00
[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.
This commit is contained in:
parent
a9636b7f60
commit
3fa946a844
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user