mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-13 05:43:45 +08:00
re PR rtl-optimization/7675 (ICE in fixup_var_refs_1)
PR optimization/7675 * c-typeck.c (build_external_ref): Set the DECL_NONLOCAL flag on VAR_DECL, PARM_DECL and FUNCTION_DECL from within nested functions if they refer to declarations from parent functions. * stmt.c (expand_decl): Don't put automatic variables in registers if the DECL_NONLOCAL flag is set. From-SVN: r65774
This commit is contained in:
parent
06e7ca50ab
commit
6a29edeae5
@ -1,3 +1,12 @@
|
||||
2003-04-18 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
PR optimization/7675
|
||||
* c-typeck.c (build_external_ref): Set the DECL_NONLOCAL flag
|
||||
on VAR_DECL, PARM_DECL and FUNCTION_DECL from within
|
||||
nested functions if they refer to declarations from parent functions.
|
||||
* stmt.c (expand_decl): Don't put automatic variables in registers
|
||||
if the DECL_NONLOCAL flag is set.
|
||||
|
||||
2003-04-18 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* gcse.c (compute_ld_motion_mems): For MEM destinations, only
|
||||
|
@ -1463,6 +1463,17 @@ build_external_ref (id, fun)
|
||||
ref = DECL_INITIAL (ref);
|
||||
TREE_CONSTANT (ref) = 1;
|
||||
}
|
||||
else if (current_function_decl != 0
|
||||
&& DECL_CONTEXT (current_function_decl) != 0
|
||||
&& (TREE_CODE (ref) == VAR_DECL
|
||||
|| TREE_CODE (ref) == PARM_DECL
|
||||
|| TREE_CODE (ref) == FUNCTION_DECL))
|
||||
{
|
||||
tree context = decl_function_context (ref);
|
||||
|
||||
if (context != 0 && context != current_function_decl)
|
||||
DECL_NONLOCAL (ref) = 1;
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
@ -3924,6 +3924,7 @@ expand_decl (decl)
|
||||
&& !(flag_float_store
|
||||
&& TREE_CODE (type) == REAL_TYPE)
|
||||
&& ! TREE_THIS_VOLATILE (decl)
|
||||
&& ! DECL_NONLOCAL (decl)
|
||||
&& (DECL_REGISTER (decl) || optimize))
|
||||
{
|
||||
/* Automatic variable that can go in a register. */
|
||||
|
@ -1,3 +1,7 @@
|
||||
2003-04-18 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* gcc.c-torture/compile/20030418-1.c: New test.
|
||||
|
||||
2003-04-17 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* README.compat: Remove; content moved to doc/sourcebuild.texi.
|
||||
|
16
gcc/testsuite/gcc.c-torture/compile/20030418-1.c
Normal file
16
gcc/testsuite/gcc.c-torture/compile/20030418-1.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* PR optimization/7675 */
|
||||
/* Contributed by Volker Reichelt */
|
||||
|
||||
/* Verify that we don't put automatic variables
|
||||
in registers too early. */
|
||||
|
||||
extern int dummy (int *);
|
||||
|
||||
void foo(int i)
|
||||
{
|
||||
int j=i;
|
||||
|
||||
void bar() { int x=j, y=i; }
|
||||
|
||||
dummy(&i);
|
||||
}
|
Loading…
Reference in New Issue
Block a user