xref: /aosp_15_r20/external/clang/test/SemaCXX/qualification-conversion.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s
2*67e74705SXin Li int* quals1(int const * p);
3*67e74705SXin Li int* quals2(int const * const * pp);
4*67e74705SXin Li int* quals3(int const * * const * ppp); // expected-note{{candidate function}}
5*67e74705SXin Li 
test_quals(int * p,int ** pp,int *** ppp)6*67e74705SXin Li void test_quals(int * p, int * * pp, int * * * ppp) {
7*67e74705SXin Li   int const * const * pp2 = pp;
8*67e74705SXin Li   quals1(p);
9*67e74705SXin Li   quals2(pp);
10*67e74705SXin Li   quals3(ppp); // expected-error {{no matching}}
11*67e74705SXin Li }
12*67e74705SXin Li 
13*67e74705SXin Li struct A {};
14*67e74705SXin Li void mquals1(int const A::*p);
15*67e74705SXin Li void mquals2(int const A::* const A::*pp);
16*67e74705SXin Li void mquals3(int const A::* A::* const A::*ppp);  // expected-note{{candidate function}}
17*67e74705SXin Li 
test_mquals(int A::* p,int A::* A::* pp,int A::* A::* A::* ppp)18*67e74705SXin Li void test_mquals(int A::*p, int A::* A::*pp, int A::* A::* A::*ppp) {
19*67e74705SXin Li   int const A::* const A::* pp2 = pp;
20*67e74705SXin Li   mquals1(p);
21*67e74705SXin Li   mquals2(pp);
22*67e74705SXin Li   mquals3(ppp); // expected-error {{no matching}}
23*67e74705SXin Li }
24*67e74705SXin Li 
25*67e74705SXin Li void aquals1(int const (*p)[1]);
26*67e74705SXin Li void aquals2(int * const (*pp)[1]);
27*67e74705SXin Li void aquals2a(int const * (*pp2)[1]); // expected-note{{candidate function}}
28*67e74705SXin Li 
test_aquals(int (* p)[1],int * (* pp)[1],int * (* pp2)[1])29*67e74705SXin Li void test_aquals(int (*p)[1], int * (*pp)[1], int * (*pp2)[1]) {
30*67e74705SXin Li   int const (*p2)[1] = p;
31*67e74705SXin Li   aquals1(p);
32*67e74705SXin Li   aquals2(pp);
33*67e74705SXin Li   aquals2a(pp2); // expected-error {{no matching}}
34*67e74705SXin Li }
35