62 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3struct X0 {4 void f0();5 void f1() const;6 void f2() volatile;7 void f3() const volatile;8};9 10void 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