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 Benfieldint 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