================ @@ -206,12 +206,14 @@ llvm::MDNode *CodeGenTBAA::getTypeInfoHelper(const Type *Ty) { if (!CodeGenOpts.PointerTBAA) return AnyPtr; // Compute the depth of the pointer and generate a tag of the form "p<depth> - // <base type tag>". + // <base type tag>". Look through pointer and array types to determine the + // base type. ---------------- rjmccall wrote:
Suggestion as a replacement for the comment: ``` // C++ [basic.lval]p11 permits objects to accessed through an l-value // of similar type. Two types are similar under C++ [conv.qual]p2 // if the decomposition of the types into pointers, member pointers, // and arrays has the same structure when ignoring cv-qualifiers at // each level of the decomposition. Meanwhile, C makes T(*)[] and // T(*)[N] compatible, which would really complicate any attempt to // distinguish pointers to arrays by their bounds. It's simpler, and // much easier to explain to users, to simply treat all pointers to // arrays as pointers to their element type for aliasing purposes. // So when creating a TBAA tag for a pointer type, we recursively // ignore both qualifiers and array types when decomposing // the pointee type. The only meaningful remaining structure is the // number of pointer types we encountered along the way, so we // just produce the tag "p<depth> <base type tag>". If we do find a // member pointer type, for now we just conservatively bail out // with AnyPtr (below) rather than trying to create a tag that // honors the similar-type rules while still distinguishing different // kinds of member pointer. ``` https://github.com/llvm/llvm-project/pull/116991 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits