PR c++/70344 - ICE with recursive constexpr
* constexpr.c (cxx_eval_call_expression): Check for fun == current_function_decl again. From-SVN: r236625
This commit is contained in:
parent
40e61ad87c
commit
4ddcdbf912
3 changed files with 13 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
|||
2016-05-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/70344
|
||||
* constexpr.c (cxx_eval_call_expression): Check for
|
||||
fun == current_function_decl again.
|
||||
|
||||
PR c++/70584
|
||||
* cp-gimplify.c (cp_fold) [INDIRECT_REF]: Call
|
||||
maybe_undo_parenthesized_ref.
|
||||
|
|
|
@ -1371,11 +1371,17 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
|
|||
else
|
||||
{
|
||||
new_call.fundef = retrieve_constexpr_fundef (fun);
|
||||
if (new_call.fundef == NULL || new_call.fundef->body == NULL)
|
||||
if (new_call.fundef == NULL || new_call.fundef->body == NULL
|
||||
|| fun == current_function_decl)
|
||||
{
|
||||
if (!ctx->quiet)
|
||||
{
|
||||
if (DECL_INITIAL (fun) == error_mark_node)
|
||||
/* We need to check for current_function_decl here in case we're
|
||||
being called during cp_fold_function, because at that point
|
||||
DECL_INITIAL is set properly and we have a fundef but we
|
||||
haven't lowered invisirefs yet (c++/70344). */
|
||||
if (DECL_INITIAL (fun) == error_mark_node
|
||||
|| fun == current_function_decl)
|
||||
error_at (loc, "%qD called in a constant expression before its "
|
||||
"definition is complete", fun);
|
||||
else if (DECL_INITIAL (fun))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// PR c++/70344
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-options -O }
|
||||
|
||||
struct Z
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue