diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc index bdeec2f0f38c..8acac9f8f0ea 100644 --- a/gcc/cp/reflect.cc +++ b/gcc/cp/reflect.cc @@ -3768,6 +3768,7 @@ eval_annotations_of (location_t loc, const constexpr_ctx *ctx, tree r, type = remove_const (type); } + r = maybe_get_first_fn (r); if (kind == REFLECT_BASE) { gcc_assert (TREE_CODE (r) == TREE_BINFO); diff --git a/gcc/testsuite/g++.dg/reflect/annotations10.C b/gcc/testsuite/g++.dg/reflect/annotations10.C new file mode 100644 index 000000000000..e78a7d46e5e7 --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/annotations10.C @@ -0,0 +1,12 @@ +// PR c++/123866 +// { dg-do compile { target c++26 } } +// { dg-additional-options "-freflection" } + +#include + +struct A +{ + [[=1, =2]] void foo () {} +}; + +static_assert (annotations_of (^^A::foo).size () == 2);