rjmccall added inline comments.

================
Comment at: clang/lib/Sema/SemaChecking.cpp:327
       return true;
     TheCall->setArg(2, Arg.get());
   }
----------------
jtmott-intel wrote:
> 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?
Oh, we seem to handle placeholders specially, nevermind.  Well, what I said 
about doing conversions before checking the type still holds, but the test case 
is just this:

```
int z[1];
__builtin_add_overflow(x, y, z);
```

where we should decay the argument to a pointer instead of rejecting it.


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

Reply via email to