ebevhan added inline comments.
================ Comment at: clang/lib/Sema/SemaChecking.cpp:13981 + bool overflow; + llvm::APInt product(index); + product += 1; ---------------- What if index is wider than AddrBits, but the active bits are fewer? Then you might miss out on triggering the overflow case in the multiplication. ================ Comment at: clang/lib/Sema/SemaChecking.cpp:13992 + MaxElems = + MaxElems.zext(std::max(AddrBits << 1, apElemBytes.getBitWidth())); + MaxElems += 1; ---------------- Should this not be AddrBits + 1 if you want to add 1 below? ================ Comment at: clang/lib/Sema/SemaChecking.cpp:13993 + MaxElems.zext(std::max(AddrBits << 1, apElemBytes.getBitWidth())); + MaxElems += 1; + if (MaxElems.getBitWidth() < apElemBytes.getBitWidth()) ---------------- Though, why is the +1 here? Isn't this already the maximum number of elements? ================ Comment at: clang/lib/Sema/SemaChecking.cpp:13994-13997 + if (MaxElems.getBitWidth() < apElemBytes.getBitWidth()) + MaxElems = MaxElems.zext(apElemBytes.getBitWidth()); + else if (apElemBytes.getBitWidth() < MaxElems.getBitWidth()) + apElemBytes = apElemBytes.zext(MaxElems.getBitWidth()); ---------------- MaxElems should already be at a sufficient width here because of the earlier max. You can probably just do apElemBytes = apElemBytes.zextOrTrunc(MaxElems.getBitWidth())? ================ Comment at: clang/lib/Sema/SemaChecking.cpp:13966 if (index.isUnsigned() || !index.isNegative()) { - // It is possible that the type of the base expression after - // IgnoreParenCasts is incomplete, even though the type of the base - // expression before IgnoreParenCasts is complete (see PR39746 for an - // example). In this case we have no information about whether the array - // access exceeds the array bounds. However we can still diagnose an array - // access which precedes the array bounds. - if (BaseType->isIncompleteType()) - return; + if (isUnboundedArray) { + const auto &ASTC = getASTContext(); ---------------- chrish_ericsson_atx wrote: > ebevhan wrote: > > It might simplify the patch to move this condition out of the tree and just > > early return for the other case. That is: > > > > ``` > > if (isUnboundedArray) { > > if (!(index.isUnsigned() || !index.isNegative())) > > return; > > > > ... > > return; > > } > > > > if (index.isUnsigned() ... > > ``` > There's a bit more code (starting at line 14094 in this patch set) that > applies in all cases, so an early return here would prevent the "Array > declared here" note from being generated. Ah, the note. I wonder if it wouldn't be cleaner (and avoid indenting the entire block) if that was just duplicated. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D86796/new/ https://reviews.llvm.org/D86796 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits