summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Bolvansky <david.bolvansky@gmail.com>2019-09-06 16:30:44 +0000
committerDavid Bolvansky <david.bolvansky@gmail.com>2019-09-06 16:30:44 +0000
commit454e40eaf328fe34cda7f24d33a1f47060b5ee1a (patch)
tree4944cdc245b48ba1582c0aba5476168b7dab2361
parent2682bc3c9d1ec7da324bedfa46fce537797b5a49 (diff)
downloadbcm5719-llvm-454e40eaf328fe34cda7f24d33a1f47060b5ee1a.tar.gz
bcm5719-llvm-454e40eaf328fe34cda7f24d33a1f47060b5ee1a.zip
[NFCI] Unbreak buildbots
llvm-svn: 371226
-rw-r--r--clang/include/clang/Basic/DiagnosticSemaKinds.td4
-rw-r--r--clang/lib/Sema/SemaExpr.cpp32
-rw-r--r--clang/test/Sema/div-sizeof-array.cpp26
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 *);
-}
OpenPOWER on IntegriCloud