NoQ added a comment.

Thank you!! I think we're almost ready to commit but this concern is still 
hanging:

> I see that the patch doesn't touch `handleFixableVariable()`. Do we still 
> attach fixits to the warning, or did we already change it to be attached to a 
> note associated with the warning? Because fixits with placeholders aren't 
> allowed on warnings, we should make sure it's attached to note before landing 
> this patch.



================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:780-781
+  } else {
+    // In cases `Init` is of the form `&Var` after stripping of implicit
+    // casts, where `&` is the built-in operator, the extent is 1.
+    if (auto AddrOfExpr = dyn_cast<UnaryOperator>(Init->IgnoreImpCasts()))
----------------
ziqingluo-90 wrote:
> NoQ wrote:
> > ```lang=c
> > int x = 1;
> > char *ptr = &x; // std::span<char> ptr { &x, 4 };
> > ```
> > This is valid code. I suspect we want to check types as well, to see that 
> > type sizes match.
> > 
> > Most of the time code like this violates strict aliasing, but `char` is 
> > exceptional, and even if it did violate strict aliasing, people can compile 
> > with `-fno-strict-aliasing` to define away the UB, so we have to respect 
> > that.
> This code is not valid in C++.  An explicit cast is needed in front of `&x`.  
> I will add a test to show that 
> 
> ```
> int x = 1;
> char * ptr = (char *)&x;
> ```
> will have a place holder for the span size.
Yes you're right! It's only valid in C where these fixits don't apply.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139737/new/

https://reviews.llvm.org/D139737

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to