diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-04-25 09:42:41 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-04-25 09:42:41 +0000 |
commit | 0954931c29742fea64063d4fda678604b2894ec8 (patch) | |
tree | f618dae8160d46ea99f359e80da1ab683354f146 /gcc | |
parent | 4c043c94a3b753b1577f2b4dd9223a0e7cfb11d5 (diff) | |
download | gcc-0954931c29742fea64063d4fda678604b2894ec8.tar.gz |
* exp_dbug.ads: Fix outdated description. Mention link between XVS
and XVZ objects.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Set
XVZ variable as unit size of XVS type.
(maybe_pad_type): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158703 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/ada/exp_dbug.ads | 24 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/decl.c | 16 |
3 files changed, 31 insertions, 17 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 51f769cbd8d..c5dac667602 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,13 @@ 2010-04-25 Eric Botcazou <ebotcazou@adacore.com> + * exp_dbug.ads: Fix outdated description. Mention link between XVS + and XVZ objects. + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Set + XVZ variable as unit size of XVS type. + (maybe_pad_type): Likewise. + +2010-04-25 Eric Botcazou <ebotcazou@adacore.com> + * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Do not use memmove if the array type is bit-packed. diff --git a/gcc/ada/exp_dbug.ads b/gcc/ada/exp_dbug.ads index 1d26bb3ef75..99a61d4efd3 100644 --- a/gcc/ada/exp_dbug.ads +++ b/gcc/ada/exp_dbug.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2010, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -853,16 +853,17 @@ package Exp_Dbug is -- The size of the objects typed as x should be obtained from the -- structure of x (and x___XVE, if applicable) as for ordinary types -- unless there is a variable named x___XVZ, which, if present, will - -- hold the size (in bytes) of x. + -- hold the size (in bytes) of x; in this latter case, the size of the + -- x___XVS type will not be a constant but a reference to x___XVZ. -- The type x will either be a subtype of y (see also Subtypes of - -- Variant Records, below) or will contain no fields at all. The layout, - -- types, and positions of these fields will be accurate, if present. - -- (Currently, however, the GDB debugger makes no use of x except to - -- determine its size). + -- Variant Records, below) or will contain a single field of type y, + -- or no fields at all. The layout, types, and positions of these + -- fields will be accurate, if present. (Currently, however, the GDB + -- debugger makes no use of x except to determine its size). - -- Among other uses, XVS types are sometimes used to encode - -- unconstrained types. For example, given + -- Among other uses, XVS types are used to encode unconstrained types. + -- For example, given: -- -- subtype Int is INTEGER range 0..10; -- type T1 (N: Int := 0) is record @@ -873,13 +874,14 @@ package Exp_Dbug is -- the element type for AT1 might have a type defined as if it had -- been written: -- - -- type at1___PAD is record null; end record; + -- type at1___PAD is record F : T1; end record; -- for at1___PAD'Size use 16 * 8; -- - -- and there would also be + -- and there would also be: -- - -- type at1___PAD___XVS is record t1: Integer; end record; + -- type at1___PAD___XVS is record t1: reft1; end record; -- type t1 is ... + -- type reft1 is <reference to t1> -- -- Had the subtype Int been dynamic: -- diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index f9d88a6a9bb..ccedee020f0 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -3258,9 +3258,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) if (definition && TREE_CODE (gnu_size_unit) != INTEGER_CST && !CONTAINS_PLACEHOLDER_P (gnu_size_unit)) - create_var_decl (create_concat_name (gnat_entity, "XVZ"), - NULL_TREE, sizetype, gnu_size_unit, false, - false, false, false, NULL, gnat_entity); + TYPE_SIZE_UNIT (gnu_subtype_marker) + = create_var_decl (create_concat_name (gnat_entity, + "XVZ"), + NULL_TREE, sizetype, gnu_size_unit, + false, false, false, false, NULL, + gnat_entity); } /* Now we can finalize it. */ @@ -6253,9 +6256,10 @@ maybe_pad_type (tree type, tree size, unsigned int align, add_parallel_type (TYPE_STUB_DECL (record), marker); if (definition && size && TREE_CODE (size) != INTEGER_CST) - create_var_decl (concat_name (name, "XVZ"), NULL_TREE, sizetype, - TYPE_SIZE_UNIT (record), false, false, false, - false, NULL, gnat_entity); + TYPE_SIZE_UNIT (marker) + = create_var_decl (concat_name (name, "XVZ"), NULL_TREE, sizetype, + TYPE_SIZE_UNIT (record), false, false, false, + false, NULL, gnat_entity); } rest_of_record_type_compilation (record); |