From f8125f0c9ce43aac6d7a96753e4617af68ee0009 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 30 Nov 2015 11:34:31 +0000 Subject: [PATCH] * gcc-interface/utils2.c (gnat_invariant_expr): Add type conversions. From-SVN: r231063 --- gcc/ada/ChangeLog | 4 ++++ gcc/ada/gcc-interface/utils2.c | 4 +++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/loop_optimization22.adb | 16 ++++++++++++++++ gcc/testsuite/gnat.dg/loop_optimization22.ads | 7 +++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/loop_optimization22.adb create mode 100644 gcc/testsuite/gnat.dg/loop_optimization22.ads diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a90fa647b5f..cc0add237d1 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2015-11-30 Eric Botcazou + + * gcc-interface/utils2.c (gnat_invariant_expr): Add type conversions. + 2015-11-30 Eric Botcazou * gcc-interface/ada-tree.h (TYPE_MAX_ALIGN): New macro. 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,3 +1,7 @@ +2015-11-30 Eric Botcazou + + * gnat.dg/loop_optimization22.ad[sb]: New test. + 2015-11-30 Eric Botcazou * gnat.dg/specs/rep_clause5.ads: New test. 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; -- 2.30.2