diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2008-08-02 10:49:51 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2008-08-02 10:49:51 +0000 |
commit | d2143736bb340bc15421f82fd3cf99d2e06e84a3 (patch) | |
tree | 8df14879b8e45b704c54b737dd398b980efc4aa3 /gcc/ada/gcc-interface/utils2.c | |
parent | c9234c8d54b09ba565fc10cee2f2e230c4f012e2 (diff) | |
download | gcc-d2143736bb340bc15421f82fd3cf99d2e06e84a3.zip gcc-d2143736bb340bc15421f82fd3cf99d2e06e84a3.tar.gz gcc-d2143736bb340bc15421f82fd3cf99d2e06e84a3.tar.bz2 |
utils2.c (build_binary_op): New case.
* gcc-interface/utils2.c (build_binary_op) <PLUS_EXPR, MINUS_EXPR>:
New case. Convert BOOLEAN_TYPE operation to the default integer type.
From-SVN: r138552
Diffstat (limited to 'gcc/ada/gcc-interface/utils2.c')
-rw-r--r-- | gcc/ada/gcc-interface/utils2.c | 10 |
1 files changed, 9 insertions, 1 deletions
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 |