From 8999b745bc4ecae5ac74f5c4d06f40e317ddb12c Mon Sep 17 00:00:00 2001 From: Jeroen Dobbelaere Date: Thu, 23 Jun 2022 14:18:49 +0200 Subject: [PATCH] Revert "[tbaa] Handle base classes in struct tbaa" This reverts commit cdc59e2202c11a6a5dfd2ec83531523c58eaae45. The Verifier finds a problem in a stage2 build. Reverting so Bruno can investigate. --- clang/lib/CodeGen/CodeGenTBAA.cpp | 24 ------------------------ clang/test/CodeGen/tbaa-class.cpp | 4 ++-- clang/unittests/CodeGen/TBAAMetadataTest.cpp | 22 ++++++++++++++-------- 3 files changed, 16 insertions(+), 34 deletions(-) diff --git a/clang/lib/CodeGen/CodeGenTBAA.cpp b/clang/lib/CodeGen/CodeGenTBAA.cpp index 2904bd5..95763d8 100644 --- a/clang/lib/CodeGen/CodeGenTBAA.cpp +++ b/clang/lib/CodeGen/CodeGenTBAA.cpp @@ -336,30 +336,6 @@ llvm::MDNode *CodeGenTBAA::getBaseTypeInfoHelper(const Type *Ty) { const RecordDecl *RD = TTy->getDecl()->getDefinition(); const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD); SmallVector Fields; - if (const CXXRecordDecl *CXXRD = dyn_cast(RD)) { - // Handle C++ base classes. Non-virtual bases can treated a a kind of - // field. Virtual bases are more complex and omitted, but avoid an - // incomplete view for NewStructPathTBAA. - if (CodeGenOpts.NewStructPathTBAA && CXXRD->getNumVBases() != 0) - return BaseTypeMetadataCache[Ty] = nullptr; - for (const CXXBaseSpecifier &B : CXXRD->bases()) { - if (B.isVirtual()) - continue; - QualType BaseQTy = B.getType(); - const CXXRecordDecl *BaseRD = BaseQTy->getAsCXXRecordDecl(); - if (BaseRD->isEmpty()) - continue; - llvm::MDNode *TypeNode = isValidBaseType(BaseQTy) - ? getBaseTypeInfo(BaseQTy) - : getTypeInfo(BaseQTy); - if (!TypeNode) - return BaseTypeMetadataCache[Ty] = nullptr; - uint64_t Offset = Layout.getBaseClassOffset(BaseRD).getQuantity(); - uint64_t Size = Context.getTypeSizeInChars(BaseQTy).getQuantity(); - Fields.push_back( - llvm::MDBuilder::TBAAStructField(Offset, Size, TypeNode)); - } - } for (FieldDecl *Field : RD->fields()) { if (Field->isZeroSize(Context) || Field->isUnnamedBitfield()) continue; diff --git a/clang/test/CodeGen/tbaa-class.cpp b/clang/test/CodeGen/tbaa-class.cpp index 38558b0..7f413a6 100644 --- a/clang/test/CodeGen/tbaa-class.cpp +++ b/clang/test/CodeGen/tbaa-class.cpp @@ -222,7 +222,7 @@ uint32_t g12(StructC *C, StructD *D, uint64_t count) { // OLD-PATH: [[TYPE_S]] = !{!"_ZTS7StructS", [[TYPE_SHORT]], i64 0, [[TYPE_INT]], i64 4} // OLD-PATH: [[TAG_S_f16]] = !{[[TYPE_S]], [[TYPE_SHORT]], i64 0} // OLD-PATH: [[TAG_S2_f32_2]] = !{[[TYPE_S2:!.*]], [[TYPE_INT]], i64 12} -// OLD-PATH: [[TYPE_S2]] = !{!"_ZTS8StructS2", [[TYPE_S]], i64 0, [[TYPE_SHORT]], i64 8, [[TYPE_INT]], i64 12} +// OLD-PATH: [[TYPE_S2]] = !{!"_ZTS8StructS2", [[TYPE_SHORT]], i64 8, [[TYPE_INT]], i64 12} // OLD-PATH: [[TAG_C_b_a_f32]] = !{[[TYPE_C:!.*]], [[TYPE_INT]], i64 12} // OLD-PATH: [[TYPE_C]] = !{!"_ZTS7StructC", [[TYPE_SHORT]], i64 0, [[TYPE_B]], i64 4, [[TYPE_INT]], i64 28} // OLD-PATH: [[TAG_D_b_a_f32]] = !{[[TYPE_D:!.*]], [[TYPE_INT]], i64 12} @@ -244,7 +244,7 @@ uint32_t g12(StructC *C, StructD *D, uint64_t count) { // NEW-PATH: [[TYPE_S]] = !{[[TYPE_CHAR]], i64 8, !"_ZTS7StructS", [[TYPE_SHORT]], i64 0, i64 2, [[TYPE_INT]], i64 4, i64 4} // NEW-PATH: [[TAG_S_f16]] = !{[[TYPE_S]], [[TYPE_SHORT]], i64 0, i64 2} // NEW-PATH: [[TAG_S2_f32_2]] = !{[[TYPE_S2:!.*]], [[TYPE_INT]], i64 12, i64 4} -// NEW-PATH: [[TYPE_S2]] = !{[[TYPE_CHAR]], i64 16, !"_ZTS8StructS2", [[TYPE_S]], i64 0, i64 8, [[TYPE_SHORT]], i64 8, i64 2, [[TYPE_INT]], i64 12, i64 4} +// NEW-PATH: [[TYPE_S2]] = !{[[TYPE_CHAR]], i64 16, !"_ZTS8StructS2", [[TYPE_SHORT]], i64 8, i64 2, [[TYPE_INT]], i64 12, i64 4} // NEW-PATH: [[TAG_C_b_a_f32]] = !{[[TYPE_C:!.*]], [[TYPE_INT]], i64 12, i64 4} // NEW-PATH: [[TYPE_C]] = !{[[TYPE_CHAR]], i64 32, !"_ZTS7StructC", [[TYPE_SHORT]], i64 0, i64 2, [[TYPE_B]], i64 4, i64 24, [[TYPE_INT]], i64 28, i64 4} // NEW-PATH: [[TAG_D_b_a_f32]] = !{[[TYPE_D:!.*]], [[TYPE_INT]], i64 12, i64 4} diff --git a/clang/unittests/CodeGen/TBAAMetadataTest.cpp b/clang/unittests/CodeGen/TBAAMetadataTest.cpp index 2919a35..149a8e074 100644 --- a/clang/unittests/CodeGen/TBAAMetadataTest.cpp +++ b/clang/unittests/CodeGen/TBAAMetadataTest.cpp @@ -968,10 +968,13 @@ TEST(TBAAMetadataTest, BaseClass) { MConstInt(0)), MConstInt(0)); - auto ClassDerived = - MMTuple(MMString("_ZTS7Derived"), ClassBase, MConstInt(0), - MMTuple(MMString("short"), OmnipotentCharCXX, MConstInt(0)), - MConstInt(4)); + auto ClassDerived = MMTuple( + MMString("_ZTS7Derived"), + MMTuple( + MMString("short"), + OmnipotentCharCXX, + MConstInt(0)), + MConstInt(4)); const Instruction *I = match(BB, MInstruction(Instruction::Store, @@ -1044,10 +1047,13 @@ TEST(TBAAMetadataTest, PolymorphicClass) { MConstInt(0)), MConstInt(Compiler.PtrSize)); - auto ClassDerived = - MMTuple(MMString("_ZTS7Derived"), ClassBase, MConstInt(0), - MMTuple(MMString("short"), OmnipotentCharCXX, MConstInt(0)), - MConstInt(Compiler.PtrSize + 4)); + auto ClassDerived = MMTuple( + MMString("_ZTS7Derived"), + MMTuple( + MMString("short"), + OmnipotentCharCXX, + MConstInt(0)), + MConstInt(Compiler.PtrSize + 4)); const Instruction *I = match(BB, MInstruction(Instruction::Store, -- 2.7.4