Hello, this fixes the ADA parts of PR middle-end/48989. For Fortran I am still looking, what actual the cause is.
ChangeLog 2011-05-16 Kai Tietz PR middle-end/48989 * gcc-interface/trans.c (Exception_Handler_to_gnu_sjlj): Use boolean_false_node instead of integer_zero_node. (convert_with_check): Likewise. * gcc-interface/decl.c (choices_to_gnu): Likewise. * gcc-interface/misc.c (gnat_init): Set precision for generated boolean_type_node and initialize boolean_false_node. Patch bootstrapped on x86_64-pc-linux-gnu. And ran testsuite for ada. Ok for apply? Regards, Kai -- | (\_/) This is Bunny. Copy and paste | (='.'=) Bunny into your signature to help | (")_(") him gain world domination
Index: gcc/gcc/ada/gcc-interface/trans.c =================================================================== --- gcc.orig/gcc/ada/gcc-interface/trans.c 2011-05-15 22:39:17.506308700 +0200 +++ gcc/gcc/ada/gcc-interface/trans.c 2011-05-15 23:28:32.502581600 +0200 @@ -3563,7 +3563,7 @@ Exception_Handler_to_gnu_sjlj (Node_Id g an "if" statement to select the proper exceptions. For "Others", exclude exceptions where Handled_By_Others is nonzero unless the All_Others flag is set. For "Non-ada", accept an exception if "Lang" is 'V'. */ - tree gnu_choice = integer_zero_node; + tree gnu_choice = boolean_false_node; tree gnu_body = build_stmt_group (Statements (gnat_node), false); Node_Id gnat_temp; @@ -3575,7 +3575,7 @@ Exception_Handler_to_gnu_sjlj (Node_Id g if (Nkind (gnat_temp) == N_Others_Choice) { if (All_Others (gnat_temp)) - this_choice = integer_one_node; + this_choice = boolean_true_node; else this_choice = build_binary_op @@ -7101,7 +7101,7 @@ convert_with_check (Entity_Id gnat_type, { /* Ensure GNU_EXPR only gets evaluated once. */ tree gnu_input = gnat_protect_expr (gnu_result); - tree gnu_cond = integer_zero_node; + tree gnu_cond = boolean_false_node; tree gnu_in_lb = TYPE_MIN_VALUE (gnu_in_basetype); tree gnu_in_ub = TYPE_MAX_VALUE (gnu_in_basetype); tree gnu_out_lb = TYPE_MIN_VALUE (gnu_base_type); Index: gcc/gcc/ada/gcc-interface/decl.c =================================================================== --- gcc.orig/gcc/ada/gcc-interface/decl.c 2011-05-09 10:05:49.000000000 +0200 +++ gcc/gcc/ada/gcc-interface/decl.c 2011-05-15 23:23:19.470831600 +0200 @@ -6595,7 +6595,7 @@ choices_to_gnu (tree operand, Node_Id ch { Node_Id choice; Node_Id gnat_temp; - tree result = integer_zero_node; + tree result = boolean_false_node; tree this_test, low = 0, high = 0, single = 0; for (choice = First (choices); Present (choice); choice = Next (choice)) @@ -6660,7 +6660,7 @@ choices_to_gnu (tree operand, Node_Id ch break; case N_Others_Choice: - this_test = integer_one_node; + this_test = boolean_true_node; break; default: Index: gcc/gcc/ada/gcc-interface/misc.c =================================================================== --- gcc.orig/gcc/ada/gcc-interface/misc.c 2011-05-03 18:41:38.000000000 +0200 +++ gcc/gcc/ada/gcc-interface/misc.c 2011-05-16 14:13:57.610535500 +0200 @@ -326,11 +326,13 @@ gnat_init (void) SET_TYPE_RM_MAX_VALUE (boolean_type_node, build_int_cst (boolean_type_node, 1)); SET_TYPE_RM_SIZE (boolean_type_node, bitsize_int (1)); + TYPE_PRECISION (boolean_type_node) = 1; build_common_tree_nodes_2 (0); sbitsize_one_node = sbitsize_int (1); sbitsize_unit_node = sbitsize_int (BITS_PER_UNIT); boolean_true_node = TYPE_MAX_VALUE (boolean_type_node); + boolean_false_node = TYPE_MIN_VALUE (boolean_type_node); ptr_void_type_node = build_pointer_type (void_type_node);