aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Martin <simon@nasilyan.com>2024-10-02 15:32:37 +0200
committerSimon Martin <simon@nasilyan.com>2024-10-02 15:32:37 +0200
commit3a528386571fffbb41703a238aee950043af3f3c (patch)
treec52ccd903c80108e3aed4f73167bbba76ecdefd2
parentdafbfdb01559092aca6be0e31afc2b39d3fdb2dd (diff)
downloadgcc-3a528386571fffbb41703a238aee950043af3f3c.zip
gcc-3a528386571fffbb41703a238aee950043af3f3c.tar.gz
gcc-3a528386571fffbb41703a238aee950043af3f3c.tar.bz2
c++: Fix regression introduced by r15-3796 [PR116722]
Jason pointed out that the fix I made for PR116722 via r15-3796 introduces a regression when running constexpr-dynamic10.C with -fimplicit-constexpr. The problem is that my change makes us leave cxx_eval_call_expression early, and bypass the call to cxx_eval_thunk_call (through a recursive call to cxx_eval_call_expression) that used to emit an error for that testcase with -fimplicit-constexpr. This patch emits the error if !ctx->quiet before bailing out because the {con,de}structor belongs to a class with virtual bases. PR c++/116722 gcc/cp/ChangeLog: * constexpr.cc (cxx_bind_parameters_in_call): When !ctx->quiet, emit error before bailing out due to a call to {con,de}structor for a class with virtual bases.
-rw-r--r--gcc/cp/constexpr.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index 5c66967..4e4df94 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -1867,6 +1867,12 @@ cxx_bind_parameters_in_call (const constexpr_ctx *ctx, tree t, tree fun,
with virtual bases. */
if (DECL_HAS_IN_CHARGE_PARM_P (fun) || DECL_HAS_VTT_PARM_P (fun))
{
+ if (!ctx->quiet)
+ {
+ error_at (cp_expr_loc_or_input_loc (t),
+ "call to non-%<constexpr%> function %qD", fun);
+ explain_invalid_constexpr_fn (fun);
+ }
*non_constant_p = true;
return binds;
}