From d2143736bb340bc15421f82fd3cf99d2e06e84a3 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 2 Aug 2008 10:49:51 +0000 Subject: [PATCH] utils2.c (build_binary_op): New case. * gcc-interface/utils2.c (build_binary_op) : New case. Convert BOOLEAN_TYPE operation to the default integer type. From-SVN: r138552 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/utils2.c | 10 +++++++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/boolean_expr2.adb | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/boolean_expr2.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5819c49..ab0d02f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2008-08-02 Eric Botcazou + + * gcc-interface/utils2.c (build_binary_op) : + New case. Convert BOOLEAN_TYPE operation to the default integer type. + 2008-08-01 Eric Botcazou * gcc-interface/ada-tree.h (DECL_PARM_ALT): Now DECL_PARM_ALT_TYPE. diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c index 1424ac8..d1a6786 100644 --- a/gcc/ada/gcc-interface/utils2.c +++ b/gcc/ada/gcc-interface/utils2.c @@ -986,7 +986,6 @@ build_binary_op (enum tree_code op_code, tree result_type, outputs. */ if (modulus && integer_pow2p (modulus)) modulus = NULL_TREE; - goto common; case COMPLEX_EXPR: @@ -1011,6 +1010,15 @@ build_binary_op (enum tree_code op_code, tree result_type, right_operand = convert (sizetype, right_operand); break; + case PLUS_EXPR: + case MINUS_EXPR: + /* Avoid doing arithmetics in BOOLEAN_TYPE like the other compilers. + Contrary to C, Ada doesn't allow arithmetics in Standard.Boolean + but we can generate addition or subtraction for 'Succ and 'Pred. */ + if (operation_type && TREE_CODE (operation_type) == BOOLEAN_TYPE) + operation_type = left_base_type = right_base_type = integer_type_node; + goto common; + default: common: /* The result type should be the same as the base types of the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4aacfda..b9f542a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-08-02 Eric Botcazou + + * gnat.dg/boolean_expr2.adb: New test. + 2008-08-01 Jakub Jelinek PR tree-optimization/36991 diff --git a/gcc/testsuite/gnat.dg/boolean_expr2.adb b/gcc/testsuite/gnat.dg/boolean_expr2.adb new file mode 100644 index 0000000..8bdcb84 --- /dev/null +++ b/gcc/testsuite/gnat.dg/boolean_expr2.adb @@ -0,0 +1,18 @@ +-- { dg-do run } + +procedure Boolean_Expr2 is + + function Ident_Bool (B : Boolean) return Boolean is + begin + return B; + end; + +begin + if Boolean'Succ (Ident_Bool(False)) /= True then + raise Program_Error; + end if; + + if Boolean'Pred (Ident_Bool(True)) /= False then + raise Program_Error; + end if; +end; -- 2.7.4