bwendling wrote: > So, we would actually get gcc's behavior with this patch: > > ``` > diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp > index c864714182e0..21ffe7b46a6e 100644 > --- a/clang/lib/CodeGen/CGBuiltin.cpp > +++ b/clang/lib/CodeGen/CGBuiltin.cpp > @@ -1049,25 +1049,7 @@ CodeGenFunction::emitFlexibleArrayMemberSize(const > Expr *E, unsigned Type, > Value *Res = FAMSize; > > if (isa<DeclRefExpr>(Base)) { > - // The whole struct is specificed in the __bdos. > - const ASTRecordLayout &Layout = Ctx.getASTRecordLayout(OuterRD); > - > - // Get the offset of the FAM. > - llvm::Constant *FAMOffset = ConstantInt::get(ResType, Offset, IsSigned); > - Value *OffsetAndFAMSize = > - Builder.CreateAdd(FAMOffset, Res, "", !IsSigned, IsSigned); > - > - // Get the full size of the struct. > - llvm::Constant *SizeofStruct = > - ConstantInt::get(ResType, Layout.getSize().getQuantity(), IsSigned); > - > - // max(sizeof(struct s), > - // offsetof(struct s, array) + p->count * sizeof(*p->array)) > - Res = IsSigned > - ? Builder.CreateBinaryIntrinsic(llvm::Intrinsic::smax, > - OffsetAndFAMSize, SizeofStruct) > - : Builder.CreateBinaryIntrinsic(llvm::Intrinsic::umax, > - OffsetAndFAMSize, > SizeofStruct); > + return nullptr; > } > > // A negative \p IdxInst or \p CountedByInst means that the index lands > ```
This just turns off `__builtin_dynamic_object_size(ptr, 0)`, which I'm not in favor of. https://github.com/llvm/llvm-project/pull/111015 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits