diff options
author | David Bolvansky <david.bolvansky@gmail.com> | 2018-11-01 16:26:10 +0000 |
---|---|---|
committer | David Bolvansky <david.bolvansky@gmail.com> | 2018-11-01 16:26:10 +0000 |
commit | b8dc05260c7da2260c0f48a14f880b062785d09f (patch) | |
tree | 967290019519f1ff70549f0e31ec29b7c6e98fae /clang/test/Sema/div-sizeof-ptr.cpp | |
parent | d686dbbc7c24a81a46f61733d48df866f2874e24 (diff) | |
download | bcm5719-llvm-b8dc05260c7da2260c0f48a14f880b062785d09f.tar.gz bcm5719-llvm-b8dc05260c7da2260c0f48a14f880b062785d09f.zip |
[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
Diffstat (limited to 'clang/test/Sema/div-sizeof-ptr.cpp')
-rw-r--r-- | clang/test/Sema/div-sizeof-ptr.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/Sema/div-sizeof-ptr.cpp b/clang/test/Sema/div-sizeof-ptr.cpp new file mode 100644 index 00000000000..4a411ff6bb0 --- /dev/null +++ b/clang/test/Sema/div-sizeof-ptr.cpp @@ -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); +} |