1fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 3fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregorstruct X0 { 4fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void f0(); 5fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void f1() const; 6fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void f2() volatile; 7fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void f3() const volatile; 8fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor}; 9fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 10fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregorvoid test_object_cvquals(void (X0::*pm)(), 11fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void (X0::*pmc)() const, 12fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void (X0::*pmv)() volatile, 13fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor void (X0::*pmcv)() const volatile, 14fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor X0 *p, 15fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor const X0 *pc, 16fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor volatile X0 *pv, 17fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor const volatile X0 *pcv, 18fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor X0 &o, 19fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor const X0 &oc, 20fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor volatile X0 &ov, 21fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor const volatile X0 &ocv) { 22fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (p->*pm)(); 23fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (p->*pmc)(); 24fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (p->*pmv)(); 25fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (p->*pmcv)(); 26fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pc->*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const' qualifier}} 28fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (pc->*pmc)(); 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pc->*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 30fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (pc->*pmcv)(); 31fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pv->*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'volatile' qualifier}} 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pv->*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 34fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (pv->*pmv)(); 35fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (pv->*pmcv)(); 36fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pcv->*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const volatile' qualifiers}} 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pcv->*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (pcv->*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 40fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (pcv->*pmcv)(); 41fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 42fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (o.*pm)(); 43fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (o.*pmc)(); 44fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (o.*pmv)(); 45fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (o.*pmcv)(); 46fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (oc.*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const' qualifier}} 48fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (oc.*pmc)(); 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (oc.*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 50fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (oc.*pmcv)(); 51fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (ov.*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'volatile' qualifier}} 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (ov.*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 54fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (ov.*pmv)(); 55fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (ov.*pmcv)(); 56fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (ocv.*pm)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}}' drops 'const volatile' qualifiers}} 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (ocv.*pmc)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} const' drops 'volatile' qualifier}} 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines (ocv.*pmv)(); // expected-error-re{{call to pointer to member function of type 'void (){{( __attribute__\(\(thiscall\)\))?}} volatile' drops 'const' qualifier}} 60fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor (ocv.*pmcv)(); 61fdc13a00a0077383eabf6d994de10203568415bbDouglas Gregor} 62