OSDN Git Service

Backport from mainline
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 Jan 2013 12:03:03 +0000 (12:03 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 Jan 2013 12:03:03 +0000 (12:03 +0000)
2013-01-04  Robert Dewar  <dewar@adacore.com>

* gnat_rm.texi: Document alignment choice for subtypes.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@194943 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gnat_rm.texi

index 75c1223..b5cbbeb 100644 (file)
@@ -1,3 +1,10 @@
+2013-01-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       Backport from mainline
+       2013-01-04  Robert Dewar  <dewar@adacore.com>
+
+       * gnat_rm.texi: Document alignment choice for subtypes.
+
 2012-12-21  Ed Schonberg  <schonberg@adacore.com>
 
        PR ada/53737
index 9b10794..7aee128 100644 (file)
@@ -11258,6 +11258,30 @@ The default alignment for the type @code{V} is 4, as a result of the
 Integer field in the record, but it is permissible, as shown, to
 override the default alignment of the record with a smaller value.
 
+@cindex Alignment, subtypes
+Note that according to the Ada standard, an alignment clause applies only
+to the first named subtype. If additional subtypes are declared, then the
+compiler is allowed to choose any alignment it likes, and there is no way
+to control this choice. Consider:
+
+@smallexample @c ada
+   type R is range 1 .. 10_000;
+   for R'Alignment use 1;
+   subtype RS is R range 1 .. 1000;
+@end smallexample
+
+@noindent
+The alignment clause specifies an alignment of 1 for the first named subtype
+@code{R} but this does not necessarily apply to @code{RS}. When writing
+portable Ada code, you should avoid writing code that explicitly or
+implicitly relies on the alignment of such subtypes.
+
+For the GNAT compiler, if an explicit alignment clause is given, this
+value is also used for any subsequent subtypes. So for GNAT, in the
+above example, you can count on the alignment of @code{RS} being 1. But this
+assumption is non-portable, and other compilers may choose different
+alignments for the subtype @code{RS}.
+
 @node Size Clauses
 @section Size Clauses
 @cindex Size Clause