73 lines · cpp
1// RUN: %clang_cc1 %s -std=c++23 -verify -fsyntax-only2 3// expected-no-diagnostics4 5class C_in_class {6#include "../Sema/attr-callback.c"7};8 9class ExplicitParameterObject {10 __attribute__((callback(2, 1))) void explicit_this_idx(this ExplicitParameterObject* self, void (*callback)(ExplicitParameterObject*));11 __attribute__((callback(2, self))) void explicit_this_identifier(this ExplicitParameterObject* self, void (*callback)(ExplicitParameterObject*));12};13 14struct Base {15 16 void no_args_1(void (*callback)(void));17 __attribute__((callback(1))) void no_args_2(void (*callback)(void));18 __attribute__((callback(callback))) void no_args_3(void (*callback)(void)) {}19 20 __attribute__((callback(1, 0))) virtual void21 this_tr(void (*callback)(Base *));22 23 __attribute__((callback(1, this, __, this))) virtual void24 this_unknown_this(void (*callback)(Base *, Base *, Base *));25 26 __attribute__((callback(1))) virtual void27 virtual_1(void (*callback)(void));28 29 __attribute__((callback(callback))) virtual void30 virtual_2(void (*callback)(void));31 32 __attribute__((callback(1))) virtual void33 virtual_3(void (*callback)(void));34};35 36__attribute__((callback(1))) void37Base::no_args_1(void (*callback)(void)) {38}39 40void Base::no_args_2(void (*callback)(void)) {41}42 43struct Derived_1 : public Base {44 45 __attribute__((callback(1, 0))) virtual void46 this_tr(void (*callback)(Base *)) override;47 48 __attribute__((callback(1))) virtual void49 virtual_1(void (*callback)(void)) override {}50 51 virtual void52 virtual_3(void (*callback)(void)) override {}53};54 55struct Derived_2 : public Base {56 57 __attribute__((callback(callback))) virtual void58 virtual_1(void (*callback)(void)) override;59 60 virtual void61 virtual_2(void (*callback)(void)) override;62 63 virtual void64 virtual_3(void (*callback)(void)) override;65};66 67void Derived_2::virtual_1(void (*callback)(void)) {}68 69__attribute__((callback(1))) void70Derived_2::virtual_2(void (*callback)(void)) {}71 72void Derived_2::virtual_3(void (*callback)(void)) {}73