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
This commit is contained in:
Eric Botcazou 2008-08-02 10:49:51 +00:00 committed by Eric Botcazou
parent c9234c8d54
commit d2143736bb
4 changed files with 36 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2008-08-02 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils2.c (build_binary_op) <PLUS_EXPR, MINUS_EXPR>:
New case. Convert BOOLEAN_TYPE operation to the default integer type.
2008-08-01 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/ada-tree.h (DECL_PARM_ALT): Now DECL_PARM_ALT_TYPE.

View File

@ -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

View File

@ -1,3 +1,7 @@
2008-08-02 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/boolean_expr2.adb: New test.
2008-08-01 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/36991

View File

@ -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;