diff options
author | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2008-07-30 23:54:56 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2008-07-30 23:54:56 +0000 |
commit | 01ddebf20842e3e6b9b9349a2e68cd702bfcc27b (patch) | |
tree | 87a4eb9f676e3356453c46961c4ca3f72f9bd2a7 /gcc/ada/gcc-interface/utils.c | |
parent | b8c71e40e0eecc003533b7f294fbe2d29e641326 (diff) | |
download | gcc-01ddebf20842e3e6b9b9349a2e68cd702bfcc27b.zip gcc-01ddebf20842e3e6b9b9349a2e68cd702bfcc27b.tar.gz gcc-01ddebf20842e3e6b9b9349a2e68cd702bfcc27b.tar.bz2 |
re PR ada/36554 (verify_flow_info ICE can not throw but has EH edges)
PR ada/36554
* dwarf2out.c (is_subrange_type): Deal with BOOLEAN_TYPE.
ada/
* back_end.adb (Call_Back_End): Pass Standard_Boolean to gigi.
* gcc-interface/gigi.h (gigi): Take new standard_boolean parameter.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Enumeration_Subtype>:
Set precision to 1 for subtype of BOOLEAN_TYPE.
(set_rm_size): Set TYPE_RM_SIZE_NUM for BOOLEAN_TYPE.
(make_type_from_size): Deal with BOOLEAN_TYPE.
* gcc-interface/misc.c (gnat_print_type): Likewise.
* gcc-interface/trans.c (gigi): Take new standard_boolean parameter.
Set boolean_type_node as its translation in the table, as well
as boolean_false_node for False and boolean_true_node for True.
* gcc-interface/utils.c (gnat_init_decl_processing): Create custom
8-bit boolean_type_node and set its TYPE_RM_SIZE_NUM.
(create_param_decl): Deal with BOOLEAN_TYPE.
(build_vms_descriptor): Likewise.
(build_vms_descriptor64): Likewise.
(convert): Deal with BOOLEAN_TYPE like with ENUMERAL_TYPE.
From-SVN: r138348
Diffstat (limited to 'gcc/ada/gcc-interface/utils.c')
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 01cc9b8..8822938 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -523,6 +523,13 @@ gnat_init_decl_processing (void) this before we can expand the GNAT types. */ size_type_node = gnat_type_for_size (GET_MODE_BITSIZE (Pmode), 0); set_sizetype (size_type_node); + + /* In Ada, we use an unsigned 8-bit type for the default boolean type. */ + boolean_type_node = make_node (BOOLEAN_TYPE); + TYPE_PRECISION (boolean_type_node) = 1; + fixup_unsigned_type (boolean_type_node); + TYPE_RM_SIZE_NUM (boolean_type_node) = bitsize_int (1); + build_common_tree_nodes_2 (0); ptr_void_type_node = build_pointer_type (void_type_node); @@ -1762,7 +1769,8 @@ create_param_decl (tree param_name, tree param_type, bool readonly) lead to various ABI violations. */ if (targetm.calls.promote_prototypes (param_type) && (TREE_CODE (param_type) == INTEGER_TYPE - || TREE_CODE (param_type) == ENUMERAL_TYPE) + || TREE_CODE (param_type) == ENUMERAL_TYPE + || TREE_CODE (param_type) == BOOLEAN_TYPE) && TYPE_PRECISION (param_type) < TYPE_PRECISION (integer_type_node)) { /* We have to be careful about biased types here. Make a subtype @@ -2690,6 +2698,7 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) { case INTEGER_TYPE: case ENUMERAL_TYPE: + case BOOLEAN_TYPE: if (TYPE_VAX_FLOATING_POINT_P (type)) switch (tree_low_cst (TYPE_DIGITS_VALUE (type), 1)) { @@ -2992,6 +3001,7 @@ build_vms_descriptor64 (tree type, Mechanism_Type mech, Entity_Id gnat_entity) { case INTEGER_TYPE: case ENUMERAL_TYPE: + case BOOLEAN_TYPE: if (TYPE_VAX_FLOATING_POINT_P (type)) switch (tree_low_cst (TYPE_DIGITS_VALUE (type), 1)) { @@ -4035,9 +4045,6 @@ convert (tree type, tree expr) case VOID_TYPE: return fold_build1 (CONVERT_EXPR, type, expr); - case BOOLEAN_TYPE: - return fold_convert (type, gnat_truthvalue_conversion (expr)); - case INTEGER_TYPE: if (TYPE_HAS_ACTUAL_BOUNDS_P (type) && (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE @@ -4052,6 +4059,7 @@ convert (tree type, tree expr) /* ... fall through ... */ case ENUMERAL_TYPE: + case BOOLEAN_TYPE: /* If we are converting an additive expression to an integer type with lower precision, be wary of the optimization that can be applied by convert_to_integer. There are 2 problematic cases: |