54 lines · cpp
1// RUN: %clang_cc1 %s -verify -Wsizeof-array-div -fsyntax-only -triple=x86_64-linux-gnu2// RUN: %clang_cc1 %s -verify -fsyntax-only -triple=x86_64-linux-gnu3 4template <typename Ty, int N>5int f(Ty (&Array)[N]) {6 return sizeof(Array) / sizeof(Ty); // Should not warn7}8 9typedef int int32;10 11void test(void) {12 int arr[12]; // expected-note 2 {{array 'arr' declared here}}13 unsigned long long arr2[4];14 int *p = &arr[0];15 int a1 = sizeof(arr) / sizeof(*arr);16 int a2 = sizeof arr / sizeof p; // expected-warning {{expression does not compute the number of elements in this array; element type is 'int', not 'int *'}}17 // expected-note@-1 {{place parentheses around the 'sizeof p' expression to silence this warning}}18 int a4 = sizeof arr2 / sizeof p;19 int a5 = sizeof(arr) / sizeof(short); // expected-warning {{expression does not compute the number of elements in this array; element type is 'int', not 'short'}}20 // expected-note@-1 {{place parentheses around the 'sizeof(short)' expression to silence this warning}}21 int a6 = sizeof(arr) / sizeof(int32);22 int a7 = sizeof(arr) / sizeof(int);23 int a9 = sizeof(arr) / sizeof(unsigned int);24 const char arr3[2] = "A";25 int a10 = sizeof(arr3) / sizeof(char);26 int a11 = sizeof(arr2) / (sizeof(unsigned));27 int a12 = sizeof(arr) / (sizeof(short));28 int a13 = sizeof(arr3) / sizeof(p);29 int a14 = sizeof(arr3) / sizeof(int);30 31 int arr4[10][12];32 int b1 = sizeof(arr4) / sizeof(arr2[12]);33 int b2 = sizeof(arr4) / sizeof(int *);34 int b3 = sizeof(arr4) / sizeof(short *);35 int arr5[][5] = {36 {1, 2, 3, 4, 5},37 {6, 7, 8, 9, 0},38 };39 int c1 = sizeof(arr5) / sizeof(*arr5);40 int c2 = sizeof(arr5) / sizeof(**arr5);41 int c3 = sizeof(arr5) / sizeof(int);42 43 float m[4][4];44 int d1 = sizeof(m) / sizeof(**m);45 46 int array[10];47 int narray = sizeof(array) / sizeof(int &);48 int narray2 = sizeof(array) / sizeof(decltype(array[0]));49 50 int *arrptrs[10]; // expected-note {{array 'arrptrs' declared here}}51 int len = sizeof(arrptrs) / sizeof(decltype(*arrptrs[0])); // expected-warning {{expression does not compute the number of elements in this array; element type is 'int *', not 'int'}}52 // expected-note@-1 {{place parentheses around the 'sizeof(decltype(*arrptrs[0]))' expression to silence this warning}}53}54