Commit 595de302 by Jason Merrill Committed by Jason Merrill

re PR c++/41119 (Revision 150805 failed 447.dealII in SPEC CPU 2006)

	PR c++/41119
	PR c++/41120
	* decl2.c (mark_used): Increment function_depth during synthesis.
	* parser.c (cp_parser_default_argument): Not here.

From-SVN: r150939
parent dc0c6451
2009-08-19 Jason Merrill <jason@redhat.com>
PR c++/41119
PR c++/41120
* decl2.c (mark_used): Increment function_depth during synthesis.
* parser.c (cp_parser_default_argument): Not here.
2009-08-19 Jakub Jelinek <jakub@redhat.com> 2009-08-19 Jakub Jelinek <jakub@redhat.com>
* method.c (use_thunk): Call free_after_compilation after * method.c (use_thunk): Call free_after_compilation after
......
...@@ -3948,7 +3948,16 @@ mark_used (tree decl) ...@@ -3948,7 +3948,16 @@ mark_used (tree decl)
&& !DECL_THUNK_P (decl) && !DECL_THUNK_P (decl)
&& ! DECL_INITIAL (decl)) && ! DECL_INITIAL (decl))
{ {
/* Synthesizing an implicitly defined member function will result in
garbage collection. We must treat this situation as if we were
within the body of a function so as to avoid collecting live data
on the stack (such as overload resolution candidates).
??? Now that inlining is done unit-at-a-time, we ought to defer
synthesis like we do templates. */
++function_depth;
synthesize_method (decl); synthesize_method (decl);
--function_depth;
/* If we've already synthesized the method we don't need to /* If we've already synthesized the method we don't need to
do the instantiation test below. */ do the instantiation test below. */
} }
......
...@@ -14615,12 +14615,6 @@ cp_parser_default_argument (cp_parser *parser, bool template_parm_p) ...@@ -14615,12 +14615,6 @@ cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
appear in a default argument. */ appear in a default argument. */
saved_local_variables_forbidden_p = parser->local_variables_forbidden_p; saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
parser->local_variables_forbidden_p = true; parser->local_variables_forbidden_p = true;
/* The default argument expression may cause implicitly
defined member functions to be synthesized, which will
result in garbage collection. We must treat this
situation as if we were within the body of function so as
to avoid collecting live data on the stack. */
++function_depth;
/* Parse the assignment-expression. */ /* Parse the assignment-expression. */
if (template_parm_p) if (template_parm_p)
push_deferring_access_checks (dk_no_deferred); push_deferring_access_checks (dk_no_deferred);
...@@ -14628,8 +14622,6 @@ cp_parser_default_argument (cp_parser *parser, bool template_parm_p) ...@@ -14628,8 +14622,6 @@ cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
= cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL); = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
if (template_parm_p) if (template_parm_p)
pop_deferring_access_checks (); pop_deferring_access_checks ();
/* Restore saved state. */
--function_depth;
parser->greater_than_is_operator_p = saved_greater_than_is_operator_p; parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
parser->local_variables_forbidden_p = saved_local_variables_forbidden_p; parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
......
2009-08-19 Jason Merrill <jason@redhat.com>
PR c++/41120
* g++.dg/other/gc4.C: New.
2009-08-18 Michael Matz <matz@suse.de> 2009-08-18 Michael Matz <matz@suse.de>
* gfortran.dg/vect/vect-gems.f90: New test. * gfortran.dg/vect/vect-gems.f90: New test.
......
// PR c++/41120
// { dg-options "--param ggc-min-heapsize=0 --param ggc-min-expand=0" }
struct A
{
A();
};
struct B
{
A a;
};
B b;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment