summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-25 09:42:41 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-25 09:42:41 +0000
commit0954931c29742fea64063d4fda678604b2894ec8 (patch)
treef618dae8160d46ea99f359e80da1ab683354f146 /gcc/ada
parent4c043c94a3b753b1577f2b4dd9223a0e7cfb11d5 (diff)
downloadgcc-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/ada')
-rw-r--r--gcc/ada/ChangeLog8
-rw-r--r--gcc/ada/exp_dbug.ads24
-rw-r--r--gcc/ada/gcc-interface/decl.c16
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);