From 34c0750b2470ea91ea04de304c3c8fd4eaabfe7c Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 19 Sep 2007 15:23:01 +0000 Subject: [PATCH] tree-sra.c (decide_block_copy): Decide if there are groups. * tree-sra.c (decide_block_copy): Decide if there are groups. From-SVN: r128602 --- gcc/ChangeLog | 4 ++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/slice2.adb | 13 +++++++++++++ gcc/testsuite/gnat.dg/slice2.ads | 14 ++++++++++++++ gcc/tree-sra.c | 4 ++-- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/slice2.adb create mode 100644 gcc/testsuite/gnat.dg/slice2.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e4a1907503..99d4f89697d 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 36d6ceef2d2..b36320df6ea 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 00000000000..ab73074313e --- /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 00000000000..f1b8674fb8e --- /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 4a3924b6a64..b1d2acc3019 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) -- 2.30.2