aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2006-08-10 22:13:42 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2006-08-10 22:13:42 +0000
commit5d5995f10531955de2e5f3c1a0979205d71ffb70 (patch)
tree441815d76c21086dcc274b40493bc2c69d55c061 /gcc
parentb576b3a7fda3f914807f1296124f15fe791b5a60 (diff)
downloadgcc-5d5995f10531955de2e5f3c1a0979205d71ffb70.zip
gcc-5d5995f10531955de2e5f3c1a0979205d71ffb70.tar.gz
gcc-5d5995f10531955de2e5f3c1a0979205d71ffb70.tar.bz2
tree.c (build1_stat): Also propagate the TREE_CONSTANT and TREE_INVARIANT flags for a VIEW_CONVERT_EXPR.
* tree.c (build1_stat): Also propagate the TREE_CONSTANT and TREE_INVARIANT flags for a VIEW_CONVERT_EXPR. From-SVN: r116071
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/specs/static_initializer.ads14
-rw-r--r--gcc/tree.c4
4 files changed, 25 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5d6f9d5..c42ae60 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-11 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree.c (build1_stat): Also propagate the TREE_CONSTANT and
+ TREE_INVARIANT flags for a VIEW_CONVERT_EXPR.
+
2006-08-10 Paul Brook <paul@codesourcery.com>
* final.c (final_scan_insn): Clear current_insn_predicate before
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f08c34c..44a4894 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2006-08-10 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/specs/static_initializer.ads: New test.
+
2006-08-10 Paul Brook <paul@codesourcery.com>
* gcc.target/arm/cond-asm.c: New test.
diff --git a/gcc/testsuite/gnat.dg/specs/static_initializer.ads b/gcc/testsuite/gnat.dg/specs/static_initializer.ads
new file mode 100644
index 0000000..8755c30
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/static_initializer.ads
@@ -0,0 +1,14 @@
+-- { dg-do compile }
+
+package static_initializer is
+
+ type Vector is array (1 .. 3) of Float;
+ type Arr is array (Integer range 1 .. 3) of Vector;
+
+ Pos : constant Arr := ((0.0, 1.0, 2.0),
+ (0.5, 1.5, 2.5),
+ (1.0, 2.0, 4.0));
+
+end;
+
+-- { dg-final { scan-assembler-not "elabs" } }
diff --git a/gcc/tree.c b/gcc/tree.c
index dc78ad7..efccfb1 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2923,11 +2923,11 @@ build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
break;
default:
- if (TREE_CODE_CLASS (code) == tcc_unary
+ if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
&& node && !TYPE_P (node)
&& TREE_CONSTANT (node))
TREE_CONSTANT (t) = 1;
- if (TREE_CODE_CLASS (code) == tcc_unary
+ if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
&& node && TREE_INVARIANT (node))
TREE_INVARIANT (t) = 1;
if (TREE_CODE_CLASS (code) == tcc_reference