Introduce METAFN_KIND_SHIFT and METAFN_KIND_MASK, use it and rewrite

process_metafunction start to use a loop for all 3 arguments.
Update copyright years.
This commit is contained in:
Jakub Jelinek
2026-01-07 14:20:22 +01:00
committed by Marek Polacek
parent f6a3ac7218
commit 967b4e8235
4 changed files with 725 additions and 670 deletions

View File

@@ -2,7 +2,7 @@
%define class-name metafn_lookup
%struct-type
%{
/* Copyright (C) 2025 Free Software Foundation, Inc.
/* Copyright (C) 2025-2026 Free Software Foundation, Inc.
Written by Jakub Jelinek <jakub@redhat.com>
This file is part of GCC.
@@ -259,6 +259,11 @@ enum metafn_code {
METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8
};
enum {
METAFN_KIND_SHIFT = 5,
METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1
};
/* Possible return types of metafunctions. */
enum metafn_kind_ret {
METAFN_KIND_RET_BOOL,
@@ -274,6 +279,7 @@ enum metafn_kind_ret {
METAFN_KIND_RET_ACCESS_CONTEXT,
METAFN_KIND_RET_TEMPLATE_PARM,
};
static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK);
/* Possible argument types of metafunctions. */
enum metafn_kind_arg {
@@ -292,6 +298,7 @@ enum metafn_kind_arg {
METAFN_KIND_ARG_TEMPLATE_PARM, /* Some other template parameter. */
METAFN_KIND_ARG_TEMPLATE_PARM_REF /* Reference to template parameter. */
};
static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK);
/* Possible sets of 0-3 arguments of metafunctions. */
enum metafn_kind_args {
@@ -304,95 +311,133 @@ enum metafn_kind_args {
METAFN_KIND_ARGS_TEMPLATE_PARM = METAFN_KIND_ARG_TEMPLATE_PARM,
METAFN_KIND_ARGS_TEMPLATE_PARM_REF = METAFN_KIND_ARG_TEMPLATE_PARM_REF,
METAFN_KIND_ARGS_INFO_INFO
= (METAFN_KIND_ARG_INFO << 5) | METAFN_KIND_ARG_INFO,
= (METAFN_KIND_ARG_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_ARG_INFO,
METAFN_KIND_ARGS_TINFO_TINFO
= (METAFN_KIND_ARG_TINFO << 5) | METAFN_KIND_ARG_TINFO,
= (METAFN_KIND_ARG_TINFO << METAFN_KIND_SHIFT) | METAFN_KIND_ARG_TINFO,
METAFN_KIND_ARGS_TINFO_UNSIGNED
= (METAFN_KIND_ARG_UNSIGNED << 5) | METAFN_KIND_ARG_TINFO,
= (METAFN_KIND_ARG_UNSIGNED << METAFN_KIND_SHIFT)
| METAFN_KIND_ARG_TINFO,
METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT
= (METAFN_KIND_ARG_ACCESS_CONTEXT << 5) | METAFN_KIND_ARG_INFO,
= (METAFN_KIND_ARG_ACCESS_CONTEXT << METAFN_KIND_SHIFT)
| METAFN_KIND_ARG_INFO,
METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS
= (METAFN_KIND_ARG_DATA_MEMBER_OPTIONS << 5) | METAFN_KIND_ARG_TINFO,
= (METAFN_KIND_ARG_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)
| METAFN_KIND_ARG_TINFO,
METAFN_KIND_ARGS_INFO_REFLECTION_RANGE
= (METAFN_KIND_ARG_REFLECTION_RANGE << 5) | METAFN_KIND_ARG_INFO,
= (METAFN_KIND_ARG_REFLECTION_RANGE << METAFN_KIND_SHIFT)
| METAFN_KIND_ARG_INFO,
METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARG_REFLECTION_RANGET << 5) | METAFN_KIND_ARG_TINFO,
= (METAFN_KIND_ARG_REFLECTION_RANGET << METAFN_KIND_SHIFT)
| METAFN_KIND_ARG_TINFO,
METAFN_KIND_ARGS_SIZE_T_TINFO
= (METAFN_KIND_ARG_TINFO << 5) | METAFN_KIND_ARG_SIZE_T,
= (METAFN_KIND_ARG_TINFO << METAFN_KIND_SHIFT) | METAFN_KIND_ARG_SIZE_T,
METAFN_KIND_ARGS_TINFO_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARG_REFLECTION_RANGET << 10) | METAFN_KIND_ARGS_TINFO_TINFO,
= (METAFN_KIND_ARG_REFLECTION_RANGET << (2 * METAFN_KIND_SHIFT))
| METAFN_KIND_ARGS_TINFO_TINFO,
};
/* This encodes metafn_kind_ret in the low METAFN_KIND_SHIFT bits, then
first argument metafn_kind_arg in METAFN_KIND_SHIFT bits above that,
second argument metafn_kind_arg in METAFN_KIND_SHIFT bits above that
and third argument metafn_kind_arg in METAFN_KIND_SHIFT bits above that.
Missing argument is METAFN_KIND_ARG_VOID aka 0. */
enum metafn_kind {
METAFN_KIND_BOOL_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_BOOL,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_TINFO
= (METAFN_KIND_ARGS_TINFO << 5) | METAFN_KIND_RET_BOOL,
= (METAFN_KIND_ARGS_TINFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT
= (METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT << 5) | METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_TINFO_TINFO
= (METAFN_KIND_ARGS_TINFO_TINFO << 5) | METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << 5) | METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARGS_TINFO_TINFO_REFLECTION_RANGET << 5)
= (METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_BOOL,
METAFN_KIND_INFO_INFO = (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_INFO,
METAFN_KIND_BOOL_TINFO_TINFO
= (METAFN_KIND_ARGS_TINFO_TINFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_BOOL,
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARGS_TINFO_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_BOOL,
METAFN_KIND_INFO_INFO
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_TINFO
= (METAFN_KIND_ARGS_TINFO << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_TINFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_TINFO_REFLECTION_RANGET
= (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS
= (METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_REFLECTION_RANGET
= (METAFN_KIND_ARGS_REFLECTION_RANGET << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_INFO_REFLECTION_RANGE
= (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_INPUT_RANGE
= (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_TEMPLATE_PARM
= (METAFN_KIND_ARGS_TEMPLATE_PARM << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_TEMPLATE_PARM << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_TEMPLATE_PARM_REF
= (METAFN_KIND_ARGS_TEMPLATE_PARM_REF << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_TEMPLATE_PARM_REF << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_INFO_SIZE_T_TINFO
= (METAFN_KIND_ARGS_SIZE_T_TINFO << 5) | METAFN_KIND_RET_INFO,
= (METAFN_KIND_ARGS_SIZE_T_TINFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_INFO,
METAFN_KIND_MEMBER_OFFSET_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_MEMBER_OFFSET,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_MEMBER_OFFSET,
METAFN_KIND_OPERATORS_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_OPERATORS,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_OPERATORS,
METAFN_KIND_SIZE_T_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_SIZE_T,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_SIZE_T,
METAFN_KIND_SIZE_T_TINFO
= (METAFN_KIND_ARGS_TINFO << 5) | METAFN_KIND_RET_SIZE_T,
= (METAFN_KIND_ARGS_TINFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_SIZE_T,
METAFN_KIND_SIZE_T_TINFO_UNSIGNED
= (METAFN_KIND_ARGS_TINFO_UNSIGNED << 5) | METAFN_KIND_RET_SIZE_T,
= (METAFN_KIND_ARGS_TINFO_UNSIGNED << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_SIZE_T,
METAFN_KIND_SOURCE_LOCATION_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_SOURCE_LOCATION,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_SOURCE_LOCATION,
METAFN_KIND_STRING_VIEW_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_STRING_VIEW,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_STRING_VIEW,
METAFN_KIND_STRING_VIEW_OPERATORS
= (METAFN_KIND_ARGS_OPERATORS << 5) | METAFN_KIND_RET_STRING_VIEW,
= (METAFN_KIND_ARGS_OPERATORS << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_STRING_VIEW,
METAFN_KIND_U8STRING_VIEW_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_U8STRING_VIEW,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_U8STRING_VIEW,
METAFN_KIND_U8STRING_VIEW_OPERATORS
= (METAFN_KIND_ARGS_OPERATORS << 5) | METAFN_KIND_RET_U8STRING_VIEW,
= (METAFN_KIND_ARGS_OPERATORS << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_U8STRING_VIEW,
METAFN_KIND_STRONG_ORDERING_TINFO_TINFO
= (METAFN_KIND_ARGS_TINFO_TINFO << 5) | METAFN_KIND_RET_STRONG_ORDERING,
= (METAFN_KIND_ARGS_TINFO_TINFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_STRONG_ORDERING,
METAFN_KIND_VECTOR_INFO_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_VECTOR_INFO,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_VECTOR_INFO,
METAFN_KIND_VECTOR_INFO_INFO_INFO
= (METAFN_KIND_ARGS_INFO_INFO << 5) | METAFN_KIND_RET_VECTOR_INFO,
= (METAFN_KIND_ARGS_INFO_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_VECTOR_INFO,
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT
= (METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT << 5)
= (METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_VECTOR_INFO,
METAFN_KIND_TEMPLATE_PARM_INFO
= (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_TEMPLATE_PARM,
= (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_TEMPLATE_PARM,
METAFN_KIND_ACCESS_CONTEXT_VOID
= (METAFN_KIND_ARGS_VOID << 5) | METAFN_KIND_RET_ACCESS_CONTEXT,
= (METAFN_KIND_ARGS_VOID << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_ACCESS_CONTEXT,
METAFN_KIND_STRING_VIEW_INPUT_RANGE
= (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_STRING_VIEW,
= (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_STRING_VIEW,
METAFN_KIND_U8STRING_VIEW_INPUT_RANGE
= (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_U8STRING_VIEW
= (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)
| METAFN_KIND_RET_U8STRING_VIEW
};
%}
struct metafn_info

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
/* C++ reflection code.
Copyright (C) 2025 Free Software Foundation, Inc.
Copyright (C) 2025-2026 Free Software Foundation, Inc.
Written by Marek Polacek <polacek@redhat.com> and
Jakub Jelinek <jakub@redhat.com>.
@@ -7408,121 +7408,86 @@ process_metafunction (const constexpr_ctx *ctx, tree fun, tree call,
return NULL_TREE;
}
tree h = NULL_TREE, h1 = NULL_TREE, hvec = NULL_TREE, expr = NULL_TREE;
tree type = NULL_TREE, info;
tree type = NULL_TREE, ht, info;
reflect_kind kind = REFLECT_UNDEF;
switch ((minfo->kind >> 5) & 31)
{
case METAFN_KIND_ARG_VOID:
break;
case METAFN_KIND_ARG_INFO:
case METAFN_KIND_ARG_TINFO:
info = get_info (ctx, call, 0, non_constant_p, overflow_p, jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
h = REFLECT_EXPR_HANDLE (info);
kind = REFLECT_EXPR_KIND (info);
if (((minfo->kind >> 5) & 31) == METAFN_KIND_ARG_TINFO)
{
if (eval_is_type (h) != boolean_true_node)
return throw_exception_nontype (loc, ctx, fun, non_constant_p,
jump_target);
}
else
{
for (int argno = 0; argno < 3; ++argno)
switch ((minfo->kind >> ((argno + 1) * METAFN_KIND_SHIFT))
& METAFN_KIND_MASK)
{
case METAFN_KIND_ARG_VOID:
break;
case METAFN_KIND_ARG_INFO:
case METAFN_KIND_ARG_TINFO:
gcc_assert (argno < 2);
info = get_info (ctx, call, argno, non_constant_p, overflow_p,
jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
ht = REFLECT_EXPR_HANDLE (info);
if (((minfo->kind >> ((argno + 1) * METAFN_KIND_SHIFT))
& METAFN_KIND_MASK) == METAFN_KIND_ARG_TINFO)
{
if (eval_is_type (ht) != boolean_true_node)
return throw_exception_nontype (loc, ctx, fun, non_constant_p,
jump_target);
}
else if (argno == 0)
/* There still could be a TEMPLATE_ID_EXPR denoting a function
template. */
h = resolve_nondeduced_context (h, tf_warning_or_error);
}
break;
case METAFN_KIND_ARG_REFLECTION_RANGE:
case METAFN_KIND_ARG_UNSIGNED:
case METAFN_KIND_ARG_ACCESS_CONTEXT:
case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:
default:
gcc_unreachable ();
case METAFN_KIND_ARG_REFLECTION_RANGET:
hvec = get_type_info_vec (loc, ctx, call, 0, non_constant_p,
ht = resolve_nondeduced_context (ht, tf_warning_or_error);
if (argno == 0)
{
kind = REFLECT_EXPR_KIND (info);
h = ht;
}
else
h1 = ht;
break;
case METAFN_KIND_ARG_REFLECTION_RANGE:
gcc_assert (argno == 1);
hvec = get_info_vec (loc, ctx, call, argno, non_constant_p,
overflow_p, jump_target, fun);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
case METAFN_KIND_ARG_REFLECTION_RANGET:
hvec = get_type_info_vec (loc, ctx, call, argno, non_constant_p,
overflow_p, jump_target, fun);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
case METAFN_KIND_ARG_INPUT_RANGE:
/* Handled in eval_reflect_constant_*. */
break;
case METAFN_KIND_ARG_TEMPLATE_PARM:
case METAFN_KIND_ARG_TEMPLATE_PARM_REF:
type = TREE_VEC_ELT (get_template_innermost_arguments (fun), 0);
/* FALLTHRU */
case METAFN_KIND_ARG_SIZE_T:
case METAFN_KIND_ARG_OPERATORS:
expr = get_nth_callarg (call, 0);
expr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,
non_constant_p, overflow_p,
jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
}
switch ((minfo->kind >> 10) & 31)
{
case METAFN_KIND_ARG_VOID:
break;
case METAFN_KIND_ARG_INFO:
case METAFN_KIND_ARG_TINFO:
info = get_info (ctx, call, 1, non_constant_p, overflow_p, jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
h1 = REFLECT_EXPR_HANDLE (info);
if (((minfo->kind >> 10) & 31) == METAFN_KIND_ARG_TINFO)
{
if (eval_is_type (h1) != boolean_true_node)
return throw_exception_nontype (loc, ctx, fun, non_constant_p,
jump_target);
}
break;
case METAFN_KIND_ARG_SIZE_T:
case METAFN_KIND_ARG_OPERATORS:
case METAFN_KIND_ARG_INPUT_RANGE:
case METAFN_KIND_ARG_TEMPLATE_PARM:
case METAFN_KIND_ARG_TEMPLATE_PARM_REF:
default:
gcc_unreachable ();
case METAFN_KIND_ARG_REFLECTION_RANGE:
hvec = get_info_vec (loc, ctx, call, 1, non_constant_p, overflow_p,
jump_target, fun);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
case METAFN_KIND_ARG_REFLECTION_RANGET:
hvec = get_type_info_vec (loc, ctx, call, 1, non_constant_p,
overflow_p, jump_target, fun);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
case METAFN_KIND_ARG_UNSIGNED:
case METAFN_KIND_ARG_ACCESS_CONTEXT:
case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:
expr = get_nth_callarg (call, 1);
expr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,
non_constant_p, overflow_p,
jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
}
switch ((minfo->kind >> 15) & 31)
{
case METAFN_KIND_ARG_VOID:
break;
default:
gcc_unreachable ();
case METAFN_KIND_ARG_REFLECTION_RANGET:
hvec = get_type_info_vec (loc, ctx, call, 2, non_constant_p,
overflow_p, jump_target, fun);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
}
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
case METAFN_KIND_ARG_INPUT_RANGE:
/* Handled in eval_reflect_constant_*. */
gcc_assert (argno == 0);
break;
case METAFN_KIND_ARG_TEMPLATE_PARM:
case METAFN_KIND_ARG_TEMPLATE_PARM_REF:
type = TREE_VEC_ELT (get_template_innermost_arguments (fun), 0);
/* FALLTHRU */
case METAFN_KIND_ARG_SIZE_T:
case METAFN_KIND_ARG_OPERATORS:
gcc_assert (argno == 0);
expr = get_nth_callarg (call, 0);
expr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,
non_constant_p, overflow_p,
jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
case METAFN_KIND_ARG_UNSIGNED:
case METAFN_KIND_ARG_ACCESS_CONTEXT:
case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:
gcc_assert (argno == 1);
expr = get_nth_callarg (call, argno);
expr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,
non_constant_p, overflow_p,
jump_target);
if (*jump_target || *non_constant_p)
return NULL_TREE;
break;
default:
gcc_unreachable ();
}
switch (minfo->code)
{

View File

@@ -1,6 +1,6 @@
// <meta> -*- C++ -*-
// Copyright (C) 2025 Free Software Foundation, Inc.
// Copyright (C) 2025-2026 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the