[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 16 Jun 2016 10:27:34 +0000 (12:27 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 16 Jun 2016 10:27:34 +0000 (12:27 +0200)
2016-06-16  Ed Schonberg  <schonberg@adacore.com>

* sem_prag.adb (Overridden_Ancestor): Clean up code to use
controlling type of desired primitive rather than its scope,
because the primitive that inherits the classwide condition may
comes from several derivation steps.

2016-06-16  Javier Miranda  <miranda@adacore.com>

* einfo.adb (Set_Default_Init_Cond_Procedure): Allow calls setting
this attribute to Empty (only if the attribute has not been set).
* sem_util.adb (Build_Default_Init_Cond_Procedure_Body):
No action needed if the spec was not built.
(Build_Default_Init_Cond_Procedure_Declaration): The spec is
not built if DIC is set to NULL or no condition was specified.
* exp_ch3.adb (Expand_N_Object_Declaration): Check availability
of the Init_Cond procedure before generating code to call it.

2016-06-16  Emmanuel Briot  <briot@adacore.com>

* s-regpat.adb: Fix invalid index check when matching end-of-line
on substrings.

2016-06-16  Arnaud Charlet  <charlet@adacore.com>

* gnat1drv.adb: Minor reformatting.

From-SVN: r237516

gcc/ada/ChangeLog
gcc/ada/einfo.adb
gcc/ada/exp_ch3.adb
gcc/ada/gnat1drv.adb
gcc/ada/s-regpat.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_util.adb

index 5f24e357f2519e435f3c8e4d768862f6cb5b8549..10ccf7ef46aec5b7410cf2843495293ba2bba43c 100644 (file)
@@ -1,3 +1,30 @@
+2016-06-16  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_prag.adb (Overridden_Ancestor): Clean up code to use
+       controlling type of desired primitive rather than its scope,
+       because the primitive that inherits the classwide condition may
+       comes from several derivation steps.
+
+2016-06-16  Javier Miranda  <miranda@adacore.com>
+
+       * einfo.adb (Set_Default_Init_Cond_Procedure): Allow calls setting
+       this attribute to Empty (only if the attribute has not been set).
+       * sem_util.adb (Build_Default_Init_Cond_Procedure_Body):
+       No action needed if the spec was not built.
+       (Build_Default_Init_Cond_Procedure_Declaration): The spec is
+       not built if DIC is set to NULL or no condition was specified.
+       * exp_ch3.adb (Expand_N_Object_Declaration): Check availability
+       of the Init_Cond procedure before generating code to call it.
+
+2016-06-16  Emmanuel Briot  <briot@adacore.com>
+
+       * s-regpat.adb: Fix invalid index check when matching end-of-line
+       on substrings.
+
+2016-06-16  Arnaud Charlet  <charlet@adacore.com>
+
+       * gnat1drv.adb: Minor reformatting.
+
 2016-06-16  Ed Schonberg  <schonberg@adacore.com>
 
        * sem_ch3.adb (Check_Entry_Contracts): New procedure, subsidiary
index f812026ce7544e15eef20eb1db2449c48af73d33..39cfe35c30232422f17662f913de85de9959b24c 100644 (file)
@@ -8567,6 +8567,13 @@ package body Einfo is
       Subp_Id  : Entity_Id;
 
    begin
+      --  Once set this attribute it cannot be reset
+
+      if No (V) then
+         pragma Assert (No (Default_Init_Cond_Procedure (Id)));
+         return;
+      end if;
+
       pragma Assert
         (Is_Type (Id)
           and then (Has_Default_Init_Cond (Id)
index 06252736c7e57b3f33aa64c02b960356bd588e4c..43d27ba613ac6f7fb94bdb034adf68b9177e2ace 100644 (file)
@@ -6963,6 +6963,7 @@ package body Exp_Ch3 is
                     or else
                   Has_Inherited_Default_Init_Cond (Typ))
         and then not Has_Init_Expression (N)
+        and then Present (Default_Init_Cond_Procedure (Typ))
       then
          declare
             DIC_Call : constant Node_Id :=
index 7da8e9a52a77a286b4866309439d1d79728403e6..702545a1718e4bf024d2513441b50c3eac78cc72 100644 (file)
@@ -317,7 +317,7 @@ procedure Gnat1drv is
          Assertions_Enabled := True;
 
          --  Set normal RM validity checking and checking of copies (to catch
-         --  e.g.  wrong values used in unchecked conversions).
+         --  e.g. wrong values used in unchecked conversions).
          --  All other validity checking is turned off, since this can generate
          --  very complex trees that only confuse CodePeer and do not bring
          --  enough useful info.
index 4127ec995231128cd557300e2aa08551ca55f81f..f672b9e92a11c3387b9d2b7a6b50229aaea6dbc0 100644 (file)
@@ -7,7 +7,7 @@
 --                                 B o d y                                  --
 --                                                                          --
 --               Copyright (C) 1986 by University of Toronto.               --
---                      Copyright (C) 1999-2015, AdaCore                    --
+--                      Copyright (C) 1999-2016, AdaCore                    --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -2614,16 +2614,16 @@ package body System.Regpat is
                   exit State_Machine when Input_Pos /= BOL_Pos;
 
                when EOL =>
-                  exit State_Machine when Input_Pos <= Data'Last
+                  exit State_Machine when Input_Pos <= Last_In_Data
                     and then ((Self.Flags and Multiple_Lines) = 0
                                or else Data (Input_Pos) /= ASCII.LF);
 
                when MEOL =>
-                  exit State_Machine when Input_Pos <= Data'Last
+                  exit State_Machine when Input_Pos <= Last_In_Data
                     and then Data (Input_Pos) /= ASCII.LF;
 
                when SEOL =>
-                  exit State_Machine when Input_Pos <= Data'Last;
+                  exit State_Machine when Input_Pos <= Last_In_Data;
 
                when BOUND | NBOUND =>
 
index 86086a7fa6fcb043e476db767dfd2aa801d99fbc..fd8352398588ed902055600ea5a515a3d5e7e8a2 100644 (file)
@@ -26342,13 +26342,18 @@ package body Sem_Prag is
             -------------------------
 
             function Overridden_Ancestor (S : Entity_Id) return Entity_Id is
+               Par : constant Entity_Id := Find_Dispatching_Type (Inher_Id);
                Anc : Entity_Id;
 
             begin
                Anc := S;
+
+               --  Locate the ancestor subprogram with the proper controlling
+               --  type.
+
                while Present (Overridden_Operation (Anc)) loop
-                  exit when Scope (Anc) = Scope (Inher_Id);
                   Anc := Overridden_Operation (Anc);
+                  exit when Find_Dispatching_Type (Anc) = Par;
                end loop;
 
                return Anc;
index 014d86ad2ce9d12924a269f2c59a8b8928512996..43b08912504ffebf0a4a4462731b9b3918fd77f1 100644 (file)
@@ -1214,9 +1214,9 @@ package body Sem_Util is
          Prag      : constant Node_Id    :=
                        Get_Pragma (Typ, Pragma_Default_Initial_Condition);
          Proc_Id   : constant Entity_Id  := Default_Init_Cond_Procedure (Typ);
-         Spec_Decl : constant Node_Id    := Unit_Declaration_Node (Proc_Id);
          Body_Decl : Node_Id;
          Expr      : Node_Id;
+         Spec_Decl : Node_Id;
          Stmt      : Node_Id;
 
          Save_Ghost_Mode : constant Ghost_Mode_Type := Ghost_Mode;
@@ -1230,11 +1230,14 @@ package body Sem_Util is
 
          pragma Assert (Has_Default_Init_Cond (Typ));
          pragma Assert (Present (Prag));
-         pragma Assert (Present (Proc_Id));
 
-         --  Nothing to do if the body was already built
+         --  No action needed if the spec was not built or if the body was
+         --  already built.
 
-         if Present (Corresponding_Body (Spec_Decl)) then
+         if No (Proc_Id)
+           or else
+             Present (Corresponding_Body (Unit_Declaration_Node (Proc_Id)))
+         then
             return;
          end if;
 
@@ -1293,6 +1296,7 @@ package body Sem_Util is
          --       <Stmt>;
          --    end <Typ>Default_Init_Cond;
 
+         Spec_Decl := Unit_Declaration_Node (Proc_Id);
          Body_Decl :=
            Make_Subprogram_Body (Loc,
              Specification              =>
@@ -1378,6 +1382,17 @@ package body Sem_Util is
 
       if Present (Default_Init_Cond_Procedure (Typ)) then
          return;
+
+      --  The procedure must not be generated when DIC has one of these two
+      --  forms: 1. Default_Initial_Condition => null
+      --         2. Default_Initial_Condition
+
+      elsif No (Pragma_Argument_Associations (Prag))
+        or else
+          Nkind (Get_Pragma_Arg (First (Pragma_Argument_Associations (Prag))))
+            = N_Null
+      then
+         return;
       end if;
 
       --  The related type may be subject to pragma Ghost. Set the mode now to