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