aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeert Bosch <bosch@adacore.com>2008-11-07 09:56:33 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2008-11-07 09:56:33 +0000
commit58e94443400c84cb32f07b7ffe0f383d75d5a688 (patch)
treed75657f0fa708155979e72e35fcd2f88557bcc96 /gcc
parenta7c43bbc03165cf0f566fcdd5d5a99bd0b6eae7c (diff)
downloadgcc-58e94443400c84cb32f07b7ffe0f383d75d5a688.zip
gcc-58e94443400c84cb32f07b7ffe0f383d75d5a688.tar.gz
gcc-58e94443400c84cb32f07b7ffe0f383d75d5a688.tar.bz2
trans.c (build_binary_op_trapv): Convert arguments and result for call to __gnat_mulv64.
* gcc-interface/trans.c (build_binary_op_trapv): Convert arguments and result for call to __gnat_mulv64. From-SVN: r141668
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/trans.c8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/test_8bitlong_overflow.adb28
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index fe36602..3cb89a6 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2008-11-07 Geert Bosch <bosch@adacore.com>
+
+ * gcc-interface/trans.c (build_binary_op_trapv): Convert arguments
+ and result for call to __gnat_mulv64.
+
2008-11-07 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c: Fix formatting nits.
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index d1d449e..005d517 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -6032,7 +6032,13 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left,
int needed_precision = precision * 2;
if (code == MULT_EXPR && precision == 64)
- return build_call_2_expr (mulv64_decl, lhs, rhs);
+ {
+ tree int_64 = gnat_type_for_size (64, 0);
+
+ return convert (gnu_type, build_call_2_expr (mulv64_decl,
+ convert (int_64, lhs),
+ convert (int_64, rhs)));
+ }
else if (needed_precision <= BITS_PER_WORD
|| (code == MULT_EXPR
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2b25e17..ae35d29 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2008-11-07 Geert Bosch <bosch@adacore.com>
+
+ * gnat.dg/test_8bitlong_overflow.adb: New test.
+
2008-11-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* g++.dg/ipa/iinline-1.C: Remove -c flag, add -fpie for PIC
diff --git a/gcc/testsuite/gnat.dg/test_8bitlong_overflow.adb b/gcc/testsuite/gnat.dg/test_8bitlong_overflow.adb
new file mode 100644
index 0000000..b22c871
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/test_8bitlong_overflow.adb
@@ -0,0 +1,28 @@
+-- { dg-do run }
+-- { dg-options "-gnato" }
+
+procedure Test_8bitlong_Overflow is
+
+ pragma Unsuppress (Overflow_Check);
+ generic
+ type T is range <>;
+ package G is
+ LO : T := T'first;
+ ONE : T := T(1);
+
+ type A2 is array(T range <>) of T;
+ subtype SA2 is A2(LO..4*ONE);
+
+ ARRAY_AGGR : SA2 := SA2'(others=>LO + 1);
+
+ POS_1 : T := T'pos(LO*ONE);
+ end;
+
+ type T is new LONG_INTEGER range -1..10;
+ for T'size use 8;
+
+ package P is new G (T);
+
+begin
+ null;
+end;