[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 7 Nov 2014 13:59:41 +0000 (14:59 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 7 Nov 2014 13:59:41 +0000 (14:59 +0100)
2014-11-07  Arnaud Charlet  <charlet@adacore.com>

* debug.adb, snames.adb-tmpl (Is_Keyword_Name): Consider 'overriding'
a keyword in Ada 95 mode when -gnatd.D is used.
* gnat_ugn.texi: Document -gnatd.D.

2014-11-07  Vasiliy Fofanov  <fofanov@adacore.com>

* gnatls.adb: Lower severity of the program's return value in
some common cases.

2014-11-07  Ed Schonberg  <schonberg@adacore.com>

* sem_ch10.adb (Decorate_Type): The limited view of a tagged
type has an empty list of primitive operations.

2014-11-07  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_ch3.adb (Analyze_Object_Declaration): Update references to SPARK
RM.
(Process_Full_View): Update references to SPARK RM.
* sem_ch6.adb (Analyze_Generic_Subprogram_Body): Update references
to SPARK RM.
(Analyze_Subprogram_Body_Helper): Update references
to SPARK RM.
* sem_ch7.adb (Analyze_Package_Body_Helper): Update references
to SPARK RM.
* sem_prag.adb (Check_Ghost_Constituent): Update references to
SPARK RM.
* sem_res.adb (Check_Ghost_Policy): Update references to SPARK RM.
(Resolve_Actuals): Ensure that the actual parameter of a Ghost
subprogram whose formal is of mode IN OUT or OUT is Ghost.
* sem_util.adb (Check_Ghost_Completion): Update references to
SPARK RM.

2014-11-07  Ed Schonberg  <schonberg@adacore.com>

* exp_ch7.adb (Make_Final_Call): If type of designated object is
derived from that of the formal of the Deep_Finalize procedure,
add an unchecked conversion to prevent spurious type error.

2014-11-07  Robert Dewar  <dewar@adacore.com>

* table.adb, inline.adb, einfo.adb, gnat1drv.adb, exp_ch13.adb,
exp_fixd.adb, prj-conf.adb, exp_strm.adb, a-cofove.adb, exp_ch3.ads:
Minor reformatting.

2014-11-07  Robert Dewar  <dewar@adacore.com>

* sem_ch12.adb, sem_ch13.adb, prj-tree.adb: Minor reformatting.

From-SVN: r217227

25 files changed:
gcc/ada/ChangeLog
gcc/ada/a-cofove.adb
gcc/ada/debug.adb
gcc/ada/einfo.adb
gcc/ada/exp_ch13.adb
gcc/ada/exp_ch3.ads
gcc/ada/exp_ch7.adb
gcc/ada/exp_strm.adb
gcc/ada/gnat1drv.adb
gcc/ada/gnat_ugn.texi
gcc/ada/gnatls.adb
gcc/ada/inline.adb
gcc/ada/prj-conf.adb
gcc/ada/prj-tree.adb
gcc/ada/sem_ch10.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_ch7.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_res.adb
gcc/ada/sem_util.adb
gcc/ada/snames.adb-tmpl
gcc/ada/table.adb

index 99ba43c1f0912ee366628a45ea9011c8c7c7f466..f54c409d4f8870041c5d9fa8d27024a2b98badae 100644 (file)
@@ -1,3 +1,54 @@
+2014-11-07  Arnaud Charlet  <charlet@adacore.com>
+
+       * debug.adb, snames.adb-tmpl (Is_Keyword_Name): Consider 'overriding'
+       a keyword in Ada 95 mode when -gnatd.D is used.
+       * gnat_ugn.texi: Document -gnatd.D.
+
+2014-11-07  Vasiliy Fofanov  <fofanov@adacore.com>
+
+       * gnatls.adb: Lower severity of the program's return value in
+       some common cases.
+
+2014-11-07  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch10.adb (Decorate_Type): The limited view of a tagged
+       type has an empty list of primitive operations.
+
+2014-11-07  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_ch3.adb (Analyze_Object_Declaration): Update references to SPARK
+       RM.
+       (Process_Full_View): Update references to SPARK RM.
+       * sem_ch6.adb (Analyze_Generic_Subprogram_Body): Update references
+       to SPARK RM.
+       (Analyze_Subprogram_Body_Helper): Update references
+       to SPARK RM.
+       * sem_ch7.adb (Analyze_Package_Body_Helper): Update references
+       to SPARK RM.
+       * sem_prag.adb (Check_Ghost_Constituent): Update references to
+       SPARK RM.
+       * sem_res.adb (Check_Ghost_Policy): Update references to SPARK RM.
+       (Resolve_Actuals): Ensure that the actual parameter of a Ghost
+       subprogram whose formal is of mode IN OUT or OUT is Ghost.
+       * sem_util.adb (Check_Ghost_Completion): Update references to
+       SPARK RM.
+
+2014-11-07  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch7.adb (Make_Final_Call): If type of designated object is
+       derived from that of the formal of the Deep_Finalize procedure,
+       add an unchecked conversion to prevent spurious type error.
+
+2014-11-07  Robert Dewar  <dewar@adacore.com>
+
+       * table.adb, inline.adb, einfo.adb, gnat1drv.adb, exp_ch13.adb,
+       exp_fixd.adb, prj-conf.adb, exp_strm.adb, a-cofove.adb, exp_ch3.ads:
+       Minor reformatting.
+
+2014-11-07  Robert Dewar  <dewar@adacore.com>
+
+       * sem_ch12.adb, sem_ch13.adb, prj-tree.adb: Minor reformatting.
+
 2014-11-07  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * einfo.adb (Set_Is_Checked_Ghost_Entity,
index 42d61f4e0e41c7a5ec787ef7256c34c7edc8bff6..6776bf90fa28d8640046ce3c91fd9c4a37359b5b 100644 (file)
@@ -26,7 +26,8 @@
 ------------------------------------------------------------------------------
 
 with Ada.Containers.Generic_Array_Sort;
-with Unchecked_Deallocation;
+with Ada.Unchecked_Deallocation;
+
 with System; use type System.Address;
 
 package body Ada.Containers.Formal_Vectors is
@@ -41,7 +42,7 @@ package body Ada.Containers.Formal_Vectors is
    type Elements_Array_Ptr_Const is access constant Elements_Array;
 
    procedure Free is
-      new Unchecked_Deallocation (Elements_Array, Elements_Array_Ptr);
+      new Ada.Unchecked_Deallocation (Elements_Array, Elements_Array_Ptr);
 
    function Elems (Container : in out Vector) return Elements_Array_Ptr;
    function Elemsc
index 2b249e926e002c5dda165ae033f8d8946c443ed1..47371e3361415dd513f7618d00395846a8fd83fb 100644 (file)
@@ -121,7 +121,7 @@ package body Debug is
    --  d.A  Read/write Aspect_Specifications hash table to tree
    --  d.B
    --  d.C  Generate concatenation call, do not generate inline code
-   --  d.D
+   --  d.D  Disable errors on use of overriding keyword in Ada 95 mode
    --  d.E  Turn selected errors into warnings
    --  d.F  Debug mode for GNATprove
    --  d.G  Ignore calls through generic formal parameters for elaboration
@@ -602,6 +602,10 @@ package body Debug is
    --  d.C  Generate call to System.Concat_n.Str_Concat_n routines in cases
    --       where we would normally generate inline concatenation code.
 
+   --  d.D  For compatibility with some Ada 95 compilers implementing only
+   --       one feature of Ada 2005 (overriding keyword), disable errors on use
+   --       of overriding keyword in Ada 95 mode.
+
    --  d.E  Turn selected errors into warnings. This debug switch causes a
    --       specific set of error messages into warnings. Setting this switch
    --       causes Opt.Error_To_Warning to be set to True. The intention is
index f9307ab9811bf1be32fb0309f33d70cb68a9b854..3e0c0c7965ffbbbbabf6d5b7b9498fd5f1ee3f72 100644 (file)
@@ -566,9 +566,9 @@ package body Einfo is
    --    Has_Static_Predicate            Flag269
    --    Stores_Attribute_Old_Prefix     Flag270
 
-   --    (Has_Protected)                 Flag271
-   --    (SSO_Set_Low_By_Default)        Flag272
-   --    (SSO_Set_High_By_Default)       Flag273
+   --    Has_Protected                   Flag271
+   --    SSO_Set_Low_By_Default          Flag272
+   --    SSO_Set_High_By_Default         Flag273
    --    Is_Generic_Actual_Subprogram    Flag274
    --    No_Predicate_On_Actual          Flag275
    --    No_Dynamic_Predicate_On_Actual  Flag276
index fa385a0dca14c9441ac3f4b10f026f43b62597a1..856fb74e63db40b6c7be8a99078bf73f7ba5f5cb 100644 (file)
@@ -418,7 +418,7 @@ package body Exp_Ch13 is
             Apply_Address_Clause_Check (E, N);
          end if;
 
-         --  Analyze actions in freeze node, if any.
+         --  Analyze actions in freeze node, if any
 
          if Present (Actions (N)) then
             declare
index f432158ed3df0fbd3855eee677c33bfd88da4ac2..3f2db942e575e6b9a7ac0c688e92b82dd4012815 100644 (file)
@@ -107,10 +107,10 @@ package Exp_Ch3 is
    function Make_Tag_Assignment (N : Node_Id) return Node_Id;
    --  An object declaration that has an initialization for a tagged object
    --  requires a separate reassignment of the tag of the given type, because
-   --  the expression may include an unchecked conversion. This tag
-   --  assignment is inserted after the declaration, but if the object has
-   --  an address clause the assignment is handled as part of the freezing
-   --  of the object, see Check_Address_Clause.
+   --  the expression may include an unchecked conversion. This tag assignment
+   --  is inserted after the declaration, but if the object has an address
+   --  clause the assignment is handled as part of the freezing of the object,
+   --  see Check_Address_Clause.
 
    function Needs_Simple_Initialization
      (T           : Entity_Id;
index 8d5dd36aee864b504a1831698f5f7d6194bad13f..4b2a4120949359ee96a8e03ba26842d46c6e6f09 100644 (file)
@@ -3662,6 +3662,15 @@ package body Exp_Ch7 is
          Set_Etype (Arg, Ftyp);
          return Arg;
 
+      --  Otherwise, introduce a conversion when the designated object
+      --  has a type derived from the formal of the controlled routine.
+
+      elsif Is_Private_Type (Ftyp)
+        and then Present (Atyp)
+        and then Is_Derived_Type (Underlying_Type (Base_Type (Atyp)))
+      then
+         return Unchecked_Convert_To (Ftyp, Arg);
+
       else
          return Arg;
       end if;
@@ -4769,11 +4778,14 @@ package body Exp_Ch7 is
 
                --  Generate:
                --    [Deep_]Finalize (Obj_Ref);
+               --   Set type of dereference, so that proper conversion are
+               --   generated when operation is inherited.
 
                Obj_Ref := New_Occurrence_Of (Obj_Id, Loc);
 
                if Is_Access_Type (Obj_Typ) then
                   Obj_Ref := Make_Explicit_Dereference (Loc, Obj_Ref);
+                  Set_Etype (Obj_Ref, Directly_Designated_Type (Obj_Typ));
                end if;
 
                Append_To (Stmts,
index da16134f0d20de0a33a1a17f48c1f97f2ca30702..ba0447f28200bc28c5737d2cf4fb92983e3f327f 100644 (file)
@@ -1129,8 +1129,7 @@ package body Exp_Strm is
       --  to construct.
 
       if Has_Discriminants (Typ)
-        and then
-          No (Discriminant_Default_Value (First_Discriminant (Typ)))
+        and then No (Discriminant_Default_Value (First_Discriminant (Typ)))
         and then not Is_Constrained (Underlying_Type (B_Typ))
       then
          Discr := First_Discriminant (B_Typ);
@@ -1148,7 +1147,7 @@ package body Exp_Strm is
             Decl :=
               Make_Object_Declaration (Loc,
                 Defining_Identifier => Make_Defining_Identifier (Loc, Cn),
-                Object_Definition =>
+                Object_Definition   =>
                   New_Occurrence_Of (Etype (Discr), Loc));
 
             --  If this is an access discriminant, do not perform default
@@ -1163,9 +1162,9 @@ package body Exp_Strm is
             Append_To (Decls, Decl);
             Append_To (Decls,
               Make_Attribute_Reference (Loc,
-                Prefix => New_Occurrence_Of (Etype (Discr), Loc),
+                Prefix         => New_Occurrence_Of (Etype (Discr), Loc),
                 Attribute_Name => Name_Read,
-                Expressions => New_List (
+                Expressions    => New_List (
                   Make_Identifier (Loc, Name_S),
                   Make_Identifier (Loc, Cn))));
 
@@ -1195,7 +1194,7 @@ package body Exp_Strm is
          Odef :=
            Make_Subtype_Indication (Loc,
              Subtype_Mark => New_Occurrence_Of (B_Typ, Loc),
-             Constraint =>
+             Constraint   =>
                Make_Index_Or_Discriminant_Constraint (Loc,
                  Constraints => Constr));
 
@@ -1264,11 +1263,9 @@ package body Exp_Strm is
       --  because those are written by 'Write.
 
       if Has_Discriminants (Typ)
-        and then
-          No (Discriminant_Default_Value (First_Discriminant (Typ)))
+        and then No (Discriminant_Default_Value (First_Discriminant (Typ)))
       then
          Disc := First_Discriminant (Typ);
-
          while Present (Disc) loop
 
             --  If the type is an unchecked union, it must have default
@@ -1287,10 +1284,10 @@ package body Exp_Strm is
 
             Append_To (Stms,
               Make_Attribute_Reference (Loc,
-                Prefix =>
+                Prefix         =>
                   New_Occurrence_Of (Stream_Base_Type (Etype (Disc)), Loc),
                 Attribute_Name => Name_Write,
-                Expressions => New_List (
+                Expressions    => New_List (
                   Make_Identifier (Loc, Name_S),
                   Disc_Ref)));
 
@@ -1300,9 +1297,9 @@ package body Exp_Strm is
 
       Append_To (Stms,
         Make_Attribute_Reference (Loc,
-          Prefix => New_Occurrence_Of (Typ, Loc),
+          Prefix         => New_Occurrence_Of (Typ, Loc),
           Attribute_Name => Name_Write,
-          Expressions => New_List (
+          Expressions    => New_List (
             Make_Identifier (Loc, Name_S),
             Make_Identifier (Loc, Name_V))));
 
@@ -1448,7 +1445,7 @@ package body Exp_Strm is
 
             Append_To (Result,
               Make_Case_Statement (Loc,
-                Expression => D_Ref,
+                Expression   => D_Ref,
                 Alternatives => Alts));
          end if;
 
@@ -1485,10 +1482,9 @@ package body Exp_Strm is
 
          return
            Make_Attribute_Reference (Loc,
-             Prefix =>
-               New_Occurrence_Of (Field_Typ, Loc),
+             Prefix         => New_Occurrence_Of (Field_Typ, Loc),
              Attribute_Name => Nam,
-             Expressions => New_List (
+             Expressions    => New_List (
                Make_Identifier (Loc, Name_S),
                Make_Selected_Component (Loc,
                  Prefix        => Make_Identifier (Loc, Name_V),
@@ -1654,18 +1650,19 @@ package body Exp_Strm is
           Parameter_Specifications => New_List (
             Make_Parameter_Specification (Loc,
               Defining_Identifier => Make_Defining_Identifier (Loc, Name_S),
-              Parameter_Type =>
+              Parameter_Type      =>
                 Make_Access_Definition (Loc,
                   Null_Exclusion_Present => True,
-                  Subtype_Mark => New_Occurrence_Of (
-                    Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc)))),
+                  Subtype_Mark           =>
+                    New_Occurrence_Of
+                      (Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc)))),
 
           Result_Definition => New_Occurrence_Of (Typ, Loc));
 
       Decl :=
         Make_Subprogram_Body (Loc,
-          Specification => Spec,
-          Declarations => Decls,
+          Specification              => Spec,
+          Declarations               => Decls,
           Handled_Statement_Sequence =>
             Make_Handled_Sequence_Of_Statements (Loc,
               Statements => Stms));
@@ -1698,11 +1695,12 @@ package body Exp_Strm is
           Parameter_Specifications => New_List (
             Make_Parameter_Specification (Loc,
               Defining_Identifier => Make_Defining_Identifier (Loc, Name_S),
-              Parameter_Type =>
+              Parameter_Type      =>
                 Make_Access_Definition (Loc,
                   Null_Exclusion_Present => True,
-                  Subtype_Mark => New_Occurrence_Of (
-                    Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc))),
+                  Subtype_Mark           =>
+                    New_Occurrence_Of
+                      (Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc))),
 
             Make_Parameter_Specification (Loc,
               Defining_Identifier => Make_Defining_Identifier (Loc, Name_V),
@@ -1711,8 +1709,8 @@ package body Exp_Strm is
 
       Decl :=
         Make_Subprogram_Body (Loc,
-          Specification => Spec,
-          Declarations => Empty_List,
+          Specification              => Spec,
+          Declarations               => Empty_List,
           Handled_Statement_Sequence =>
             Make_Handled_Sequence_Of_Statements (Loc,
               Statements => Stms));
index 0da8a51fe786f7b89fbf974e27c236a0f75c0479..cd6b6f48f79794d4f9ea02b7d331944c3808e4a6 100644 (file)
@@ -364,8 +364,7 @@ procedure Gnat1drv is
          --  SPARK version of the expander.
 
          --  On the contrary, we need to enable explicitly all language checks,
-         --  as they may have been marked as suppressed by the use of switch
-         --  -gnatp
+         --  as they may have been suppressed by the use of switch -gnatp.
 
          Suppress_Options.Suppress := (others => False);
 
index 1da339ad38fa1e9b4c62939b7436df5dced476c3..9d8a5ee52f789649aa21a8b364741006b5987c63 100644 (file)
@@ -3588,6 +3588,13 @@ Enforce Ada 83 restrictions.
 @cindex @option{-gnat95} (@command{gcc})
 Enforce Ada 95 restrictions.
 
+Note: for compatibility with some Ada 95 compilers which support only
+the @code{overriding} keyword of Ada 2005, the @option{-gnatd.D} switch can
+be used along with @option{-gnat95} to achieve a similar effect with GNAT.
+
+@option{-gnatd.D} instructs GNAT to consider @code{overriding} as a keyword
+and handle its associated semantic checks, even in Ada 95 mode.
+
 @item -gnat05
 @cindex @option{-gnat05} (@command{gcc})
 Allow full Ada 2005 features.
index 808b00937b5bd62ae2f727a89a59148c42246d94..80875b52ffe5c84a4134e382807a22a823852955 100644 (file)
@@ -1663,6 +1663,7 @@ begin
            ("Default runtime not available. Use --RTS= with a valid runtime");
          Write_Eol;
          Write_Eol;
+         Exit_Status := E_Warnings;
       end if;
 
       Write_Str ("Source Search Path:");
@@ -1775,10 +1776,11 @@ begin
             Usage;
          else
             Try_Help;
+            Exit_Status := E_Fatal;
          end if;
       end if;
 
-      Exit_Program (E_Fatal);
+      Exit_Program (Exit_Status);
    end if;
 
    Initialize_ALI;
index 812002b4ed07382790d754ffa08b7f184cecc2ad..3bd9b9357e18780d85f3ad8f6d33fac741aac6a5 100644 (file)
@@ -496,6 +496,7 @@ package body Inline is
          end if;
 
          Last_Inlined := E;
+
       else
          Register_Backend_Not_Inlined_Subprogram (E);
       end if;
@@ -3323,6 +3324,7 @@ package body Inline is
 
       D := First (Decls);
       while Present (D) loop
+
          --  First declarations universally excluded
 
          if Nkind (D) = N_Package_Declaration then
index a9fd006c7ed12c99f942ef1aaf08c5a9d9dbc79a..623cf17060c16fc0d182ae8538fe9c65e2a2d3ae 100644 (file)
@@ -1105,17 +1105,17 @@ package body Prj.Conf is
 
             if Selected_Target /= null and then
                Selected_Target.all /= ""
+
             then
                Args (4) :=
                   new String'("--target=" & Selected_Target.all);
                Arg_Last := 4;
+
             elsif Normalized_Hostname /= "" then
                if At_Least_One_Compiler_Command then
-                  Args (4) :=
-                    new String'("--target=all");
+                  Args (4) := new String'("--target=all");
                else
-                  Args (4) :=
-                    new String'("--target=" & Normalized_Hostname);
+                  Args (4) := new String'("--target=" & Normalized_Hostname);
                end if;
 
                Arg_Last := 4;
@@ -1599,7 +1599,7 @@ package body Prj.Conf is
       Implicit_Project           : Boolean := False;
       On_New_Tree_Loaded         : Prj.Proc.Tree_Loaded_Callback := null)
    is
-      Success : Boolean := False;
+      Success          : Boolean := False;
       Target_Try_Again : Boolean := True;
       Config_Try_Again : Boolean;
 
@@ -1632,12 +1632,13 @@ package body Prj.Conf is
 
       Update_Ignore_Missing_With (Env.Flags, True);
 
-      Automatically_Generated := False;
-      --  If in fact the config file is automatically generated,
+      --  Note: If in fact the config file is automatically generated, then
       --  Automatically_Generated will be set to True after invocation of
       --  Process_Project_And_Apply_Config.
 
-      --  Record Target_Value and Target_Origin.
+      Automatically_Generated := False;
+
+      --  Record Target_Value and Target_Origin
 
       if Target_Name = "" then
          Opt.Target_Value  := new String'(Normalized_Hostname);
@@ -2165,11 +2166,11 @@ package body Prj.Conf is
       Tree       : Project_Tree_Ref;
       With_State : in out State)
    is
-      Lang_Id : Language_Ptr;
+      Lang_Id       : Language_Ptr;
       Compiler_Root : Compiler_Root_Ptr;
-      Runtime_Root : Runtime_Root_Ptr;
-      Comp_Driver : String_Access;
-      Comp_Dir : String_Access;
+      Runtime_Root  : Runtime_Root_Ptr;
+      Comp_Driver   : String_Access;
+      Comp_Dir      : String_Access;
       Prefix   : String_Access;
 
       pragma Unreferenced (Tree);
@@ -2226,8 +2227,9 @@ package body Prj.Conf is
 
                   declare
                      Runtime : constant String :=
-                       Runtime_Name_For (Lang_Id.Name);
-                     Root : String_Access;
+                                 Runtime_Name_For (Lang_Id.Name);
+                     Root    : String_Access;
+
                   begin
                      if Runtime'Length > 0 then
                         if Is_Absolute_Path (Runtime) then
index 52ba0437e9e9a8ef01eb4026dde78d5c494f6a5f..205c23411b3b40fc08c284af2041c8c7a40bcd5a 100644 (file)
@@ -2458,8 +2458,7 @@ package body Prj.Tree is
    begin
       pragma Assert
         (Present (Node)
-         and then
-         In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
+          and then In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
       In_Tree.Project_Nodes.Table (Node).Display_Name := To;
    end Set_Display_Name_Of;
 
index 4bfd25bbb55d958cc0147fad282082655c308029..5479df0d1e8871464af5ebf32aefa6da6cf601a9 100644 (file)
@@ -5615,10 +5615,12 @@ package body Sem_Ch10 is
          Init_Size_Align       (Ent);
 
          --  A tagged type and its corresponding shadow entity share one common
-         --  class-wide type.
+         --  class-wide type. The list of primitive operations for the shadow
+         --  entity is empty.
 
          if Is_Tagged then
             Set_Is_Tagged_Type (Ent);
+            Set_Direct_Primitive_Operations (Ent, New_Elmt_List);
 
             if No (Class_Wide_Type (Ent)) then
                CW_Typ :=
index f982359c749b734f23cc2faefb165bb466a13fbf..d77c1d5e13ead32506ca5328c573e75bb40e2b22 100644 (file)
@@ -3454,9 +3454,10 @@ package body Sem_Ch12 is
             ASN : Node_Id;
 
          begin
-            ASN := Make_Aspect_Specification (Loc,
-               Identifier => Make_Identifier (Loc, Name_Default_Storage_Pool),
-               Expression => New_Copy (Default_Pool));
+            ASN :=
+              Make_Aspect_Specification (Loc,
+                Identifier => Make_Identifier (Loc, Name_Default_Storage_Pool),
+                Expression => New_Copy (Default_Pool));
 
             if No (Aspect_Specifications (Specification (N))) then
                Set_Aspect_Specifications (Specification (N), New_List (ASN));
@@ -3972,8 +3973,8 @@ package body Sem_Ch12 is
 
                         ASN2 := First (Aspect_Specifications (Gen_Spec));
                         while Present (ASN2) loop
-                           if Chars (Identifier (ASN2))
-                              = Name_Default_Storage_Pool
+                           if Chars (Identifier (ASN2)) =
+                                                    Name_Default_Storage_Pool
                            then
                               Remove (ASN2);
                               exit;
index da2d6e34d8dfca8832807a4603b00a2a3f8dac58..2ca48ef46dd9cc02f6fc3221a8148b6003868e5a 100644 (file)
@@ -9234,10 +9234,10 @@ package body Sem_Ch13 is
 
    begin
       --  If rep_clauses are to be ignored, no need for legality checks. In
-      --  particular, no need to pester user about rep clauses that violate
-      --  the rule on constant addresses, given that these clauses will be
-      --  removed by Freeze before they reach the back end.
-      --  Similarly in CodePeer mode, we want to relax these checks.
+      --  particular, no need to pester user about rep clauses that violate the
+      --  rule on constant addresses, given that these clauses will be removed
+      --  by Freeze before they reach the back end. Similarly in CodePeer mode,
+      --  we want to relax these checks.
 
       if not Ignore_Rep_Clauses and not CodePeer_Mode then
          Check_Expr_Constants (Expr);
index ed9b7b35bfa99cf70e1f39cf59bf0907c1ab9ce1..db348d7a61794edc692df62690f8f3ffac194464 100644 (file)
@@ -3925,7 +3925,7 @@ package body Sem_Ch3 is
 
                   --  The Ghost policy in effect at the point of declaration
                   --  and at the point of completion must match
-                  --  (SPARK RM 6.9(14)).
+                  --  (SPARK RM 6.9(15)).
 
                   if Present (Prev_Entity)
                     and then Is_Ghost_Entity (Prev_Entity)
@@ -4112,7 +4112,7 @@ package body Sem_Ch3 is
          Set_Is_Ghost_Entity (Id);
 
          --  The Ghost policy in effect at the point of declaration and at the
-         --  point of completion must match (SPARK RM 6.9(14)).
+         --  point of completion must match (SPARK RM 6.9(16)).
 
          if Present (Prev_Entity) and then Is_Ghost_Entity (Prev_Entity) then
             Check_Ghost_Completion (Prev_Entity, Id);
@@ -19786,7 +19786,7 @@ package body Sem_Ch3 is
          Set_Is_Ghost_Entity (Full_T);
 
          --  The Ghost policy in effect at the point of declaration and at the
-         --  point of completion must match (SPARK RM 6.9(14)).
+         --  point of completion must match (SPARK RM 6.9(15)).
 
          Check_Ghost_Completion (Priv_T, Full_T);
 
index 8219728aa7013782a5d837ecbf248db6f11d389c..97866c0b67e17b62eaaa7a152a6609d83495f1a4 100644 (file)
@@ -1220,7 +1220,7 @@ package body Sem_Ch6 is
             Set_Is_Ghost_Entity (Body_Id);
 
             --  The Ghost policy in effect at the point of declaration and at
-            --  the point of completion must match (SPARK RM 6.9(14)).
+            --  the point of completion must match (SPARK RM 6.9(15)).
 
             Check_Ghost_Completion (Gen_Id, Body_Id);
          end if;
@@ -3343,7 +3343,7 @@ package body Sem_Ch6 is
                Set_Is_Ghost_Entity (Body_Id);
 
                --  The Ghost policy in effect at the point of declaration and
-               --  at the point of completion must match (SPARK RM 6.9(14)).
+               --  at the point of completion must match (SPARK RM 6.9(15)).
 
                Check_Ghost_Completion (Spec_Id, Body_Id);
             end if;
index b96c27af43e737029efc6099cdaaa7ab257c4e09..ebc17a24f09bdaad57ab79c69db2bf66122bc59b 100644 (file)
@@ -735,7 +735,7 @@ package body Sem_Ch7 is
          Set_Is_Ghost_Entity (Body_Id);
 
          --  The Ghost policy in effect at the point of declaration and at the
-         --  point of completion must match (SPARK RM 6.9(14)).
+         --  point of completion must match (SPARK RM 6.9(15)).
 
          Check_Ghost_Completion (Spec_Id, Body_Id);
       end if;
index 0276b5e7e3333e18763c07004134ab0be9c66bf2..b3e41aa8705407f6752060a0a2df8ad4644b6174 100644 (file)
@@ -23473,7 +23473,7 @@ package body Sem_Prag is
 
                      --  The Ghost policy in effect at the point of abstract
                      --  state declaration and constituent must match
-                     --  (SPARK RM 6.9(15)).
+                     --  (SPARK RM 6.9(16)).
 
                      if Is_Checked_Ghost_Entity (State_Id)
                        and then Is_Ignored_Ghost_Entity (Constit_Id)
index addc32c790e1374c8a89286a493c1d200e6c724d..0afa28cdc869c3d53b730ad2c518c9610a64f3e3 100644 (file)
@@ -841,7 +841,7 @@ package body Sem_Res is
 
       begin
          --  The Ghost policy in effect a the point of declaration and at the
-         --  point of use must match (SPARK RM 6.9(13)).
+         --  point of use must match (SPARK RM 6.9(14)).
 
          if Is_Checked_Ghost_Entity (Id) and then Policy = Name_Ignore then
             Error_Msg_Sloc := Sloc (Err_N);
@@ -4625,6 +4625,26 @@ package body Sem_Res is
                  ("\subprogram & has Extensions_Visible True", A, Nam);
             end if;
 
+            --  The actual parameter of a Ghost subprogram whose formal is of
+            --  mode IN OUT or OUT must be a Ghost variable (SPARK RM 6.9(13)).
+
+            if Is_Ghost_Entity (Nam)
+              and then Ekind_In (F, E_In_Out_Parameter, E_Out_Parameter)
+              and then Is_Entity_Name (A)
+              and then Present (Entity (A))
+              and then not Is_Ghost_Entity (Entity (A))
+            then
+               Error_Msg_NE
+                 ("non-ghost variable & cannot appear as actual in call to "
+                  & "ghost procedure", A, Entity (A));
+
+               if Ekind (F) = E_In_Out_Parameter then
+                  Error_Msg_N ("\corresponding formal has mode `IN OUT`", A);
+               else
+                  Error_Msg_N ("\corresponding formal has mode OUT", A);
+               end if;
+            end if;
+
             Next_Actual (A);
 
          --  Case where actual is not present
index fc160e17d361ac3df0642b6f624f60aaf43d3d51..b3982af884eba73876ae3e279d1f23e809ea0131 100644 (file)
@@ -2681,7 +2681,7 @@ package body Sem_Util is
 
    begin
       --  The Ghost policy in effect at the point of declaration and at the
-      --  point of completion must match (SPARK RM 6.9(14)).
+      --  point of completion must match (SPARK RM 6.9(15)).
 
       if Is_Checked_Ghost_Entity (Partial_View)
         and then Policy = Name_Ignore
index a198c428af55576ab22f93c569c12759d6b84822..6e1acd9c22a0522f422efdadb80f29929268b9f9 100644 (file)
@@ -29,6 +29,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
+with Debug; use Debug;
 with Opt;   use Opt;
 with Table;
 with Types; use Types;
@@ -395,7 +396,11 @@ package body Snames is
         and then (Ada_Version >= Ada_95
                    or else N not in Ada_95_Reserved_Words)
         and then (Ada_Version >= Ada_2005
-                   or else N not in Ada_2005_Reserved_Words)
+                   or else N not in Ada_2005_Reserved_Words
+                   or else (Debug_Flag_Dot_DD and then N = Name_Overriding))
+                   --  Accept 'overriding' keywords if -gnatd.D is used,
+                   --  for compatibility with Ada 95 compilers implementing
+                   --  only this Ada 2005 extension.
         and then (Ada_Version >= Ada_2012
                    or else N not in Ada_2012_Reserved_Words);
    end Is_Keyword_Name;
index 97d0410e6dd449d7c3d787c2c25966019f05c06f..4c745393b29a4925abb999a23aee9f1d75ff556c 100644 (file)
@@ -399,6 +399,10 @@ package body Table is
          Tree_Read_Data
            (Tree_Get_Table_Address,
              (Last_Val - Int (First) + 1) *
+
+               --  Note the importance of parenthesizing the following division
+               --  to avoid the possibility of intermediate overflow.
+
                (Table_Type'Component_Size / Storage_Unit));
       end Tree_Read;