[clang] 2ae1822 - [Diagnostics] Fixed -Wsizeof-array-div false positive when divisor is sizeof reference type (PR47495)

Dávid Bolvanský via cfe-commits cfe-commits at lists.llvm.org
Sun Sep 20 11:16:06 PDT 2020


Thanks,

I uploaded https://reviews.llvm.org/D87990 to fix this issue.

ne 20. 9. 2020 o 19:58 Richard Smith <richard at metafoo.co.uk> napísal(a):
>
> On Sun, 20 Sep 2020 at 08:43, Dávid Bolvanský via cfe-commits <cfe-commits at 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 at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list