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