From 81186f7b231d9f3ac02fcc7c19a74e8c94363f68 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 12 Feb 2008 20:49:21 +0000 Subject: [PATCH] re PR middle-end/35136 (ICE caused by address calculation with loop variable when optimization is on) PR middle-end/35136 * gimplify.c (force_gimple_operand_bsi): Move SSA renaming code from here to... (force_gimple_operand): ...here. From-SVN: r132267 --- gcc/ChangeLog | 7 ++++++ gcc/gimplify.c | 16 +++++++------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/loop_address.adb | 30 ++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/loop_address.adb diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8eb01b693fb..36e3c469286 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-02-12 Eric Botcazou + + PR middle-end/35136 + * gimplify.c (force_gimple_operand_bsi): Move SSA renaming + code from here to... + (force_gimple_operand): ...here. + 2008-02-12 Jakub Jelinek PR c++/35144 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 04ed39c533a..bc576a0ca00 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -6629,6 +6629,14 @@ force_gimple_operand (tree expr, tree *stmts, bool simple, tree var) pop_gimplify_context (NULL); + if (*stmts && gimple_in_ssa_p (cfun)) + { + tree_stmt_iterator tsi; + + for (tsi = tsi_start (*stmts); !tsi_end_p (tsi); tsi_next (&tsi)) + mark_symbols_for_renaming (tsi_stmt (tsi)); + } + return expr; } @@ -6648,14 +6656,6 @@ force_gimple_operand_bsi (block_stmt_iterator *bsi, tree expr, expr = force_gimple_operand (expr, &stmts, simple_p, var); if (stmts) { - if (gimple_in_ssa_p (cfun)) - { - tree_stmt_iterator tsi; - - for (tsi = tsi_start (stmts); !tsi_end_p (tsi); tsi_next (&tsi)) - mark_symbols_for_renaming (tsi_stmt (tsi)); - } - if (before) bsi_insert_before (bsi, stmts, m); else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e49d4aa80d3..8fb87610585 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-02-12 Eric Botcazou + + * gnat.dg/loop_address.adb: New test. + 2008-02-12 Kaveh R. Ghazi * obj-c++.dg/bitfield-1.mm: Expect failures. diff --git a/gcc/testsuite/gnat.dg/loop_address.adb b/gcc/testsuite/gnat.dg/loop_address.adb new file mode 100644 index 00000000000..e8e93d44036 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_address.adb @@ -0,0 +1,30 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatws" } + +-- PR middle-end/35136 + +pragma Extend_System(AUX_DEC); +with System; + +procedure Loop_Address is + + function Y(E : Integer) return String is + begin + return ""; + end Y; + + function X(C : in System.Address) return String is + D : Integer; + for D use at C; + begin + return Y(D); + end X; + + A : System.Address; + B : String := ""; + +begin + for I in 0..1 loop + B := X(System."+"(A, I)); + end loop; +end; -- 2.30.2