On Sun, 20 Sep 2020 at 08:43, Dávid Bolvanský via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> Author: Dávid Bolvanský > Date: 2020-09-20T17:43:06+02:00 > New Revision: 2ae182258c49724e4daaae196de829ea65c116e8 > > URL: > https://github.com/llvm/llvm-project/commit/2ae182258c49724e4daaae196de829ea65c116e8 > DIFF: > https://github.com/llvm/llvm-project/commit/2ae182258c49724e4daaae196de829ea65c116e8.diff > > LOG: [Diagnostics] Fixed -Wsizeof-array-div false positive when divisor is > sizeof reference type (PR47495) > > Added: > > > Modified: > clang/lib/Sema/SemaExpr.cpp > clang/test/Sema/div-sizeof-array.cpp > > Removed: > > > > > ################################################################################ > diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp > index 501e1aed1509..736a6c166eb3 100644 > --- a/clang/lib/Sema/SemaExpr.cpp > +++ b/clang/lib/Sema/SemaExpr.cpp > @@ -10038,7 +10038,7 @@ static void > DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, > QualType ArrayElemTy = ArrayTy->getElementType(); > if (ArrayElemTy != S.Context.getBaseElementType(ArrayTy) || > ArrayElemTy->isDependentType() || RHSTy->isDependentType() || > - ArrayElemTy->isCharType() || > + RHSTy->isReferenceType() || ArrayElemTy->isCharType() || > Instead of skipping the check for a reference type, could we instead replace RHSTy with its referenced type for the purpose of the check when RHSTy is a reference type? I think we do want to diagnose (for example) sizeof(array) / sizeof(decltype(*array[0])) for an array of pointers. > S.Context.getTypeSize(ArrayElemTy) == > S.Context.getTypeSize(RHSTy)) > return; > S.Diag(Loc, diag::warn_division_sizeof_array) > > diff --git a/clang/test/Sema/div-sizeof-array.cpp > b/clang/test/Sema/div-sizeof-array.cpp > index e295a9dec6d8..898ff42a7bd4 100644 > --- a/clang/test/Sema/div-sizeof-array.cpp > +++ b/clang/test/Sema/div-sizeof-array.cpp > @@ -42,4 +42,8 @@ void test(void) { > > float m[4][4]; > int d1 = sizeof(m) / sizeof(**m); > + > + int array[10]; > + int narray = sizeof(array) / sizeof(int &); > + int narray2 = sizeof(array) / sizeof(decltype(array[0])); > } > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits