mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
PR c++/89422 - ICE with -g and lambda in default arg in template.
Here, we were trying to instantiate the default argument before setting DECL_FRIEND_CONTEXT, so that the instantiated lambda ended up being treated as part of the S template, which confused dwarf2out. * pt.c (tsubst_function_decl): SET_DECL_FRIEND_CONTEXT sooner. From-SVN: r269081
This commit is contained in:
committed by
Jason Merrill
parent
5498361c0f
commit
4bcd47e2e1
@@ -1,3 +1,8 @@
|
||||
2019-02-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/89422 - ICE with -g and lambda in default arg in template.
|
||||
* pt.c (tsubst_function_decl): SET_DECL_FRIEND_CONTEXT sooner.
|
||||
|
||||
2019-02-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/88419 - C++17 ICE with class template arg deduction.
|
||||
|
||||
10
gcc/cp/pt.c
10
gcc/cp/pt.c
@@ -13088,6 +13088,11 @@ tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
|
||||
set_constraints (r, ci);
|
||||
}
|
||||
|
||||
if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
|
||||
SET_DECL_FRIEND_CONTEXT (r,
|
||||
tsubst (DECL_FRIEND_CONTEXT (t),
|
||||
args, complain, in_decl));
|
||||
|
||||
/* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
|
||||
this in the special friend case mentioned above where
|
||||
GEN_TMPL is NULL. */
|
||||
@@ -13149,11 +13154,6 @@ tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
|
||||
&& !grok_op_properties (r, /*complain=*/true))
|
||||
return error_mark_node;
|
||||
|
||||
if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
|
||||
SET_DECL_FRIEND_CONTEXT (r,
|
||||
tsubst (DECL_FRIEND_CONTEXT (t),
|
||||
args, complain, in_decl));
|
||||
|
||||
/* Possibly limit visibility based on template args. */
|
||||
DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
|
||||
if (DECL_VISIBILITY_SPECIFIED (t))
|
||||
|
||||
10
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg9.C
Normal file
10
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg9.C
Normal file
@@ -0,0 +1,10 @@
|
||||
// PR c++/89422
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-additional-options -g }
|
||||
|
||||
template <int> struct S
|
||||
{
|
||||
friend void foo (int a = []{ return 0; }()) {}
|
||||
int b;
|
||||
};
|
||||
S<0> t;
|
||||
Reference in New Issue
Block a user