From 81dd70cde5278a1bea58c1b46ab8c490506c3543 Mon Sep 17 00:00:00 2001 From: charlet Date: Fri, 1 Aug 2008 07:56:20 +0000 Subject: [PATCH] 2008-08-01 Doug Rupp * gnat_rm.texi: Document new mechanism Short_Descriptor. * types.ads (Mechanism_Type): Modify range for new Short_Descriptor mechanism values. * sem_prag.adb (Set_Mechanism_Value): Enhance for Short_Descriptor mechanism and Short_Descriptor mechanism values. * snames.adb (preset_names): Add short_descriptor entry. * snames.ads: Add Name_Short_Descriptor. * types.h: Add new By_Short_Descriptor mechanism values. * sem_mech.adb (Set_Mechanism_Value): Enhance for Short_Descriptor mechanism and Short_Descriptor mechanism values. * sem_mech.ads (Mechanism_Type): Add new By_Short_Descriptor mechanism values. (Descriptor_Codes): Modify range for new mechanism values. * treepr.adb (Print_Entity_Enfo): Handle new By_Short_Descriptor mechanism values. * gcc-interface/decl.c (gnat_to_gnu_entity): Handle By_Short_Descriptor. (gnat_to_gnu_param): Handle By_Short_Descriptor. * gcc-interface/gigi.h (build_vms_descriptor64): Remove prototype. (build_vms_descriptor32): New prototype. (fill_vms_descriptor): Remove unneeded gnat_actual parameter. * gcc-interface/trans.c (call_to_gnu): Removed unneeded gnat_actual argument in call fill_vms_descriptor. * gcc-interface/utils.c (build_vms_descriptor32): Renamed from build_vms_descriptor and enhanced to hande Short_Descriptor mechanism. (build_vms_descriptor): Renamed from build_vms_descriptor64. (convert_vms_descriptor32): New function. (convert_vms_descriptor64): New function. (convert_vms_descriptor): Rewrite to handle both 32bit and 64bit descriptors. * gcc-interface/utils2.c (fill_vms_descriptor): Revert previous changes, no longer needed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@138473 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/gcc-interface/decl.c | 26 +- gcc/ada/gcc-interface/gigi.h | 11 +- gcc/ada/gcc-interface/trans.c | 9 +- gcc/ada/gcc-interface/utils.c | 251 +++++++++++- gcc/ada/gcc-interface/utils2.c | 26 +- gcc/ada/gnat_rm.texi | 17 + gcc/ada/sem_mech.adb | 82 +++- gcc/ada/sem_mech.ads | 10 +- gcc/ada/sem_prag.adb | 90 ++++- gcc/ada/snames.adb | 1 + gcc/ada/snames.ads | 843 +++++++++++++++++++++-------------------- gcc/ada/treepr.adb | 49 ++- gcc/ada/types.ads | 2 +- gcc/ada/types.h | 9 + 14 files changed, 907 insertions(+), 519 deletions(-) diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index f8ebf5a58be..f7f4a0d1b61 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -3872,6 +3872,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ; else if (By_Descriptor_Last <= mech && mech <= By_Descriptor) mech = By_Descriptor; + + else if (By_Short_Descriptor_Last <= mech && + mech <= By_Short_Descriptor) + mech = By_Short_Descriptor; + else if (mech > 0) { if (TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE @@ -3913,7 +3918,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) = chainon (gnu_param, gnu_stub_param_list); /* Change By_Descriptor parameter to By_Reference for the internal version of an exported subprogram. */ - if (mech == By_Descriptor) + if (mech == By_Descriptor || mech == By_Short_Descriptor) { gnu_param = gnat_to_gnu_param (gnat_param, By_Reference, @@ -4828,11 +4833,11 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, /* VMS descriptors are themselves passed by reference. Build both a 32bit and 64bit descriptor, one of which will be chosen - in fill_vms_descriptor based on the allocator size */ + in fill_vms_descriptor. */ if (mech == By_Descriptor) { gnu_param_type_alt - = build_pointer_type (build_vms_descriptor64 (gnu_param_type, + = build_pointer_type (build_vms_descriptor32 (gnu_param_type, Mechanism (gnat_param), gnat_subprog)); gnu_param_type @@ -4840,6 +4845,15 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, Mechanism (gnat_param), gnat_subprog)); } + else if (mech == By_Short_Descriptor) + { + gnu_param_type_alt = NULL_TREE; + + gnu_param_type + = build_pointer_type (build_vms_descriptor32 (gnu_param_type, + Mechanism (gnat_param), + gnat_subprog)); + } /* Arrays are passed as pointers to element type for foreign conventions. */ else if (foreign @@ -4920,6 +4934,7 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, && !by_ref && (by_return || (mech != By_Descriptor + && mech != By_Short_Descriptor && !POINTER_TYPE_P (gnu_param_type) && !AGGREGATE_TYPE_P (gnu_param_type))) && !(Is_Array_Type (Etype (gnat_param)) @@ -4931,11 +4946,12 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, ro_param || by_ref || by_component_ptr); DECL_BY_REF_P (gnu_param) = by_ref; DECL_BY_COMPONENT_PTR_P (gnu_param) = by_component_ptr; - DECL_BY_DESCRIPTOR_P (gnu_param) = (mech == By_Descriptor); + DECL_BY_DESCRIPTOR_P (gnu_param) = (mech == By_Descriptor || + mech == By_Short_Descriptor); DECL_POINTS_TO_READONLY_P (gnu_param) = (ro_param && (by_ref || by_component_ptr)); - /* Save the 64bit descriptor for later. */ + /* Save the alternate descriptor for later. */ SET_DECL_PARM_ALT (gnu_param, gnu_param_type_alt); /* If no Mechanism was specified, indicate what we're using, then diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index f44fec89abd..915e44f0e0e 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -683,7 +683,7 @@ extern void end_subprog_body (tree body, bool elab_p); Return a constructor for the template. */ extern tree build_template (tree template_type, tree array_type, tree expr); -/* Build a 32bit VMS descriptor from a Mechanism_Type, which must specify +/* Build a 64bit VMS descriptor from a Mechanism_Type, which must specify a descriptor type, and the GCC type of an object. Each FIELD_DECL in the type contains in its DECL_INITIAL the expression to use when a constructor is made for the type. GNAT_ENTITY is a gnat node used @@ -692,8 +692,8 @@ extern tree build_template (tree template_type, tree array_type, tree expr); extern tree build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity); -/* Build a 64bit VMS descriptor from a Mechanism_Type. See above. */ -extern tree build_vms_descriptor64 (tree type, Mechanism_Type mech, +/* Build a 32bit VMS descriptor from a Mechanism_Type. See above. */ +extern tree build_vms_descriptor32 (tree type, Mechanism_Type mech, Entity_Id gnat_entity); /* Build a stub for the subprogram specified by the GCC tree GNU_SUBPROG @@ -853,9 +853,8 @@ extern tree build_allocator (tree type, tree init, tree result_type, Node_Id gnat_node, bool); /* Fill in a VMS descriptor for EXPR and return a constructor for it. - GNAT_FORMAL is how we find the descriptor record. GNAT_ACTUAL is how we - find the size of the allocator. */ -extern tree fill_vms_descriptor (tree expr, Entity_Id gnat_formal, Node_Id gnat_actual); + GNAT_FORMAL is how we find the descriptor record. */ +extern tree fill_vms_descriptor (tree expr, Entity_Id gnat_formal); /* Indicate that we need to make the address of EXPR_NODE and it therefore should not be allocated in a register. Return true if successful. */ diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index f8e1d49eaa2..677ec01356a 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -2392,8 +2392,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) else gnu_actual = build_unary_op (ADDR_EXPR, NULL_TREE, fill_vms_descriptor (gnu_actual, - gnat_formal, - gnat_actual)); + gnat_formal)); } else { @@ -5910,7 +5909,7 @@ build_unary_op_trapv (enum tree_code code, { gcc_assert ((code == NEGATE_EXPR) || (code == ABS_EXPR)); - operand = save_expr (operand); + operand = protect_multiple_eval (operand); return emit_check (build_binary_op (EQ_EXPR, integer_type_node, operand, TYPE_MIN_VALUE (gnu_type)), @@ -5929,8 +5928,8 @@ build_binary_op_trapv (enum tree_code code, tree left, tree right) { - tree lhs = save_expr (left); - tree rhs = save_expr (right); + tree lhs = protect_multiple_eval (left); + tree rhs = protect_multiple_eval (right); tree type_max = TYPE_MAX_VALUE (gnu_type); tree type_min = TYPE_MIN_VALUE (gnu_type); tree gnu_expr; diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 2105abdcb29..f94d4bad609 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -2659,7 +2659,7 @@ build_template (tree template_type, tree array_type, tree expr) an object of that type and also for the name. */ tree -build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) +build_vms_descriptor32 (tree type, Mechanism_Type mech, Entity_Id gnat_entity) { tree record_type = make_node (RECORD_TYPE); tree pointer32_type; @@ -2689,7 +2689,7 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) idx_arr = (tree *) alloca (ndim * sizeof (tree)); - if (mech != By_Descriptor_NCA + if (mech != By_Descriptor_NCA && mech != By_Short_Descriptor_NCA && TREE_CODE (type) == ARRAY_TYPE && TYPE_CONVENTION_FORTRAN_P (type)) for (i = ndim - 1, inner_type = type; i >= 0; @@ -2775,16 +2775,21 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) switch (mech) { case By_Descriptor_A: + case By_Short_Descriptor_A: class = 4; break; case By_Descriptor_NCA: + case By_Short_Descriptor_NCA: class = 10; break; case By_Descriptor_SB: + case By_Short_Descriptor_SB: class = 15; break; case By_Descriptor: + case By_Short_Descriptor: case By_Descriptor_S: + case By_Short_Descriptor_S: default: class = 1; break; @@ -2797,7 +2802,9 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) = chainon (field_list, make_descriptor_field ("LENGTH", gnat_type_for_size (16, 1), record_type, - size_in_bytes (mech == By_Descriptor_A ? inner_type : type))); + size_in_bytes ((mech == By_Descriptor_A || + mech == By_Short_Descriptor_A) + ? inner_type : type))); field_list = chainon (field_list, make_descriptor_field ("DTYPE", @@ -2823,10 +2830,13 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) switch (mech) { case By_Descriptor: + case By_Short_Descriptor: case By_Descriptor_S: + case By_Short_Descriptor_S: break; case By_Descriptor_SB: + case By_Short_Descriptor_SB: field_list = chainon (field_list, make_descriptor_field @@ -2842,7 +2852,9 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) break; case By_Descriptor_A: + case By_Short_Descriptor_A: case By_Descriptor_NCA: + case By_Short_Descriptor_NCA: field_list = chainon (field_list, make_descriptor_field ("SCALE", gnat_type_for_size (8, 1), @@ -2859,7 +2871,8 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) = chainon (field_list, make_descriptor_field ("AFLAGS", gnat_type_for_size (8, 1), record_type, - size_int (mech == By_Descriptor_NCA + size_int ((mech == By_Descriptor_NCA || + mech == By_Short_Descriptor_NCA) ? 0 /* Set FL_COLUMN, FL_COEFF, and FL_BOUNDS. */ : (TREE_CODE (type) == ARRAY_TYPE @@ -2910,7 +2923,8 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) TYPE_MIN_VALUE (idx_arr[i])), size_int (1))); - fname[0] = (mech == By_Descriptor_NCA ? 'S' : 'M'); + fname[0] = ((mech == By_Descriptor_NCA || + mech == By_Short_Descriptor_NCA) ? 'S' : 'M'); fname[1] = '0' + i, fname[2] = 0; field_list = chainon (field_list, @@ -2918,7 +2932,7 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) gnat_type_for_size (32, 1), record_type, idx_length)); - if (mech == By_Descriptor_NCA) + if (mech == By_Descriptor_NCA || mech == By_Short_Descriptor_NCA) tem = idx_length; } @@ -2962,7 +2976,7 @@ build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) an object of that type and also for the name. */ tree -build_vms_descriptor64 (tree type, Mechanism_Type mech, Entity_Id gnat_entity) +build_vms_descriptor (tree type, Mechanism_Type mech, Entity_Id gnat_entity) { tree record64_type = make_node (RECORD_TYPE); tree pointer64_type; @@ -3283,12 +3297,160 @@ make_descriptor_field (const char *name, tree type, return field; } -/* Convert GNU_EXPR, a pointer to a VMS descriptor, to GNU_TYPE, a regular - pointer or fat pointer type. GNAT_SUBPROG is the subprogram to which - the VMS descriptor is passed. */ +/* Convert GNU_EXPR, a pointer to a 64bit VMS descriptor, to GNU_TYPE, a + regular pointer or fat pointer type. GNAT_SUBPROG is the subprogram to + which the VMS descriptor is passed. */ static tree -convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) +convert_vms_descriptor64 (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) +{ + tree desc_type = TREE_TYPE (TREE_TYPE (gnu_expr)); + tree desc = build1 (INDIRECT_REF, desc_type, gnu_expr); + /* The CLASS field is the 3rd field in the descriptor. */ + tree class = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (desc_type))); + /* The POINTER field is the 6th field in the descriptor. */ + tree pointer64 = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (class))); + + /* Retrieve the value of the POINTER field. */ + tree gnu_expr64 + = build3 (COMPONENT_REF, TREE_TYPE (pointer64), desc, pointer64, NULL_TREE); + + if (POINTER_TYPE_P (gnu_type)) + return convert (gnu_type, gnu_expr64); + + else if (TYPE_FAT_POINTER_P (gnu_type)) + { + tree p_array_type = TREE_TYPE (TYPE_FIELDS (gnu_type)); + tree p_bounds_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_type))); + tree template_type = TREE_TYPE (p_bounds_type); + tree min_field = TYPE_FIELDS (template_type); + tree max_field = TREE_CHAIN (TYPE_FIELDS (template_type)); + tree template, template_addr, aflags, dimct, t, u; + /* See the head comment of build_vms_descriptor. */ + int iclass = TREE_INT_CST_LOW (DECL_INITIAL (class)); + tree lfield, ufield; + + /* Convert POINTER to the type of the P_ARRAY field. */ + gnu_expr64 = convert (p_array_type, gnu_expr64); + + switch (iclass) + { + case 1: /* Class S */ + case 15: /* Class SB */ + /* Build {1, LENGTH} template; LENGTH64 is the 5th field. */ + t = TREE_CHAIN (TREE_CHAIN (class)); + t = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + t = tree_cons (min_field, + convert (TREE_TYPE (min_field), integer_one_node), + tree_cons (max_field, + convert (TREE_TYPE (max_field), t), + NULL_TREE)); + template = gnat_build_constructor (template_type, t); + template_addr = build_unary_op (ADDR_EXPR, NULL_TREE, template); + + /* For class S, we are done. */ + if (iclass == 1) + break; + + /* Test that we really have a SB descriptor, like DEC Ada. */ + t = build3 (COMPONENT_REF, TREE_TYPE (class), desc, class, NULL); + u = convert (TREE_TYPE (class), DECL_INITIAL (class)); + u = build_binary_op (EQ_EXPR, integer_type_node, t, u); + /* If so, there is already a template in the descriptor and + it is located right after the POINTER field. The fields are + 64bits so they must be repacked. */ + t = TREE_CHAIN (pointer64); + lfield = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + lfield = convert (TREE_TYPE (TYPE_FIELDS (template_type)), lfield); + + t = TREE_CHAIN (t); + ufield = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + ufield = convert + (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (template_type))), ufield); + + /* Build the template in the form of a constructor. */ + t = tree_cons (TYPE_FIELDS (template_type), lfield, + tree_cons (TREE_CHAIN (TYPE_FIELDS (template_type)), + ufield, NULL_TREE)); + template = gnat_build_constructor (template_type, t); + + /* Otherwise use the {1, LENGTH} template we build above. */ + template_addr = build3 (COND_EXPR, p_bounds_type, u, + build_unary_op (ADDR_EXPR, p_bounds_type, + template), + template_addr); + break; + + case 4: /* Class A */ + /* The AFLAGS field is the 3rd field after the pointer in the + descriptor. */ + t = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (pointer64))); + aflags = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + /* The DIMCT field is the next field in the descriptor after + aflags. */ + t = TREE_CHAIN (t); + dimct = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + /* Raise CONSTRAINT_ERROR if either more than 1 dimension + or FL_COEFF or FL_BOUNDS not set. */ + u = build_int_cst (TREE_TYPE (aflags), 192); + u = build_binary_op (TRUTH_OR_EXPR, integer_type_node, + build_binary_op (NE_EXPR, integer_type_node, + dimct, + convert (TREE_TYPE (dimct), + size_one_node)), + build_binary_op (NE_EXPR, integer_type_node, + build2 (BIT_AND_EXPR, + TREE_TYPE (aflags), + aflags, u), + u)); + /* There is already a template in the descriptor and it is located + in block 3. The fields are 64bits so they must be repacked. */ + t = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN + (t))))); + lfield = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + lfield = convert (TREE_TYPE (TYPE_FIELDS (template_type)), lfield); + + t = TREE_CHAIN (t); + ufield = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + ufield = convert + (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (template_type))), ufield); + + /* Build the template in the form of a constructor. */ + t = tree_cons (TYPE_FIELDS (template_type), lfield, + tree_cons (TREE_CHAIN (TYPE_FIELDS (template_type)), + ufield, NULL_TREE)); + template = gnat_build_constructor (template_type, t); + template = build3 (COND_EXPR, p_bounds_type, u, + build_call_raise (CE_Length_Check_Failed, Empty, + N_Raise_Constraint_Error), + template); + template_addr = build_unary_op (ADDR_EXPR, p_bounds_type, template); + break; + + case 10: /* Class NCA */ + default: + post_error ("unsupported descriptor type for &", gnat_subprog); + template_addr = integer_zero_node; + break; + } + + /* Build the fat pointer in the form of a constructor. */ + t = tree_cons (TYPE_FIELDS (gnu_type), gnu_expr64, + tree_cons (TREE_CHAIN (TYPE_FIELDS (gnu_type)), + template_addr, NULL_TREE)); + return gnat_build_constructor (gnu_type, t); + } + + else + gcc_unreachable (); +} + +/* Convert GNU_EXPR, a pointer to a 32bit VMS descriptor, to GNU_TYPE, a + regular pointer or fat pointer type. GNAT_SUBPROG is the subprogram to + which the VMS descriptor is passed. */ + +static tree +convert_vms_descriptor32 (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) { tree desc_type = TREE_TYPE (TREE_TYPE (gnu_expr)); tree desc = build1 (INDIRECT_REF, desc_type, gnu_expr); @@ -3298,11 +3460,11 @@ convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) tree pointer = TREE_CHAIN (class); /* Retrieve the value of the POINTER field. */ - gnu_expr + tree gnu_expr32 = build3 (COMPONENT_REF, TREE_TYPE (pointer), desc, pointer, NULL_TREE); if (POINTER_TYPE_P (gnu_type)) - return convert (gnu_type, gnu_expr); + return convert (gnu_type, gnu_expr32); else if (TYPE_FAT_POINTER_P (gnu_type)) { @@ -3316,7 +3478,7 @@ convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) int iclass = TREE_INT_CST_LOW (DECL_INITIAL (class)); /* Convert POINTER to the type of the P_ARRAY field. */ - gnu_expr = convert (p_array_type, gnu_expr); + gnu_expr32 = convert (p_array_type, gnu_expr32); switch (iclass) { @@ -3372,14 +3534,14 @@ convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) TREE_TYPE (aflags), aflags, u), u)); - add_stmt (build3 (COND_EXPR, void_type_node, u, - build_call_raise (CE_Length_Check_Failed, Empty, - N_Raise_Constraint_Error), - NULL_TREE)); /* There is already a template in the descriptor and it is located at the start of block 3 (12th field). */ t = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (t)))); template = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE); + template = build3 (COND_EXPR, p_bounds_type, u, + build_call_raise (CE_Length_Check_Failed, Empty, + N_Raise_Constraint_Error), + template); template_addr = build_unary_op (ADDR_EXPR, p_bounds_type, template); break; @@ -3391,9 +3553,10 @@ convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) } /* Build the fat pointer in the form of a constructor. */ - t = tree_cons (TYPE_FIELDS (gnu_type), gnu_expr, + t = tree_cons (TYPE_FIELDS (gnu_type), gnu_expr32, tree_cons (TREE_CHAIN (TYPE_FIELDS (gnu_type)), template_addr, NULL_TREE)); + return gnat_build_constructor (gnu_type, t); } @@ -3401,6 +3564,56 @@ convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) gcc_unreachable (); } +/* Convert GNU_EXPR, a pointer to a VMS descriptor, to GNU_TYPE, a + regular pointer or fat pointer type. GNAT_SUBPROG is the subprogram to + which the VMS descriptor is passed. */ + +static tree +convert_vms_descriptor (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) +{ + tree desc_type = TREE_TYPE (TREE_TYPE (gnu_expr)); + tree desc = build1 (INDIRECT_REF, desc_type, gnu_expr); + tree mbo = TYPE_FIELDS (desc_type); + const char *mbostr = IDENTIFIER_POINTER (DECL_NAME (mbo)); + tree mbmo = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (mbo))); + tree is64bit; + tree save_type = TREE_TYPE (gnu_expr); + tree gnu_expr32, gnu_expr64; + + if (strcmp (mbostr, "MBO") != 0) + /* If the field name is not MBO, it must be 32bit and no alternate */ + return convert_vms_descriptor32 (gnu_type, gnu_expr, gnat_subprog); + + /* Otherwise primary must be 64bit and alternate 32bit */ + + /* Test for 64bit descriptor */ + mbo = build3 (COMPONENT_REF, TREE_TYPE (mbo), desc, mbo, NULL_TREE); + mbmo = build3 (COMPONENT_REF, TREE_TYPE (mbmo), desc, mbmo, NULL_TREE); + is64bit = build_binary_op (TRUTH_ANDIF_EXPR, integer_type_node, + build_binary_op (EQ_EXPR, integer_type_node, + convert (integer_type_node, mbo), + integer_one_node), + build_binary_op (EQ_EXPR, integer_type_node, + convert (integer_type_node, mbmo), + integer_minus_one_node)); + + gnu_expr64 = convert_vms_descriptor64 (gnu_type, gnu_expr, + gnat_subprog); + /* Convert 32bit alternate. Hack alert ??? */ + TREE_TYPE (gnu_expr) = DECL_PARM_ALT (gnu_expr); + gnu_expr32 = convert_vms_descriptor32 (gnu_type, gnu_expr, + gnat_subprog); + TREE_TYPE (gnu_expr) = save_type; + + if (POINTER_TYPE_P (gnu_type)) + return build3 (COND_EXPR, gnu_type, is64bit, gnu_expr64, gnu_expr32); + + else if (TYPE_FAT_POINTER_P (gnu_type)) + return build3 (COND_EXPR, gnu_type, is64bit, gnu_expr64, gnu_expr32); + else + gcc_unreachable (); +} + /* Build a stub for the subprogram specified by the GCC tree GNU_SUBPROG and the GNAT node GNAT_SUBPROG. */ diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c index 1ed1b9f9cdb..1424ac8649a 100644 --- a/gcc/ada/gcc-interface/utils2.c +++ b/gcc/ada/gcc-interface/utils2.c @@ -2156,37 +2156,13 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, alternate 64bit descriptor. */ tree -fill_vms_descriptor (tree expr, Entity_Id gnat_formal, Node_Id gnat_actual) +fill_vms_descriptor (tree expr, Entity_Id gnat_formal) { tree field; tree parm_decl = get_gnu_tree (gnat_formal); tree const_list = NULL_TREE; - int size; tree record_type; - /* A string literal will always be in 32bit space on VMS. Where - will it be on other 64bit systems??? - An identifier's allocation may be unknown at compile time. - An explicit dereference could be either in 32bit or 64bit space. - Don't know about other possibilities, so assume unknown which - will result in fetching the 64bit descriptor. ??? */ - if (Nkind (gnat_actual) == N_String_Literal) - size = 32; - else if (Nkind (gnat_actual) == N_Identifier) - size = UI_To_Int (Esize (Etype (gnat_actual))); - else if (Nkind (gnat_actual) == N_Explicit_Dereference) - size = UI_To_Int (Esize (Etype (Prefix (gnat_actual)))); - else - size = 0; - - /* If size is unknown, make it POINTER_SIZE */ - if (size == 0) - size = POINTER_SIZE; - - /* If size is 64bits grab the alternate 64bit descriptor. */ - if (size == 64) - TREE_TYPE (parm_decl) = DECL_PARM_ALT (parm_decl); - record_type = TREE_TYPE (TREE_TYPE (parm_decl)); expr = maybe_unconstrained_array (expr); gnat_mark_addressable (expr); diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 8c1759471ef..50af374938a 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -1852,6 +1852,7 @@ MECHANISM_NAME ::= Value | Reference | Descriptor [([Class =>] CLASS_NAME)] +| Short_Descriptor [([Class =>] CLASS_NAME)] CLASS_NAME ::= ubs | ubsb | uba | s | sb | a @end smallexample @@ -1884,6 +1885,9 @@ anonymous access parameter. @cindex OpenVMS @cindex Passing by descriptor Passing by descriptor is supported only on the OpenVMS ports of GNAT@. +The default behavior for Export_Function is to accept either 64bit or +32bit descriptors unless short_descriptor is specified, then only 32bit +descriptors are accepted. @cindex Suppressing external name Special treatment is given if the EXTERNAL is an explicit null @@ -1953,6 +1957,7 @@ MECHANISM_NAME ::= Value | Reference | Descriptor [([Class =>] CLASS_NAME)] +| Short_Descriptor [([Class =>] CLASS_NAME)] CLASS_NAME ::= ubs | ubsb | uba | s | sb | a @end smallexample @@ -1970,6 +1975,9 @@ pragma that specifies the desired foreign convention. @cindex OpenVMS @cindex Passing by descriptor Passing by descriptor is supported only on the OpenVMS ports of GNAT@. +The default behavior for Export_Procedure is to accept either 64bit or +32bit descriptors unless short_descriptor is specified, then only 32bit +descriptors are accepted. @cindex Suppressing external name Special treatment is given if the EXTERNAL is an explicit null @@ -2035,6 +2043,7 @@ MECHANISM_NAME ::= Value | Reference | Descriptor [([Class =>] CLASS_NAME)] +| Short_Descriptor [([Class =>] CLASS_NAME)] CLASS_NAME ::= ubs | ubsb | uba | s | sb | a @end smallexample @@ -2057,6 +2066,9 @@ pragma that specifies the desired foreign convention. @cindex OpenVMS @cindex Passing by descriptor Passing by descriptor is supported only on the OpenVMS ports of GNAT@. +The default behavior for Export_Valued_Procedure is to accept either 64bit or +32bit descriptors unless short_descriptor is specified, then only 32bit +descriptors are accepted. @cindex Suppressing external name Special treatment is given if the EXTERNAL is an explicit null @@ -2483,6 +2495,7 @@ MECHANISM_NAME ::= Value | Reference | Descriptor [([Class =>] CLASS_NAME)] +| Short_Descriptor [([Class =>] CLASS_NAME)] CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca @end smallexample @@ -2516,6 +2529,8 @@ is used. @cindex OpenVMS @cindex Passing by descriptor Passing by descriptor is supported only on the OpenVMS ports of GNAT@. +The default behavior for Import_Function is to pass a 64bit descriptor +unless short_descriptor is specified, then a 32bit descriptor is passed. @code{First_Optional_Parameter} applies only to OpenVMS ports of GNAT@. It specifies that the designated parameter and all following parameters @@ -2589,6 +2604,7 @@ MECHANISM_NAME ::= Value | Reference | Descriptor [([Class =>] CLASS_NAME)] +| Short_Descriptor [([Class =>] CLASS_NAME)] CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca @end smallexample @@ -2635,6 +2651,7 @@ MECHANISM_NAME ::= Value | Reference | Descriptor [([Class =>] CLASS_NAME)] +| Short_Descriptor [([Class =>] CLASS_NAME)] CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca @end smallexample diff --git a/gcc/ada/sem_mech.adb b/gcc/ada/sem_mech.adb index 177a39ca671..87a0d054451 100644 --- a/gcc/ada/sem_mech.adb +++ b/gcc/ada/sem_mech.adb @@ -69,7 +69,7 @@ package body Sem_Mech is ("mechanism for & has already been set", Mech_Name, Ent); end if; - -- MECHANISM_NAME ::= value | reference | descriptor + -- MECHANISM_NAME ::= value | reference | descriptor | short_descriptor if Nkind (Mech_Name) = N_Identifier then if Chars (Mech_Name) = Name_Value then @@ -85,6 +85,11 @@ package body Sem_Mech is Set_Mechanism_With_Checks (Ent, By_Descriptor, Mech_Name); return; + elsif Chars (Mech_Name) = Name_Short_Descriptor then + Check_VMS (Mech_Name); + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor, Mech_Name); + return; + elsif Chars (Mech_Name) = Name_Copy then Error_Msg_N ("bad mechanism name, Value assumed", Mech_Name); @@ -95,7 +100,8 @@ package body Sem_Mech is return; end if; - -- MECHANISM_NAME ::= descriptor (CLASS_NAME) + -- MECHANISM_NAME ::= descriptor (CLASS_NAME) | + -- short_descriptor (CLASS_NAME) -- CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca -- Note: this form is parsed as an indexed component @@ -104,14 +110,16 @@ package body Sem_Mech is Class := First (Expressions (Mech_Name)); if Nkind (Prefix (Mech_Name)) /= N_Identifier - or else Chars (Prefix (Mech_Name)) /= Name_Descriptor + or else not (Chars (Prefix (Mech_Name)) = Name_Descriptor or else + Chars (Prefix (Mech_Name)) = Name_Short_Descriptor) or else Present (Next (Class)) then Bad_Mechanism; return; end if; - -- MECHANISM_NAME ::= descriptor (Class => CLASS_NAME) + -- MECHANISM_NAME ::= descriptor (Class => CLASS_NAME) | + -- short_descriptor (Class => CLASS_NAME) -- CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca -- Note: this form is parsed as a function call @@ -121,7 +129,8 @@ package body Sem_Mech is Param := First (Parameter_Associations (Mech_Name)); if Nkind (Name (Mech_Name)) /= N_Identifier - or else Chars (Name (Mech_Name)) /= Name_Descriptor + or else not (Chars (Name (Mech_Name)) = Name_Descriptor or else + Chars (Name (Mech_Name)) = Name_Short_Descriptor) or else Present (Next (Param)) or else No (Selector_Name (Param)) or else Chars (Selector_Name (Param)) /= Name_Class @@ -145,27 +154,76 @@ package body Sem_Mech is Bad_Class; return; - elsif Chars (Class) = Name_UBS then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_UBS + then Set_Mechanism_With_Checks (Ent, By_Descriptor_UBS, Mech_Name); - elsif Chars (Class) = Name_UBSB then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_UBSB + then Set_Mechanism_With_Checks (Ent, By_Descriptor_UBSB, Mech_Name); - elsif Chars (Class) = Name_UBA then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_UBA + then Set_Mechanism_With_Checks (Ent, By_Descriptor_UBA, Mech_Name); - elsif Chars (Class) = Name_S then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_S + then Set_Mechanism_With_Checks (Ent, By_Descriptor_S, Mech_Name); - elsif Chars (Class) = Name_SB then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_SB + then Set_Mechanism_With_Checks (Ent, By_Descriptor_SB, Mech_Name); - elsif Chars (Class) = Name_A then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_A + then Set_Mechanism_With_Checks (Ent, By_Descriptor_A, Mech_Name); - elsif Chars (Class) = Name_NCA then + elsif Chars (Name (Mech_Name)) = Name_Descriptor + and then Chars (Class) = Name_NCA + then Set_Mechanism_With_Checks (Ent, By_Descriptor_NCA, Mech_Name); + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_UBS + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_UBS, Mech_Name); + + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_UBSB + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_UBSB, Mech_Name); + + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_UBA + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_UBA, Mech_Name); + + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_S + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_S, Mech_Name); + + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_SB + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_SB, Mech_Name); + + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_A + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_A, Mech_Name); + + elsif Chars (Name (Mech_Name)) = Name_Short_Descriptor + and then Chars (Class) = Name_NCA + then + Set_Mechanism_With_Checks (Ent, By_Short_Descriptor_NCA, Mech_Name); + else Bad_Class; return; diff --git a/gcc/ada/sem_mech.ads b/gcc/ada/sem_mech.ads index 1673a671b0e..93f6080f1f4 100644 --- a/gcc/ada/sem_mech.ads +++ b/gcc/ada/sem_mech.ads @@ -95,6 +95,14 @@ package Sem_Mech is By_Descriptor_SB : constant Mechanism_Type := -8; By_Descriptor_A : constant Mechanism_Type := -9; By_Descriptor_NCA : constant Mechanism_Type := -10; + By_Short_Descriptor : constant Mechanism_Type := -11; + By_Short_Descriptor_UBS : constant Mechanism_Type := -12; + By_Short_Descriptor_UBSB : constant Mechanism_Type := -13; + By_Short_Descriptor_UBA : constant Mechanism_Type := -14; + By_Short_Descriptor_S : constant Mechanism_Type := -15; + By_Short_Descriptor_SB : constant Mechanism_Type := -16; + By_Short_Descriptor_A : constant Mechanism_Type := -17; + By_Short_Descriptor_NCA : constant Mechanism_Type := -18; -- These values are used only in OpenVMS ports of GNAT. Pass by descriptor -- is forced, as described in the OpenVMS ABI. The suffix indicates the -- descriptor type: @@ -113,7 +121,7 @@ package Sem_Mech is -- type based on the Ada type in accordance with the OpenVMS ABI. subtype Descriptor_Codes is Mechanism_Type - range By_Descriptor_NCA .. By_Descriptor; + range By_Short_Descriptor_NCA .. By_Descriptor; -- Subtype including all descriptor mechanisms -- All the above special values are non-positive. Positive values for diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 8d162e6b37b..803f054ce4f 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -4622,6 +4622,7 @@ package body Sem_Prag is procedure Set_Mechanism_Value (Ent : Entity_Id; Mech_Name : Node_Id) is Class : Node_Id; Param : Node_Id; + Mech_Name_Id : Name_Id; procedure Bad_Class; -- Signal bad descriptor class name @@ -4655,7 +4656,8 @@ package body Sem_Prag is ("mechanism for & has already been set", Mech_Name, Ent); end if; - -- MECHANISM_NAME ::= value | reference | descriptor + -- MECHANISM_NAME ::= value | reference | descriptor | + -- short_descriptor if Nkind (Mech_Name) = N_Identifier then if Chars (Mech_Name) = Name_Value then @@ -4671,6 +4673,11 @@ package body Sem_Prag is Set_Mechanism (Ent, By_Descriptor); return; + elsif Chars (Mech_Name) = Name_Short_Descriptor then + Check_VMS (Mech_Name); + Set_Mechanism (Ent, By_Short_Descriptor); + return; + elsif Chars (Mech_Name) = Name_Copy then Error_Pragma_Arg ("bad mechanism name, Value assumed", Mech_Name); @@ -4679,22 +4686,28 @@ package body Sem_Prag is Bad_Mechanism; end if; - -- MECHANISM_NAME ::= descriptor (CLASS_NAME) + -- MECHANISM_NAME ::= descriptor (CLASS_NAME) | + -- short_descriptor (CLASS_NAME) -- CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca -- Note: this form is parsed as an indexed component elsif Nkind (Mech_Name) = N_Indexed_Component then + Class := First (Expressions (Mech_Name)); if Nkind (Prefix (Mech_Name)) /= N_Identifier - or else Chars (Prefix (Mech_Name)) /= Name_Descriptor - or else Present (Next (Class)) + or else not (Chars (Prefix (Mech_Name)) = Name_Descriptor or else + Chars (Prefix (Mech_Name)) = Name_Short_Descriptor) + or else Present (Next (Class)) then Bad_Mechanism; + else + Mech_Name_Id := Chars (Prefix (Mech_Name)); end if; - -- MECHANISM_NAME ::= descriptor (Class => CLASS_NAME) + -- MECHANISM_NAME ::= descriptor (Class => CLASS_NAME) | + -- short_descriptor (Class => CLASS_NAME) -- CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca -- Note: this form is parsed as a function call @@ -4704,7 +4717,8 @@ package body Sem_Prag is Param := First (Parameter_Associations (Mech_Name)); if Nkind (Name (Mech_Name)) /= N_Identifier - or else Chars (Name (Mech_Name)) /= Name_Descriptor + or else not (Chars (Name (Mech_Name)) = Name_Descriptor or else + Chars (Name (Mech_Name)) = Name_Short_Descriptor) or else Present (Next (Param)) or else No (Selector_Name (Param)) or else Chars (Selector_Name (Param)) /= Name_Class @@ -4712,6 +4726,7 @@ package body Sem_Prag is Bad_Mechanism; else Class := Explicit_Actual_Parameter (Param); + Mech_Name_Id := Chars (Name (Mech_Name)); end if; else @@ -4725,27 +4740,76 @@ package body Sem_Prag is if Nkind (Class) /= N_Identifier then Bad_Class; - elsif Chars (Class) = Name_UBS then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_UBS + then Set_Mechanism (Ent, By_Descriptor_UBS); - elsif Chars (Class) = Name_UBSB then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_UBSB + then Set_Mechanism (Ent, By_Descriptor_UBSB); - elsif Chars (Class) = Name_UBA then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_UBA + then Set_Mechanism (Ent, By_Descriptor_UBA); - elsif Chars (Class) = Name_S then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_S + then Set_Mechanism (Ent, By_Descriptor_S); - elsif Chars (Class) = Name_SB then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_SB + then Set_Mechanism (Ent, By_Descriptor_SB); - elsif Chars (Class) = Name_A then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_A + then Set_Mechanism (Ent, By_Descriptor_A); - elsif Chars (Class) = Name_NCA then + elsif Mech_Name_Id = Name_Descriptor + and then Chars (Class) = Name_NCA + then Set_Mechanism (Ent, By_Descriptor_NCA); + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_UBS + then + Set_Mechanism (Ent, By_Short_Descriptor_UBS); + + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_UBSB + then + Set_Mechanism (Ent, By_Short_Descriptor_UBSB); + + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_UBA + then + Set_Mechanism (Ent, By_Short_Descriptor_UBA); + + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_S + then + Set_Mechanism (Ent, By_Short_Descriptor_S); + + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_SB + then + Set_Mechanism (Ent, By_Short_Descriptor_SB); + + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_A + then + Set_Mechanism (Ent, By_Short_Descriptor_A); + + elsif Mech_Name_Id = Name_Short_Descriptor + and then Chars (Class) = Name_NCA + then + Set_Mechanism (Ent, By_Short_Descriptor_NCA); + else Bad_Class; end if; diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb index e97ef15c19c..d23edf9ad6b 100644 --- a/gcc/ada/snames.adb +++ b/gcc/ada/snames.adb @@ -415,6 +415,7 @@ package body Snames is "secondary_stack_size#" & "section#" & "semaphore#" & + "short_descriptor#" & "simple_barriers#" & "spec_file_name#" & "state#" & diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads index 67f35d0bcdb..5a47de55c89 100644 --- a/gcc/ada/snames.ads +++ b/gcc/ada/snames.ads @@ -643,28 +643,29 @@ package Snames is Name_Secondary_Stack_Size : constant Name_Id := N + 354; Name_Section : constant Name_Id := N + 355; Name_Semaphore : constant Name_Id := N + 356; - Name_Simple_Barriers : constant Name_Id := N + 357; - Name_Spec_File_Name : constant Name_Id := N + 358; - Name_State : constant Name_Id := N + 359; - Name_Static : constant Name_Id := N + 360; - Name_Stack_Size : constant Name_Id := N + 361; - Name_Subunit_File_Name : constant Name_Id := N + 362; - Name_Task_Stack_Size_Default : constant Name_Id := N + 363; - Name_Task_Type : constant Name_Id := N + 364; - Name_Time_Slicing_Enabled : constant Name_Id := N + 365; - Name_Top_Guard : constant Name_Id := N + 366; - Name_UBA : constant Name_Id := N + 367; - Name_UBS : constant Name_Id := N + 368; - Name_UBSB : constant Name_Id := N + 369; - Name_Unit_Name : constant Name_Id := N + 370; - Name_Unknown : constant Name_Id := N + 371; - Name_Unrestricted : constant Name_Id := N + 372; - Name_Uppercase : constant Name_Id := N + 373; - Name_User : constant Name_Id := N + 374; - Name_VAX_Float : constant Name_Id := N + 375; - Name_VMS : constant Name_Id := N + 376; - Name_Vtable_Ptr : constant Name_Id := N + 377; - Name_Working_Storage : constant Name_Id := N + 378; + Name_Short_Descriptor : constant Name_Id := N + 357; + Name_Simple_Barriers : constant Name_Id := N + 358; + Name_Spec_File_Name : constant Name_Id := N + 359; + Name_State : constant Name_Id := N + 360; + Name_Static : constant Name_Id := N + 361; + Name_Stack_Size : constant Name_Id := N + 362; + Name_Subunit_File_Name : constant Name_Id := N + 363; + Name_Task_Stack_Size_Default : constant Name_Id := N + 364; + Name_Task_Type : constant Name_Id := N + 365; + Name_Time_Slicing_Enabled : constant Name_Id := N + 366; + Name_Top_Guard : constant Name_Id := N + 367; + Name_UBA : constant Name_Id := N + 368; + Name_UBS : constant Name_Id := N + 369; + Name_UBSB : constant Name_Id := N + 370; + Name_Unit_Name : constant Name_Id := N + 371; + Name_Unknown : constant Name_Id := N + 372; + Name_Unrestricted : constant Name_Id := N + 373; + Name_Uppercase : constant Name_Id := N + 374; + Name_User : constant Name_Id := N + 375; + Name_VAX_Float : constant Name_Id := N + 376; + Name_VMS : constant Name_Id := N + 377; + Name_Vtable_Ptr : constant Name_Id := N + 378; + Name_Working_Storage : constant Name_Id := N + 379; -- Names of recognized attributes. The entries with the comment "Ada 83" -- are attributes that are defined in Ada 83, but not in Ada 95. These @@ -678,175 +679,175 @@ package Snames is -- The entries marked VMS are recognized only in OpenVMS implementations -- of GNAT, and are treated as illegal in all other contexts. - First_Attribute_Name : constant Name_Id := N + 379; - Name_Abort_Signal : constant Name_Id := N + 379; -- GNAT - Name_Access : constant Name_Id := N + 380; - Name_Address : constant Name_Id := N + 381; - Name_Address_Size : constant Name_Id := N + 382; -- GNAT - Name_Aft : constant Name_Id := N + 383; - Name_Alignment : constant Name_Id := N + 384; - Name_Asm_Input : constant Name_Id := N + 385; -- GNAT - Name_Asm_Output : constant Name_Id := N + 386; -- GNAT - Name_AST_Entry : constant Name_Id := N + 387; -- VMS - Name_Bit : constant Name_Id := N + 388; -- GNAT - Name_Bit_Order : constant Name_Id := N + 389; - Name_Bit_Position : constant Name_Id := N + 390; -- GNAT - Name_Body_Version : constant Name_Id := N + 391; - Name_Callable : constant Name_Id := N + 392; - Name_Caller : constant Name_Id := N + 393; - Name_Code_Address : constant Name_Id := N + 394; -- GNAT - Name_Component_Size : constant Name_Id := N + 395; - Name_Compose : constant Name_Id := N + 396; - Name_Constrained : constant Name_Id := N + 397; - Name_Count : constant Name_Id := N + 398; - Name_Default_Bit_Order : constant Name_Id := N + 399; -- GNAT - Name_Definite : constant Name_Id := N + 400; - Name_Delta : constant Name_Id := N + 401; - Name_Denorm : constant Name_Id := N + 402; - Name_Digits : constant Name_Id := N + 403; - Name_Elaborated : constant Name_Id := N + 404; -- GNAT - Name_Emax : constant Name_Id := N + 405; -- Ada 83 - Name_Enabled : constant Name_Id := N + 406; -- GNAT - Name_Enum_Rep : constant Name_Id := N + 407; -- GNAT - Name_Enum_Val : constant Name_Id := N + 408; -- GNAT - Name_Epsilon : constant Name_Id := N + 409; -- Ada 83 - Name_Exponent : constant Name_Id := N + 410; - Name_External_Tag : constant Name_Id := N + 411; - Name_Fast_Math : constant Name_Id := N + 412; -- GNAT - Name_First : constant Name_Id := N + 413; - Name_First_Bit : constant Name_Id := N + 414; - Name_Fixed_Value : constant Name_Id := N + 415; -- GNAT - Name_Fore : constant Name_Id := N + 416; - Name_Has_Access_Values : constant Name_Id := N + 417; -- GNAT - Name_Has_Discriminants : constant Name_Id := N + 418; -- GNAT - Name_Has_Tagged_Values : constant Name_Id := N + 419; -- GNAT - Name_Identity : constant Name_Id := N + 420; - Name_Img : constant Name_Id := N + 421; -- GNAT - Name_Integer_Value : constant Name_Id := N + 422; -- GNAT - Name_Invalid_Value : constant Name_Id := N + 423; -- GNAT - Name_Large : constant Name_Id := N + 424; -- Ada 83 - Name_Last : constant Name_Id := N + 425; - Name_Last_Bit : constant Name_Id := N + 426; - Name_Leading_Part : constant Name_Id := N + 427; - Name_Length : constant Name_Id := N + 428; - Name_Machine_Emax : constant Name_Id := N + 429; - Name_Machine_Emin : constant Name_Id := N + 430; - Name_Machine_Mantissa : constant Name_Id := N + 431; - Name_Machine_Overflows : constant Name_Id := N + 432; - Name_Machine_Radix : constant Name_Id := N + 433; - Name_Machine_Rounding : constant Name_Id := N + 434; -- Ada 05 - Name_Machine_Rounds : constant Name_Id := N + 435; - Name_Machine_Size : constant Name_Id := N + 436; -- GNAT - Name_Mantissa : constant Name_Id := N + 437; -- Ada 83 - Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 438; - Name_Maximum_Alignment : constant Name_Id := N + 439; -- GNAT - Name_Mechanism_Code : constant Name_Id := N + 440; -- GNAT - Name_Mod : constant Name_Id := N + 441; -- Ada 05 - Name_Model_Emin : constant Name_Id := N + 442; - Name_Model_Epsilon : constant Name_Id := N + 443; - Name_Model_Mantissa : constant Name_Id := N + 444; - Name_Model_Small : constant Name_Id := N + 445; - Name_Modulus : constant Name_Id := N + 446; - Name_Null_Parameter : constant Name_Id := N + 447; -- GNAT - Name_Object_Size : constant Name_Id := N + 448; -- GNAT - Name_Old : constant Name_Id := N + 449; -- GNAT - Name_Partition_ID : constant Name_Id := N + 450; - Name_Passed_By_Reference : constant Name_Id := N + 451; -- GNAT - Name_Pool_Address : constant Name_Id := N + 452; - Name_Pos : constant Name_Id := N + 453; - Name_Position : constant Name_Id := N + 454; - Name_Priority : constant Name_Id := N + 455; -- Ada 05 - Name_Range : constant Name_Id := N + 456; - Name_Range_Length : constant Name_Id := N + 457; -- GNAT - Name_Result : constant Name_Id := N + 458; -- GNAT - Name_Round : constant Name_Id := N + 459; - Name_Safe_Emax : constant Name_Id := N + 460; -- Ada 83 - Name_Safe_First : constant Name_Id := N + 461; - Name_Safe_Large : constant Name_Id := N + 462; -- Ada 83 - Name_Safe_Last : constant Name_Id := N + 463; - Name_Safe_Small : constant Name_Id := N + 464; -- Ada 83 - Name_Scale : constant Name_Id := N + 465; - Name_Scaling : constant Name_Id := N + 466; - Name_Signed_Zeros : constant Name_Id := N + 467; - Name_Size : constant Name_Id := N + 468; - Name_Small : constant Name_Id := N + 469; - Name_Storage_Size : constant Name_Id := N + 470; - Name_Storage_Unit : constant Name_Id := N + 471; -- GNAT - Name_Stream_Size : constant Name_Id := N + 472; -- Ada 05 - Name_Tag : constant Name_Id := N + 473; - Name_Target_Name : constant Name_Id := N + 474; -- GNAT - Name_Terminated : constant Name_Id := N + 475; - Name_To_Address : constant Name_Id := N + 476; -- GNAT - Name_Type_Class : constant Name_Id := N + 477; -- GNAT - Name_UET_Address : constant Name_Id := N + 478; -- GNAT - Name_Unbiased_Rounding : constant Name_Id := N + 479; - Name_Unchecked_Access : constant Name_Id := N + 480; - Name_Unconstrained_Array : constant Name_Id := N + 481; - Name_Universal_Literal_String : constant Name_Id := N + 482; -- GNAT - Name_Unrestricted_Access : constant Name_Id := N + 483; -- GNAT - Name_VADS_Size : constant Name_Id := N + 484; -- GNAT - Name_Val : constant Name_Id := N + 485; - Name_Valid : constant Name_Id := N + 486; - Name_Value_Size : constant Name_Id := N + 487; -- GNAT - Name_Version : constant Name_Id := N + 488; - Name_Wchar_T_Size : constant Name_Id := N + 489; -- GNAT - Name_Wide_Wide_Width : constant Name_Id := N + 490; -- Ada 05 - Name_Wide_Width : constant Name_Id := N + 491; - Name_Width : constant Name_Id := N + 492; - Name_Word_Size : constant Name_Id := N + 493; -- GNAT + First_Attribute_Name : constant Name_Id := N + 380; + Name_Abort_Signal : constant Name_Id := N + 380; -- GNAT + Name_Access : constant Name_Id := N + 381; + Name_Address : constant Name_Id := N + 382; + Name_Address_Size : constant Name_Id := N + 383; -- GNAT + Name_Aft : constant Name_Id := N + 384; + Name_Alignment : constant Name_Id := N + 385; + Name_Asm_Input : constant Name_Id := N + 386; -- GNAT + Name_Asm_Output : constant Name_Id := N + 387; -- GNAT + Name_AST_Entry : constant Name_Id := N + 388; -- VMS + Name_Bit : constant Name_Id := N + 389; -- GNAT + Name_Bit_Order : constant Name_Id := N + 390; + Name_Bit_Position : constant Name_Id := N + 391; -- GNAT + Name_Body_Version : constant Name_Id := N + 392; + Name_Callable : constant Name_Id := N + 393; + Name_Caller : constant Name_Id := N + 394; + Name_Code_Address : constant Name_Id := N + 395; -- GNAT + Name_Component_Size : constant Name_Id := N + 396; + Name_Compose : constant Name_Id := N + 397; + Name_Constrained : constant Name_Id := N + 398; + Name_Count : constant Name_Id := N + 399; + Name_Default_Bit_Order : constant Name_Id := N + 400; -- GNAT + Name_Definite : constant Name_Id := N + 401; + Name_Delta : constant Name_Id := N + 402; + Name_Denorm : constant Name_Id := N + 403; + Name_Digits : constant Name_Id := N + 404; + Name_Elaborated : constant Name_Id := N + 405; -- GNAT + Name_Emax : constant Name_Id := N + 406; -- Ada 83 + Name_Enabled : constant Name_Id := N + 407; -- GNAT + Name_Enum_Rep : constant Name_Id := N + 408; -- GNAT + Name_Enum_Val : constant Name_Id := N + 409; -- GNAT + Name_Epsilon : constant Name_Id := N + 410; -- Ada 83 + Name_Exponent : constant Name_Id := N + 411; + Name_External_Tag : constant Name_Id := N + 412; + Name_Fast_Math : constant Name_Id := N + 413; -- GNAT + Name_First : constant Name_Id := N + 414; + Name_First_Bit : constant Name_Id := N + 415; + Name_Fixed_Value : constant Name_Id := N + 416; -- GNAT + Name_Fore : constant Name_Id := N + 417; + Name_Has_Access_Values : constant Name_Id := N + 418; -- GNAT + Name_Has_Discriminants : constant Name_Id := N + 419; -- GNAT + Name_Has_Tagged_Values : constant Name_Id := N + 420; -- GNAT + Name_Identity : constant Name_Id := N + 421; + Name_Img : constant Name_Id := N + 422; -- GNAT + Name_Integer_Value : constant Name_Id := N + 423; -- GNAT + Name_Invalid_Value : constant Name_Id := N + 424; -- GNAT + Name_Large : constant Name_Id := N + 425; -- Ada 83 + Name_Last : constant Name_Id := N + 426; + Name_Last_Bit : constant Name_Id := N + 427; + Name_Leading_Part : constant Name_Id := N + 428; + Name_Length : constant Name_Id := N + 429; + Name_Machine_Emax : constant Name_Id := N + 430; + Name_Machine_Emin : constant Name_Id := N + 431; + Name_Machine_Mantissa : constant Name_Id := N + 432; + Name_Machine_Overflows : constant Name_Id := N + 433; + Name_Machine_Radix : constant Name_Id := N + 434; + Name_Machine_Rounding : constant Name_Id := N + 435; -- Ada 05 + Name_Machine_Rounds : constant Name_Id := N + 436; + Name_Machine_Size : constant Name_Id := N + 437; -- GNAT + Name_Mantissa : constant Name_Id := N + 438; -- Ada 83 + Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 439; + Name_Maximum_Alignment : constant Name_Id := N + 440; -- GNAT + Name_Mechanism_Code : constant Name_Id := N + 441; -- GNAT + Name_Mod : constant Name_Id := N + 442; -- Ada 05 + Name_Model_Emin : constant Name_Id := N + 443; + Name_Model_Epsilon : constant Name_Id := N + 444; + Name_Model_Mantissa : constant Name_Id := N + 445; + Name_Model_Small : constant Name_Id := N + 446; + Name_Modulus : constant Name_Id := N + 447; + Name_Null_Parameter : constant Name_Id := N + 448; -- GNAT + Name_Object_Size : constant Name_Id := N + 449; -- GNAT + Name_Old : constant Name_Id := N + 450; -- GNAT + Name_Partition_ID : constant Name_Id := N + 451; + Name_Passed_By_Reference : constant Name_Id := N + 452; -- GNAT + Name_Pool_Address : constant Name_Id := N + 453; + Name_Pos : constant Name_Id := N + 454; + Name_Position : constant Name_Id := N + 455; + Name_Priority : constant Name_Id := N + 456; -- Ada 05 + Name_Range : constant Name_Id := N + 457; + Name_Range_Length : constant Name_Id := N + 458; -- GNAT + Name_Result : constant Name_Id := N + 459; -- GNAT + Name_Round : constant Name_Id := N + 460; + Name_Safe_Emax : constant Name_Id := N + 461; -- Ada 83 + Name_Safe_First : constant Name_Id := N + 462; + Name_Safe_Large : constant Name_Id := N + 463; -- Ada 83 + Name_Safe_Last : constant Name_Id := N + 464; + Name_Safe_Small : constant Name_Id := N + 465; -- Ada 83 + Name_Scale : constant Name_Id := N + 466; + Name_Scaling : constant Name_Id := N + 467; + Name_Signed_Zeros : constant Name_Id := N + 468; + Name_Size : constant Name_Id := N + 469; + Name_Small : constant Name_Id := N + 470; + Name_Storage_Size : constant Name_Id := N + 471; + Name_Storage_Unit : constant Name_Id := N + 472; -- GNAT + Name_Stream_Size : constant Name_Id := N + 473; -- Ada 05 + Name_Tag : constant Name_Id := N + 474; + Name_Target_Name : constant Name_Id := N + 475; -- GNAT + Name_Terminated : constant Name_Id := N + 476; + Name_To_Address : constant Name_Id := N + 477; -- GNAT + Name_Type_Class : constant Name_Id := N + 478; -- GNAT + Name_UET_Address : constant Name_Id := N + 479; -- GNAT + Name_Unbiased_Rounding : constant Name_Id := N + 480; + Name_Unchecked_Access : constant Name_Id := N + 481; + Name_Unconstrained_Array : constant Name_Id := N + 482; + Name_Universal_Literal_String : constant Name_Id := N + 483; -- GNAT + Name_Unrestricted_Access : constant Name_Id := N + 484; -- GNAT + Name_VADS_Size : constant Name_Id := N + 485; -- GNAT + Name_Val : constant Name_Id := N + 486; + Name_Valid : constant Name_Id := N + 487; + Name_Value_Size : constant Name_Id := N + 488; -- GNAT + Name_Version : constant Name_Id := N + 489; + Name_Wchar_T_Size : constant Name_Id := N + 490; -- GNAT + Name_Wide_Wide_Width : constant Name_Id := N + 491; -- Ada 05 + Name_Wide_Width : constant Name_Id := N + 492; + Name_Width : constant Name_Id := N + 493; + Name_Word_Size : constant Name_Id := N + 494; -- GNAT -- Attributes that designate attributes returning renamable functions, -- i.e. functions that return other than a universal value and that -- have non-universal arguments. - First_Renamable_Function_Attribute : constant Name_Id := N + 494; - Name_Adjacent : constant Name_Id := N + 494; - Name_Ceiling : constant Name_Id := N + 495; - Name_Copy_Sign : constant Name_Id := N + 496; - Name_Floor : constant Name_Id := N + 497; - Name_Fraction : constant Name_Id := N + 498; - Name_Image : constant Name_Id := N + 499; - Name_Input : constant Name_Id := N + 500; - Name_Machine : constant Name_Id := N + 501; - Name_Max : constant Name_Id := N + 502; - Name_Min : constant Name_Id := N + 503; - Name_Model : constant Name_Id := N + 504; - Name_Pred : constant Name_Id := N + 505; - Name_Remainder : constant Name_Id := N + 506; - Name_Rounding : constant Name_Id := N + 507; - Name_Succ : constant Name_Id := N + 508; - Name_Truncation : constant Name_Id := N + 509; - Name_Value : constant Name_Id := N + 510; - Name_Wide_Image : constant Name_Id := N + 511; - Name_Wide_Wide_Image : constant Name_Id := N + 512; - Name_Wide_Value : constant Name_Id := N + 513; - Name_Wide_Wide_Value : constant Name_Id := N + 514; - Last_Renamable_Function_Attribute : constant Name_Id := N + 514; + First_Renamable_Function_Attribute : constant Name_Id := N + 495; + Name_Adjacent : constant Name_Id := N + 495; + Name_Ceiling : constant Name_Id := N + 496; + Name_Copy_Sign : constant Name_Id := N + 497; + Name_Floor : constant Name_Id := N + 498; + Name_Fraction : constant Name_Id := N + 499; + Name_Image : constant Name_Id := N + 500; + Name_Input : constant Name_Id := N + 501; + Name_Machine : constant Name_Id := N + 502; + Name_Max : constant Name_Id := N + 503; + Name_Min : constant Name_Id := N + 504; + Name_Model : constant Name_Id := N + 505; + Name_Pred : constant Name_Id := N + 506; + Name_Remainder : constant Name_Id := N + 507; + Name_Rounding : constant Name_Id := N + 508; + Name_Succ : constant Name_Id := N + 509; + Name_Truncation : constant Name_Id := N + 510; + Name_Value : constant Name_Id := N + 511; + Name_Wide_Image : constant Name_Id := N + 512; + Name_Wide_Wide_Image : constant Name_Id := N + 513; + Name_Wide_Value : constant Name_Id := N + 514; + Name_Wide_Wide_Value : constant Name_Id := N + 515; + Last_Renamable_Function_Attribute : constant Name_Id := N + 515; -- Attributes that designate procedures - First_Procedure_Attribute : constant Name_Id := N + 515; - Name_Output : constant Name_Id := N + 515; - Name_Read : constant Name_Id := N + 516; - Name_Write : constant Name_Id := N + 517; - Last_Procedure_Attribute : constant Name_Id := N + 517; + First_Procedure_Attribute : constant Name_Id := N + 516; + Name_Output : constant Name_Id := N + 516; + Name_Read : constant Name_Id := N + 517; + Name_Write : constant Name_Id := N + 518; + Last_Procedure_Attribute : constant Name_Id := N + 518; -- Remaining attributes are ones that return entities - First_Entity_Attribute_Name : constant Name_Id := N + 518; - Name_Elab_Body : constant Name_Id := N + 518; -- GNAT - Name_Elab_Spec : constant Name_Id := N + 519; -- GNAT - Name_Storage_Pool : constant Name_Id := N + 520; + First_Entity_Attribute_Name : constant Name_Id := N + 519; + Name_Elab_Body : constant Name_Id := N + 519; -- GNAT + Name_Elab_Spec : constant Name_Id := N + 520; -- GNAT + Name_Storage_Pool : constant Name_Id := N + 521; -- These attributes are the ones that return types - First_Type_Attribute_Name : constant Name_Id := N + 521; - Name_Base : constant Name_Id := N + 521; - Name_Class : constant Name_Id := N + 522; - Name_Stub_Type : constant Name_Id := N + 523; - Last_Type_Attribute_Name : constant Name_Id := N + 523; - Last_Entity_Attribute_Name : constant Name_Id := N + 523; - Last_Attribute_Name : constant Name_Id := N + 523; + First_Type_Attribute_Name : constant Name_Id := N + 522; + Name_Base : constant Name_Id := N + 522; + Name_Class : constant Name_Id := N + 523; + Name_Stub_Type : constant Name_Id := N + 524; + Last_Type_Attribute_Name : constant Name_Id := N + 524; + Last_Entity_Attribute_Name : constant Name_Id := N + 524; + Last_Attribute_Name : constant Name_Id := N + 524; -- Names of recognized locking policy identifiers @@ -854,10 +855,10 @@ package Snames is -- name (e.g. C for Ceiling_Locking). If new policy names are added, -- the first character must be distinct. - First_Locking_Policy_Name : constant Name_Id := N + 524; - Name_Ceiling_Locking : constant Name_Id := N + 524; - Name_Inheritance_Locking : constant Name_Id := N + 525; - Last_Locking_Policy_Name : constant Name_Id := N + 525; + First_Locking_Policy_Name : constant Name_Id := N + 525; + Name_Ceiling_Locking : constant Name_Id := N + 525; + Name_Inheritance_Locking : constant Name_Id := N + 526; + Last_Locking_Policy_Name : constant Name_Id := N + 526; -- Names of recognized queuing policy identifiers @@ -865,10 +866,10 @@ package Snames is -- name (e.g. F for FIFO_Queuing). If new policy names are added, -- the first character must be distinct. - First_Queuing_Policy_Name : constant Name_Id := N + 526; - Name_FIFO_Queuing : constant Name_Id := N + 526; - Name_Priority_Queuing : constant Name_Id := N + 527; - Last_Queuing_Policy_Name : constant Name_Id := N + 527; + First_Queuing_Policy_Name : constant Name_Id := N + 527; + Name_FIFO_Queuing : constant Name_Id := N + 527; + Name_Priority_Queuing : constant Name_Id := N + 528; + Last_Queuing_Policy_Name : constant Name_Id := N + 528; -- Names of recognized task dispatching policy identifiers @@ -876,283 +877,283 @@ package Snames is -- name (e.g. F for FIFO_Within_Priorities). If new policy names -- are added, the first character must be distinct. - First_Task_Dispatching_Policy_Name : constant Name_Id := N + 528; - Name_EDF_Across_Priorities : constant Name_Id := N + 528; - Name_FIFO_Within_Priorities : constant Name_Id := N + 529; - Name_Non_Preemptive_Within_Priorities : constant Name_Id := N + 530; - Name_Round_Robin_Within_Priorities : constant Name_Id := N + 531; - Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 531; + First_Task_Dispatching_Policy_Name : constant Name_Id := N + 529; + Name_EDF_Across_Priorities : constant Name_Id := N + 529; + Name_FIFO_Within_Priorities : constant Name_Id := N + 530; + Name_Non_Preemptive_Within_Priorities : constant Name_Id := N + 531; + Name_Round_Robin_Within_Priorities : constant Name_Id := N + 532; + Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 532; -- Names of recognized checks for pragma Suppress - First_Check_Name : constant Name_Id := N + 532; - Name_Access_Check : constant Name_Id := N + 532; - Name_Accessibility_Check : constant Name_Id := N + 533; - Name_Alignment_Check : constant Name_Id := N + 534; -- GNAT - Name_Discriminant_Check : constant Name_Id := N + 535; - Name_Division_Check : constant Name_Id := N + 536; - Name_Elaboration_Check : constant Name_Id := N + 537; - Name_Index_Check : constant Name_Id := N + 538; - Name_Length_Check : constant Name_Id := N + 539; - Name_Overflow_Check : constant Name_Id := N + 540; - Name_Range_Check : constant Name_Id := N + 541; - Name_Storage_Check : constant Name_Id := N + 542; - Name_Tag_Check : constant Name_Id := N + 543; - Name_Validity_Check : constant Name_Id := N + 544; -- GNAT - Name_All_Checks : constant Name_Id := N + 545; - Last_Check_Name : constant Name_Id := N + 545; + First_Check_Name : constant Name_Id := N + 533; + Name_Access_Check : constant Name_Id := N + 533; + Name_Accessibility_Check : constant Name_Id := N + 534; + Name_Alignment_Check : constant Name_Id := N + 535; -- GNAT + Name_Discriminant_Check : constant Name_Id := N + 536; + Name_Division_Check : constant Name_Id := N + 537; + Name_Elaboration_Check : constant Name_Id := N + 538; + Name_Index_Check : constant Name_Id := N + 539; + Name_Length_Check : constant Name_Id := N + 540; + Name_Overflow_Check : constant Name_Id := N + 541; + Name_Range_Check : constant Name_Id := N + 542; + Name_Storage_Check : constant Name_Id := N + 543; + Name_Tag_Check : constant Name_Id := N + 544; + Name_Validity_Check : constant Name_Id := N + 545; -- GNAT + Name_All_Checks : constant Name_Id := N + 546; + Last_Check_Name : constant Name_Id := N + 546; -- Names corresponding to reserved keywords, excluding those already -- declared in the attribute list (Access, Delta, Digits, Mod, Range). - Name_Abort : constant Name_Id := N + 546; - Name_Abs : constant Name_Id := N + 547; - Name_Accept : constant Name_Id := N + 548; - Name_And : constant Name_Id := N + 549; - Name_All : constant Name_Id := N + 550; - Name_Array : constant Name_Id := N + 551; - Name_At : constant Name_Id := N + 552; - Name_Begin : constant Name_Id := N + 553; - Name_Body : constant Name_Id := N + 554; - Name_Case : constant Name_Id := N + 555; - Name_Constant : constant Name_Id := N + 556; - Name_Declare : constant Name_Id := N + 557; - Name_Delay : constant Name_Id := N + 558; - Name_Do : constant Name_Id := N + 559; - Name_Else : constant Name_Id := N + 560; - Name_Elsif : constant Name_Id := N + 561; - Name_End : constant Name_Id := N + 562; - Name_Entry : constant Name_Id := N + 563; - Name_Exception : constant Name_Id := N + 564; - Name_Exit : constant Name_Id := N + 565; - Name_For : constant Name_Id := N + 566; - Name_Function : constant Name_Id := N + 567; - Name_Generic : constant Name_Id := N + 568; - Name_Goto : constant Name_Id := N + 569; - Name_If : constant Name_Id := N + 570; - Name_In : constant Name_Id := N + 571; - Name_Is : constant Name_Id := N + 572; - Name_Limited : constant Name_Id := N + 573; - Name_Loop : constant Name_Id := N + 574; - Name_New : constant Name_Id := N + 575; - Name_Not : constant Name_Id := N + 576; - Name_Null : constant Name_Id := N + 577; - Name_Of : constant Name_Id := N + 578; - Name_Or : constant Name_Id := N + 579; - Name_Others : constant Name_Id := N + 580; - Name_Out : constant Name_Id := N + 581; - Name_Package : constant Name_Id := N + 582; - Name_Pragma : constant Name_Id := N + 583; - Name_Private : constant Name_Id := N + 584; - Name_Procedure : constant Name_Id := N + 585; - Name_Raise : constant Name_Id := N + 586; - Name_Record : constant Name_Id := N + 587; - Name_Rem : constant Name_Id := N + 588; - Name_Renames : constant Name_Id := N + 589; - Name_Return : constant Name_Id := N + 590; - Name_Reverse : constant Name_Id := N + 591; - Name_Select : constant Name_Id := N + 592; - Name_Separate : constant Name_Id := N + 593; - Name_Subtype : constant Name_Id := N + 594; - Name_Task : constant Name_Id := N + 595; - Name_Terminate : constant Name_Id := N + 596; - Name_Then : constant Name_Id := N + 597; - Name_Type : constant Name_Id := N + 598; - Name_Use : constant Name_Id := N + 599; - Name_When : constant Name_Id := N + 600; - Name_While : constant Name_Id := N + 601; - Name_With : constant Name_Id := N + 602; - Name_Xor : constant Name_Id := N + 603; + Name_Abort : constant Name_Id := N + 547; + Name_Abs : constant Name_Id := N + 548; + Name_Accept : constant Name_Id := N + 549; + Name_And : constant Name_Id := N + 550; + Name_All : constant Name_Id := N + 551; + Name_Array : constant Name_Id := N + 552; + Name_At : constant Name_Id := N + 553; + Name_Begin : constant Name_Id := N + 554; + Name_Body : constant Name_Id := N + 555; + Name_Case : constant Name_Id := N + 556; + Name_Constant : constant Name_Id := N + 557; + Name_Declare : constant Name_Id := N + 558; + Name_Delay : constant Name_Id := N + 559; + Name_Do : constant Name_Id := N + 560; + Name_Else : constant Name_Id := N + 561; + Name_Elsif : constant Name_Id := N + 562; + Name_End : constant Name_Id := N + 563; + Name_Entry : constant Name_Id := N + 564; + Name_Exception : constant Name_Id := N + 565; + Name_Exit : constant Name_Id := N + 566; + Name_For : constant Name_Id := N + 567; + Name_Function : constant Name_Id := N + 568; + Name_Generic : constant Name_Id := N + 569; + Name_Goto : constant Name_Id := N + 570; + Name_If : constant Name_Id := N + 571; + Name_In : constant Name_Id := N + 572; + Name_Is : constant Name_Id := N + 573; + Name_Limited : constant Name_Id := N + 574; + Name_Loop : constant Name_Id := N + 575; + Name_New : constant Name_Id := N + 576; + Name_Not : constant Name_Id := N + 577; + Name_Null : constant Name_Id := N + 578; + Name_Of : constant Name_Id := N + 579; + Name_Or : constant Name_Id := N + 580; + Name_Others : constant Name_Id := N + 581; + Name_Out : constant Name_Id := N + 582; + Name_Package : constant Name_Id := N + 583; + Name_Pragma : constant Name_Id := N + 584; + Name_Private : constant Name_Id := N + 585; + Name_Procedure : constant Name_Id := N + 586; + Name_Raise : constant Name_Id := N + 587; + Name_Record : constant Name_Id := N + 588; + Name_Rem : constant Name_Id := N + 589; + Name_Renames : constant Name_Id := N + 590; + Name_Return : constant Name_Id := N + 591; + Name_Reverse : constant Name_Id := N + 592; + Name_Select : constant Name_Id := N + 593; + Name_Separate : constant Name_Id := N + 594; + Name_Subtype : constant Name_Id := N + 595; + Name_Task : constant Name_Id := N + 596; + Name_Terminate : constant Name_Id := N + 597; + Name_Then : constant Name_Id := N + 598; + Name_Type : constant Name_Id := N + 599; + Name_Use : constant Name_Id := N + 600; + Name_When : constant Name_Id := N + 601; + Name_While : constant Name_Id := N + 602; + Name_With : constant Name_Id := N + 603; + Name_Xor : constant Name_Id := N + 604; -- Names of intrinsic subprograms -- Note: Asm is missing from this list, since Asm is a legitimate -- convention name. So is To_Address, which is a GNAT attribute. - First_Intrinsic_Name : constant Name_Id := N + 604; - Name_Divide : constant Name_Id := N + 604; - Name_Enclosing_Entity : constant Name_Id := N + 605; - Name_Exception_Information : constant Name_Id := N + 606; - Name_Exception_Message : constant Name_Id := N + 607; - Name_Exception_Name : constant Name_Id := N + 608; - Name_File : constant Name_Id := N + 609; - Name_Generic_Dispatching_Constructor : constant Name_Id := N + 610; - Name_Import_Address : constant Name_Id := N + 611; - Name_Import_Largest_Value : constant Name_Id := N + 612; - Name_Import_Value : constant Name_Id := N + 613; - Name_Is_Negative : constant Name_Id := N + 614; - Name_Line : constant Name_Id := N + 615; - Name_Rotate_Left : constant Name_Id := N + 616; - Name_Rotate_Right : constant Name_Id := N + 617; - Name_Shift_Left : constant Name_Id := N + 618; - Name_Shift_Right : constant Name_Id := N + 619; - Name_Shift_Right_Arithmetic : constant Name_Id := N + 620; - Name_Source_Location : constant Name_Id := N + 621; - Name_Unchecked_Conversion : constant Name_Id := N + 622; - Name_Unchecked_Deallocation : constant Name_Id := N + 623; - Name_To_Pointer : constant Name_Id := N + 624; - Last_Intrinsic_Name : constant Name_Id := N + 624; + First_Intrinsic_Name : constant Name_Id := N + 605; + Name_Divide : constant Name_Id := N + 605; + Name_Enclosing_Entity : constant Name_Id := N + 606; + Name_Exception_Information : constant Name_Id := N + 607; + Name_Exception_Message : constant Name_Id := N + 608; + Name_Exception_Name : constant Name_Id := N + 609; + Name_File : constant Name_Id := N + 610; + Name_Generic_Dispatching_Constructor : constant Name_Id := N + 611; + Name_Import_Address : constant Name_Id := N + 612; + Name_Import_Largest_Value : constant Name_Id := N + 613; + Name_Import_Value : constant Name_Id := N + 614; + Name_Is_Negative : constant Name_Id := N + 615; + Name_Line : constant Name_Id := N + 616; + Name_Rotate_Left : constant Name_Id := N + 617; + Name_Rotate_Right : constant Name_Id := N + 618; + Name_Shift_Left : constant Name_Id := N + 619; + Name_Shift_Right : constant Name_Id := N + 620; + Name_Shift_Right_Arithmetic : constant Name_Id := N + 621; + Name_Source_Location : constant Name_Id := N + 622; + Name_Unchecked_Conversion : constant Name_Id := N + 623; + Name_Unchecked_Deallocation : constant Name_Id := N + 624; + Name_To_Pointer : constant Name_Id := N + 625; + Last_Intrinsic_Name : constant Name_Id := N + 625; -- Names used in processing intrinsic calls - Name_Free : constant Name_Id := N + 625; + Name_Free : constant Name_Id := N + 626; -- Reserved words used only in Ada 95 - First_95_Reserved_Word : constant Name_Id := N + 626; - Name_Abstract : constant Name_Id := N + 626; - Name_Aliased : constant Name_Id := N + 627; - Name_Protected : constant Name_Id := N + 628; - Name_Until : constant Name_Id := N + 629; - Name_Requeue : constant Name_Id := N + 630; - Name_Tagged : constant Name_Id := N + 631; - Last_95_Reserved_Word : constant Name_Id := N + 631; + First_95_Reserved_Word : constant Name_Id := N + 627; + Name_Abstract : constant Name_Id := N + 627; + Name_Aliased : constant Name_Id := N + 628; + Name_Protected : constant Name_Id := N + 629; + Name_Until : constant Name_Id := N + 630; + Name_Requeue : constant Name_Id := N + 631; + Name_Tagged : constant Name_Id := N + 632; + Last_95_Reserved_Word : constant Name_Id := N + 632; subtype Ada_95_Reserved_Words is Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word; -- Miscellaneous names used in semantic checking - Name_Raise_Exception : constant Name_Id := N + 632; + Name_Raise_Exception : constant Name_Id := N + 633; -- Additional reserved words and identifiers used in GNAT Project Files -- Note that Name_External is already previously declared - Name_Ada_Roots : constant Name_Id := N + 633; - Name_Aggregate : constant Name_Id := N + 634; - Name_Archive_Builder : constant Name_Id := N + 635; - Name_Archive_Builder_Append_Option : constant Name_Id := N + 636; - Name_Archive_Indexer : constant Name_Id := N + 637; - Name_Archive_Suffix : constant Name_Id := N + 638; - Name_Binder : constant Name_Id := N + 639; - Name_Binder_Prefix : constant Name_Id := N + 640; - Name_Body_Suffix : constant Name_Id := N + 641; - Name_Builder : constant Name_Id := N + 642; - Name_Builder_Switches : constant Name_Id := N + 643; - Name_Compiler : constant Name_Id := N + 644; - Name_Compiler_Kind : constant Name_Id := N + 645; - Name_Config_Body_File_Name : constant Name_Id := N + 646; - Name_Config_Body_File_Name_Pattern : constant Name_Id := N + 647; - Name_Config_File_Switches : constant Name_Id := N + 648; - Name_Config_File_Unique : constant Name_Id := N + 649; - Name_Config_Spec_File_Name : constant Name_Id := N + 650; - Name_Config_Spec_File_Name_Pattern : constant Name_Id := N + 651; - Name_Configuration : constant Name_Id := N + 652; - Name_Cross_Reference : constant Name_Id := N + 653; - Name_Default_Language : constant Name_Id := N + 654; - Name_Default_Switches : constant Name_Id := N + 655; - Name_Dependency_Driver : constant Name_Id := N + 656; - Name_Dependency_File_Kind : constant Name_Id := N + 657; - Name_Dependency_Switches : constant Name_Id := N + 658; - Name_Driver : constant Name_Id := N + 659; - Name_Excluded_Source_Dirs : constant Name_Id := N + 660; - Name_Excluded_Source_Files : constant Name_Id := N + 661; - Name_Excluded_Source_List_File : constant Name_Id := N + 662; - Name_Exec_Dir : constant Name_Id := N + 663; - Name_Executable : constant Name_Id := N + 664; - Name_Executable_Suffix : constant Name_Id := N + 665; - Name_Extends : constant Name_Id := N + 666; - Name_Externally_Built : constant Name_Id := N + 667; - Name_Finder : constant Name_Id := N + 668; - Name_Global_Configuration_Pragmas : constant Name_Id := N + 669; - Name_Global_Config_File : constant Name_Id := N + 670; - Name_Gnatls : constant Name_Id := N + 671; - Name_Gnatstub : constant Name_Id := N + 672; - Name_Implementation : constant Name_Id := N + 673; - Name_Implementation_Exceptions : constant Name_Id := N + 674; - Name_Implementation_Suffix : constant Name_Id := N + 675; - Name_Include_Switches : constant Name_Id := N + 676; - Name_Include_Path : constant Name_Id := N + 677; - Name_Include_Path_File : constant Name_Id := N + 678; - Name_Inherit_Source_Path : constant Name_Id := N + 679; - Name_Language_Kind : constant Name_Id := N + 680; - Name_Language_Processing : constant Name_Id := N + 681; - Name_Languages : constant Name_Id := N + 682; - Name_Library : constant Name_Id := N + 683; - Name_Library_Ali_Dir : constant Name_Id := N + 684; - Name_Library_Auto_Init : constant Name_Id := N + 685; - Name_Library_Auto_Init_Supported : constant Name_Id := N + 686; - Name_Library_Builder : constant Name_Id := N + 687; - Name_Library_Dir : constant Name_Id := N + 688; - Name_Library_GCC : constant Name_Id := N + 689; - Name_Library_Interface : constant Name_Id := N + 690; - Name_Library_Kind : constant Name_Id := N + 691; - Name_Library_Name : constant Name_Id := N + 692; - Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 693; - Name_Library_Options : constant Name_Id := N + 694; - Name_Library_Partial_Linker : constant Name_Id := N + 695; - Name_Library_Reference_Symbol_File : constant Name_Id := N + 696; - Name_Library_Src_Dir : constant Name_Id := N + 697; - Name_Library_Support : constant Name_Id := N + 698; - Name_Library_Symbol_File : constant Name_Id := N + 699; - Name_Library_Symbol_Policy : constant Name_Id := N + 700; - Name_Library_Version : constant Name_Id := N + 701; - Name_Library_Version_Switches : constant Name_Id := N + 702; - Name_Linker : constant Name_Id := N + 703; - Name_Linker_Executable_Option : constant Name_Id := N + 704; - Name_Linker_Lib_Dir_Option : constant Name_Id := N + 705; - Name_Linker_Lib_Name_Option : constant Name_Id := N + 706; - Name_Local_Config_File : constant Name_Id := N + 707; - Name_Local_Configuration_Pragmas : constant Name_Id := N + 708; - Name_Locally_Removed_Files : constant Name_Id := N + 709; - Name_Map_File_Option : constant Name_Id := N + 710; - Name_Mapping_File_Switches : constant Name_Id := N + 711; - Name_Mapping_Spec_Suffix : constant Name_Id := N + 712; - Name_Mapping_Body_Suffix : constant Name_Id := N + 713; - Name_Metrics : constant Name_Id := N + 714; - Name_Naming : constant Name_Id := N + 715; - Name_Object_Generated : constant Name_Id := N + 716; - Name_Objects_Linked : constant Name_Id := N + 717; - Name_Objects_Path : constant Name_Id := N + 718; - Name_Objects_Path_File : constant Name_Id := N + 719; - Name_Object_Dir : constant Name_Id := N + 720; - Name_Pic_Option : constant Name_Id := N + 721; - Name_Pretty_Printer : constant Name_Id := N + 722; - Name_Prefix : constant Name_Id := N + 723; - Name_Project : constant Name_Id := N + 724; - Name_Roots : constant Name_Id := N + 725; - Name_Required_Switches : constant Name_Id := N + 726; - Name_Run_Path_Option : constant Name_Id := N + 727; - Name_Runtime_Project : constant Name_Id := N + 728; - Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 729; - Name_Shared_Library_Prefix : constant Name_Id := N + 730; - Name_Shared_Library_Suffix : constant Name_Id := N + 731; - Name_Separate_Suffix : constant Name_Id := N + 732; - Name_Source_Dirs : constant Name_Id := N + 733; - Name_Source_Files : constant Name_Id := N + 734; - Name_Source_List_File : constant Name_Id := N + 735; - Name_Spec : constant Name_Id := N + 736; - Name_Spec_Suffix : constant Name_Id := N + 737; - Name_Specification : constant Name_Id := N + 738; - Name_Specification_Exceptions : constant Name_Id := N + 739; - Name_Specification_Suffix : constant Name_Id := N + 740; - Name_Stack : constant Name_Id := N + 741; - Name_Switches : constant Name_Id := N + 742; - Name_Symbolic_Link_Supported : constant Name_Id := N + 743; - Name_Sync : constant Name_Id := N + 744; - Name_Synchronize : constant Name_Id := N + 745; - Name_Toolchain_Description : constant Name_Id := N + 746; - Name_Toolchain_Version : constant Name_Id := N + 747; - Name_Runtime_Library_Dir : constant Name_Id := N + 748; + Name_Ada_Roots : constant Name_Id := N + 634; + Name_Aggregate : constant Name_Id := N + 635; + Name_Archive_Builder : constant Name_Id := N + 636; + Name_Archive_Builder_Append_Option : constant Name_Id := N + 637; + Name_Archive_Indexer : constant Name_Id := N + 638; + Name_Archive_Suffix : constant Name_Id := N + 639; + Name_Binder : constant Name_Id := N + 640; + Name_Binder_Prefix : constant Name_Id := N + 641; + Name_Body_Suffix : constant Name_Id := N + 642; + Name_Builder : constant Name_Id := N + 643; + Name_Builder_Switches : constant Name_Id := N + 644; + Name_Compiler : constant Name_Id := N + 645; + Name_Compiler_Kind : constant Name_Id := N + 646; + Name_Config_Body_File_Name : constant Name_Id := N + 647; + Name_Config_Body_File_Name_Pattern : constant Name_Id := N + 648; + Name_Config_File_Switches : constant Name_Id := N + 649; + Name_Config_File_Unique : constant Name_Id := N + 650; + Name_Config_Spec_File_Name : constant Name_Id := N + 651; + Name_Config_Spec_File_Name_Pattern : constant Name_Id := N + 652; + Name_Configuration : constant Name_Id := N + 653; + Name_Cross_Reference : constant Name_Id := N + 654; + Name_Default_Language : constant Name_Id := N + 655; + Name_Default_Switches : constant Name_Id := N + 656; + Name_Dependency_Driver : constant Name_Id := N + 657; + Name_Dependency_File_Kind : constant Name_Id := N + 658; + Name_Dependency_Switches : constant Name_Id := N + 659; + Name_Driver : constant Name_Id := N + 660; + Name_Excluded_Source_Dirs : constant Name_Id := N + 661; + Name_Excluded_Source_Files : constant Name_Id := N + 662; + Name_Excluded_Source_List_File : constant Name_Id := N + 663; + Name_Exec_Dir : constant Name_Id := N + 664; + Name_Executable : constant Name_Id := N + 665; + Name_Executable_Suffix : constant Name_Id := N + 666; + Name_Extends : constant Name_Id := N + 667; + Name_Externally_Built : constant Name_Id := N + 668; + Name_Finder : constant Name_Id := N + 669; + Name_Global_Configuration_Pragmas : constant Name_Id := N + 670; + Name_Global_Config_File : constant Name_Id := N + 671; + Name_Gnatls : constant Name_Id := N + 672; + Name_Gnatstub : constant Name_Id := N + 673; + Name_Implementation : constant Name_Id := N + 674; + Name_Implementation_Exceptions : constant Name_Id := N + 675; + Name_Implementation_Suffix : constant Name_Id := N + 676; + Name_Include_Switches : constant Name_Id := N + 677; + Name_Include_Path : constant Name_Id := N + 678; + Name_Include_Path_File : constant Name_Id := N + 679; + Name_Inherit_Source_Path : constant Name_Id := N + 680; + Name_Language_Kind : constant Name_Id := N + 681; + Name_Language_Processing : constant Name_Id := N + 682; + Name_Languages : constant Name_Id := N + 683; + Name_Library : constant Name_Id := N + 684; + Name_Library_Ali_Dir : constant Name_Id := N + 685; + Name_Library_Auto_Init : constant Name_Id := N + 686; + Name_Library_Auto_Init_Supported : constant Name_Id := N + 687; + Name_Library_Builder : constant Name_Id := N + 688; + Name_Library_Dir : constant Name_Id := N + 689; + Name_Library_GCC : constant Name_Id := N + 690; + Name_Library_Interface : constant Name_Id := N + 691; + Name_Library_Kind : constant Name_Id := N + 692; + Name_Library_Name : constant Name_Id := N + 693; + Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 694; + Name_Library_Options : constant Name_Id := N + 695; + Name_Library_Partial_Linker : constant Name_Id := N + 696; + Name_Library_Reference_Symbol_File : constant Name_Id := N + 697; + Name_Library_Src_Dir : constant Name_Id := N + 698; + Name_Library_Support : constant Name_Id := N + 699; + Name_Library_Symbol_File : constant Name_Id := N + 700; + Name_Library_Symbol_Policy : constant Name_Id := N + 701; + Name_Library_Version : constant Name_Id := N + 702; + Name_Library_Version_Switches : constant Name_Id := N + 703; + Name_Linker : constant Name_Id := N + 704; + Name_Linker_Executable_Option : constant Name_Id := N + 705; + Name_Linker_Lib_Dir_Option : constant Name_Id := N + 706; + Name_Linker_Lib_Name_Option : constant Name_Id := N + 707; + Name_Local_Config_File : constant Name_Id := N + 708; + Name_Local_Configuration_Pragmas : constant Name_Id := N + 709; + Name_Locally_Removed_Files : constant Name_Id := N + 710; + Name_Map_File_Option : constant Name_Id := N + 711; + Name_Mapping_File_Switches : constant Name_Id := N + 712; + Name_Mapping_Spec_Suffix : constant Name_Id := N + 713; + Name_Mapping_Body_Suffix : constant Name_Id := N + 714; + Name_Metrics : constant Name_Id := N + 715; + Name_Naming : constant Name_Id := N + 716; + Name_Object_Generated : constant Name_Id := N + 717; + Name_Objects_Linked : constant Name_Id := N + 718; + Name_Objects_Path : constant Name_Id := N + 719; + Name_Objects_Path_File : constant Name_Id := N + 720; + Name_Object_Dir : constant Name_Id := N + 721; + Name_Pic_Option : constant Name_Id := N + 722; + Name_Pretty_Printer : constant Name_Id := N + 723; + Name_Prefix : constant Name_Id := N + 724; + Name_Project : constant Name_Id := N + 725; + Name_Roots : constant Name_Id := N + 726; + Name_Required_Switches : constant Name_Id := N + 727; + Name_Run_Path_Option : constant Name_Id := N + 728; + Name_Runtime_Project : constant Name_Id := N + 729; + Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 730; + Name_Shared_Library_Prefix : constant Name_Id := N + 731; + Name_Shared_Library_Suffix : constant Name_Id := N + 732; + Name_Separate_Suffix : constant Name_Id := N + 733; + Name_Source_Dirs : constant Name_Id := N + 734; + Name_Source_Files : constant Name_Id := N + 735; + Name_Source_List_File : constant Name_Id := N + 736; + Name_Spec : constant Name_Id := N + 737; + Name_Spec_Suffix : constant Name_Id := N + 738; + Name_Specification : constant Name_Id := N + 739; + Name_Specification_Exceptions : constant Name_Id := N + 740; + Name_Specification_Suffix : constant Name_Id := N + 741; + Name_Stack : constant Name_Id := N + 742; + Name_Switches : constant Name_Id := N + 743; + Name_Symbolic_Link_Supported : constant Name_Id := N + 744; + Name_Sync : constant Name_Id := N + 745; + Name_Synchronize : constant Name_Id := N + 746; + Name_Toolchain_Description : constant Name_Id := N + 747; + Name_Toolchain_Version : constant Name_Id := N + 748; + Name_Runtime_Library_Dir : constant Name_Id := N + 749; -- Other miscellaneous names used in front end - Name_Unaligned_Valid : constant Name_Id := N + 749; + Name_Unaligned_Valid : constant Name_Id := N + 750; -- Ada 2005 reserved words - First_2005_Reserved_Word : constant Name_Id := N + 750; - Name_Interface : constant Name_Id := N + 750; - Name_Overriding : constant Name_Id := N + 751; - Name_Synchronized : constant Name_Id := N + 752; - Last_2005_Reserved_Word : constant Name_Id := N + 752; + First_2005_Reserved_Word : constant Name_Id := N + 751; + Name_Interface : constant Name_Id := N + 751; + Name_Overriding : constant Name_Id := N + 752; + Name_Synchronized : constant Name_Id := N + 753; + Last_2005_Reserved_Word : constant Name_Id := N + 753; subtype Ada_2005_Reserved_Words is Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word; -- Mark last defined name for consistency check in Snames body - Last_Predefined_Name : constant Name_Id := N + 752; + Last_Predefined_Name : constant Name_Id := N + 753; --------------------------------------- -- Subtypes Defining Name Categories -- diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb index a25cfae44fa..5fb53ae339e 100644 --- a/gcc/ada/treepr.adb +++ b/gcc/ada/treepr.adb @@ -531,17 +531,44 @@ package body Treepr is begin case M is - when Default_Mechanism => Write_Str ("Default"); - when By_Copy => Write_Str ("By_Copy"); - when By_Reference => Write_Str ("By_Reference"); - when By_Descriptor => Write_Str ("By_Descriptor"); - when By_Descriptor_UBS => Write_Str ("By_Descriptor_UBS"); - when By_Descriptor_UBSB => Write_Str ("By_Descriptor_UBSB"); - when By_Descriptor_UBA => Write_Str ("By_Descriptor_UBA"); - when By_Descriptor_S => Write_Str ("By_Descriptor_S"); - when By_Descriptor_SB => Write_Str ("By_Descriptor_SB"); - when By_Descriptor_A => Write_Str ("By_Descriptor_A"); - when By_Descriptor_NCA => Write_Str ("By_Descriptor_NCA"); + when Default_Mechanism + => Write_Str ("Default"); + when By_Copy + => Write_Str ("By_Copy"); + when By_Reference + => Write_Str ("By_Reference"); + when By_Descriptor + => Write_Str ("By_Descriptor"); + when By_Descriptor_UBS + => Write_Str ("By_Descriptor_UBS"); + when By_Descriptor_UBSB + => Write_Str ("By_Descriptor_UBSB"); + when By_Descriptor_UBA + => Write_Str ("By_Descriptor_UBA"); + when By_Descriptor_S + => Write_Str ("By_Descriptor_S"); + when By_Descriptor_SB + => Write_Str ("By_Descriptor_SB"); + when By_Descriptor_A + => Write_Str ("By_Descriptor_A"); + when By_Descriptor_NCA + => Write_Str ("By_Descriptor_NCA"); + when By_Short_Descriptor + => Write_Str ("By_Short_Descriptor"); + when By_Short_Descriptor_UBS + => Write_Str ("By_Short_Descriptor_UBS"); + when By_Short_Descriptor_UBSB + => Write_Str ("By_Short_Descriptor_UBSB"); + when By_Short_Descriptor_UBA + => Write_Str ("By_Short_Descriptor_UBA"); + when By_Short_Descriptor_S + => Write_Str ("By_Short_Descriptor_S"); + when By_Short_Descriptor_SB + => Write_Str ("By_Short_Descriptor_SB"); + when By_Short_Descriptor_A + => Write_Str ("By_Short_Descriptor_A"); + when By_Short_Descriptor_NCA + => Write_Str ("By_Short_Descriptor_NCA"); when 1 .. Mechanism_Type'Last => Write_Str ("By_Copy if size <= "); diff --git a/gcc/ada/types.ads b/gcc/ada/types.ads index 9b4bfb825e4..de9c54bfe5f 100644 --- a/gcc/ada/types.ads +++ b/gcc/ada/types.ads @@ -736,7 +736,7 @@ package Types is -- passing mechanism. See specification of Sem_Mech for full details. -- The following subtype is used to represent values of this type: - subtype Mechanism_Type is Int range -10 .. Int'Last; + subtype Mechanism_Type is Int range -18 .. Int'Last; -- Type used to represent a mechanism value. This is a subtype rather -- than a type to avoid some annoying processing problems with certain -- routines in Einfo (processing them to create the corresponding C). diff --git a/gcc/ada/types.h b/gcc/ada/types.h index fb218c203a6..1d4fd67065b 100644 --- a/gcc/ada/types.h +++ b/gcc/ada/types.h @@ -328,6 +328,15 @@ typedef Int Mechanism_Type; #define By_Descriptor_A (-9) #define By_Descriptor_NCA (-10) #define By_Descriptor_Last (-10) +#define By_Short_Descriptor (-11) +#define By_Short_Descriptor_UBS (-12) +#define By_Short_Descriptor_UBSB (-13) +#define By_Short_Descriptor_UBA (-14) +#define By_Short_Descriptor_S (-15) +#define By_Short_Descriptor_SB (-16) +#define By_Short_Descriptor_A (-17) +#define By_Short_Descriptor_NCA (-18) +#define By_Short_Descriptor_Last (-18) /* Internal to Gigi. */ #define By_Copy_Return (-128) -- 2.11.0