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