1 // RUN: %clang_cc1 %s -verify -fsyntax-only 2 3 // expected-no-diagnostics 4 5 class C_in_class { 6 #include "../Sema/attr-callback.c" 7 }; 8 9 struct Base { 10 11 void no_args_1(void (*callback)(void)); 12 __attribute__((callback(1))) void no_args_2(void (*callback)(void)); no_args_3Base13 __attribute__((callback(callback))) void no_args_3(void (*callback)(void)) {} 14 15 __attribute__((callback(1, 0))) virtual void 16 this_tr(void (*callback)(Base *)); 17 18 __attribute__((callback(1, this, __, this))) virtual void 19 this_unknown_this(void (*callback)(Base *, Base *, Base *)); 20 21 __attribute__((callback(1))) virtual void 22 virtual_1(void (*callback)(void)); 23 24 __attribute__((callback(callback))) virtual void 25 virtual_2(void (*callback)(void)); 26 27 __attribute__((callback(1))) virtual void 28 virtual_3(void (*callback)(void)); 29 }; 30 31 __attribute__((callback(1))) void no_args_1(void (* callback)(void))32Base::no_args_1(void (*callback)(void)) { 33 } 34 no_args_2(void (* callback)(void))35void Base::no_args_2(void (*callback)(void)) { 36 } 37 38 struct Derived_1 : public Base { 39 40 __attribute__((callback(1, 0))) virtual void 41 this_tr(void (*callback)(Base *)) override; 42 43 __attribute__((callback(1))) virtual void virtual_1Derived_144 virtual_1(void (*callback)(void)) override {} 45 46 virtual void virtual_3Derived_147 virtual_3(void (*callback)(void)) override {} 48 }; 49 50 struct Derived_2 : public Base { 51 52 __attribute__((callback(callback))) virtual void 53 virtual_1(void (*callback)(void)) override; 54 55 virtual void 56 virtual_2(void (*callback)(void)) override; 57 58 virtual void 59 virtual_3(void (*callback)(void)) override; 60 }; 61 virtual_1(void (* callback)(void))62void Derived_2::virtual_1(void (*callback)(void)) {} 63 64 __attribute__((callback(1))) void virtual_2(void (* callback)(void))65Derived_2::virtual_2(void (*callback)(void)) {} 66 virtual_3(void (* callback)(void))67void Derived_2::virtual_3(void (*callback)(void)) {} 68