================
@@ -221,21 +221,27 @@ llvm::MDNode *CodeGenTBAA::getTypeInfoHelper(const Type 
*Ty) {
       PtrDepth++;
       Ty = Ty->getPointeeType().getTypePtr();
     } while (Ty->isPointerType());
-    // TODO: Implement C++'s type "similarity" and consider dis-"similar"
-    // pointers distinct for non-builtin types.
+
+    SmallString<256> TyName;
     if (isa<BuiltinType>(Ty)) {
       llvm::MDNode *ScalarMD = getTypeInfoHelper(Ty);
       StringRef Name =
           cast<llvm::MDString>(
               ScalarMD->getOperand(CodeGenOpts.NewStructPathTBAA ? 2 : 0))
               ->getString();
+      TyName = Name;
+    } else if (!isa<VariableArrayType>(Ty)) {
----------------
rjmccall wrote:

I feel like we should just ignore all array structure here, whether it's 
variable-length or fixed-length.  For one, partially honoring array structures 
probably violates the VLA compatibility rules — IIUC, the C standard requires 
l-values of type `T (*)[n]` to be able to alias objects of type `T (*)[10]` if 
`n == 10` dynamically, but with your patch, we'd now create a node for that 
pointer-to-constant-array type with no relation to the node we'd use for the 
pointer-to-VLA type.  But also, I feel like trying to honor the array structure 
is just pointlessly strict; we can treat a `T (*)[10]` object like a `T *` 
object, it's not really going to hurt anything.

You should look through the array structure before you do the 
builtin/non-builtin breakdown.  There's a `getBaseElementType` operation you 
can use.

https://github.com/llvm/llvm-project/pull/110569
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to