[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 24 Feb 2014 17:01:19 +0000 (18:01 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 24 Feb 2014 17:01:19 +0000 (18:01 +0100)
2014-02-24  Thomas Quinot  <quinot@adacore.com>

* s-os_lib.adb (Errno_Message): Do not depend on Integer'Image.
* s-oscons-tmplt.c: On VxWorks, include adaint.h only after
vxWorks.h has been included.  Also ensure that file attributes
related definitions are output even in cases where socket support
is not enabled.
* a-tags.adb: Code clean up.
* Make-generated.in (OSCONS_CPP, OSCONS_EXTRACT): Use -iquote
instead of -I to add the main ada source directory to the header
search path, in order to avoid conflict between our own "types.h"
and VxWork's <types.h>.

2014-02-24  Robert Dewar  <dewar@adacore.com>

* atree.ads, atree.adb (Copy_Separate_Tree): Add Syntax_Only parameter.
* debug.adb: Remove documentation of -gnatd.X, no longer used.
* freeze.adb (Wrap_Imported_Subprogram): Fixed and activated.

2014-02-24  Bob Duff  <duff@adacore.com>

* gnat_ugn.texi: Improve documentation of gnatpp.

From-SVN: r208083

gcc/ada/ChangeLog
gcc/ada/Make-generated.in
gcc/ada/a-tags.adb
gcc/ada/atree.adb
gcc/ada/atree.ads
gcc/ada/debug.adb
gcc/ada/freeze.adb
gcc/ada/gnat_ugn.texi
gcc/ada/s-os_lib.adb
gcc/ada/s-oscons-tmplt.c

index c07dcd8782eafd7d62795f5c98b6e90d5b7f51b6..26865cf251bcc2aca588738a8272c9b3f7aa86be 100644 (file)
@@ -1,3 +1,26 @@
+2014-02-24  Thomas Quinot  <quinot@adacore.com>
+
+       * s-os_lib.adb (Errno_Message): Do not depend on Integer'Image.
+       * s-oscons-tmplt.c: On VxWorks, include adaint.h only after
+       vxWorks.h has been included.  Also ensure that file attributes
+       related definitions are output even in cases where socket support
+       is not enabled.
+       * a-tags.adb: Code clean up.
+       * Make-generated.in (OSCONS_CPP, OSCONS_EXTRACT): Use -iquote
+       instead of -I to add the main ada source directory to the header
+       search path, in order to avoid conflict between our own "types.h"
+       and VxWork's <types.h>.
+
+2014-02-24  Robert Dewar  <dewar@adacore.com>
+
+       * atree.ads, atree.adb (Copy_Separate_Tree): Add Syntax_Only parameter.
+       * debug.adb: Remove documentation of -gnatd.X, no longer used.
+       * freeze.adb (Wrap_Imported_Subprogram): Fixed and activated.
+
+2014-02-24  Bob Duff  <duff@adacore.com>
+
+       * gnat_ugn.texi: Improve documentation of gnatpp.
+
 2014-02-24  Thomas Quinot  <quinot@adacore.com>
 
        * g-stheme.adb, g-socthi-vms.adb, g-socthi-vms.ads,
index 5c5812c94c9b4a01061d7195ec3199912fee16f5..412e18b58c060cac9c94409f9d454bfd464c48a6 100644 (file)
@@ -67,12 +67,20 @@ $(ADA_GEN_SUBDIR)/stamp-nmake: $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/nma
        touch $(ADA_GEN_SUBDIR)/stamp-nmake
 
 # GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust
-# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons
+# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons.
+
 OSCONS_CC=$(subst ./xgcc,../../../xgcc,$(subst -B./, -B../../../,$(GCC_FOR_TARGET)))
+
+# The main ada source directory must be on the include path for #include "..."
+# because s-oscons-tmplt.c requires adaint.h, gsocket.h, and any file included
+# by these headers. However note that we must use -iquote, not -I, so that
+# ada/types.h does not conflict with a same-named system header (VxWorks
+# has a <types.h> header).
+
 OSCONS_SRCDIR=$${_oscons_srcdir}
 OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
-  -DTARGET=\"$(target)\" -I$(OSCONS_SRCDIR) s-oscons-tmplt.c > s-oscons-tmplt.i
-OSCONS_EXTRACT=$(OSCONS_CC) -I$(OSCONS_SRCDIR) -S s-oscons-tmplt.i
+  -DTARGET=\"$(target)\" -iquote $(OSCONS_SRCDIR) s-oscons-tmplt.c > s-oscons-tmplt.i
+OSCONS_EXTRACT=$(OSCONS_CC) -iquote $(OSCONS_SRCDIR) -S s-oscons-tmplt.i
 
 # Note: if you need to build with a non-GNU compiler, you could adapt the
 # following definitions (written for VMS DEC-C)
index 6c096c00b41aef13d3867e5d53129ffbf7a24ecf..8e19d8378d424bfb8f2902d46d2a3e2d42ad51ee 100644 (file)
@@ -31,7 +31,6 @@
 
 with Ada.Exceptions;
 with Ada.Unchecked_Conversion;
-with System.CRTL;             use System.CRTL;
 with System.HTable;
 with System.Storage_Elements; use System.Storage_Elements;
 with System.WCh_Con;          use System.WCh_Con;
@@ -57,6 +56,10 @@ package body Ada.Tags is
    --  table.  This is Inline_Always since it is called from other Inline_
    --  Always subprograms where we want no out of line code to be generated.
 
+   function Length (Str : Cstring_Ptr) return Natural;
+   --  Length of string represented by the given pointer (treating the string
+   --  as a C-style string, which is Nul terminated).
+
    function OSD (T : Tag) return Object_Specific_Data_Ptr;
    --  Ada 2005 (AI-251): Given a pointer T to a secondary dispatch table,
    --  retrieve the address of the record containing the Object Specific
@@ -270,11 +273,10 @@ package body Ada.Tags is
 
       function Hash (F : System.Address) return HTable_Headers is
          function H is new System.HTable.Hash (HTable_Headers);
-         Str : String (1 .. Integer (strlen (F)));
-         for Str'Address use F;
-         pragma Import (Ada, Str);
+         Str : constant Cstring_Ptr    := To_Cstring_Ptr (F);
+         Res : constant HTable_Headers := H (Str (1 .. Length (Str)));
       begin
-         return H (Str);
+         return Res;
       end Hash;
 
       -----------------
@@ -283,9 +285,9 @@ package body Ada.Tags is
 
       procedure Set_HT_Link (T : Tag; Next : Tag) is
          TSD_Ptr : constant Addr_Ptr :=
-                     To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
+           To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
          TSD     : constant Type_Specific_Data_Ptr :=
-                     To_Type_Specific_Data_Ptr (TSD_Ptr.all);
+           To_Type_Specific_Data_Ptr (TSD_Ptr.all);
       begin
          TSD.HT_Link.all := Next;
       end Set_HT_Link;
@@ -308,10 +310,8 @@ package body Ada.Tags is
    procedure Check_TSD (TSD : Type_Specific_Data_Ptr) is
       T : Tag;
 
-      E_Tag_Len : constant Integer :=
-                    Integer (strlen (TSD.External_Tag.all'Address));
-
-      E_Tag : String (1 .. E_Tag_Len);
+      E_Tag_Len : constant Integer := Length (TSD.External_Tag);
+      E_Tag     : String (1 .. E_Tag_Len);
       for E_Tag'Address use TSD.External_Tag.all'Address;
       pragma Import (Ada, E_Tag);
 
@@ -486,7 +486,7 @@ package body Ada.Tags is
       TSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
       TSD     := To_Type_Specific_Data_Ptr (TSD_Ptr.all);
       Result  := TSD.Expanded_Name;
-      return Result (1 .. Integer (strlen  (Result.all'Address)));
+      return Result (1 .. Length (Result));
    end Expanded_Name;
 
    ------------------
@@ -506,7 +506,7 @@ package body Ada.Tags is
       TSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
       TSD     := To_Type_Specific_Data_Ptr (TSD_Ptr.all);
       Result  := TSD.External_Tag;
-      return Result (1 .. Integer (strlen (Result.all'Address)));
+      return Result (1 .. Length (Result));
    end External_Tag;
 
    ---------------------
@@ -730,6 +730,27 @@ package body Ada.Tags is
         and then D_TSD.Access_Level = A_TSD.Access_Level;
    end Is_Descendant_At_Same_Level;
 
+   ------------
+   -- Length --
+   ------------
+
+   --  Note: This unit is used in the Ravenscar runtime library, so it cannot
+   --  depend on System.CTRL. Furthermore, this happens on CPUs where the GCC
+   --  intrinsic strlen may not be available, so we need to recode our own Ada
+   --  version here.
+
+   function Length (Str : Cstring_Ptr) return Natural is
+      Len : Integer;
+
+   begin
+      Len := 1;
+      while Str (Len) /= ASCII.NUL loop
+         Len := Len + 1;
+      end loop;
+
+      return Len - 1;
+   end Length;
+
    -------------------
    -- Offset_To_Top --
    -------------------
index 2e3f76b5c6497853560e82741238595d99355568..8b0ef2be83958a01f626675b27e2b586110035b6 100644 (file)
@@ -772,7 +772,10 @@ package body Atree is
    -- Copy_Separate_Tree --
    ------------------------
 
-   function Copy_Separate_Tree (Source : Node_Id) return Node_Id is
+   function Copy_Separate_Tree
+     (Source      : Node_Id;
+      Syntax_Only : Boolean := False) return Node_Id
+   is
       New_Id  : Node_Id;
 
       function Copy_Entity (E : Entity_Id) return Entity_Id;
@@ -793,6 +796,10 @@ package body Atree is
          New_Ent : Entity_Id;
 
       begin
+         --  Build appropriate node. Note that in this case, we do not need to
+         --  do any special casing for Syntax_Only, since the new node has no
+         --  Etype set, and is always unanalyzed.
+
          case N_Entity (Nkind (E)) is
             when N_Defining_Identifier =>
                New_Ent := New_Entity (N_Defining_Identifier, Sloc (E));
@@ -828,7 +835,7 @@ package body Atree is
                if Has_Extension (E) then
                   Append (Copy_Entity (E), NL);
                else
-                  Append (Copy_Separate_Tree (E), NL);
+                  Append (Copy_Separate_Tree (E, Syntax_Only), NL);
                end if;
 
                Next (E);
@@ -847,7 +854,8 @@ package body Atree is
 
       begin
          if Field in Node_Range then
-            New_N := Union_Id (Copy_Separate_Tree (Node_Id (Field)));
+            New_N :=
+              Union_Id (Copy_Separate_Tree (Node_Id (Field), Syntax_Only));
 
             if Parent (Node_Id (Field)) = Source then
                Set_Parent (Node_Id (New_N), New_Id);
@@ -898,6 +906,47 @@ package body Atree is
             Set_Entity (New_Id, Empty);
          end if;
 
+         --  This is the point at which we do the special processing for
+         --  the Syntax_Only flag being set:
+
+         if Syntax_Only then
+
+            --  Reset all Etype fields and Analyzed flags
+
+            if Nkind (New_Id) in N_Has_Etype then
+               Set_Etype (New_Id, Empty);
+            end if;
+
+            Set_Analyzed (New_Id, False);
+
+            --  Rather special case, if we have an expanded name, then change
+            --  it back into a selected component, so that the tree looks the
+            --  way it did coming out of the parser. This will change back
+            --  when we analyze the selected component node.
+
+            if Nkind (New_Id) = N_Expanded_Name then
+
+               --  The following code is a bit kludgy. It would be cleaner to
+               --  Add an entry Change_Expanded_Name_To_Selected_Component to
+               --  Sinfo.CN, but that's an earthquake, because it has the wrong
+               --  license, and Atree is used outside the compiler, e.g. in the
+               --  binder and in ASIS, so we don't want to add that dependency.
+
+               --  Consequently we have no choice but to hold our noses and do
+               --  the change manually. At least we are Atree, so this odd use
+               --  of Atree.Unchecked_Access is at least all in the family.
+
+               --  Change the node type
+
+               Atree.Unchecked_Access.Set_Nkind (New_Id, N_Selected_Component);
+
+               --  Clear the Chars field which is not present in a selected
+               --  component node, so we don't want a junk value around.
+
+               Set_Node1 (New_Id, Empty);
+            end if;
+         end if;
+
          --  All done, return copied node
 
          return New_Id;
index ba110825b397d21e1366d9050cdb18fe0f6beff3..1a369575d215ef42190d5c469380277189553e5d 100644 (file)
@@ -494,7 +494,9 @@ package Atree is
    --  is thus still attached to the tree. It is valid for Source to be Empty,
    --  in which case Relocate_Node simply returns Empty as the result.
 
-   function Copy_Separate_Tree (Source : Node_Id) return Node_Id;
+   function Copy_Separate_Tree
+     (Source      : Node_Id;
+      Syntax_Only : Boolean := False) return Node_Id;
    --  Given a node that is the root of a subtree, Copy_Separate_Tree copies
    --  the entire syntactic subtree, including recursively any descendants
    --  whose parent field references a copied node (descendants not linked to
@@ -505,6 +507,33 @@ package Atree is
    --  is called on an unanalyzed tree, and no semantic information is copied.
    --  However, to ensure that no entities are shared between the two when the
    --  source is already analyzed, entity fields in the copy are zeroed out.
+   --
+   --  In addition, if Syntax_Only is set True, then when Copy_Separate_Tree
+   --  is applied Identical to Copy_Separate_Tree except that in the case of
+   --  applying it to an already analyzed tree, all Etype fields are reset,
+   --  and all Analyzed flags are set False. In addition, Expanded_Name
+   --  nodes are converted back into the original parser form (where they are
+   --  Selected_Components), so that renalysis does the right thing.
+   --
+   --  Note: it really seems like Copy_Separate_Tree could do these identical
+   --  steps unconditionally, and that nearly works, except for this one known
+   --  test case that fails:
+   --
+   --    1. procedure III is
+   --    2.    procedure Proc2 is
+   --    3.       pragma Inline_Always (Proc2);
+   --                                   |
+   --       >>> argument of "INLINE_ALWAYS" must be entity in
+   --           current scope
+   --
+   --    4.    begin
+   --    5.       null;
+   --    6.    end Proc2;
+   --    7. begin
+   --    8.    null;
+   --    9. end III;
+   --
+   --  To be investigated ???
 
    function Copy_Separate_List (Source : List_Id) return List_Id;
    --  Applies Copy_Separate_Tree to each element of the Source list, returning
index a6506932982b578ef396fc42f31fc9af56c786ce..11237e23dc9e5148b81cd016bd36bb36575f91b6 100644 (file)
@@ -141,7 +141,7 @@ package body Debug is
    --  d.U  Ignore indirect calls for static elaboration
    --  d.V
    --  d.W  Print out debugging information for Walk_Library_Items
-   --  d.X  Activate wrapping of imported subprograms with pre/post conditions
+   --  d.X
    --  d.Y
    --  d.Z
 
@@ -664,9 +664,6 @@ package body Debug is
    --       the order in which units are walked. This is primarily for use in
    --       debugging CodePeer mode.
 
-   --  d.X  Activates Wrap_Imported_Subprogram in Freeze (not yet working so
-   --       this allows checkin of partial implementation).
-
    --  d1   Error messages have node numbers where possible. Normally error
    --       messages have only source locations. This option is useful when
    --       debugging errors caused by expanded code, where the source location
index 716a96b42a633bce083de2546108cf4cd40af17d..a10290fb73a503cf161c4783edadf7662b964244 100644 (file)
@@ -3400,6 +3400,7 @@ package body Freeze is
 
       procedure Wrap_Imported_Subprogram (E : Entity_Id) is
          Loc   : constant Source_Ptr := Sloc (E);
+         CE    : constant Name_Id    := Chars (E);
          Spec  : Node_Id;
          Parms : List_Id;
          Stmt  : Node_Id;
@@ -3412,29 +3413,30 @@ package body Freeze is
 
          if not Is_Imported (E) then
             return;
-         end if;
 
          --  Test enabling conditions for wrapping
 
-         if Is_Subprogram (E)
+         elsif Is_Subprogram (E)
            and then Present (Contract (E))
            and then Present (Pre_Post_Conditions (Contract (E)))
            and then not GNATprove_Mode
          then
-            --  For now, activate this only if -gnatd.X is set, because there
-            --  are problems with this procedure, it is not working yet, but
-            --  we would like to be able to check it in ???
+            --  Here we do the wrap
 
-            if not Debug_Flag_Dot_XX then
-               Error_Msg_NE
-                 ("pre/post conditions on imported subprogram are not "
-                  & "enforced??", E, Pre_Post_Conditions (Contract (E)));
-               goto Not_Wrapped;
-            end if;
+            --  Note on calls to Copy_Separate_Tree. The trees we are copying
+            --  here are fully analyzed, but we definitely want fully syntactic
+            --  unanalyzed trees in the body we construct, so that the analysis
+            --  generates the right visibility. So this is a case in which we
+            --  set Syntax_Only. See spec of Copy_Separate_Tree for details on
+            --  the use of this flag.
+
+            --  Acquire copy of Inline pragma
+
+            Iprag :=
+              Copy_Separate_Tree (Import_Pragma (E), Syntax_Only => True);
 
             --  Fix up spec to be not imported any more
 
-            Iprag := Import_Pragma (E);
             Set_Is_Imported    (E, False);
             Set_Interface_Name (E, Empty);
             Set_Has_Completion (E, False);
@@ -3449,7 +3451,7 @@ package body Freeze is
             Parms := New_List;
             Forml := First_Formal (E);
             while Present (Forml) loop
-               Append_To (Parms, New_Occurrence_Of (Forml, Loc));
+               Append_To (Parms, Make_Identifier (Loc, Chars (Forml)));
                Next_Formal (Forml);
             end loop;
 
@@ -3460,13 +3462,13 @@ package body Freeze is
                  Make_Simple_Return_Statement (Loc,
                    Expression =>
                      Make_Function_Call (Loc,
-                       Name                   => New_Occurrence_Of (E, Loc),
+                       Name                   => Make_Identifier (Loc, CE),
                        Parameter_Associations => Parms));
 
             else
                Stmt :=
                  Make_Procedure_Call_Statement (Loc,
-                   Name                   => New_Occurrence_Of (E, Loc),
+                   Name                   => Make_Identifier (Loc, CE),
                    Parameter_Associations => Parms);
             end if;
 
@@ -3474,33 +3476,34 @@ package body Freeze is
 
             Bod :=
               Make_Subprogram_Body (Loc,
-                Specification              => Copy_Separate_Tree (Spec),
+                Specification              =>
+                  Copy_Separate_Tree (Spec, Syntax_Only => True),
                 Declarations               => New_List (
                   Make_Subprogram_Declaration (Loc,
-                    Specification => Copy_Separate_Tree (Spec)),
-                  Copy_Separate_Tree (Iprag)),
+                    Specification =>
+                      Copy_Separate_Tree (Spec, Syntax_Only => True)),
+                    Iprag),
                 Handled_Statement_Sequence =>
                   Make_Handled_Sequence_Of_Statements (Loc,
                     Statements             => New_List (Stmt),
-                    End_Label              => New_Occurrence_Of (E, Loc)));
+                    End_Label              => Make_Identifier (Loc, CE)));
 
             --  Append the body to freeze result
 
             Add_To_Result (Bod);
             return;
-         end if;
 
          --  Case of imported subprogram that does not get wrapped
 
-         <<Not_Wrapped>>
-
-         --  Set Is_Public. All imported entities need an external symbol
-         --  created for them since they are always referenced from another
-         --  object file. Note this used to be set when we set Is_Imported
-         --  back in Sem_Prag, but now we delay it to this point, since we
-         --  don't want to set this flag if we wrap an imported subprogram.
+         else
+            --  Set Is_Public. All imported entities need an external symbol
+            --  created for them since they are always referenced from another
+            --  object file. Note this used to be set when we set Is_Imported
+            --  back in Sem_Prag, but now we delay it to this point, since we
+            --  don't want to set this flag if we wrap an imported subprogram.
 
-         Set_Is_Public (E);
+            Set_Is_Public (E);
+         end if;
       end Wrap_Imported_Subprogram;
 
    --  Start of processing for Freeze_Entity
index a57715a8a26fcc1d4474cf08b2f0e7d03a50c81e..6fc86ab524a8509440be7a84be65332a4abb23ea 100644 (file)
@@ -11319,7 +11319,7 @@ to be processed.
 @item -X@var{name}=@var{value}
 @cindex @option{-X} @command{gnatelim}
 Indicates that external variable @var{name} in the argument project
-has the @var{value} value. Has no effect if no project is specified as
+has the value @var{value}. Has no effect if no project is specified as
 tool argument.
 
 @item ^-files^/FILES^=@var{filename}
@@ -14076,25 +14076,23 @@ is now available.
 To invoke the old formatting algorithms, use the @option{--pp-old} switch.
 Support for @option{--pp-old} will be removed in some future version.
 
-To produce a reformatted file, @command{gnatpp} generates and uses the ASIS
-tree for the input source and thus requires the input to be syntactically and
-semantically legal.
-If this condition is not met, @command{gnatpp} will terminate with an
-error message; no output file will be generated.
+To produce a reformatted file, @command{gnatpp} invokes the Ada
+compiler and generates and uses the ASIS tree for the input source;
+thus the input must be legal Ada code.
 
 @command{gnatpp} cannot process sources that contain
 preprocessing directives.
 
-If the compilation unit
-contained in the input source depends semantically upon units located
-outside the current directory, you have to provide the source search path
-when invoking @command{gnatpp}, if these units are contained in files with
-names that do not follow the GNAT file naming rules, you have to provide
-the configuration file describing the corresponding naming scheme;
-see the description of the @command{gnatpp}
-switches below. Another possibility is to use a project file and to
-call @command{gnatpp} through the @command{gnat} driver
-(see @ref{The GNAT Driver and Project Files}).
+If the compilation unit contained in the input source depends
+semantically upon units located outside the current directory, you
+have to provide the source search path when invoking
+@command{gnatpp}. If these units are contained in files with names
+that do not follow the GNAT file naming rules, you have to provide a
+configuration file describing the corresponding naming scheme; see the
+description of the @command{gnatpp} switches below. Another
+possibility is to use a project file and to call @command{gnatpp}
+through the @command{gnat} driver (see @ref{The GNAT Driver and
+Project Files}).
 
 The @command{gnatpp} command has the form
 
@@ -14114,18 +14112,16 @@ output source file
 
 @item
 @var{filename} is the name (including the extension) of the source file to
-reformat; ``wildcards'' or several file names on the same gnatpp command are
-allowed.  The file name may contain path information; it does not have to
+reformat; wildcards or several file names on the same gnatpp command are
+allowed. The file name may contain path information; it does not have to
 follow the GNAT file naming rules
 
 @item
 @samp{@var{gcc_switches}} is a list of switches for
 @command{gcc}. They will be passed on to all compiler invocations made by
-@command{gnatelim} to generate the ASIS trees. Here you can provide
+@command{gnatpp} to generate the ASIS trees. Here you can provide
 @option{^-I^/INCLUDE_DIRS=^} switches to form the source search path,
-use the @option{-gnatec} switch to set the configuration file,
-use the @option{-gnat05} switch if sources should be compiled in
-Ada 2005 mode  etc.
+use the @option{-gnatec} switch to set the configuration file, etc.
 @end itemize
 
 @node Switches for gnatpp
@@ -14149,10 +14145,6 @@ You may supply several such switches to @command{gnatpp}, but then
 each must be specified in full, with both the name and the value.
 Abbreviated forms (the name appearing once, followed by each value) are
 not permitted.
-For example, to set
-the alignment of the assignment delimiter both in declarations and in
-assignment statements, you must write @option{-A2A3}
-(or @option{-A2 -A3}), but not @option{-A23}.
 @end ifclear
 
 @ifset vms
@@ -14162,21 +14154,11 @@ word may have exactly one option, which specifies either upper case, lower
 case, or mixed case), and thus exactly one such option can be in effect for
 an invocation of @command{gnatpp}.
 If more than one is supplied, the last one is used.
-However, some qualifiers have options that are mutually compatible,
-and then you may then supply several such options when invoking
-@command{gnatpp}.
 @end ifset
 
-In most cases, it is obvious whether or not the
-^values for a switch with a given name^options for a given qualifier^
-are compatible with each other.
-When the semantics might not be evident, the summaries below explicitly
-indicate the effect.
-
 @menu
 * Alignment Control::
 * Casing Control::
-* Construct Layout Control::
 * General Text Layout Control::
 * Other Formatting Options::
 * Setting the Source Search Path::
@@ -14190,44 +14172,22 @@ indicate the effect.
 
 @noindent
 Programs can be easier to read if certain constructs are vertically aligned.
-By default all alignments are set ON.
-Through the @option{^-A0^/ALIGN=OFF^} switch you may reset the default to
-OFF, and then use one or more of the other
-^@option{-A@var{n}} switches^@option{/ALIGN} options^
-to activate alignment for specific constructs.
+By default alignment of the following constructs is set ON:
+@code{:} in declarations, @code{:=} in initializations in declarations
+@code{:=} in assignment statements, @code{=>} in associations, and
+@code{at} keywords in the component clauses in record
+representation clauses.
 
 @table @option
 @cindex @option{^-A@var{n}^/ALIGN^} (@command{gnatpp})
 
-@ifset vms
-@item /ALIGN=ON
-Set all alignments to ON
-@end ifset
-
 @item ^-A0^/ALIGN=OFF^
-Set all alignments to OFF
-
-@item ^-A1^/ALIGN=COLONS^
-Align @code{:} in declarations
-
-@item ^-A2^/ALIGN=DECLARATIONS^
-Align @code{:=} in initializations in declarations
+Set alignment to OFF
 
-@item ^-A3^/ALIGN=STATEMENTS^
-Align @code{:=} in assignment statements
-
-@item ^-A4^/ALIGN=ARROWS^
-Align @code{=>} in associations
-
-@item ^-A5^/ALIGN=COMPONENT_CLAUSES^
-Align @code{at} keywords in the component clauses in record
-representation clauses
+@item ^-A1^/ALIGN=ON^
+Set alignment to ON
 @end table
 
-@noindent
-The @option{^-A^/ALIGN^} switches are mutually compatible; any combination
-is allowed.
-
 @node Casing Control
 @subsection Casing Control
 @cindex Casing control in @command{gnatpp}
@@ -14240,10 +14200,6 @@ general rule for name casing but also override this rule
 via a set of dictionary files.
 
 Three types of casing are supported: lower case, upper case, and mixed case.
-Lower and upper case are self-explanatory (but since some letters in
-Latin1 and other GNAT-supported character sets
-exist only in lower-case form, an upper case conversion will have no
-effect on them.)
 ``Mixed case'' means that the first letter, and also each letter immediately
 following an underscore, are converted to their uppercase forms;
 all the other letters are converted to their lowercase forms.
@@ -14369,10 +14325,6 @@ The @option{^-D-^/SPECIFIC_CASING^} and
 @option{^-D@var{file}^/DICTIONARY=@var{file}^} switches are mutually
 compatible.
 
-@node Construct Layout Control
-@subsection Construct Layout Control
-@cindex Layout control in @command{gnatpp}
-
 @noindent
 This group of @command{gnatpp} switches controls the layout of comments and
 complex syntactic constructs.  See @ref{Formatting Comments} for details
@@ -14381,53 +14333,31 @@ on their effect.
 @table @option
 @cindex @option{^-c@var{n}^/COMMENTS_LAYOUT^} (@command{gnatpp})
 @item ^-c0^/COMMENTS_LAYOUT=UNTOUCHED^
-All the comments remain unchanged
+All comments remain unchanged.
 
 @item ^-c1^/COMMENTS_LAYOUT=DEFAULT^
-GNAT-style comment line indentation (this is the default).
-
-@item ^-c2^/COMMENTS_LAYOUT=STANDARD_INDENT^
-Reference-manual comment line indentation.
+GNAT-style comment line indentation.
+This is the default.
 
 @item ^-c3^/COMMENTS_LAYOUT=GNAT_BEGINNING^
-GNAT-style comment beginning
+GNAT-style comment beginning.
 
 @item ^-c4^/COMMENTS_LAYOUT=REFORMAT^
-Reformat comment blocks
+Fill comment blocks.
 
 @item ^-c5^/COMMENTS_LAYOUT=KEEP_SPECIAL^
-Keep unchanged special form comments
+Keep unchanged special form comments.
+This is the default.
 
 @item --comments-only
 @cindex @option{--comments-only} @command{gnatpp}
 Format just the comments.
 
-@cindex @option{^-l@var{n}^/CONSTRUCT_LAYOUT^} (@command{gnatpp})
-@item ^-l1^/CONSTRUCT_LAYOUT=GNAT^
-GNAT-style layout (this is the default)
-
-@item ^-l2^/CONSTRUCT_LAYOUT=COMPACT^
-Compact layout
-
-@item ^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^
-Uncompact layout
-
-@cindex @option{^-N^/NOTABS^} (@command{gnatpp})
-@item ^-N^/NOTABS^
-All the VT characters are removed from the comment text. All the HT characters
-are expanded with the sequences of space characters to get to the next tab
-stops.
-
 @cindex @option{^--no-separate-is^/NO_SEPARATE_IS^} (@command{gnatpp})
 @item ^--no-separate-is^/NO_SEPARATE_IS^
 Do not place the keyword @code{is} on a separate line in a subprogram body in
 case if the spec occupies more than one line.
 
-@cindex @option{^--separate-label^/SEPARATE_LABEL^} (@command{gnatpp})
-@item ^--separate-label^/SEPARATE_LABEL^
-Place statement label(s) on a separate line, with the following statement
-on the next line.
-
 @cindex @option{^--separate-loop-then^/SEPARATE_LOOP_THEN^} (@command{gnatpp})
 @item ^--separate-loop-then^/SEPARATE_LOOP_THEN^
 Place the keyword @code{loop} in FOR and WHILE loop statements and the
@@ -14443,11 +14373,6 @@ incompatible with @option{^--separate-loop-then^/SEPARATE_LOOP_THEN^} option.
 @item ^--use-on-new-line^/USE_ON_NEW_LINE^
 Start each USE clause in a context clause from a separate line.
 
-@cindex @option{^--separate-stmt-name^/STMT_NAME_ON_NEW_LINE^} (@command{gnatpp})
-@item ^--separate-stmt-name^/STMT_NAME_ON_NEW_LINE^
-Use a separate line for a loop or block statement name, but do not use an extra
-indentation level for the statement itself.
-
 @cindex @option{^--insert-blank-lines^/INSERT_BLANK_LINES^} (@command{gnatpp})
 @item ^--insert-blank-lines^/INSERT_BLANK_LINES^
 Insert blank lines where appropriate (between bodies and other large
@@ -14462,28 +14387,16 @@ multiple blank lines down to one.
 
 @ifclear vms
 @noindent
-The @option{-c1} and @option{-c2} switches are incompatible.
-The @option{-c3} and @option{-c4} switches are compatible with each other and
-also with @option{-c1} and @option{-c2}. The @option{-c0} switch disables all
-the other comment formatting switches.
-
-The @option{-l1}, @option{-l2}, and @option{-l3} switches are incompatible.
+The @option{-c} switches are compatible with one another, except that
+the @option{-c0} switch disables all other comment formatting
+switches.
 @end ifclear
 
 @ifset vms
 @noindent
-For the @option{/COMMENTS_LAYOUT} qualifier:
-@itemize @bullet
-@item
-The @option{DEFAULT} and @option{STANDARD_INDENT} options are incompatible.
-@item
-The @option{GNAT_BEGINNING} and @option{REFORMAT} options are compatible with
-each other and also with @option{DEFAULT} and @option{STANDARD_INDENT}.
-@end itemize
-
-@noindent
-The @option{GNAT}, @option{COMPACT}, and @option{UNCOMPACT} options for the
-@option{/CONSTRUCT_LAYOUT} qualifier are incompatible.
+For the @option{/COMMENTS_LAYOUT} qualifier,
+The @option{GNAT_BEGINNING}, @option{REFORMAT}, and @option{DEFAULT}
+options are compatible with one another.
 @end ifset
 
 @node General Text Layout Control
@@ -14515,8 +14428,7 @@ line indentation is also 1)
 @subsection Other Formatting Options
 
 @noindent
-These switches control the inclusion of missing end/exit labels, and
-the indentation level in @b{case} statements, etc.
+These switches control other formatting not listed above.
 
 @table @option
 @item --decimal-grouping=@var{n}
@@ -14533,36 +14445,21 @@ Same as @code{--decimal-grouping}, but for based literals. For
 example, with @code{--based-grouping=4}, @code{16#0001FFFE#} will be
 changed to @code{16#0001_FFFE#}.
 
-@item ^-e^/NO_MISSED_LABELS^
-@cindex @option{^-e^/NO_MISSED_LABELS^} (@command{gnatpp})
-Do not insert missing end/exit labels. An end label is the name of
-a construct that may optionally be repeated at the end of the
-construct's declaration;
-e.g., the names of packages, subprograms, and tasks.
-An exit label is the name of a loop that may appear as target
-of an exit statement within the loop.
-By default, @command{gnatpp} inserts these end/exit labels when
-they are absent from the original source. This option suppresses such
-insertion, so that the formatted source reflects the original.
+@item ^--RM-style-spacing^/RM_STYLE_SPACING^
+@cindex @option{^--RM-style-spacing^/RM_STYLE_SPACING^} (@command{gnatpp})
+Do not insert an extra blank before various occurrences of
+`(' and `:'. This also turns off alignment.
 
 @item ^-ff^/FORM_FEED_AFTER_PRAGMA_PAGE^
 @cindex @option{^-ff^/FORM_FEED_AFTER_PRAGMA_PAGE^} (@command{gnatpp})
 Insert a Form Feed character after a pragma Page.
 
-@item ^-T@var{nnn}^/MAX_INDENT=@var{nnn}^
-@cindex @option{^-T^/MAX_INDENT^} (@command{gnatpp})
-Do not use an additional indentation level for @b{case} alternatives
-and variants if there are @var{nnn} or more (the default
-value is 10).
-If @var{nnn} is 0, an additional indentation level is
-used for @b{case} alternatives and variants regardless of their number.
-
 @item ^--call_threshold=@var{nnn}^/MAX_ACT=@var{nnn}^
 @cindex @option{^--call_threshold^/MAX_ACT^} (@command{gnatpp})
 If the number of parameter associations is greater than @var{nnn} and if at
 least one association uses named notation, start each association from
 a new line. If @var{nnn} is 0, no check for the number of associations
-is made, this is the default.
+is made; this is the default.
 
 @item ^--par_threshold=@var{nnn}^/MAX_PAR=@var{nnn}^
 @cindex @option{^--par_threshold^/MAX_PAR^} (@command{gnatpp})
@@ -14576,24 +14473,20 @@ a new line. The default for @var{nnn} is 3.
 
 @noindent
 To define the search path for the input source file, @command{gnatpp}
-uses the same switches as the GNAT compiler, with the same effects.
+uses the same switches as the GNAT compiler, with the same effects:
 
 @table @option
 @item ^-I^/SEARCH=^@var{dir}
 @cindex @option{^-I^/SEARCH^} (@command{gnatpp})
-The same as the corresponding gcc switch
 
 @item ^-I-^/NOCURRENT_DIRECTORY^
 @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@command{gnatpp})
-The same as the corresponding gcc switch
 
 @item ^-gnatec^/CONFIGURATION_PRAGMAS_FILE^=@var{path}
 @cindex @option{^-gnatec^/CONFIGURATION_PRAGMAS_FILE^} (@command{gnatpp})
-The same as the corresponding gcc switch
 
 @item ^--RTS^/RUNTIME_SYSTEM^=@var{path}
 @cindex @option{^--RTS^/RUNTIME_SYSTEM^} (@command{gnatpp})
-The same as the corresponding gcc switch
 
 @end table
 
@@ -14601,9 +14494,9 @@ The same as the corresponding gcc switch
 @subsection Output File Control
 
 @noindent
-By default the output is sent to the file whose name is obtained by appending
-the ^@file{.pp}^@file{$PP}^ suffix to the name of the input file
-(if the file with this name already exists, it is unconditionally overwritten).
+By default the output is sent to a file whose name is obtained by appending
+the ^@file{.pp}^@file{$PP}^ suffix to the name of the input file.
+If the file with this name already exists, it is overwritten.
 Thus if the input file is @file{^my_ada_proc.adb^MY_ADA_PROC.ADB^} then
 @command{gnatpp} will produce @file{^my_ada_proc.adb.pp^MY_ADA_PROC.ADB$PP^}
 as output file.
@@ -14645,12 +14538,12 @@ creating any backup copy of the input source.
 
 @item ^--eol=@var{xxx}^/END_OF_LINE=@var{xxx}^
 @cindex @option{^--eol^/END_OF_LINE^} (@code{gnatpp})
-Specifies the format of the reformatted output file. The @var{xxx}
-^string specified with the switch^option^ may be either
+Specifies the line-ending style of the reformatted output file. The @var{xxx}
+^string specified with the switch^option^ may be:
 @itemize @bullet
 @item ``@option{^dos^DOS^}'' MS DOS style, lines end with CR LF characters
 @item ``@option{^crlf^CRLF^}''
-the same as @option{^crlf^CRLF^}
+the same as @option{^dos^DOS^}
 @item ``@option{^unix^UNIX^}'' UNIX style, lines end with LF character
 @item ``@option{^lf^LF^}''
 the same as @option{^unix^UNIX^}
@@ -14658,8 +14551,7 @@ the same as @option{^unix^UNIX^}
 
 @item ^-W^/RESULT_ENCODING=^@var{e}
 @cindex @option{^-W^/RESULT_ENCODING=^} (@command{gnatpp})
-Specify the wide character encoding method used to write the code in the
-result file
+Specify the wide character encoding method for the input and output files.
 @var{e} is one of the following:
 
 @itemize @bullet
@@ -14686,8 +14578,7 @@ Brackets encoding (default value)
 @end table
 
 @noindent
-Options @option{^-pipe^/STANDARD_OUTPUT^},
-@option{^-o^/OUTPUT^} and
+Options @option{^-o^/OUTPUT^} and
 @option{^-of^/FORCED_OUTPUT^} are allowed only if the call to gnatpp
 contains only one file to reformat.
 Option
@@ -14706,7 +14597,7 @@ The additional @command{gnatpp} switches are defined in this subsection.
 @table @option
 @item --version
 @cindex @option{--version} @command{gnatpp}
-Display Copyright and version, then exit disregarding all other options.
+Display copyright and version, then exit disregarding all other options.
 
 @item --help
 @cindex @option{--help} @command{gnatpp}
@@ -14716,7 +14607,7 @@ Display usage, then exit disregarding all other options.
 @cindex @option{-P} @command{gnatpp}
 Indicates the name of the project file that describes the set of sources
 to be processed. The exact set of argument sources depends on other options
-specified, see below.
+specified; see below.
 
 @item -U
 @cindex @option{-U} @command{gnatpp}
@@ -14734,7 +14625,7 @@ has no effect.
 @item -X@var{name}=@var{value}
 @cindex @option{-X} @command{gnatpp}
 Indicates that external variable @var{name} in the argument project
-has the @var{value} value. Has no effect if no project is specified as
+has the value @var{value}. Has no effect if no project is specified as
 tool argument.
 
 @item --pp-off=@var{xxx}
@@ -14774,16 +14665,12 @@ This option cannot be used together with @option{^-r^/REPLACE^},
 Print out execution time.
 
 @item ^-v^/VERBOSE^
-@cindex @option{^-v^/VERBOSE^} (@code{gnatpp})
-Verbose mode;
-@command{gnatpp} generates version information and then
-a trace of the actions it takes to produce or obtain the ASIS tree.
-
-@item ^-w^/WARNINGS^
-@cindex @option{^-w^/WARNINGS^} (@code{gnatpp})
-Warning mode;
-@command{gnatpp} generates a warning whenever it cannot provide
-a required layout in the result source.
+@cindex @option{^-v^/VERBOSE^} (@command{gnatpp})
+Verbose mode
+
+@item ^-q^/QUIET^
+@cindex @option{^-q^/QUIET^} (@command{gnatpp})
+Quiet mode
 @end table
 
 @noindent
@@ -14797,15 +14684,14 @@ all the immediate units of the argument project.
 @section Formatting Rules
 
 @noindent
-The following subsections show how @command{gnatpp} treats ``white space'',
+The following subsections show how @command{gnatpp} treats white space,
 comments, program layout, and name casing.
-They provide the detailed descriptions of the switches shown above.
+They provide detailed descriptions of the switches shown above.
 
 @menu
 * Disabling Pretty Printing::
 * White Space and Empty Lines::
 * Formatting Comments::
-* Construct Layout::
 * Name Casing::
 @end menu
 
@@ -14832,7 +14718,7 @@ be followed by arbitrary additional text. For example:
 @cartouche
 package Interrupts is
    --!pp off -- turn off pretty printing so "Interrupt_Kind" lines up
-   type Interrupt_Kind is
+   type            Interrupt_Kind is
      (Asynchronous_Interrupt_Kind,
        Synchronous_Interrupt_Kind,
              Green_Interrupt_Kind);
@@ -14842,12 +14728,12 @@ package Interrupts is
 @end cartouche
 @end smallexample
 
-You can specify different comment strings using the gnatpp
-@code{--pp-off} and @code{--pp-on} switches. For example, if you say
-@code{gnatpp --pp-off=' pp-' *.ad?} then gnatpp will recognize
-comments of the form @code{-- pp-} instead of @code{--!pp off} for
-disabling pretty printing. Note that the leading @code{--} of the
-comment is not included in the argument to these switches.
+You can specify different comment strings using the @code{--pp-off}
+and @code{--pp-on} switches. For example, if you say @code{gnatpp
+--pp-off=' pp-' *.ad?} then gnatpp will recognize comments of the form
+@code{-- pp-} instead of @code{--!pp off} for disabling pretty
+printing. Note that the leading @code{--} of the comment is not
+included in the argument to these switches.
 
 @node White Space and Empty Lines
 @subsection White Space and Empty Lines
@@ -14856,31 +14742,17 @@ comment is not included in the argument to these switches.
 @command{gnatpp} does not have an option to control space characters.
 It will add or remove spaces according to the style illustrated by the
 examples in the @cite{Ada Reference Manual}.
-
-The only format effectors
-(see @cite{Ada Reference Manual}, paragraph 2.1(13))
-that will appear in the output file are platform-specific line breaks,
-and also format effectors within (but not at the end of) comments.
-In particular, each horizontal tab character that is not inside
-a comment will be treated as a space and thus will appear in the
-output file as zero or more spaces depending on
-the reformatting of the line in which it appears.
-The only exception is a Form Feed character, which is inserted after a
-pragma @code{Page} when @option{-ff} is set.
-
-The output file will contain no lines with trailing ``white space'' (spaces,
-format effectors).
-
-Empty lines in the original source are preserved
-only if they separate declarations or statements.
-In such contexts, a
-sequence of two or more empty lines is replaced by exactly one empty line.
-Note that a blank line will be removed if it separates two ``comment blocks''
-(a comment block is a sequence of whole-line comments).
-In order to preserve a visual separation between comment blocks, use an
-``empty comment'' (a line comprising only hyphens) rather than an empty line.
-Likewise, if for some reason you wish to have a sequence of empty lines,
-use a sequence of empty comments instead.
+The output file will contain no lines with trailing white space.
+
+By default, a sequence of one or more blank lines in the input is
+converted to a single blank line in the output; multiple blank lines
+are squeezed down to one.
+The @option{^--preserve-blank-lines^/PRESERVE_BLANK_LINES^} option
+turns off the squeezing; each blank line in the input is copied
+to the output.
+The @option{^--insert-blank-lines^/INSERT_BLANK_LINES^} option
+causes additional blank lines to be inserted if not already
+present in the input (e.g. between bodies).
 
 @node Formatting Comments
 @subsection Formatting Comments
@@ -14890,82 +14762,26 @@ Comments in Ada code are of two kinds:
 @itemize @bullet
 @item
 a @emph{whole-line comment}, which appears by itself (possibly preceded by
-``white space'') on a line
+white space) on a line
 
 @item
-an @emph{end-of-line comment}, which follows some other Ada lexical element
-on the same line.
+an @emph{end-of-line comment}, which follows some other Ada code on
+the same line.
 @end itemize
 
 @noindent
-The indentation of a whole-line comment is that of either
-the preceding or following line in
-the formatted source, depending on switch settings as will be described below.
-
-For an end-of-line comment, @command{gnatpp} leaves the same number of spaces
-between the end of the preceding Ada lexical element and the beginning
-of the comment as appear in the original source,
-unless either the comment has to be split to
-satisfy the line length limitation, or else the next line contains a
-whole line comment that is considered a continuation of this end-of-line
-comment (because it starts at the same position).
-In the latter two
-cases, the start of the end-of-line comment is moved right to the nearest
-multiple of the indentation level.
-This may result in a ``line overflow'' (the right-shifted comment extending
-beyond the maximum line length), in which case the comment is split as
-described below.
-
-There is a difference between @option{^-c1^/COMMENTS_LAYOUT=DEFAULT^}
-(GNAT-style comment line indentation)
-and @option{^-c2^/COMMENTS_LAYOUT=STANDARD_INDENT^}
-(reference-manual comment line indentation).
-With reference-manual style, a whole-line comment is indented as if it
-were a declaration or statement at the same place
-(i.e., according to the indentation of the preceding line(s)).
-With GNAT style, a whole-line comment that is immediately followed by an
-@b{if} or @b{case} statement alternative, a record variant, or the reserved
-word @b{begin}, is indented based on the construct that follows it.
-
-For example:
-@smallexample @c ada
-@cartouche
-if A then
-    null;
-       -- some comment
-else
-   null;
-end if;
-@end cartouche
-@end smallexample
-
-@noindent
-Reference-manual indentation produces:
-
-@smallexample @c ada
-@cartouche
-if A then
-   null;
-   --  some comment
-else
-   null;
-end if;
-@end cartouche
-@end smallexample
-
-@noindent
-while GNAT-style indentation produces:
+A whole-line comment is indented according to the surrounding code,
+with some exceptions.
+Comments that start in column 1 are kept there.
+If possible, comments are not moved so far to the right that the maximum
+line length is exceeded.
+The @option{^-c0^/COMMENTS_LAYOUT=UNTOUCHED^} option
+turns off comment formatting.
+Special-form comments such as SPARK-style @code{--#...} are left alone.
 
-@smallexample @c ada
-@cartouche
-if A then
-   null;
---  some comment
-else
-   null;
-end if;
-@end cartouche
-@end smallexample
+For an end-of-line comment, @command{gnatpp} tries to leave the same
+number of spaces between the end of the preceding Ada code and the
+beginning of the comment as appear in the original source.
 
 @noindent
 The @option{^-c3^/COMMENTS_LAYOUT=GNAT_BEGINNING^} switch
@@ -14981,57 +14797,10 @@ first non-blank character of the comment.
 @end itemize
 
 @noindent
-For an end-of-line comment, if in the original source the next line is a
-whole-line comment that starts at the same position
-as the end-of-line comment,
-then the whole-line comment (and all whole-line comments
-that follow it and that start at the same position)
-will start at this position in the output file.
-
-@noindent
-That is, if in the original source we have:
-
-@smallexample @c ada
-@cartouche
-begin
-A := B + C;            --  B must be in the range Low1..High1
-                       --  C must be in the range Low2..High2
-             --B+C will be in the range Low1+Low2..High1+High2
-X := X + 1;
-@end cartouche
-@end smallexample
-
-@noindent
-Then in the formatted source we get
-
-@smallexample @c ada
-@cartouche
-begin
-   A := B + C;            --  B must be in the range Low1..High1
-                          --  C must be in the range Low2..High2
-   --  B+C will be in the range Low1+Low2..High1+High2
-   X := X + 1;
-@end cartouche
-@end smallexample
-
-@noindent
-A comment that exceeds the line length limit will be split.
-Unless switch
-@option{^-c4^/COMMENTS_LAYOUT=REFORMAT^} (reformat comment blocks) is set and
-the line belongs to a reformattable block, splitting the line generates a
-@command{gnatpp} warning.
-The @option{^-c4^/COMMENTS_LAYOUT=REFORMAT^} switch specifies that whole-line
-comments may be reformatted in typical
-word processor style (that is, moving words between lines and putting as
-many words in a line as possible).
-
-@noindent
-The @option{^-c5^/COMMENTS_LAYOUT=KEEP_SPECIAL^} switch specifies, that comments
-that has a special format (that is, a character that is neither a letter nor digit
-not white space nor line break immediately following the leading @code{--} of
-the comment) should be without any change moved from the argument source
-into reformatted source. This switch allows to preserve comments that are used
-as a special marks in the code (e.g.@: SPARK annotation).
+The @option{^-c4^/COMMENTS_LAYOUT=REFORMAT^} switch specifies that
+whole-line comments that form a paragraph will be filled in typical
+word processor style (that is, moving words between lines to make the
+lines other than the last similar in length ).
 
 @noindent
 The @option{--comments-only} switch specifies that only the comments
@@ -15044,157 +14813,6 @@ spaces after @code{--}, and @option{--comments-only -c3 -c4} does
 both. If @option{--comments-only} is given without @option{-c3} or
 @option{-c4}, then gnatpp doesn't format anything.
 
-@node Construct Layout
-@subsection Construct Layout
-
-@noindent
-In several cases the suggested layout in the Ada Reference Manual includes
-an extra level of indentation that many programmers prefer to avoid. The
-affected cases include:
-
-@itemize @bullet
-
-@item Record type declaration (RM 3.8)
-
-@item Record representation clause (RM 13.5.1)
-
-@item Loop statement in case if a loop has a statement identifier (RM 5.6)
-
-@item Block statement in case if a block has a statement identifier (RM 5.6)
-@end itemize
-
-@noindent
-In compact mode (when GNAT style layout or compact layout is set),
-the pretty printer uses one level of indentation instead
-of two. This is achieved in the record definition and record representation
-clause cases by putting the @code{record} keyword on the same line as the
-start of the declaration or representation clause, and in the block and loop
-case by putting the block or loop header on the same line as the statement
-identifier.
-
-@noindent
-The difference between GNAT style @option{^-l1^/CONSTRUCT_LAYOUT=GNAT^}
-and compact @option{^-l2^/CONSTRUCT_LAYOUT=COMPACT^}
-layout on the one hand, and uncompact layout
-@option{^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^} on the other hand,
-can be illustrated by the following examples:
-
-@iftex
-@cartouche
-@multitable @columnfractions .5 .5
-@item @i{GNAT style, compact layout} @tab @i{Uncompact layout}
-
-@item
-@smallexample @c ada
-type q is record
-   a : integer;
-   b : integer;
-end record;
-@end smallexample
-@tab
-@smallexample @c ada
-type q is
-   record
-      a : integer;
-      b : integer;
-   end record;
-@end smallexample
-
-@item
-@smallexample @c ada
-for q use record
-   a at 0 range  0 .. 31;
-   b at 4 range  0 .. 31;
-end record;
-@end smallexample
-@tab
-@smallexample @c ada
-for q use
-   record
-      a at 0 range  0 .. 31;
-      b at 4 range  0 .. 31;
-   end record;
-@end smallexample
-
-@item
-@smallexample @c ada
-Block : declare
-   A : Integer := 3;
-begin
-   Proc (A, A);
-end Block;
-@end smallexample
-@tab
-@smallexample @c ada
-Block :
-   declare
-      A : Integer := 3;
-   begin
-      Proc (A, A);
-   end Block;
-@end smallexample
-
-@item
-@smallexample @c ada
-Clear : for J in 1 .. 10 loop
-   A (J) := 0;
-end loop Clear;
-@end smallexample
-@tab
-@smallexample @c ada
-Clear :
-   for J in 1 .. 10 loop
-      A (J) := 0;
-   end loop Clear;
-@end smallexample
-@end multitable
-@end cartouche
-@end iftex
-
-@ifnottex
-@smallexample
-@cartouche
-GNAT style, compact layout              Uncompact layout
-
-type q is record                        type q is
-   a : integer;                            record
-   b : integer;                               a : integer;
-end record;                                   b : integer;
-                                           end record;
-
-for q use record                        for q use
-   a at 0 range  0 .. 31;                  record
-   b at 4 range  0 .. 31;                     a at 0 range  0 .. 31;
-end record;                                   b at 4 range  0 .. 31;
-                                           end record;
-
-Block : declare                         Block :
-   A : Integer := 3;                       declare
-begin                                         A : Integer := 3;
-   Proc (A, A);                            begin
-end Block;                                    Proc (A, A);
-                                           end Block;
-
-Clear : for J in 1 .. 10 loop           Clear :
-   A (J) := 0;                             for J in 1 .. 10 loop
-end loop Clear;                               A (J) := 0;
-                                           end loop Clear;
-@end cartouche
-@end smallexample
-@end ifnottex
-
-@noindent
-A further difference between GNAT style layout and compact layout is that
-GNAT style layout inserts empty lines as separation for
-compound statements, return statements and bodies.
-
-Note that the layout specified by
-@option{^--separate-stmt-name^/STMT_NAME_ON_NEW_LINE^}
-for named block and loop statements overrides the layout defined by these
-constructs by @option{^-l1^/CONSTRUCT_LAYOUT=GNAT^},
-@option{^-l2^/CONSTRUCT_LAYOUT=COMPACT^} or
-@option{^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^} option.
-
 @node Name Casing
 @subsection Name Casing
 
@@ -15230,6 +14848,19 @@ Thus @command{gnatpp} acts as though the @option{^-n^/NAME_CASING^} switch
 had affected the
 casing for the defining occurrence of the name.
 
+The options
+@option{^-a@var{x}^/ATTRIBUTE^},
+@option{^-k@var{x}^/KEYWORD_CASING^},
+@option{^-ne@var{x}^/ENUM_CASING^},
+@option{^-nt@var{x}^/TYPE_CASING^},
+@option{^-nn@var{x}^/NUMBER_CASING^}, and
+@option{^-p@var{x}^/PRAGMA_CASING^}
+allow finer-grained control over casing for
+attributes, keywords, enumeration literals,
+types, named numbers and pragmas, respectively.
+@option{^-nt@var{x}^/TYPE_CASING^} covers subtypes and
+task and protected bodies as well.
+
 Some names may need to be spelled with casing conventions that are not
 covered by the upper-, lower-, and mixed-case transformations.
 You can arrange correct casing by placing such names in a
@@ -15241,25 +14872,23 @@ any @option{^-n^/NAME_CASING^} switch.
 To handle the casing of Ada predefined names and the names from GNAT libraries,
 @command{gnatpp} assumes a default dictionary file.
 The name of each predefined entity is spelled with the same casing as is used
-for the entity in the @cite{Ada Reference Manual}.
+for the entity in the @cite{Ada Reference Manual} (usually mixed case).
 The name of each entity in the GNAT libraries is spelled with the same casing
 as is used in the declaration of that entity.
 
-The @w{@option{^-D-^/SPECIFIC_CASING^}} switch suppresses the use of the
-default dictionary file.
-Instead, the casing for predefined and GNAT-defined names will be established
-by the @option{^-n^/NAME_CASING^} switch or explicit dictionary files.
-For example, by default the names @code{Ada.Text_IO} and @code{GNAT.OS_Lib}
-will appear as just shown,
-even in the presence of a @option{^-nU^/NAME_CASING=UPPER_CASE^} switch.
-To ensure that even such names are rendered in uppercase,
-additionally supply the @w{@option{^-D-^/SPECIFIC_CASING^}} switch
-(or else, less conveniently, place these names in upper case in a dictionary
-file).
-
-A dictionary file is
-a plain text file; each line in this file can be either a blank line
-(containing only space characters and ASCII.HT characters), an Ada comment
+The @w{@option{^-D-^/SPECIFIC_CASING^}} switch suppresses the use of
+the default dictionary file. Instead, the casing for predefined and
+GNAT-defined names will be established by the
+@option{^-n^/NAME_CASING^} switch or explicit dictionary files. For
+example, by default the names @code{Ada.Text_IO} and
+@code{GNAT.OS_Lib} will appear as just shown, even in the presence of
+a @option{^-nU^/NAME_CASING=UPPER_CASE^} switch.  To ensure that even
+such names are rendered in uppercase, additionally supply the
+@w{@option{^-D-^/SPECIFIC_CASING^}} switch (or else place these names
+in upper case in a dictionary file).
+
+A dictionary file is a plain text file; each line in this file can be
+either a blank line (containing only space characters), an Ada comment
 line, or the specification of exactly one @emph{casing schema}.
 
 A casing schema is a string that has the following syntax:
@@ -15435,7 +15064,7 @@ Options:
       Otherwise this option has no effect.
 
 -X@var{name}=@var{value} -- indicates that external variable @var{name} in
-      the argument project has the @var{value} value. Has no effect if no
+      the argument project has the value @var{value}. Has no effect if no
       project is specified as tool argument.
 
 -mdir -- generate one .xml file for each Ada source file, in directory
@@ -16817,7 +16446,7 @@ has no effect.
 @item -X@var{name}=@var{value}
 @cindex @option{-X} @command{gnatmetric}
 Indicates that external variable @var{name} in the argument project
-has the @var{value} value. Has no effect if no project is specified as
+has the value @var{value}. Has no effect if no project is specified as
 tool argument.
 
 @item --subdirs=@var{dir}
@@ -19712,7 +19341,7 @@ to be processed.
 @item -X@var{name}=@var{value}
 @cindex @option{-X} @command{gnatstub}
 Indicates that external variable @var{name} in the argument project
-has the @var{value} value. Has no effect if no project is specified as
+has the value @var{value}. Has no effect if no project is specified as
 tool argument.
 
 @item ^-f^/FULL^
index 0f1b4d115ef60077fe3b4cea8aa6d51a5125a12a..0d0fba7955f77015b82871433f6cc3e51647cd64 100644 (file)
@@ -924,8 +924,35 @@ package body System.OS_Lib is
       if C_Msg = Null_Address then
          if Default /= "" then
             return Default;
+
          else
-            return "errno =" & Err'Img;
+            --  Note: for bootstrap reasons, it is impractical
+            --  to use Integer'Image here.
+
+            declare
+               Val   : Integer;
+               First : Integer;
+               Buf   : String (1 .. 20);
+               --  Buffer large enough to hold image of largest Integer values
+
+            begin
+               Val   := abs Err;
+               First := Buf'Last;
+               loop
+                  Buf (First) :=
+                    Character'Val (Character'Pos ('0') + Val mod 10);
+                  Val := Val / 10;
+                  exit when Val = 0;
+                  First := First - 1;
+               end loop;
+
+               if Err < 0 then
+                  First := First - 1;
+                  Buf (First) := '-';
+               end if;
+
+               return "errno = " & Buf (First .. Buf'Last);
+            end;
          end if;
 
       else
index deb1855d3665b436eed747ea61e0db7752e3f41a..5a034d584576090bbc2a189827899b54c2de1872 100644 (file)
@@ -89,7 +89,6 @@ pragma Style_Checks ("M32766");
 /* Include gsocket.h before any system header so it can redefine FD_SETSIZE */
 
 #include "gsocket.h"
-#include "adaint.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -114,12 +113,15 @@ pragma Style_Checks ("M32766");
 
 /**
  ** For VxWorks, always include vxWorks.h (gsocket.h provides it only for
- ** the case of runtime libraries that support sockets).
+ ** the case of runtime libraries that support sockets). Note: this must
+ ** be done before including adaint.h.
  **/
 
 # include <vxWorks.h>
 #endif
 
+#include "adaint.h"
+
 #ifdef DUMMY
 
 # if defined (TARGET)
@@ -1344,30 +1346,6 @@ CND(SIZEOF_struct_servent, "struct servent")
 CND(SIZEOF_sigset, "sigset")
 #endif
 
-/**
- ** Note: this constant can be used in the GNAT runtime library. In compiler
- ** units on the other hand, System.OS_Constants is not available, so we
- ** declare an Ada constant (Osint.File_Attributes_Size) independently, which
- ** is at least as large as sizeof (struct file_attributes), and we have an
- ** assertion at initialization of Osint checking that the size is indeed at
- ** least sufficient.
- **/
-#define SIZEOF_struct_file_attributes (sizeof (struct file_attributes))
-CND(SIZEOF_struct_file_attributes, "struct file_attributes")
-
-/**
- ** Maximal size of buffer for struct dirent. Note: Since POSIX.1 does not
- ** specify the size of the d_name field, and other nonstandard fields may
- ** precede that field within the dirent structure, we must make a conservative
- ** computation.
- **/
-{
-  struct dirent dent;
-#define SIZEOF_struct_dirent_alloc \
-  ((char*) &dent.d_name - (char*) &dent) + NAME_MAX + 1
-CND(SIZEOF_struct_dirent_alloc, "struct dirent allocation")
-}
-
 /*
 
    --  Fields of struct msghdr
@@ -1508,6 +1486,38 @@ CND(PTHREAD_ONCE_SIZE,       "pthread_once_t")
 
 #endif /* __APPLE__ || __linux__ */
 
+/*
+
+   --------------------------------
+   -- File and directory support --
+   --------------------------------
+
+*/
+
+/**
+ ** Note: this constant can be used in the GNAT runtime library. In compiler
+ ** units on the other hand, System.OS_Constants is not available, so we
+ ** declare an Ada constant (Osint.File_Attributes_Size) independently, which
+ ** is at least as large as sizeof (struct file_attributes), and we have an
+ ** assertion at initialization of Osint checking that the size is indeed at
+ ** least sufficient.
+ **/
+#define SIZEOF_struct_file_attributes (sizeof (struct file_attributes))
+CND(SIZEOF_struct_file_attributes, "struct file_attributes")
+
+/**
+ ** Maximal size of buffer for struct dirent. Note: Since POSIX.1 does not
+ ** specify the size of the d_name field, and other nonstandard fields may
+ ** precede that field within the dirent structure, we must make a conservative
+ ** computation.
+ **/
+{
+  struct dirent dent;
+#define SIZEOF_struct_dirent_alloc \
+  ((char*) &dent.d_name - (char*) &dent) + NAME_MAX + 1
+CND(SIZEOF_struct_dirent_alloc, "struct dirent allocation")
+}
+
 /**
  **  System-specific constants follow
  **  Each section should be activated if compiling for the corresponding