Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Diagnostics] Implement -Wsizeof-pointer-div
Summary: void test(int *arr) { int arr_len = sizeof(arr) / sizeof(*arr); // warn, incorrect way to compute number of array elements } Enabled under -Wall (same behaviour as GCC) Reviewers: rsmith, MTC, aaron.ballman Reviewed By: aaron.ballman Subscribers: MTC, thakis, jfb, cfe-commits Differential Revision: https://reviews.llvm.org/D52949 llvm-svn: 345847
- Loading branch information
1 parent
d686dbb
commit b8dc052
Showing
3 changed files
with
62 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// RUN: %clang_cc1 %s -verify -Wsizeof-pointer-div -fsyntax-only | ||
|
||
template <typename Ty, int N> | ||
int f(Ty (&Array)[N]) { | ||
return sizeof(Array) / sizeof(Ty); // Should not warn | ||
} | ||
|
||
void test(int *p, int **q) { | ||
int a1 = sizeof(p) / sizeof(*p); // expected-warning {{'sizeof (p)' will return the size of the pointer, not the array itself}} | ||
int a2 = sizeof p / sizeof *p; // expected-warning {{'sizeof p' will return the size of the pointer, not the array itself}} | ||
int a3 = sizeof(*q) / sizeof(**q); // expected-warning {{'sizeof (*q)' will return the size of the pointer, not the array itself}} | ||
int a4 = sizeof(p) / sizeof(int); // expected-warning {{'sizeof (p)' will return the size of the pointer, not the array itself}} | ||
int a5 = sizeof(p) / sizeof(p[0]); // expected-warning {{'sizeof (p)' will return the size of the pointer, not the array itself}} | ||
|
||
// Should not warn | ||
int b1 = sizeof(int *) / sizeof(int); | ||
int b2 = sizeof(p) / sizeof(p); | ||
int b3 = sizeof(*q) / sizeof(q); | ||
int b4 = sizeof(p) / sizeof(char); | ||
|
||
int arr[10]; | ||
int b5 = sizeof(arr) / sizeof(*arr); | ||
int b6 = sizeof(arr) / sizeof(arr[0]); | ||
int b7 = sizeof(arr) / sizeof(int); | ||
|
||
int arr2[10][12]; | ||
int b8 = sizeof(arr2) / sizeof(*arr2); | ||
} |