[clang] 8999b74 - Revert "[tbaa] Handle base classes in struct tbaa"

Jeroen Dobbelaere via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 23 05:19:59 PDT 2022


Author: Jeroen Dobbelaere
Date: 2022-06-23T14:18:49+02:00
New Revision: 8999b745bc4ecae5ac74f5c4d06f40e317ddb12c

URL: https://github.com/llvm/llvm-project/commit/8999b745bc4ecae5ac74f5c4d06f40e317ddb12c
DIFF: https://github.com/llvm/llvm-project/commit/8999b745bc4ecae5ac74f5c4d06f40e317ddb12c.diff

LOG: 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.

Added: 
    

Modified: 
    clang/lib/CodeGen/CodeGenTBAA.cpp
    clang/test/CodeGen/tbaa-class.cpp
    clang/unittests/CodeGen/TBAAMetadataTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CodeGenTBAA.cpp b/clang/lib/CodeGen/CodeGenTBAA.cpp
index 2904bd5a244f..95763d8e18b7 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<llvm::MDBuilder::TBAAStructField, 4> Fields;
-    if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(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 38558b0415a7..7f413a6f323c 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 2919a35c8ced..149a8e074b69 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,


        


More information about the cfe-commits mailing list