1*89a1d03eSRichard // RUN: %check_clang_tidy %s misc-misplaced-const %t 2*89a1d03eSRichard 3*89a1d03eSRichard typedef int plain_i; 4*89a1d03eSRichard typedef int *ip; 5*89a1d03eSRichard typedef const int *cip; 6*89a1d03eSRichard 7*89a1d03eSRichard typedef void (*func_ptr)(void); 8*89a1d03eSRichard func(void)9*89a1d03eSRichardvoid func(void) { 10*89a1d03eSRichard // ok 11*89a1d03eSRichard const int *i0 = 0; 12*89a1d03eSRichard const plain_i *i1 = 0; 13*89a1d03eSRichard const cip i2 = 0; // const applies to both pointer and pointee. 14*89a1d03eSRichard 15*89a1d03eSRichard // Not ok 16*89a1d03eSRichard const ip i3 = 0; 17*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'i3' declared with a const-qualified typedef; results in the type being 'int *const' instead of 'const int *' 18*89a1d03eSRichard 19*89a1d03eSRichard ip const i4 = 0; 20*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'i4' declared with a const-qualified typedef; results in the type being 'int *const' instead of 'const int *' 21*89a1d03eSRichard 22*89a1d03eSRichard const volatile ip i5 = 0; 23*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: 'i5' declared with a const-qualified typedef; results in the type being 'int *const volatile' instead of 'const int *volatile' 24*89a1d03eSRichard } 25*89a1d03eSRichard func2(const plain_i * i1,const cip i2,const ip i3,const int * i4)26*89a1d03eSRichardvoid func2(const plain_i *i1, 27*89a1d03eSRichard const cip i2, 28*89a1d03eSRichard const ip i3, 29*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: 'i3' declared with a const-qualified 30*89a1d03eSRichard const int *i4) { 31*89a1d03eSRichard } 32*89a1d03eSRichard 33*89a1d03eSRichard struct S { 34*89a1d03eSRichard const int *i0; 35*89a1d03eSRichard const plain_i *i1; 36*89a1d03eSRichard const cip i2; 37*89a1d03eSRichard const ip i3; 38*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'i3' declared with a const-qualified 39*89a1d03eSRichard }; 40*89a1d03eSRichard 41*89a1d03eSRichard // Function pointers should not be diagnosed because a function 42*89a1d03eSRichard // pointer type can never be const. func3(const func_ptr fp)43*89a1d03eSRichardvoid func3(const func_ptr fp) { 44*89a1d03eSRichard const func_ptr fp2 = fp; 45*89a1d03eSRichard } 46