From: ebotcazou Date: Wed, 19 Sep 2007 15:23:01 +0000 (+0000) Subject: * tree-sra.c (decide_block_copy): Decide if there are groups. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2eaed58e668b33e3f5ae487c5bf4e6fd4b7bb012;p=thirdparty%2Fgcc.git * tree-sra.c (decide_block_copy): Decide if there are groups. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128602 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e4a1907503a..99d4f89697de 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2007-09-19 Eric Botcazou + + * tree-sra.c (decide_block_copy): Decide if there are groups. + 2007-09-19 Roman Zippel * config/m68k/m68k.c (output_move_himode): Remove jump table diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 36d6ceef2d2b..b36320df6ead 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-09-19 Eric Botcazou + + * gnat.dg/slice2.ad[sb]: New testcase. + 2007-09-19 Nick Clifton * gcc.dg/cpp/assert4.c: Fix expected h8300 preprocessor define. diff --git a/gcc/testsuite/gnat.dg/slice2.adb b/gcc/testsuite/gnat.dg/slice2.adb new file mode 100644 index 000000000000..ab73074313e7 --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice2.adb @@ -0,0 +1,13 @@ +-- { dg-do compile } +-- { dg-options "-O" } + +package body Slice2 is + + function F (I : R1) return R2 is + Val : R2; + begin + Val.Text (1 .. 8) := I.Text (1 .. 8); + return Val; + end F; + +end Slice2; diff --git a/gcc/testsuite/gnat.dg/slice2.ads b/gcc/testsuite/gnat.dg/slice2.ads new file mode 100644 index 000000000000..f1b8674fb8e3 --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice2.ads @@ -0,0 +1,14 @@ +package Slice2 is + + type R1 is record + Text : String (1 .. 30); + end record; + + type R2 is record + Text : String (1 .. 8); + B : Boolean := True; + end record; + + function F (I : R1) return R2; + +end Slice2; diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 4a3924b6a64e..b1d2acc30197 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1491,8 +1491,8 @@ decide_block_copy (struct sra_elt *elt) return false; } - /* Don't decide if we've no uses. */ - if (elt->n_uses == 0 && elt->n_copies == 0) + /* Don't decide if we've no uses and no groups. */ + if (elt->n_uses == 0 && elt->n_copies == 0 && elt->groups == NULL) ; else if (!elt->is_scalar)