Commit b6fbbea3 by Meador Inge Committed by Meador Inge

re PR c/53702 (ICE with -Wall and nested functions and unused typedef)

	PR c/53702

	* c-decl.c (c_push_function_context): Restore the behavior to reuse
	the language function allocated for -Wunused-local-typedefs.
	(c_pop_function_context): If necessary, clear the language function
	created in c_push_function_context.  Always clear out the
	x_cur_stmt_list field of the restored language function.

testsuite/
	* gcc.dg/Wunused-local-typedefs.c: New testcase.

From-SVN: r188860
parent 0619103b
2012-06-21 Meador Inge <meadori@codesourcery.com>
PR c/53702
* c-decl.c (c_push_function_context): Restore the behavior to reuse
the language function allocated for -Wunused-local-typedefs.
(c_pop_function_context): If necessary, clear the language function
created in c_push_function_context. Always clear out the
x_cur_stmt_list field of the restored language function.
2012-06-21 Sterling Augustine <saugustine@google.com>
Cary Coutant <ccoutant@google.com>
......
......@@ -8579,9 +8579,11 @@ check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
void
c_push_function_context (void)
{
struct language_function *p;
p = ggc_alloc_language_function ();
cfun->language = p;
struct language_function *p = cfun->language;
/* cfun->language might have been already allocated by the use of
-Wunused-local-typedefs. In that case, just re-use it. */
if (p == NULL)
cfun->language = p = ggc_alloc_cleared_language_function ();
p->base.x_stmt_tree = c_stmt_tree;
c_stmt_tree.x_cur_stmt_list
......@@ -8607,7 +8609,12 @@ c_pop_function_context (void)
pop_function_context ();
p = cfun->language;
cfun->language = NULL;
/* When -Wunused-local-typedefs is in effect, cfun->languages is
used to store data throughout the life time of the current cfun,
So don't deallocate it. */
if (!warn_unused_local_typedefs)
cfun->language = NULL;
if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
&& DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
......@@ -8620,6 +8627,7 @@ c_pop_function_context (void)
}
c_stmt_tree = p->base.x_stmt_tree;
p->base.x_stmt_tree.x_cur_stmt_list = NULL;
c_break_label = p->x_break_label;
c_cont_label = p->x_cont_label;
c_switch_stack = p->x_switch_stack;
......
2012-06-21 Meador Inge <meadori@codesourcery.com>
PR c/53702
* gcc.dg/Wunused-local-typedefs.c: New testcase.
2012-06-21 Steven Bosscher <steven@gcc.gnu.org>
* testsuite/gcc.dg/pch/ident-1.c: New test.
......
/* Origin PR c/53702
{ dg-options "-Wunused-local-typedefs" }
{ dg-do compile }
*/
/* Only test nested functions for C. More tests that work for C and C++
can be found in c-c++-common.
*/
void
test0 ()
{
typedef int foo; /* { dg-warning "locally defined but not used" } */
void f ()
{
}
}
void
test1 ()
{
void f ()
{
typedef int foo; /* { dg-warning "locally defined but not used" } */
}
}
void
test2 ()
{
void f ()
{
}
typedef int foo; /* { dg-warning "locally defined but not used" } */
}
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