1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 struct X0 { 4 void f0(); 5 void f1() const; 6 void f2() volatile; 7 void f3() const volatile; 8 }; 9 10 void test_object_cvquals(void (X0::*pm)(), 11 void (X0::*pmc)() const, 12 void (X0::*pmv)() volatile, 13 void (X0::*pmcv)() const volatile, 14 X0 *p, 15 const X0 *pc, 16 volatile X0 *pv, 17 const volatile X0 *pcv, 18 X0 &o, 19 const X0 &oc, 20 volatile X0 &ov, 21 const volatile X0 &ocv) { 22 (p->*pm)(); 23 (p->*pmc)(); 24 (p->*pmv)(); 25 (p->*pmcv)(); 26 27 (pc->*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const' qualifier}} 28 (pc->*pmc)(); 29 (pc->*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 30 (pc->*pmcv)(); 31 32 (pv->*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'volatile' qualifier}} 33 (pv->*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 34 (pv->*pmv)(); 35 (pv->*pmcv)(); 36 37 (pcv->*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const volatile' qualifiers}} 38 (pcv->*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 39 (pcv->*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 40 (pcv->*pmcv)(); 41 42 (o.*pm)(); 43 (o.*pmc)(); 44 (o.*pmv)(); 45 (o.*pmcv)(); 46 47 (oc.*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const' qualifier}} 48 (oc.*pmc)(); 49 (oc.*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 50 (oc.*pmcv)(); 51 52 (ov.*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'volatile' qualifier}} 53 (ov.*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 54 (ov.*pmv)(); 55 (ov.*pmcv)(); 56 57 (ocv.*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const volatile' qualifiers}} 58 (ocv.*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 59 (ocv.*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 60 (ocv.*pmcv)(); 61 } 62