11af159e9SPiotr Zegar // RUN: %check_clang_tidy %s bugprone-sizeof-expression %t -- -config="{CheckOptions: {bugprone-sizeof-expression.WarnOnSizeOfPointerToAggregate: false}}" --
20ca59937SMichael Benfield 
30ca59937SMichael Benfield class C {
size()40ca59937SMichael Benfield   int size() { return sizeof(this); }
50ca59937SMichael Benfield   // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: suspicious usage of 'sizeof(this)'
60ca59937SMichael Benfield };
70ca59937SMichael Benfield 
80ca59937SMichael Benfield #pragma pack(1)
90ca59937SMichael Benfield struct  S { char a, b, c; };
100ca59937SMichael Benfield 
Test5()110ca59937SMichael Benfield int Test5() {
120ca59937SMichael Benfield   typedef int Array10[10];
130ca59937SMichael Benfield   typedef C ArrayC[10];
140ca59937SMichael Benfield 
150ca59937SMichael Benfield   struct MyStruct {
160ca59937SMichael Benfield     Array10 arr;
170ca59937SMichael Benfield     Array10* ptr;
180ca59937SMichael Benfield   };
190ca59937SMichael Benfield   typedef const MyStruct TMyStruct;
200ca59937SMichael Benfield   typedef const MyStruct *PMyStruct;
210ca59937SMichael Benfield   typedef TMyStruct *PMyStruct2;
220ca59937SMichael Benfield 
230ca59937SMichael Benfield   static TMyStruct kGlocalMyStruct = {};
240ca59937SMichael Benfield   static TMyStruct volatile * kGlocalMyStructPtr = &kGlocalMyStruct;
250ca59937SMichael Benfield 
260ca59937SMichael Benfield   MyStruct S;
270ca59937SMichael Benfield   PMyStruct PS;
280ca59937SMichael Benfield   PMyStruct2 PS2;
290ca59937SMichael Benfield   Array10 A10;
300ca59937SMichael Benfield   C *PtrArray[10];
310ca59937SMichael Benfield   C *PC;
320ca59937SMichael Benfield 
330ca59937SMichael Benfield   int sum = 0;
340ca59937SMichael Benfield   sum += sizeof(&S.arr);
350ca59937SMichael Benfield   // No warning.
360ca59937SMichael Benfield   sum += sizeof(&kGlocalMyStruct.arr);
370ca59937SMichael Benfield   // No warning.
380ca59937SMichael Benfield   sum += sizeof(&kGlocalMyStructPtr->arr);
390ca59937SMichael Benfield   // No warning.
400ca59937SMichael Benfield   sum += sizeof(S.arr + 0);
410ca59937SMichael Benfield   // No warning.
420ca59937SMichael Benfield   sum += sizeof(+ S.arr);
430ca59937SMichael Benfield   // No warning.
440ca59937SMichael Benfield   sum += sizeof((int*)S.arr);
450ca59937SMichael Benfield   // No warning.
460ca59937SMichael Benfield 
470ca59937SMichael Benfield   sum += sizeof(S.ptr);
480ca59937SMichael Benfield   // No warning.
490ca59937SMichael Benfield   sum += sizeof(kGlocalMyStruct.ptr);
500ca59937SMichael Benfield   // No warning.
510ca59937SMichael Benfield   sum += sizeof(kGlocalMyStructPtr->ptr);
520ca59937SMichael Benfield   // No warning.
530ca59937SMichael Benfield 
540ca59937SMichael Benfield   sum += sizeof(&kGlocalMyStruct);
550ca59937SMichael Benfield   // No warning.
560ca59937SMichael Benfield   sum += sizeof(&S);
570ca59937SMichael Benfield   // No warning.
580ca59937SMichael Benfield   sum += sizeof(MyStruct*);
590ca59937SMichael Benfield   sum += sizeof(PMyStruct);
600ca59937SMichael Benfield   sum += sizeof(PS);
610ca59937SMichael Benfield   // No warning.
620ca59937SMichael Benfield   sum += sizeof(PS2);
630ca59937SMichael Benfield   // No warning.
640ca59937SMichael Benfield   sum += sizeof(&A10);
650ca59937SMichael Benfield   // No warning.
660ca59937SMichael Benfield   sum += sizeof(PtrArray) / sizeof(PtrArray[1]);
670ca59937SMichael Benfield   // No warning.
680ca59937SMichael Benfield   sum += sizeof(A10) / sizeof(PtrArray[0]);
690ca59937SMichael Benfield   // No warning.
700ca59937SMichael Benfield   sum += sizeof(PC) / sizeof(PtrArray[0]);
71*fdcfb277SDonát Nagy   // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: suspicious usage of 'sizeof(...)/sizeof(...)'; both expressions have the same type
720ca59937SMichael Benfield   sum += sizeof(ArrayC) / sizeof(PtrArray[0]);
730e55fef0SNathan James   // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: suspicious usage of 'sizeof(...)/sizeof(...)'; numerator is not a multiple of denominator
740ca59937SMichael Benfield 
750ca59937SMichael Benfield   return sum;
760ca59937SMichael Benfield }
77