// RUN: %clang_cc1 %s -verify -fsyntax-only // expected-no-diagnostics class C_in_class { #include "../Sema/attr-callback.c" }; struct Base { void no_args_1(void (*callback)(void)); __attribute__((callback(1))) void no_args_2(void (*callback)(void)); __attribute__((callback(callback))) void no_args_3(void (*callback)(void)) {} __attribute__((callback(1, 0))) virtual void this_tr(void (*callback)(Base *)); __attribute__((callback(1, this, __, this))) virtual void this_unknown_this(void (*callback)(Base *, Base *, Base *)); __attribute__((callback(1))) virtual void virtual_1(void (*callback)(void)); __attribute__((callback(callback))) virtual void virtual_2(void (*callback)(void)); __attribute__((callback(1))) virtual void virtual_3(void (*callback)(void)); }; __attribute__((callback(1))) void Base::no_args_1(void (*callback)(void)) { } void Base::no_args_2(void (*callback)(void)) { } struct Derived_1 : public Base { __attribute__((callback(1, 0))) virtual void this_tr(void (*callback)(Base *)) override; __attribute__((callback(1))) virtual void virtual_1(void (*callback)(void)) override {} virtual void virtual_3(void (*callback)(void)) override {} }; struct Derived_2 : public Base { __attribute__((callback(callback))) virtual void virtual_1(void (*callback)(void)) override; virtual void virtual_2(void (*callback)(void)) override; virtual void virtual_3(void (*callback)(void)) override; }; void Derived_2::virtual_1(void (*callback)(void)) {} __attribute__((callback(1))) void Derived_2::virtual_2(void (*callback)(void)) {} void Derived_2::virtual_3(void (*callback)(void)) {}