summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog4
-rw-r--r--gcc/ada/gcc-interface/utils2.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/loop_optimization22.adb16
-rw-r--r--gcc/testsuite/gnat.dg/loop_optimization22.ads7
5 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index a90fa647b5f..cc0add237d1 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,9 @@
2015-11-30 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/utils2.c (gnat_invariant_expr): Add type conversions.
+
+2015-11-30 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/ada-tree.h (TYPE_MAX_ALIGN): New macro.
* gcc-interface/decl.c (gnat_to_gnu_entity): Do not set PACKED to -2.
Remove obsolete code setting the alignment on some atomic types.
diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c
index 79e9b2f26da..a74b8a81018 100644
--- a/gcc/ada/gcc-interface/utils2.c
+++ b/gcc/ada/gcc-interface/utils2.c
@@ -2860,7 +2860,9 @@ gnat_invariant_expr (tree expr)
tree op0 = gnat_invariant_expr (TREE_OPERAND (expr, 0));
tree op1 = TREE_OPERAND (expr, 1);
if (op0 && TREE_CONSTANT (op1))
- return fold_build2 (TREE_CODE (expr), type, op0, op1);
+ return
+ fold_build2 (TREE_CODE (expr), type,
+ fold_convert (type, op0), fold_convert (type, op1));
else
return NULL_TREE;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e7a3058c4b4..e31b7f0c6c6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2015-11-30 Eric Botcazou <ebotcazou@adacore.com>
+ * gnat.dg/loop_optimization22.ad[sb]: New test.
+
+2015-11-30 Eric Botcazou <ebotcazou@adacore.com>
+
* gnat.dg/specs/rep_clause5.ads: New test.
2015-11-29 Jan Hubicka <hubicka@ucw.cz>
diff --git a/gcc/testsuite/gnat.dg/loop_optimization22.adb b/gcc/testsuite/gnat.dg/loop_optimization22.adb
new file mode 100644
index 00000000000..7fb307b8fbc
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/loop_optimization22.adb
@@ -0,0 +1,16 @@
+-- { dg-do compile }
+-- { dg-options "-O" }
+
+pragma Overflow_Mode (Minimized);
+
+package body Loop_Optimization22 is
+
+ procedure Foo (X : Discrim_Type) is
+ H : array (1 .. Integer (X.Count) + 1) of Float;
+ begin
+ for I in 1 .. X.Count loop
+ H (Integer(I) + 1):= 0.0;
+ end loop;
+ end;
+
+end Loop_Optimization22;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization22.ads b/gcc/testsuite/gnat.dg/loop_optimization22.ads
new file mode 100644
index 00000000000..ec3ac0d0833
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/loop_optimization22.ads
@@ -0,0 +1,7 @@
+package Loop_Optimization22 is
+
+ type Discrim_Type (Count : Positive) is null record;
+
+ procedure Foo (X : Discrim_Type);
+
+end Loop_Optimization22;