xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/sizeof-expression.c (revision 267ad430fc54d6d548cd7d25c7e59c3b6b650097)
1*267ad430SZoltán Porkoláb // RUN: %check_clang_tidy %s bugprone-sizeof-expression %t -- --
2*267ad430SZoltán Porkoláb // RUN: %check_clang_tidy %s bugprone-sizeof-expression %t -- -- -x c++
3*267ad430SZoltán Porkoláb 
4*267ad430SZoltán Porkoláb #ifdef __cplusplus
5*267ad430SZoltán Porkoláb #define STRKWD
6*267ad430SZoltán Porkoláb #else
7*267ad430SZoltán Porkoláb #define STRKWD struct
8*267ad430SZoltán Porkoláb #endif
9*267ad430SZoltán Porkoláb 
10*267ad430SZoltán Porkoláb int Test5() {
11*267ad430SZoltán Porkoláb   typedef int Array10[10];
12*267ad430SZoltán Porkoláb 
13*267ad430SZoltán Porkoláb   struct MyStruct {
14*267ad430SZoltán Porkoláb     Array10 arr;
15*267ad430SZoltán Porkoláb     Array10* ptr;
16*267ad430SZoltán Porkoláb   };
17*267ad430SZoltán Porkoláb 
18*267ad430SZoltán Porkoláb   typedef struct TypedefStruct {
19*267ad430SZoltán Porkoláb     Array10 arr;
20*267ad430SZoltán Porkoláb     Array10* ptr;
21*267ad430SZoltán Porkoláb   } TypedefStruct;
22*267ad430SZoltán Porkoláb 
23*267ad430SZoltán Porkoláb   typedef const STRKWD MyStruct TMyStruct;
24*267ad430SZoltán Porkoláb   typedef const STRKWD MyStruct *PMyStruct;
25*267ad430SZoltán Porkoláb   typedef TMyStruct *PMyStruct2;
26*267ad430SZoltán Porkoláb   typedef const TypedefStruct *PTTStruct;
27*267ad430SZoltán Porkoláb 
28*267ad430SZoltán Porkoláb   STRKWD MyStruct S;
29*267ad430SZoltán Porkoláb   TypedefStruct TS;
30*267ad430SZoltán Porkoláb   PMyStruct PS;
31*267ad430SZoltán Porkoláb   PMyStruct2 PS2;
32*267ad430SZoltán Porkoláb   Array10 A10;
33*267ad430SZoltán Porkoláb   PTTStruct PTTS;
34*267ad430SZoltán Porkoláb 
35*267ad430SZoltán Porkoláb   int sum = 0;
36*267ad430SZoltán Porkoláb   sum += sizeof(&S);
37*267ad430SZoltán Porkoláb   // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof()' on an expression of pointer type
38*267ad430SZoltán Porkoláb   sum += sizeof(__typeof(&S));
39*267ad430SZoltán Porkoláb   sum += sizeof(&TS);
40*267ad430SZoltán Porkoláb   // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof()' on an expression of pointer type
41*267ad430SZoltán Porkoláb   sum += sizeof(__typeof(&TS));
42*267ad430SZoltán Porkoláb   sum += sizeof(STRKWD MyStruct*);
43*267ad430SZoltán Porkoláb   sum += sizeof(__typeof(STRKWD MyStruct*));
44*267ad430SZoltán Porkoláb   sum += sizeof(TypedefStruct*);
45*267ad430SZoltán Porkoláb   sum += sizeof(__typeof(TypedefStruct*));
46*267ad430SZoltán Porkoláb   sum += sizeof(PTTS);
47*267ad430SZoltán Porkoláb   // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof()' on an expression of pointer type
48*267ad430SZoltán Porkoláb   sum += sizeof(PMyStruct);
49*267ad430SZoltán Porkoláb   sum += sizeof(PS);
50*267ad430SZoltán Porkoláb   // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof()' on an expression of pointer type
51*267ad430SZoltán Porkoláb   sum += sizeof(PS2);
52*267ad430SZoltán Porkoláb   // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof()' on an expression of pointer type
53*267ad430SZoltán Porkoláb   sum += sizeof(&A10);
54*267ad430SZoltán Porkoláb   // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof()' on an expression of pointer type
55*267ad430SZoltán Porkoláb 
56*267ad430SZoltán Porkoláb #ifdef __cplusplus
57*267ad430SZoltán Porkoláb   MyStruct &rS = S;
58*267ad430SZoltán Porkoláb   sum += sizeof(rS); // same as sizeof(S), not a pointer.  So should not warn.
59*267ad430SZoltán Porkoláb #endif
60*267ad430SZoltán Porkoláb 
61*267ad430SZoltán Porkoláb   return sum;
62*267ad430SZoltán Porkoláb }
63