jtmott-intel added inline comments.
================ Comment at: clang/lib/Sema/SemaChecking.cpp:327 return true; TheCall->setArg(2, Arg.get()); } ---------------- rjmccall wrote: > I know this is existing code, but this is a broken mess. Please change this > to: > > ``` > ExprResult Arg = DefaultFunctionArrayLvalueConversion(TheCall->getArg(2)); > if (Arg.isInvalid()) return true; > TheCall->setArg(2, Arg.get()); > > QualType Ty = Arg.get()->getType(); > const auto *PtrTy = Ty->getAs<PointerType>(); > if (!PtrTy || > !PtrTy->getPointeeType()->isIntegerType() || > PtrTy->getPointeeType().isConstQualified()) { > S.Diag(Arg.get()->getBeginLoc(), > diag::err_overflow_builtin_must_be_ptr_int) > << Ty << Arg.get()->getSourceRange(); > return true; > } > ``` > > Test case would be something like (in ObjC): > > ``` > @interface HasPointer > @property int *pointer; > @end > > void test(HasPointer *hp) { > __builtin_add_overflow(x, y, hp.pointer); > } > ``` > > And the earlier block needs essentially the same change (but obviously > checking for a different type). You can't check types before doing > placeholder conversions, and once you do l-value conversions and a > type-check, you really don't need the full parameter-initialization logic. I've implemented this locally but I have a quick question about the test. It passed even before I applied this code change. Is this test expected to fail before this change and pass after? Or is it just to prove that the feature (placeholder argument types?) works in general? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D81420/new/ https://reviews.llvm.org/D81420 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits