diff options
author | David Bolvansky <david.bolvansky@gmail.com> | 2019-09-06 16:30:44 +0000 |
---|---|---|
committer | David Bolvansky <david.bolvansky@gmail.com> | 2019-09-06 16:30:44 +0000 |
commit | 454e40eaf328fe34cda7f24d33a1f47060b5ee1a (patch) | |
tree | 4944cdc245b48ba1582c0aba5476168b7dab2361 | |
parent | 2682bc3c9d1ec7da324bedfa46fce537797b5a49 (diff) | |
download | bcm5719-llvm-454e40eaf328fe34cda7f24d33a1f47060b5ee1a.tar.gz bcm5719-llvm-454e40eaf328fe34cda7f24d33a1f47060b5ee1a.zip |
[NFCI] Unbreak buildbots
llvm-svn: 371226
-rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 32 | ||||
-rw-r--r-- | clang/test/Sema/div-sizeof-array.cpp | 26 |
3 files changed, 10 insertions, 52 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index cbb2688dbf3..d04a96f5277 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -3391,10 +3391,6 @@ def note_pointer_declared_here : Note< def warn_division_sizeof_ptr : Warning< "'%0' will return the size of the pointer, not the array itself">, InGroup<DiagGroup<"sizeof-pointer-div">>; -def warn_division_sizeof_array : Warning< - "expresion will return the incorrect number of elements in the array; the array " - "element type is %0, not %1">, - InGroup<DiagGroup<"sizeof-array-div">>; def note_function_warning_silence : Note< "prefix with the address-of operator to silence this warning">; diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ca7cf94f9c4..3001be23cf8 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -9154,29 +9154,17 @@ static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, else RHSTy = RUE->getArgumentExpr()->IgnoreParens()->getType(); - if (LHSTy->isPointerType() && !RHSTy->isPointerType()) { - if (LHSTy->getPointeeType().getCanonicalType().getUnqualifiedType() != - RHSTy.getCanonicalType().getUnqualifiedType()) - return; + if (!LHSTy->isPointerType() || RHSTy->isPointerType()) + return; + if (LHSTy->getPointeeType().getCanonicalType().getUnqualifiedType() != + RHSTy.getCanonicalType().getUnqualifiedType()) + return; - S.Diag(Loc, diag::warn_division_sizeof_ptr) << LHS << LHS->getSourceRange(); - if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) { - if (const ValueDecl *LHSArgDecl = DRE->getDecl()) - S.Diag(LHSArgDecl->getLocation(), diag::note_pointer_declared_here) - << LHSArgDecl; - } - } else if (isa<ArrayType>(LHSTy) && !RHSTy->isArrayType()) { - QualType ArrayElemTy = cast<ArrayType>(LHSTy)->getElementType(); - if (isa<ArrayType>(ArrayElemTy) || - ArrayElemTy.getCanonicalType().getUnqualifiedType() == - RHSTy.getCanonicalType().getUnqualifiedType()) - return; - S.Diag(Loc, diag::warn_division_sizeof_array) << ArrayElemTy << RHSTy; - if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) { - if (const ValueDecl *LHSArgDecl = DRE->getDecl()) - S.Diag(LHSArgDecl->getLocation(), diag::note_array_declared_here) - << LHSArgDecl; - } + S.Diag(Loc, diag::warn_division_sizeof_ptr) << LHS << LHS->getSourceRange(); + if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) { + if (const ValueDecl *LHSArgDecl = DRE->getDecl()) + S.Diag(LHSArgDecl->getLocation(), diag::note_pointer_declared_here) + << LHSArgDecl; } } diff --git a/clang/test/Sema/div-sizeof-array.cpp b/clang/test/Sema/div-sizeof-array.cpp deleted file mode 100644 index f1a365f6765..00000000000 --- a/clang/test/Sema/div-sizeof-array.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: %clang_cc1 %s -verify -Wsizeof-array-div -fsyntax-only - -template <typename Ty, int N> -int f(Ty (&Array)[N]) { - return sizeof(Array) / sizeof(Ty); // Should not warn -} - -typedef int int32; - -void test(void) { - int arr[12]; // expected-note 2 {{array 'arr' declared here}} - unsigned long long arr2[4]; // expected-note {{array 'arr2' declared here}} - int *p = &arr[0]; - int a1 = sizeof(arr) / sizeof(*arr); - int a2 = sizeof arr / sizeof p; // expected-warning {{expresion will return the incorrect number of elements in the array; the array element type is 'int', not 'int *'}} - int a4 = sizeof arr2 / sizeof p; // expected-warning {{expresion will return the incorrect number of elements in the array; the array element type is 'unsigned long long', not 'int *'}} - int a5 = sizeof(arr) / sizeof(short); // expected-warning {{expresion will return the incorrect number of elements in the array; the array element type is 'int', not 'short'}} - int a6 = sizeof(arr) / sizeof(int32); - const char arr3[2] = "A"; - int a7 = sizeof(arr3) / sizeof(char); - - int arr4[10][12]; - int b1 = sizeof(arr4) / sizeof(arr2[12]); - int b2 = sizeof(arr4) / sizeof(int *); - int b3 = sizeof(arr4) / sizeof(short *); -} |