diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a7eb6a2847bc..050bc681c8b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-12-04 Jakub Jelinek + + PR middle-end/34134 + * stmt.c (expand_stack_restore): Call expand_normal on var to get + rtx for it instead of assuming it will be a VAR_DECL. + 2007-12-04 Manuel Lopez-Ibanez * c-parser (c_parser_statement_after_labels): Move error from here... diff --git a/gcc/stmt.c b/gcc/stmt.c index 7d1a2662507e..aacb1840dec0 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -1995,7 +1995,7 @@ expand_stack_save (void) void expand_stack_restore (tree var) { - rtx sa = DECL_RTL (var); + rtx sa = expand_normal (var); emit_stack_restore (SAVE_BLOCK, sa, NULL_RTX); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5407e15f6456..f903d83a8cb5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-12-04 Jakub Jelinek + + PR middle-end/34134 + * gcc.c-torture/compile/20071117-1.c: New test. + 2007-12-04 Douglas Gregor PR c++/34101 diff --git a/gcc/testsuite/gcc.c-torture/compile/20071117-1.c b/gcc/testsuite/gcc.c-torture/compile/20071117-1.c new file mode 100644 index 000000000000..efcd51269ba4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20071117-1.c @@ -0,0 +1,13 @@ +/* PR middle-end/34134 */ + +extern void bar (void *, int); + +int foo (int i) +{ + char *p = __builtin_stack_save (); + void *q = __builtin_alloca (i); + bar (q, i); + __builtin_stack_restore (p); + bar ("", 0); + return 6; +}