ziqingluo-90 marked 8 inline comments as done. ziqingluo-90 added inline comments.
================ Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:637 -static Strategy -getNaiveStrategy(const llvm::SmallVectorImpl<const VarDecl *> &UnsafeVars) { ---------------- NoQ wrote: > Hmm, did this need to be moved? I don't think you're calling this function > from the new code. it does look like I moved it. Will change it back. ================ 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())) ---------------- 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. 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