mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
c++/reflection: fix crash with substitute [PR124204]
Here we crash in implicit_conversion on: /* An argument should have gone through convert_from_reference. */ gcc_checking_assert (!expr || !TYPE_REF_P (from)); so let's do that. PR c++/124204 gcc/cp/ChangeLog: * reflect.cc (eval_can_substitute): Call convert_from_reference. gcc/testsuite/ChangeLog: * g++.dg/reflect/substitute5.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
This commit is contained in:
@@ -5318,6 +5318,7 @@ eval_can_substitute (location_t loc, const constexpr_ctx *ctx,
|
||||
"invalid argument to can_substitute",
|
||||
fun, non_constant_p, jump_target);
|
||||
a = resolve_nondeduced_context (a, tf_warning_or_error);
|
||||
a = convert_from_reference (a);
|
||||
TREE_VEC_ELT (rvec, i) = a;
|
||||
}
|
||||
if (DECL_TYPE_TEMPLATE_P (r) || DECL_TEMPLATE_TEMPLATE_PARM_P (r))
|
||||
|
||||
11
gcc/testsuite/g++.dg/reflect/substitute5.C
Normal file
11
gcc/testsuite/g++.dg/reflect/substitute5.C
Normal file
@@ -0,0 +1,11 @@
|
||||
// PR c++/124204
|
||||
// { dg-do compile { target c++26 } }
|
||||
// { dg-additional-options "-freflection" }
|
||||
|
||||
#include <meta>
|
||||
|
||||
template<int>
|
||||
using U = void;
|
||||
constexpr int v = 0;
|
||||
constexpr auto &ref = v;
|
||||
constexpr auto result = substitute(^^U, {^^ref});
|
||||
Reference in New Issue
Block a user