diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-02-06 13:19:20 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-02-06 13:19:20 +0000 |
commit | 8b1e0325b111be4be290c3b97ab9bd69cafec841 (patch) | |
tree | 2cc5780b0e7e87bc528d73aa3ed90f7dcde02e60 /gcc/ada/gcc-interface/decl.c | |
parent | caa1ac556a056680b3920e379e8768da99ce701b (diff) | |
download | gcc-8b1e0325b111be4be290c3b97ab9bd69cafec841.tar.gz |
Revert previous change, unintended.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195805 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/gcc-interface/decl.c')
-rw-r--r-- | gcc/ada/gcc-interface/decl.c | 88 |
1 files changed, 19 insertions, 69 deletions
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 2af3ca83ee3..56b64a3c343 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -2908,12 +2908,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) { Node_Id full_definition = Declaration_Node (gnat_entity); Node_Id record_definition = Type_Definition (full_definition); - Node_Id gnat_constr; Entity_Id gnat_field; - tree gnu_field, gnu_field_list = NULL_TREE; - tree gnu_get_parent; + tree gnu_field, gnu_field_list = NULL_TREE, gnu_get_parent; /* Set PACKED in keeping with gnat_to_gnu_field. */ - const int packed + int packed = Is_Packed (gnat_entity) ? 1 : Component_Alignment (gnat_entity) == Calign_Storage_Unit @@ -2923,13 +2921,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) && Known_RM_Size (gnat_entity))) ? -2 : 0; - const bool has_discr = Has_Discriminants (gnat_entity); - const bool has_rep = Has_Specified_Layout (gnat_entity); - const bool is_extension + bool has_discr = Has_Discriminants (gnat_entity); + bool has_rep = Has_Specified_Layout (gnat_entity); + bool all_rep = has_rep; + bool is_extension = (Is_Tagged_Type (gnat_entity) && Nkind (record_definition) == N_Derived_Type_Definition); - const bool is_unchecked_union = Is_Unchecked_Union (gnat_entity); - bool all_rep = has_rep; + bool is_unchecked_union = Is_Unchecked_Union (gnat_entity); /* See if all fields have a rep clause. Stop when we find one that doesn't. */ @@ -3168,51 +3166,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) } } - /* If we have a derived untagged type that renames discriminants in - the root type, the (stored) discriminants are a just copy of the - discriminants of the root type. This means that any constraints - added by the renaming in the derivation are disregarded as far - as the layout of the derived type is concerned. To rescue them, - we change the type of the (stored) discriminants to a subtype - with the bounds of the type of the visible discriminants. */ - if (has_discr - && !is_extension - && Stored_Constraint (gnat_entity) != No_Elist) - for (gnat_constr = First_Elmt (Stored_Constraint (gnat_entity)); - gnat_constr != No_Elmt; - gnat_constr = Next_Elmt (gnat_constr)) - if (Nkind (Node (gnat_constr)) == N_Identifier - /* Ignore access discriminants. */ - && !Is_Access_Type (Etype (Node (gnat_constr))) - && Ekind (Entity (Node (gnat_constr))) == E_Discriminant) - { - Entity_Id gnat_discr = Entity (Node (gnat_constr)); - tree gnu_discr_type = gnat_to_gnu_type (Etype (gnat_discr)); - tree gnu_ref - = gnat_to_gnu_entity (Original_Record_Component (gnat_discr), - NULL_TREE, 0); - - /* GNU_REF must be an expression using a PLACEHOLDER_EXPR built - just above for one of the stored discriminants. */ - gcc_assert (TREE_TYPE (TREE_OPERAND (gnu_ref, 0)) == gnu_type); - - if (gnu_discr_type != TREE_TYPE (gnu_ref)) - { - const unsigned prec = TYPE_PRECISION (TREE_TYPE (gnu_ref)); - tree gnu_subtype - = TYPE_UNSIGNED (TREE_TYPE (gnu_ref)) - ? make_unsigned_type (prec) : make_signed_type (prec); - TREE_TYPE (gnu_subtype) = TREE_TYPE (gnu_ref); - TYPE_EXTRA_SUBTYPE_P (gnu_subtype) = 1; - SET_TYPE_RM_MIN_VALUE (gnu_subtype, - TYPE_MIN_VALUE (gnu_discr_type)); - SET_TYPE_RM_MAX_VALUE (gnu_subtype, - TYPE_MAX_VALUE (gnu_discr_type)); - TREE_TYPE (gnu_ref) - = TREE_TYPE (TREE_OPERAND (gnu_ref, 1)) = gnu_subtype; - } - } - /* Add the fields into the record type and finish it up. */ components_to_record (gnu_type, Component_List (record_definition), gnu_field_list, packed, definition, false, @@ -4125,10 +4078,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) tree gnu_stub_type = NULL_TREE, gnu_stub_name = NULL_TREE; tree gnu_ext_name = create_concat_name (gnat_entity, NULL); Entity_Id gnat_param; - enum inline_status_t inline_status - = Has_Pragma_No_Inline (gnat_entity) - ? is_suppressed - : (Is_Inlined (gnat_entity) ? is_enabled : is_disabled); + bool inline_flag = Is_Inlined (gnat_entity); bool public_flag = Is_Public (gnat_entity) || imported_p; bool extern_flag = (Is_Public (gnat_entity) && !definition) || imported_p; @@ -4684,15 +4634,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnu_decl = create_subprog_decl (gnu_entity_name, gnu_ext_name, gnu_type, - gnu_param_list, inline_status, - public_flag, extern_flag, artificial_flag, - attr_list, gnat_entity); + gnu_param_list, inline_flag, public_flag, + extern_flag, artificial_flag, attr_list, + gnat_entity); if (has_stub) { tree gnu_stub_decl = create_subprog_decl (gnu_entity_name, gnu_stub_name, gnu_stub_type, gnu_stub_param_list, - inline_status, true, extern_flag, + inline_flag, true, extern_flag, false, attr_list, gnat_entity); SET_DECL_FUNCTION_STUB (gnu_decl, gnu_stub_decl); } @@ -5425,7 +5375,7 @@ get_minimal_subprog_decl (Entity_Id gnat_entity) return create_subprog_decl (gnu_entity_name, gnu_ext_name, void_ftype, NULL_TREE, - is_disabled, true, true, true, attr_list, gnat_entity); + false, true, true, true, attr_list, gnat_entity); } /* Return whether the E_Subprogram_Type/E_Function/E_Procedure GNAT_ENTITY is @@ -6014,7 +5964,7 @@ elaborate_entity (Entity_Id gnat_entity) Present (gnat_field); gnat_field = Next_Discriminant (gnat_field), gnat_discriminant_expr = Next_Elmt (gnat_discriminant_expr)) - /* Ignore access discriminants. */ + /* ??? For now, ignore access discriminants. */ if (!Is_Access_Type (Etype (Node (gnat_discriminant_expr)))) elaborate_expression (Node (gnat_discriminant_expr), gnat_entity, get_entity_name (gnat_field), @@ -7660,20 +7610,20 @@ build_subst_list (Entity_Id gnat_subtype, Entity_Id gnat_type, bool definition) { vec<subst_pair> gnu_list = vNULL; Entity_Id gnat_discrim; - Node_Id gnat_constr; + Node_Id gnat_value; for (gnat_discrim = First_Stored_Discriminant (gnat_type), - gnat_constr = First_Elmt (Stored_Constraint (gnat_subtype)); + gnat_value = First_Elmt (Stored_Constraint (gnat_subtype)); Present (gnat_discrim); gnat_discrim = Next_Stored_Discriminant (gnat_discrim), - gnat_constr = Next_Elmt (gnat_constr)) + gnat_value = Next_Elmt (gnat_value)) /* Ignore access discriminants. */ - if (!Is_Access_Type (Etype (Node (gnat_constr)))) + if (!Is_Access_Type (Etype (Node (gnat_value)))) { tree gnu_field = gnat_to_gnu_field_decl (gnat_discrim); tree replacement = convert (TREE_TYPE (gnu_field), elaborate_expression - (Node (gnat_constr), gnat_subtype, + (Node (gnat_value), gnat_subtype, get_entity_name (gnat_discrim), definition, true, false)); subst_pair s = {gnu_field, replacement}; |