summaryrefslogtreecommitdiff
path: root/gcc/ada/decl.c
Commit message (Collapse)AuthorAgeFilesLines
* Revertebotcazou2008-03-251-12/+0
| | | | | | | | | | | 2008-03-05 Eric Botcazou <ebotcazou@adacore.com> PR ada/35186 * decl.c (maybe_pad_type): Avoid padding an integral type when bumping its alignment is sufficient. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133526 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (maybe_pad_type): Use value_factor_p.ebotcazou2008-03-081-4/+3
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133039 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <E_Signed_Integer_Subtype>: Do notebotcazou2008-03-081-2/+1
| | | | | | | | bother propagating the TYPE_USER_ALIGN flag when creating a JM type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133032 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <E_Record_Type>: Do not forceebotcazou2008-03-081-2/+3
| | | | | | | | | BIGGEST_ALIGNMENT when capping the alignment of records with strict alignment and size clause. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133031 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <E_Signed_Integer_Subtype>: Add supportebotcazou2008-03-081-0/+39
| | | | | | | | for scalar types with small alignment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133027 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <E_Modular_Integer_Subtype>: Addebotcazou2008-03-071-0/+5
| | | | | | | | | | comment for the packed array type case. * utils.c (build_template): Use a loop to strip padding or containing records for justified modular types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133014 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity): Issue a warning on suspiciouslyebotcazou2008-03-071-12/+46
| | | | | | | | | large alignments specified for types. (validate_alignment): Minor cleanup. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133012 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (MAX_FIXED_MODE_SIZE): Define if not already defined.ebotcazou2008-03-071-89/+205
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (gnat_to_gnu_entity) <E_Record_Type>: Try to get a smaller form of the component for packing, if possible, as well as if a component size clause is specified. <E_Record_Subtype>: For an array type used to implement a packed array, get the component type from the original array type. Try to get a smaller form of the component for packing, if possible, as well as if a component size clause is specified. (round_up_to_align): New function. (make_packable_type): Add in_record parameter. For a padding record, preserve the size. If not in_record and the size is too large for an integral mode, attempt to shrink the size by lowering the alignment. Ditch the padding bits of the last component. Compute sizes and mode manually, and propagate the RM size. Return a BLKmode record type if its size has shrunk. (maybe_pad_type): Use MAX_FIXED_MODE_SIZE instead of BIGGEST_ALIGNMENT. Use Original_Array_Type to retrieve the type in case of an error. Adjust call to make_packable_type. (gnat_to_gnu_field): Likewise. (concat_id_with_name): Minor tweak. * trans.c (larger_record_type_p): New predicate. (call_to_gnu): Compute the nominal type of the object only if the parameter is by-reference. Do the conversion actual type -> nominal type if the nominal type is a larger record. (gnat_to_gnu): Do not require integral modes on the source type to avoid the conversion for types with identical names. (addressable_p): Add gnu_type parameter. If it is specified, do not return true if the expression is not addressable in gnu_type. Adjust recursive calls. * utils.c (finish_record_type): Remove dead code. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133011 138bc75d-0d04-0410-961f-82ee72b054a4
* PR ada/35186ebotcazou2008-03-061-2/+13
| | | | | | | | | * decl.c (maybe_pad_type): Avoid padding an integral type when bumping its alignment is sufficient. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132963 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (components_to_record): Improve comment.ebotcazou2008-01-261-2/+3
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131858 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (components_to_record): Do not reuse the empty union typeebotcazou2008-01-221-3/+9
| | | | | | | | | if there is a representation clause on the record. * trans.c (addressable_p): Return true for INTEGER_CST. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131733 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <object>: Process renamingsebotcazou2008-01-141-17/+20
| | | | | | | | | | before converting the expression to the type of the object. * trans.c (maybe_stabilize_reference) <CONSTRUCTOR>: New case. Stabilize constructors for special wrapping types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131531 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans.c (call_to_gnu):Invoke the addressable_p predicate onlyebotcazou2008-01-131-10/+10
| | | | | | | | | | | | when necessary.  Merge some conditional statements.  Update comments. Rename unchecked_convert_p local variable to suppress_type_conversion. Do not suppress conversions in the In case. (addressable_p) <VIEW_CONVERT_EXPR>: Do not take alignment issues into account on non strict-alignment platforms. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131510 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-12-07 Olivier Hainque <hainque@adacore.com>hainque2007-12-071-1/+2
| | | | | | | | | | | | | | | ada/ * decl.c (gnat_to_gnu_entity) <case E_Access_Type>: When computing the designated full view, only follow a second level Full_View link for Non_Limited_Views of from_limited_with references. testsuite/ * gnat.dg/tamdt*.ad?: Support for ... * gnat.dg/test_tamdt.adb: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130679 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-12-07 Olivier Hainque <hainque@adacore.com>hainque2007-12-071-1/+5
| | | | | | | | | | | | | | | PR ada/34173 * decl.c (gnat_to_gnu_entity) <case E_Array_Type>: When setting the alignment on the GCC XUA array type, set TYPE_USER_ALIGN if this is from an alignment clause on the GNAT entity. * utils.c (create_field_decl): Rewrite the computation of DECL_ALIGN to distinguish the case where we set it from the type's alignment. When so, propagate TYPE_USER_ALIGN into DECL_USER_ALIGN to indicate whether this alignment was set from an explicit alignment clause. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130673 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (make_packable_type): Revert last change.ebotcazou2007-12-061-30/+27
| | | | | | | | | | (gnat_to_gnu_field): Avoid setting size and position multiple times. * utils.c (finish_record_type): Retrieve the real name of the type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130665 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (make_packable_type): Retrieve the real name of the type.ebotcazou2007-11-291-5/+11
| | | | | | | | (maybe_pad_type): Simplify similar code. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130512 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <E_Record_Type>: If the type hasebotcazou2007-11-251-28/+42
| | | | | | | | | | | | | | strict alignment, no alignment clause and a known static size, cap the type alignment to the greatest power of 2 factor of the size. (gnat_to_gnu_field): If the field has a component clause, is aliased or of a type with strict alignment, require that its size be equal to that of the type. (validate_size): Use the type size as the minimum size for a type with strict alignment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130406 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (ceil_alignment): New function.ebotcazou2007-11-231-13/+15
| | | | | | | | | (gnat_to_gnu_entity): Use it to set the alignment on atomic types. (make_packable_type): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130373 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-11-07 Olivier Hainque <hainque@adacore.com>hainque2007-11-071-4/+9
| | | | | | | | | | | | * decl.c (make_aligning_type): Set the mode of the RECORD_TYPE we craft and expand comment. testsuite/ * gnat.dg/max_align.adb: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129958 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-09-26 Javier Miranda <miranda@adacore.com>charlet2007-09-261-10/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Eric Botcazou <ebotcazou@adacore.com> * a-tags.adb: (Get_HT_Link/Set_HT_Link): Updated to handle the additional level of indirection added to the HT_Link component of the TSD. This is required to statically allocate the TSD. * a-tags.ads: Minor reordering of the declarations in the private part. Required to add a level of indirection to the contents of the TSD component HT_Link. This is required to statically allocate the TSD. * decl.c (gnat_to_gnu_entity) <object>: Do not exclude objects with Is_Statically_Allocated set from constant objects. Do not make exported constants created by the compiler volatile. (gnat_to_gnu_param): Do not treat an IN parameter whose address is taken as read-only. * trans.c (Identifier_to_gnu): For constants, unshare initializers before returning them. * exp_disp.ads, exp_disp.adb (Building_Static_DT): Spec moved to the public part of the package. (Make_DT): Move HT_Link component out of the TSD record. For this purpose Make_DT now declares a separate object that stores the HT_Link value, and initializes the TSD component with the address of this new object. The addition of this level of indirection is required to statically allocate the TSD because the TSD cannot have variable components. (Expand_Interface_Conversion): Improve the expanded code. (Expand_Interface_Thunk): Set Is_Thunk in the thunk entity. * sem_disp.adb (Check_Dispatching_Operation): In case of a body declaring a primitive operation ---allowed by RM 3.9.2 (13.e/2)---, if we are building static dispatch tables then we must not generate extra code to register the primitive because the dispatch table will be built at the end of the library package; otherwise we notify that we cannot build the static dispatch table. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128784 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <object>: Make again the type of anebotcazou2007-09-171-4/+5
| | | | | | | | object covered by 13.3(19) volatile. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128538 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-09-12 Olivier Hainque <hainque@adacore.com>hainque2007-09-121-4/+9
| | | | | | | | | | | | | | ada/ * decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: For a subtype with discriminant constraints, generalize the code for BIT_FIELDs to PACKED fields of constant size and propagate DECL_PACKED. testsuite/ * gnat.dg/packed_subtype.adb: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128425 138bc75d-0d04-0410-961f-82ee72b054a4
* * tree-ssa-structalias.c (push_fields_onto_fieldstack): Deal withebotcazou2007-09-111-20/+21
| | | | | | | | | | | | | | | | | | TYPE_NONALIASED_COMPONENT like with DECL_NONADDRESSABLE_P. ada/ * decl.c (array_type_has_nonaliased_component): New predicate. (gnat_to_gnu_field) <E_Array_Type>: Invoke the above predicate to set the TYPE_NONALIASED_COMPONENT flag on the type. <E_Array_Subtype>: Likewise. * gigi.h (type_for_nonaliased_component_p): Declare. * utils.c (type_for_nonaliased_component_p): New predicate. (create_field_decl): Invoke the above predicate to set the DECL_NONADDRESSABLE_P flag on the field. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128391 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <object>: Deal with variable built forebotcazou2007-09-101-0/+15
| | | | | | | | a debug renaming declaration specially. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128327 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <Object>: Simplify the condition underebotcazou2007-09-081-4/+1
| | | | | | | | | | | | which a constant renaming is treated as a normal object declaration. * trans.c (lvalue_required_p) <N_Slice>: New case, extracted from the N_Indexed_Component case. <N_Indexed_Component>: Fall through to above case. <N_Object_Renaming_Declaration>: Return true for all composite types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128268 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (make_packable_type): If the new type has been given BLKmode,ebotcazou2007-09-081-0/+7
| | | | | | | | try again to get an integral mode for it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128266 138bc75d-0d04-0410-961f-82ee72b054a4
* * Make-lang.in: Change copyright header to refer to version 3 of the GNUnickc2007-09-031-5/+4
| | | | | | | | | | | | General Public License and to point readers at the COPYING3 file and the FSF's license web page. * ada-tree.def, nmake.adt, nlists.h, snames.h, utils.c, Makefile.rtl, Makefile.in, config-lang.in, uintp.h, urealp.h, namet.h, decl.c, utils2.c, lang.opt, elists.h, atree.h, types.h, treeprs.adt, lang-specs.h, cuintp.c, stringt.h, gnatbl.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128038 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-08-14 Olivier Hainque <hainque@adacore.com>charlet2007-08-141-118/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Eric Botcazou <ebotcazou@adacore.com> * targtyps.c (get_target_maximum_default_alignment): New function. Maximum alignment that the compiler might choose by default for a type or object. (get_target_default_allocator_alignment): New function. Alignment known to be honored by the target default allocator. (get_target_maximum_allowed_alignment): New function. Maximum alignment we might accept for any type or object on the target. (get_target_maximum_alignment): Now synonym of maximum_default_alignment * gigi.h (get_target_maximum_default_alignment): Declare new function. (get_target_default_allocator_alignment): Likewise. (get_target_maximum_allowed_alignment): Likewise. PR ada/19037 * decl.c (gnat_to_gnu_entity) <object>: Except for the renaming of the result of a function call, first try to use a stabilized reference for a constant renaming too. (validate_alignment): Use target_maximum_allowed_alignment instead of MAX_OFILE_ALIGNMENT as the upper bound to what we accept. (gnat_to_gnu_entity): Use common nodes directly. (gnat_to_gnu_entity) <object>: Pick the values of the type to annotate alignment and size for the object. (lvalue_required_p): Handle N_Parameter_Association like N_Function_Call and N_Procedure_Call_Statement. (takes_address): Rename to lvalue_required_p, add third parameter 'aliased' and adjust recursive calls. <N_Indexed_Component>: Update 'aliased' from the array type. <N_Selected_Component>: New case. <N_Object_Renaming_Declaration>: New Likewise. (Identifier_to_gnu): Adjust for above changes. (maybe_stabilize_reference) <CONST_DECL>: New case. * utils2.c (build_binary_op) <ARRAY_RANGE_REF>: Look through conversion between type variants. (build_simple_component_ref): Likewise. (build_call_alloc_dealloc): Use target_default_allocator_alignment instead of BIGGEST_ALIGNMENT as the threshold to trigger the super aligning type circuitry for allocations from the default storage pool. (build_allocator): Likewise. (build_simple_component_ref): Manually fold the reference for a constructor if the record type contains a template. * utils.c (value_zerop): Delete. (gnat_init_decl_processing): Emit debug info for common types. (rest_of_record_type_compilation): If a union contains a field with a non-constant qualifier, treat it as variable-sized. (finish_record_type): Give the stub TYPE_DECL a name. (rest_of_record_type_compilation): Likewise. (convert) <CONSTRUCTOR>: New case. Build a new constructor if types are equivalent array types. (create_field_decl): Claim fields of any ARRAY_TYPE are addressable, even if the type is not passed by reference. (static_ctors, static_dtors): Delete. (end_subprog_body): Do not record constructors and destructors. (build_global_cdtor): Delete. (gnat_write_global_declarations): Do not call build_global_cdtor. * lang-specs.h: If TARGET_VXWORKS_RTP is defined, append -mrtp when -fRTS=rtp is specified. If CONFIG_DUAL_EXCEPTIONS is 1, append -fsjlj when -fRTS=sjlj is specified. * misc.c (gnat_init_gcc_eh): Use __gnat_eh_personality_sj for the name of the personality function with SJLJ exceptions. * raise-gcc.c (PERSONALITY_FUNCTION): Use __gnat_eh_personality_sj for the name of the personality function with SJLJ exceptions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127422 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c, utils2.c: Fix whitespace in last change.ghazi2007-08-111-3/+4
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127359 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (compare_field_bitpos): Constify.ghazi2007-08-111-4/+3
| | | | | | | | * utils2.c (compare_elmt_bitpos): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127358 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity): Use pointers to dummy nodes, ratherebotcazou2007-06-101-20/+32
| | | | | | | | | | | | | than to void, for the fields when making a new fat pointer type. (gnat_substitute_in_type): Now substitute_in_type. * gigi.h (gnat_substitute_in_type): Likewise. * trans.c (gnat_gimplify_expr): Remove COMPONENT_REF kludge. * utils.c (update_pointer_to): Update fat pointers by updating the dummy node pointers used for the fields. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125602 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-04-20 Eric Botcazou <ebotcazou@adacore.com>charlet2007-06-061-766/+1040
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> Olivier Hainque <hainque@adacore.com> * decl.c (gnat_to_gnu_entity) <object>: Manually mark the top of the renamed expression of a full renaming at toplevel. (gnat_to_gnu_entity, case object): If not defining, do not look inside the values the constant is initialized to if it is an N_Allocator. (gnat_to_gnu_entity) <E_Array_Subtype>: Manually mark the top of the TYPE_SIZE_UNIT of inner types after the stride is elaborated. (make_aligning_type): Accept an extra ROOM argument for storage to be made available before the aligned field, and an extra BASE_ALIGN argument for callers to pass the alignment guaranteed to be honored for the whole aligning object. Avoid call to finish_record_type, which only interferes with the sizes we want to set. (gnat_to_gnu_entity) <E_Variable>: Pass the required extra arguments to make_aligning_type for super-aligned objects on stack. (components_to_record): Pass the adjusted size of the type when creating fields in the qualified union for the variant part. (gnat_substitute_in_type): Copy TYPE_USER_ALIGN. (gnat_to_gnu_entity, case E_Signed_Integer_Subtype): Likewise for packed array type. (maybe_pad_type): Set TYPE_USER_ALIGN. (make_aligning_type): Likewise. ALIGN argument is unsigned int. (gnat_to_gnu_entity, case E_Function): Back annotate return mechanism. (gnat_to_gnu_param): Likewise, for parameters. (gnat_to_gnu_entity) <object>: Always instantiate the renaming object if it is constant and stems from a function call. (gnat_to_gnu_entity) <E_Record_Type>: Set packed to -2 if the alignment of the record is specified. Adjust accordingly. (adjust_packed): New static function. (gnat_to_gnu_field): Use it to adjust the packedness setting. (components_to_record): Likewise. (gnat_to_gnu_entity) <object>: Do not test the renamed expression for side-effects if the object is deemed constant. (gnat_to_gnu_entity) <E_Array_Type>: Create a name for the fat pointer type instead of merely finalizing it. Tidy. <E_Access_Subprogram_Type>: Retrieve the type from the TYPE_DECL. <E_Access_Type>: Likewise. (defer_debug_incomplete_list): Rename to defer_finalize_list. (defer_debug_level): Delete. (gnat_to_gnu_entity) <debug_deferred>: Likewise <E_Array_Type>: Call rest_of_record_type_compilation on the fat pointer type. <E_Record_Type>: Do not explicitly defer finalizing the type. Adjust for write_record_type_debug_info renaming. <E_Subprogram_Type>: Likewise. Finalize deferred types right after deferred incomplete types are expanded. (rest_of_type_decl_compilation): New global function. (components_to_record): Rename defer_debug parameter to do_not_finalize. (components_to_record): Propagate the packedness to the fields of the qualified union type if there is a variant part. (gnat_to_gnu_entity) <E_Array_Type>: Use new function instead of inline code to adjust the XUT field offsets. (gnat_to_gnu_entity): Adjust for new prototype of finish_record_type. <E_Record_Subtype>: Do not let finish_record_type compute the sizes and write the debug info if the type derives from a discriminated one. (gnat_to_gnu_entity) <E_Array_Type>: Adjust call to create_index_type. <E_Array_Subtype>: Likewise. <E_String_Literal_Subtype>: Likewise. (gnat_to_gnu_entity): Set TYPE_USER_ALIGN on types only if they have an alignment clause. (maybe_pad_type): Update ORIG_SIZE to the minimum required to meet ALIGN before giving warning. (prepend_one_attribute_to): New function, helper to prepend an attribute to an attribute list. (gnat_to_gnu_entity) <E_Procedure>: Use it. (prepend_attributes): Likewise. (gnat_to_gnu_entity) <E_Variable>: Use constants of the proper type. <E_Array_Type>: Declare the padding type for the element type, if any. <E_Array_Subtype>: Likewise. (defer_limited_with): New variable. (Gigi_Equivalent_Type): New function. (gnat_to_gnu_entity): Use it at start and use result throughout. (gnat_to_gnu_entity, case E_Access_Type): Rework to use Gigi_Equivalent_Type, support Limited_With, allow two levels of indirection, precompute if unconstrained array to simplify logic, and use defer_limited_with to defer elaboration of some types from limited with. (finalize_from_with_types): New function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125370 138bc75d-0d04-0410-961f-82ee72b054a4
* 2007-04-06 Olivier Hainque <hainque@adacore.com>charlet2007-04-061-33/+46
| | | | | | | | | | | | | | | | | | | | | | | | Eric Botcazou <botcazou@adacore.com> * decl.c (gnat_to_gnu_entity) <E_Constant>: Associate an external VAR_DECL to a CONST_DECL we make for a public constant when we know the corresponding definition has created the so made visible variable. Handle anonymous access to protected subprogram. (gnat_to_gnu_entity) <E_Variable>: Do not make the underlying type of an object with an address clause volatile. Re-enable original fix. <E_Subprogram_Type>: Set TYPE_REF_CAN_ALIAS_ALL on the reference type too. (gnat_to_gnu_entity) <E_Class_Wide_Type>: Retrieve the TYPE_DECL associated with either the Equivalent or Root type, instead of the naked type node. (gnat_to_gnu_entity): Manually mark the top of the DECL_FIELD_OFFSET subtree for every field of a global record type. (gnat_to_gnu_entity) <E_Record_Subtype>: If the subtype has discriminants, invoke again variable_size on its newly computed sizes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123557 138bc75d-0d04-0410-961f-82ee72b054a4
* * cuintp.c (UI_To_gnu): Use fold_buildN calls instead of callingsayle2007-03-091-6/+9
| | | | | | | | | | | | | | | | | | | fold with the result of buildN. * decl.c (gnat_to_gnu_entity): Likewise. * trans.c (Attribute_to_gnu, gnat_to_gnu, emit_check): Likewise. * utils.c (finish_record_type, merge_sizes, max_size, convert): Likewise. * utils2.c (gnat_truthvalue_conversion, compare_arrays, nonbinary_modular_operation, build_binary_op, build_unary_op, build_cond_expr): Likewise. * utils.c (convert): Use fold_build1 when casting values to void. * utils2.c (gnat_truthvalue_conversion): Use build_int_cst and fold_convert instead of convert when appropriate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122752 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (annotate_value): Adjust for refactoring of tree_mapmmitchel2007-02-251-1/+1
| | | | | | | hierarchy. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122317 138bc75d-0d04-0410-961f-82ee72b054a4
* * doc/extend.texi: Document optional priority argument tommitchel2007-02-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | constructors and destructors. * tree.c (init_priority_for_decl): Adjust GTY markers. (init_ttree): Use priority-info hash functions for init_priority_for_decl. (tree_map_eq): Rename to ... (tree_map_base_eq): ... this. (tree_map_marked_p): Rename to ... (tree_map_base_marked_p): ... this. (tree_map_base_hash): New function. (decl_init_priority_lookup): Rework. (decl_fini_priority_lookup): New function. (decl_priority_info): New function. (decl_init_priority_insert): Use it. (decl_fini_priority_insert): Likewise. (decl_restrict_base_lookup): Adjust for refactoring of tree_map hierarchy. (decl_restrict_base_insert): Likewise. (decl_debug_expr_insert): Likewise. (decl_value_expr_lookup): Likewise. (decl_value_expr_insert): Likewise. * tree.h (priority_type): New type. (decl_init_priority_lookup): Use priority_type. (decl_fini_priority_lookup): New function. (decl_init_priority_insert): Use priority_type. (decl_fini_priority_insert): New function. (DECL_HAS_INIT_PRIORITY): Tweak comments. (DECL_INIT_PRIORITY): Likewise. (SET_DECL_INIT_PRIORITY): Add comment. (DECL_FINI_PRIORITY): New macro. (SET_DECL_FINI_PRIORITY): Likewise. (DEFAULT_INIT_PRIORITY): Document. (MAX_INIT_PRIORITY): Likewise. (MAX_RESERVED_INIT_PRIORITY): Likewise. (tree_map_base): New type. (tree_map_base_eq): New function. (tree_map_base_hash): Likewise. (tree_map_base_marked_p): Likewise. (tree_map): Inherit from tree_map_base. (tree_map_eq): Make it a macro. (tree_map_marked_p): Likewise. (tree_int_map): Inherit from tree_map_base. (tree_int_map_eq): Make it a macro. (tree_int_map_hash): Likewise. (tree_int_map_marked_p): Likewise. (tree_priority_map): New type. (tree_priority_map_eq): New macro. (tree_priority_map_hash): Likewise. (tree_priority_map_marked_p): Likewise. * varasm.c (emults_decl): Adjust for refactoring of tree_map hierarchy. (emutls_common_1): Likewise. * lambda-code.c (replace_uses_equiv_to_x_with_y): Likewise. * tree-ssa-structalias.c (heapvar_lookup): Adjust for refactoring of tree_map hierarchy. * tree-cfg.c (move_stmt_r): Likewise. (new_label_mapper): Likewise. * c-tree.h (c_expand_body): Move to ... * c-common.h (c_expand_body): ... here. * c-decl.c (c_expand_body): Move to ... * c-common.c (c_expand_body): ... here. (c_common_attribute_table): Allow 1 argument for the constructor and destructor attributes. (get_priority): New function. (handle_constructor_attribute): Set DECL_INIT_PRIORITY. (handle_destructor_attribute): Set DECL_FINI_PRIORITY. * cp-tree.h (static_ctors): Remove. * cp-tree.h (static_dtors): Likewise. * cp-objcp-common.c (decl_shadowed_for_var_lookup): Adjust for refactoring of tree_map hierarchy. (decl_shadowed_for_var_insert): Likewise. * semantics.c (expand_body): Use c_expand_body. (expand_or_defer_fn): Don't update static_ctors or static_dtors. * decl2.c (static_ctors): Remove. (static_dtors): Likewise. (generate_ctor_or_dtor_function): Pass NULL_TREE to objc_generate_static_init_call. Do not call static_[cd]tors. (generate_ctor_and_dtor_functions_for_priority): Do not check for static_[cd]tors. (cp_write_global_declarations): Likewise. * decl.c (annotate_value): Adjust for refactoring of tree_map hierarchy. * gcc.dg/initpri1.c: New test. * gcc.dg/initpri2.c: Likewise. * g++.dg/special/initpri1.C: New test. * g++.dg/special/initpri2.C: Likewise. * g++.dg/special/conpr-1.C: Use init_priority effective target. * g++.dg/special/conpr-2.C: Likewise. * g++.dg/special/conpr-3.C: Likewise. * g++.dg/special/conpr-4.C: Likewise. * g++.dg/special/initp1.C: Likewise. * g++.dg/special/ecos.exp: Remove code to detect availability of constructor priorities. * lib/target-support.exp (target_init_priority): New function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122315 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc:bonzini2007-02-061-3/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | 2007-02-06 Paolo Bonzini <bonzini@gnu.org> * tree.c (tree_int_map_hash, tree_int_map_eq, tree_int_map_marked_p): Remove prototypes and make them non-static. (struct tree_int_map): Remove. * tree.h (struct tree_int_map): Move here, turning TO into an unsigned int. (tree_int_map_hash, tree_int_map_eq, tree_int_map_marked_p): Declare. * tree.h (TREE_COMPLEXITY): Remove. (struct tree_exp): Remove complexity field. * tree.c (build1_stat): Don't set it. gcc/ada: 2007-02-06 Paolo Bonzini <bonzini@gnu.org> * Make-lang.in (ada/decl.o): Add gt-ada-decl.h dependency. * decl.c: Include gt-ada-decl.h. (annotate_value_cache): New. (annotate_value): Use it instead of TREE_COMPLEXITY. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121647 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity): Use TREE_OVERFLOW instead ofsayle2007-01-251-12/+10
| | | | | | | | | | | | TREE_CONSTANT_OVERFLOW. (allocatable_size_p, annotate_value): Likewise. * trans.c (gnat_to_gnu): Likewise. * utils.c (unchecked_convert): Likewise. * utils2.c (build_simple_component_ref): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121177 138bc75d-0d04-0410-961f-82ee72b054a4
* 2006-10-31 Eric Botcazou <ebotcazou@adacore.com>charlet2006-10-311-226/+198
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Nicolas Setton <setton@adacore.com> Olivier Hainque <hainque@adacore.com> Gary Dismukes <dismukes@adacore.com> * gigi.h: (tree_code_for_record_type): Declare. (add_global_renaming_pointer): Rename to record_global_renaming_pointer. (get_global_renaming_pointers): Rename to invalidate_global_renaming_pointers. (static_ctors): Delete. (static_dtors): Likewise. (gnat_write_global_declarations): Declare. (create_var_decl): Adjust descriptive comment to indicate that the subprogram may return a CONST_DECL node. (create_true_var_decl): Declare new function, similar to create_var_decl but forcing the creation of a VAR_DECL node. (get_global_renaming_pointers): Declare. (add_global_renaming_pointer): Likewise. * ada-tree.h (DECL_READONLY_ONCE_ELAB): New macro. * decl.c (gnat_to_gnu_entity) <case E_Function>: Don't copy the type tree before setting TREE_ADDRESSABLE for by-reference return mechanism processing. (gnat_to_gnu_entity): Remove From_With_Type from computation for imported_p. <E_Access_Type>: Use the Non_Limited_View as the full view of the designated type if the pointer comes from a limited_with clause. Make incomplete designated type if it is in the main unit and has a freeze node. <E_Incomplete_Type>: Rework to treat Non_Limited_View, Full_View, and Underlying_Full_View similarly. Return earlier if the full view already has an associated tree. (gnat_to_gnu_entity) <E_Record_Type>: Restore comment. (gnat_to_gnu_entity) <E_Record_Type>: Do not use a dummy type. (gnat_to_gnu_entity) <E_Variable>: Set TYPE_REF_CAN_ALIAS_ALL on the reference type built for objects with an address clause. Use create_true_var_decl with const_flag set for DECL_CONST_CORRESPONDING_VARs, ensuring a VAR_DECL is created with TREE_READONLY set. (gnat_to_gnu_entity, case E_Enumeration_Type): Set TYPE_NAME for Character and Wide_Character types. This info is read by the dwarf-2 writer, and is needed to be able to use the command "ptype character" in the debugger. (gnat_to_gnu_entity): When generating a type representing a Character or Wide_Character type, set the flag TYPE_STRING_FLAG, so that debug writers can distinguish it from ordinary integers. (elaborate_expression_1): Test the DECL_READONLY_ONCE_ELAB flag in addition to TREE_READONLY to assert the constantness of variables for elaboration purposes. (gnat_to_gnu_entity, subprogram cases): Change loops on formal parameters to call new Einfo function First_Formal_With_Extras. (gnat_to_gnu_entity): In type_annotate mode, replace a discriminant of a protected type with its corresponding discriminant, to obtain a usable declaration (gnat_to_gnu_entity) <E_Access_Protected_Subprogram_Type>: Be prepared for a multiple elaboration of the "equivalent" type. (gnat_to_gnu_entity): Adjust for renaming of add_global_renaming_pointer into record_global_renaming_pointer. (gnat_to_gnu_entity) <E_Array_Type>: Do not force TYPE_NONALIASED_COMPONENT to 0 if the element type is an aggregate. <E_Array_Subtype>: Likewise. (gnat_to_gnu_entity) <E_Incomplete_Subtype>: Add support for regular incomplete subtypes and incomplete subtypes of incomplete types visible through a limited with clause. (gnat_to_gnu_entity) <E_Array_Subtype>: Take into account the bounds of the base index type for the maximum size of the array only if they are constant. (gnat_to_gnu_entity, renaming object case): Do not wrap up the expression into a SAVE_EXPR if stabilization failed. * utils.c (create_subprog_decl): Turn TREE_ADDRESSABLE on the type of a result decl into DECL_BY_REFERENCE on this decl, now what is expected by lower level compilation passes. (gnat_genericize): New function, lowering a function body to GENERIC. Turn the type of RESULT_DECL into a real reference type if the decl has been marked DECL_BY_REFERENCE, and adjust references to the latter accordingly. (gnat_genericize_r): New function. Tree walking callback for gnat_genericize. (convert_from_reference, is_byref_result): New functions. Helpers for gnat_genericize_r. (create_type_decl): Call gnat_pushdecl before calling rest_of_decl_compilation, to make sure that field TYPE_NAME of type_decl is properly set before calling the debug information writers. (write_record_type_debug_info): The heuristics which compute the alignment of a field in a variant record might not be accurate. Add a safety test to make sure no alignment is set to a smaller value than the alignment of the field type. (make_dummy_type): Use the Non_Limited_View as the underlying type if the type comes from a limited_with clause. Do not loop on the full view. (GET_GNU_TREE, SET_GNU_TREE, PRESENT_GNU_TREE): New macros. (dummy_node_table): New global variable, moved from decl.c. (GET_DUMMY_NODE, SET_DUMMY_NODE, PRESENT_DUMMY_NODE): New macros. (save_gnu_tree): Use above macros. (get_gnu_tree): Likewise. (present_gnu_tree): Likewise. (init_dummy_type): New function, moved from decl.c. Use above macros. (make_dummy_type): Likewise. (tree_code_for_record_type): New function extracted from make_dummy_type (init_gigi_decls): Set DECL_IS_MALLOC on gnat_malloc. (static_ctors): Change it to a vector, make static. (static_dtors): Likewise. (end_subprog_body): Adjust for above change. (build_global_cdtor): Moved from trans.c. (gnat_write_global_declarations): Emit global constructor and destructor, and call cgraph_optimize before emitting debug info for global declarations. (global_decls): New global variable. (gnat_pushdecl): Store the global declarations in global_decls, for later use. (gnat_write_global_declarations): Emit debug information for global declarations. (create_var_decl_1): Former create_var_decl, with an extra argument to state whether the creation of a CONST_DECL is allowed. (create_var_decl): Behavior unchanged. Now a wrapper around create_var_decl_1 allowing CONST_DECL creation. (create_true_var_decl): New function, similar to create_var_decl but forcing the creation of a VAR_DECL node (CONST_DECL not allowed). (create_field_decl): Do not always mark the field as addressable if its type is an aggregate. (global_renaming_pointers): New static variable. (add_global_renaming_pointer): New function. (get_global_renaming_pointers): Likewise. * misc.c (gnat_dwarf_name): New function. (LANG_HOOKS_DWARF_NAME): Define to gnat_dwarf_name. (gnat_post_options): Add comment about structural alias analysis. (gnat_parse_file): Do not call cgraph_optimize here. (LANG_HOOKS_WRITE_GLOBALS): Define to gnat_write_global_declarations. * trans.c (process_freeze_entity): Don't abort if we already have a non dummy GCC tree for a Concurrent_Record_Type, as it might legitimately have been elaborated while processing the associated Concurrent_Type prior to this explicit freeze node. (Identifier_to_gnu): Do not make a variable referenced in a SJLJ exception handler volatile if it is of variable size. (process_type): Remove bypass for types coming from a limited_with clause. (call_to_gnu): When processing the copy-out of a N_Type_Conversion GNAT actual, convert the corresponding gnu_actual to the real destination type when necessary. (add_decl_expr): Set the DECL_READONLY_ONCE_ELAB flag on variables originally TREE_READONLY but whose elaboration cannot be performed statically. Part of fix for F504-021. (tree_transform, subprogram cases): Change loops on formal parameters to call new Einfo function First_Formal_With_Extras. (gnat_to_gnu) <N_Op_Shift_Right_Arithmetic>: Ignore constant overflow stemming from type conversion for the lhs. (Attribute_to_gnu) <Attr_Alignment>: Also divide the alignment by the number of bits per unit for components of records. (gnat_to_gnu) <N_Code_Statement>: Mark operands addressable if needed. (Handled_Sequence_Of_Statements_to_gnu): Register the cleanup associated with At_End_Proc after the SJLJ EH cleanup. (Compilation_Unit_to_gnu): Call elaborate_all_entities only on the main compilation unit. (elaborate_all_entities): Do not retest type_annotate_only. (tree_transform) <N_Abstract_Subprogram_Declaration>: Process the result type of an abstract subprogram, which may be an itype associated with an anonymous access result (related to AI-318-02). (build_global_cdtor): Move to utils.c. (Case_Statement_to_gnu): Avoid adding the choice of a when statement if this choice is not a null tree nor an integer constant. (gigi): Run unshare_save_expr via walk_tree_without_duplicates on the body of elaboration routines instead of mark_unvisited. (add_stmt): Do not mark the tree. (add_decl_expr): Tweak comment. (mark_unvisited): Delete. (unshare_save_expr): New static function. (call_to_gnu): Issue an error when making a temporary around a procedure call because of non-addressable actual parameter if the type of the formal is by_reference. (Compilation_Unit_to_gnu): Invalidate the global renaming pointers after building the elaboration routine. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118331 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c, utils.c: Fix comment typos.kazu2006-10-031-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117405 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_to_gnu_entity) <E_Procedure>: Do not set "const" flagebotcazou2006-09-291-3/+13
| | | | | | | | | | | | | on "pure" Ada subprograms if SJLJ exceptions are used. * trans.c (Handled_Sequence_Of_Statements_to_gnu): Set TREE_NO_WARNING on the declaration node of JMPBUF_SAVE. * utils.c (init_gigi_decls): Set DECL_IS_PURE on the declaration nodes of Get_Jmpbuf_Address_Soft and Get_GNAT_Exception. * utils2.c (build_call_0_expr): Do not set TREE_SIDE_EFFECTS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117299 138bc75d-0d04-0410-961f-82ee72b054a4
* PR ada/15802ebotcazou2006-09-151-10/+53
| | | | | | | | | | | | * decl.c (same_discriminant_p): New static function. (gnat_to_gnu_entity) <E_Record_Type>: When there is a parent subtype and we have discriminants, fix up the COMPONENT_REFs for the discriminants to make them reference the corresponding fields of the parent subtype after it has been built. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116981 138bc75d-0d04-0410-961f-82ee72b054a4
* PR ada/28591ebotcazou2006-09-131-7/+10
| | | | | | | | | | * decl.c (components_to_record): Defer emitting debug info for the record type associated with the variant until after we are sure to actually use it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116928 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c, env.c, gigi.h, init.c, initialize.c, raise-gcc.c,kazu2006-05-281-3/+3
| | | | | | | | | | | sem_ch13.adb, sysdep.c, targtyps.c, tb-alvxw.c, tracebak.c, trans.c, utils.c: Fix comment typos. Follow spelling conventions. * gnat_rm.texi, gnat_ugn.texi, : Fix typos. Follow spelling conventions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114171 138bc75d-0d04-0410-961f-82ee72b054a4
* 2006-02-17 Eric Botcazou <botcazou@adacore.com>charlet2006-02-171-0/+1
| | | | | | | | | | | | | | | | | PR ada/26315 * utils2.c (find_common_type): If both input types are BLKmode and have the same constant size, keep using the first one. * bindgen.adb: (Gen_Versions_Ada): Revert previous workaround. * decl.c (gnat_to_gnu_entity): Only check TREE_OVERFLOW for a constant. * misc.c (gnat_handle_option): New case for -Woverlength-strings. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111183 138bc75d-0d04-0410-961f-82ee72b054a4
* 2006-02-13 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>charlet2006-02-151-71/+147
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Olivier Hainque <hainque@adacore.com> Eric Botcazou <ebotcazou@adacore.com> * ada-tree.h: (TYPE_UNCHECKED_UNION_P): Deleted. * gigi.h (value_factor_p): Add prototype and description, now public. * decl.c (gnat_to_gnu_field): Don't attempt BLKmode to integral type promotion for field with rep clause if the associated size was proven to be in error. Expand comments describing attempts to use a packable type. (gnat_to_gnu_entity) <E_Signed_Integer_Subtype, E_Floating_Point_Subtype>: Inherit alias set of what we are making a subtype of to ensure conflicts amongst all subtypes in a hierarchy, necessary since these are not different types and pointers may actually designate any subtype in this hierarchy. (gnat_to_gnu_entity, case E_Record_Type): Always make fields for discriminants but put them into record only if not Unchecked_Union; pass flag to components_to_record showing Unchecked_Union. (make_dummy_type): Use UNION_TYPE only if Unchecked_Union and no components before variants; don't set TYPE_UNCHECKED_UNION_P. (components_to_record): New argument UNCHECKED_UNION. Remove special case code for Unchecked_Union and instead use main code with small changes. PR ada/26096 (gnat_to_gnu_entity) <E_Variable>: Do not initialize the aligning variable with the expression being built, only its inner field. * trans.c (Handled_Sequence_Of_Statements_to_gnu): Remove call to emit_sequence_entry_statements. (emit_sequence_entry_statements, body_with_handlers_p): Delete. (establish_gnat_vms_condition_handler): Move before Subprogram_Body_to_gnu. (Subprogram_Body_to_gnu): On VMS, establish_gnat_vms_condition_handler for a subprogram if it has a foreign convention or is exported. (Identifier_to_gnu): Manually unshare the DECL_INITIAL tree when it is substituted for a CONST_DECL. (tree_transform, case N_Aggregate): Remove code for UNION_TYPE and pass Etype to assoc_to_constructor. (assoc_to_constructor): New argument, GNAT_ENTITY; use it to ignore discriminants of Unchecked_Union. (TARGET_ABI_OPEN_VMS): Define to 0 if not defined, so that later uses don't need cluttering preprocessor directives. (establish_gnat_vms_condition_handler): New function. Establish the GNAT condition handler as current in the compiled function. (body_with_handlers_p): New function. Tell whether a given sequence of statements node is attached to a package or subprogram body and involves exception handlers possibly nested within inner block statements. (emit_sequence_entry_statements): New function, to emit special statements on entry of sequences when necessary. Establish GNAT condition handler in the proper cases for VMS. (Handled_Sequence_Of_Statements_to_gnu): Start block code with emit_sequence_entry_statements. * utils2.c (find_common_type): If both input types are BLKmode and have a constant size, use the smaller one. (build_simple_component_ref): Also match if FIELD and NEW_FIELD are the same. * utils.c (value_factor_p): Make public, to allow uses from other gigi units. (create_type_decl): Do not set the flag DECL_IGNORED_P for dummy types. (convert, case UNION_TYPE): Remove special treatment for unchecked unions. PR ada/18659 (update_pointer_to): Update variants of pointer types to unconstrained arrays by attaching the list of fields of the main variant. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111030 138bc75d-0d04-0410-961f-82ee72b054a4
* * decl.c (gnat_substitute_in_type): Don't handle CHAR_TYPE.sayle2006-02-061-1/+0
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110647 138bc75d-0d04-0410-961f-82ee72b054a4
* 2005-12-05 Olivier Hainque <hainque@adacore.com>charlet2005-12-091-43/+50
| | | | | | | | | | | | | * decl.c (gnat_to_gnu_entity, renaming object case): Don't early expand pointer initialization values. Make a SAVE_EXPR instead. Add comments about the use and expansion of SAVE_EXPRs in the various possible renaming handling cases. (components_to_record, compare_field_bitpos): Sort by DECL_UID, not by abusing DECL_FCONTEXT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108286 138bc75d-0d04-0410-961f-82ee72b054a4
* 2005-11-14 Thomas Quinot <quinot@adacore.com>charlet2005-11-151-118/+159
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Olivier Hainque <hainque@adacore.com> Eric Botcazou <ebotcazou@adacore.com> * decl.c: Factor common code to build a storage type for an unconstrained object from a fat or thin pointer type and a constrained object type. (annotate_value): Handle BIT_AND_EXPR. (annotate_rep): Don't restrict the back annotation of inherited components to the type_annotate_only case. (gnat_to_gnu_entity) <E_Array_Type>: Do not invoke create_type_decl if we are not defining the type. <E_Record_Type>: Likewise. (gnat_to_gnu_entity) <object, renaming>: Adjust comments and structure to get advantage of the new maybe_stabilize_reference interface, to ensure that what we reference is indeed stabilized instead of relying on assumptions on what the stabilizer does. (gnat_to_gnu_entity) <E_Incomplete_Type>: If the entity is an incomplete type imported through a limited_with clause, use its non-limited view. (Has_Stdcall_Convention): New macro, to centralize the Windows vs others differentiation. (gnat_to_gnu_entity): Use Has_Stdcall_Convention instead of a spread mix of #if sections + explicit comparisons of convention identifiers. (gnat_to_gnu_entity) <E_Variable>: Decrement force_global if necessary before early-returning for certain types when code generation is disabled. (gnat_to_gnu_entity) <object>: Adjust comment attached to the nullification of gnu_expr we do for objects with address clause and that we are not defining. (elaborate_expression_1): Do not create constants when creating variables needed by the debug info: the dwarf2 writer considers that CONST_DECLs is used only to represent enumeration constants, and emits nothing for them. (gnat_to_gnu_entity) <object>: When turning a non-definition of an object with an address clause into an indirect reference, drop the initializing expression. Include "expr.h". (STACK_CHECK_BUILTIN): Delete. (STACK_CHECK_PROBE_INTERVAL): Likewise. (STACK_CHECK_MAX_FRAME_SIZE): Likewise. (STACK_CHECK_MAX_VAR_SIZE): Likewise. (gnat_to_gnu_entity): If gnat_entity is a renaming, do not mark the tree corresponding to the renamed object as ignored for debugging purposes. * trans.c (tree_transform, case N_Attribute_Reference, case Attr_Size & related): For a prefix that is a dereference of a fat or thin pointer, if there is an actual subtype provided by the front-end, use that subtype to build an actual type with bounds template. (tree_transform, case N_Free_Statement): If an Actual_Designated_Subtype is provided by the front-end, use that subtype to compute the size of the deallocated object. (gnat_to_gnu): When adding a statement into an elaboration procedure, check for a potential violation of a No_Elaboration_Code restriction. (maybe_stabilize_reference): New function, like gnat_stabilize_reference with extra arguments to control whether to recurse through non-values and to let the caller know if the stabilization has succeeded. (gnat_stabilize_reference): Now a simple wrapper around maybe_stabilize, for common uses without restriction on lvalues and without need to check for the success indication. (gnat_to_gnu, call_to_gnu): Adjust calls to gnat_stabilize_reference, to pass false instead of 0 as the FORCE argument which is a bool. (Identifier_to_gnu): Remove checks ensuring that an renamed object attached to a renaming pointer has been properly stabilized, as no such object is attached otherwise. (call_to_gnu): Invoke create_var_decl to create the temporary when the function uses the "target pointer" return mechanism. Reinstate conversion of the actual to the type of the formal parameter before any other specific treatment based on the passing mechanism. This turns out to be necessary in order for PLACEHOLDER substitution to work properly when the latter type is unconstrained. * gigi.h (build_unc_object_type_from_ptr): New subprogram, factoring a common pattern. (maybe_stabilize_reference): New function, like gnat_stabilize_reference with extra arguments to control whether to recurse through non-values and to let the caller know if the stabilization has succeeded. * utils2.c (gnat_build_constructor): Only sort the fields for possible static output of record constructor if all the components are constant. (gnat_build_constructor): For a record type, sort the list of field initializers in increasing bit position order. Factor common code to build a storage type for an unconstrained object from a fat or thin pointer type and a constrained object type. (build_unary_op) <ADDR_EXPR>: Always recurse down conversions between types variants, and process special cases of VIEW_CONVERT expressions as their NOP_EXPR counterpart to ensure we get to the CORRESPONDING_VARs associated with CONST_DECls. (build_binary_op) <MODIFY_EXPR>: Do not strip VIEW_CONVERT_EXPRs on the right-hand side. * utils.c (build_unc_object_type_from_ptr): New subprogram, factoring a common pattern. (convert) <VIEW_CONVERT_EXPR>: Return the inner operand directly if we are converting back to its original type. (convert) <JM input>: Fallthrough regular conversion code instead of extracting the object if converting to a type variant. (create_var_decl): When a variable has an initializer requiring code generation and we are at the top level, check for a potential violation of a No_Elaboration_Code restriction. (create_var_decl): call expand_decl for CONST_DECLs, to set MODE, ALIGN SIZE and SIZE_UNIT which we need for later back-annotations. * utils.c: (convert) <STRING_CST>: Remove obsolete code. <VIEW_CONVERT_EXPR>: Do not lift the conversion if the target type is an unchecked union. (pushdecl): Set DECL_NO_STATIC_CHAIN on imported nested functions. (convert) <VIEW_CONVERT_EXPR>: When the types have the same main variant, just replace the VIEW_CONVERT_EXPR. <UNION_TYPE>: Revert 2005-03-02 change. * repinfo.h, repinfo.ads: Add tcode for BIT_AND_EXPR. * repinfo.adb (Print_Expr, Rep_Value): Handle Bit_And_Expressions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106961 138bc75d-0d04-0410-961f-82ee72b054a4