ztong0001 added inline comments.
================ Comment at: clang/lib/CodeGen/CodeGenFunction.cpp:757 SanOpts.set(SanitizerKind::HWAddress, false); + if (mask & SanitizerKind::LocalBounds) + Fn->addFnAttr(llvm::Attribute::NoSanitizeBounds); ---------------- melver wrote: > ztong0001 wrote: > > ztong0001 wrote: > > > melver wrote: > > > > These 2 checks can be reduced to 1 due to SanitizerKind::Bounds > > > > including both. However, as noted, this only affects local-bounds, so > > > > I'm not sure if we want to include both -- perhaps for completeness it > > > > makes sense, but in the array-bounds only case this attribute will be a > > > > nop (AFAIK). > > > > > > > > Also, I think we don't want to attach the attribute if bounds checking > > > > isn't enabled -- at least it seems unnecessary to do so. > > > > > > > > See the following suggested change: > > > > > > > > ``` > > > > diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp > > > > b/clang/lib/CodeGen/CodeGenFunction.cpp > > > > index 842ce0245d45..c1f3a3014a19 100644 > > > > --- a/clang/lib/CodeGen/CodeGenFunction.cpp > > > > +++ b/clang/lib/CodeGen/CodeGenFunction.cpp > > > > @@ -740,6 +740,7 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, > > > > QualType RetTy, > > > > } while (false); > > > > > > > > if (D) { > > > > + const bool SanitizeBounds = > > > > SanOpts.hasOneOf(SanitizerKind::Bounds); > > > > bool NoSanitizeCoverage = false; > > > > > > > > for (auto Attr : D->specific_attrs<NoSanitizeAttr>()) { > > > > @@ -754,16 +755,15 @@ void CodeGenFunction::StartFunction(GlobalDecl > > > > GD, QualType RetTy, > > > > SanOpts.set(SanitizerKind::KernelHWAddress, false); > > > > if (mask & SanitizerKind::KernelHWAddress) > > > > SanOpts.set(SanitizerKind::HWAddress, false); > > > > - if (mask & SanitizerKind::LocalBounds) > > > > - Fn->addFnAttr(llvm::Attribute::NoSanitizeBounds); > > > > - if (mask & SanitizerKind::ArrayBounds) > > > > - Fn->addFnAttr(llvm::Attribute::NoSanitizeBounds); > > > > > > > > // SanitizeCoverage is not handled by SanOpts. > > > > if (Attr->hasCoverage()) > > > > NoSanitizeCoverage = true; > > > > } > > > > > > > > + if (SanitizeBounds && !SanOpts.hasOneOf(SanitizerKind::Bounds)) > > > > + Fn->addFnAttr(llvm::Attribute::NoSanitizeBounds); > > > > + > > > > if (NoSanitizeCoverage && > > > > CGM.getCodeGenOpts().hasSanitizeCoverage()) > > > > Fn->addFnAttr(llvm::Attribute::NoSanitizeCoverage); > > > > } > > > > > > > > ``` > > > Agreed. I will revise patch and commit description. > > BTW: Just to double check we are on the same page > > > > when no_sanitize(bounds) is provided, fsanitize=array-bounds is also > > disabled -- right ? I can confirm this attribute is also affecting > > array-bounds as this is handled in clang side and we are setting > > llvm::Attribute::NoSanitizeBounds so that clang's array-bounds can also see > > this. > > > > I will also add another test for -fsanitize=array-bounds > Well, no_sanitize("bounds") already worked for array-bounds before this > patch. But adding more tests never hurt. Got it. Thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D119816/new/ https://reviews.llvm.org/D119816 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits