1 | // RUN: %check_clang_tidy %s bugprone-sizeof-expression %t -- -config="{CheckOptions: {bugprone-sizeof-expression.WarnOnSizeOfPointerToAggregate: false}}" -- |
2 | |
3 | class C { |
4 | int size() { return sizeof(this); } |
5 | // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: suspicious usage of 'sizeof(this)' |
6 | }; |
7 | |
8 | #pragma pack(1) |
9 | struct S { char a, b, c; }; |
10 | |
11 | int Test5() { |
12 | typedef int Array10[10]; |
13 | typedef C ArrayC[10]; |
14 | |
15 | struct MyStruct { |
16 | Array10 arr; |
17 | Array10* ptr; |
18 | }; |
19 | typedef const MyStruct TMyStruct; |
20 | typedef const MyStruct *PMyStruct; |
21 | typedef TMyStruct *PMyStruct2; |
22 | |
23 | static TMyStruct kGlocalMyStruct = {}; |
24 | static TMyStruct volatile * kGlocalMyStructPtr = &kGlocalMyStruct; |
25 | |
26 | MyStruct S; |
27 | PMyStruct PS; |
28 | PMyStruct2 PS2; |
29 | Array10 A10; |
30 | C *PtrArray[10]; |
31 | C *PC; |
32 | |
33 | int sum = 0; |
34 | sum += sizeof(&S.arr); |
35 | // No warning. |
36 | sum += sizeof(&kGlocalMyStruct.arr); |
37 | // No warning. |
38 | sum += sizeof(&kGlocalMyStructPtr->arr); |
39 | // No warning. |
40 | sum += sizeof(S.arr + 0); |
41 | // No warning. |
42 | sum += sizeof(+ S.arr); |
43 | // No warning. |
44 | sum += sizeof((int*)S.arr); |
45 | // No warning. |
46 | |
47 | sum += sizeof(S.ptr); |
48 | // No warning. |
49 | sum += sizeof(kGlocalMyStruct.ptr); |
50 | // No warning. |
51 | sum += sizeof(kGlocalMyStructPtr->ptr); |
52 | // No warning. |
53 | |
54 | sum += sizeof(&kGlocalMyStruct); |
55 | // No warning. |
56 | sum += sizeof(&S); |
57 | // No warning. |
58 | sum += sizeof(MyStruct*); |
59 | sum += sizeof(PMyStruct); |
60 | sum += sizeof(PS); |
61 | // No warning. |
62 | sum += sizeof(PS2); |
63 | // No warning. |
64 | sum += sizeof(&A10); |
65 | // No warning. |
66 | sum += sizeof(PtrArray) / sizeof(PtrArray[1]); |
67 | // No warning. |
68 | sum += sizeof(A10) / sizeof(PtrArray[0]); |
69 | // No warning. |
70 | sum += sizeof(PC) / sizeof(PtrArray[0]); |
71 | // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: suspicious usage of sizeof pointer 'sizeof(T)/sizeof(T)' |
72 | sum += sizeof(ArrayC) / sizeof(PtrArray[0]); |
73 | // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: suspicious usage of 'sizeof(...)/sizeof(...)'; numerator is not a multiple of denominator |
74 | |
75 | return sum; |
76 | } |
77 | |