* gcc-interface/utils2.c (gnat_invariant_expr): Add type conversions.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Nov 2015 11:34:31 +0000 (11:34 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Nov 2015 11:34:31 +0000 (11:34 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231063 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gcc-interface/utils2.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/loop_optimization22.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization22.ads [new file with mode: 0644]

index a90fa64..cc0add2 100644 (file)
@@ -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.
index 79e9b2f..a74b8a8 100644 (file)
@@ -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;
     }
index e7a3058..e31b7f0 100644 (file)
@@ -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 (file)
index 0000000..7fb307b
--- /dev/null
@@ -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 (file)
index 0000000..ec3ac0d
--- /dev/null
@@ -0,0 +1,7 @@
+package Loop_Optimization22 is
+
+  type Discrim_Type (Count : Positive) is null record;
+
+  procedure Foo (X : Discrim_Type);
+
+end Loop_Optimization22;