]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 22 Jan 2014 17:04:57 +0000 (18:04 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 22 Jan 2014 17:04:57 +0000 (18:04 +0100)
2014-01-22  Ed Schonberg  <schonberg@adacore.com>

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): A subprogram
body generated for an expression function within a protected body
needs a set of renaming declarations if the expression function
comes from source.

2014-01-22  Ed Schonberg  <schonberg@adacore.com>

* lib-xref.adb (Get_Type_Reference): In semantics-only mode,
list interface progenitor of a tagged concurrent type, for better
source navigation.

2014-01-22  Robert Dewar  <dewar@adacore.com>

* lib.adb (In_Extended_Main_Code_Unit): Return False for
Standard_Location.
(In_Extended_Main_Source_Unit): Return False for Standard_Location.
* lib.ads (In_Extended_Main_Code_Unit): Add documentation on
treatment of Slocs No_Location and Standard_Location.
* restrict.adb (Check_Restriction_No_Dependence): Explicitly
check for entity with Standard_Location Sloc, rather than relying
on Lib routines to do that.
* sem_res.adb (Resolve_Call): Implement SPARK_05 restriction
that a call cannot occur before a later occuring body within
the same unit.

From-SVN: r206931

gcc/ada/ChangeLog
gcc/ada/lib-xref.adb
gcc/ada/lib.adb
gcc/ada/lib.ads
gcc/ada/restrict.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_res.adb

index e8c2d2d65378785567b2697fe9118ca894b5f93d..51f7ed64ba9573d050c921a0dff2a61a8dfdc129 100644 (file)
@@ -1,3 +1,30 @@
+2014-01-22  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch6.adb (Analyze_Subprogram_Body_Helper): A subprogram
+       body generated for an expression function within a protected body
+       needs a set of renaming declarations if the expression function
+       comes from source.
+
+2014-01-22  Ed Schonberg  <schonberg@adacore.com>
+
+       * lib-xref.adb (Get_Type_Reference): In semantics-only mode,
+       list interface progenitor of a tagged concurrent type, for better
+       source navigation.
+
+2014-01-22  Robert Dewar  <dewar@adacore.com>
+
+       * lib.adb (In_Extended_Main_Code_Unit): Return False for
+       Standard_Location.
+       (In_Extended_Main_Source_Unit): Return False for Standard_Location.
+       * lib.ads (In_Extended_Main_Code_Unit): Add documentation on
+       treatment of Slocs No_Location and Standard_Location.
+       * restrict.adb (Check_Restriction_No_Dependence): Explicitly
+       check for entity with Standard_Location Sloc, rather than relying
+       on Lib routines to do that.
+       * sem_res.adb (Resolve_Call): Implement SPARK_05 restriction
+       that a call cannot occur before a later occuring body within
+       the same unit.
+
 2014-01-22  Thomas Quinot  <quinot@adacore.com>
 
        * rtsfind.adb: Update comment.
index 14462ce93ebac6f1b6f3cca59436688e10481c2e..409e736aee0dc32fb1811dac03e7f4b6c041d248 100644 (file)
@@ -1309,6 +1309,22 @@ package body Lib.Xref is
                         Right := '>';
                      end if;
 
+                  --  For a synchronized type that implements an interface, we
+                  --  treat the first progenitor as the parent. This is only
+                  --  needed when compiling a package declaration on its own,
+                  --  if the body is present interfaces are handled properly.
+
+                  elsif Is_Concurrent_Type (Tref)
+                    and then Is_Tagged_Type (Tref)
+                    and then not Expander_Active
+                  then
+                     if Left /= '(' then
+                        Left := '<';
+                        Right := '>';
+                     end if;
+
+                     Tref := Entity (First (Interface_List (Parent (Tref))));
+
                   --  If the completion of a private type is itself a derived
                   --  type, we need the parent of the full view.
 
index b43ad98668440973c9878b4f916d0b226123288e..9ea496f3d265ddcad919c6533fdaf73bd1d2d0b9 100644 (file)
@@ -718,7 +718,7 @@ package body Lib is
    is
    begin
       if Sloc (N) = Standard_Location then
-         return True;
+         return False;
 
       elsif Sloc (N) = No_Location then
          return False;
@@ -750,7 +750,7 @@ package body Lib is
    function In_Extended_Main_Code_Unit (Loc : Source_Ptr) return Boolean is
    begin
       if Loc = Standard_Location then
-         return True;
+         return False;
 
       elsif Loc = No_Location then
          return False;
@@ -787,7 +787,7 @@ package body Lib is
       --  Special value cases
 
       elsif Nloc = Standard_Location then
-         return True;
+         return False;
 
       elsif Nloc = No_Location then
          return False;
@@ -826,7 +826,7 @@ package body Lib is
       --  Special value cases
 
       elsif Loc = Standard_Location then
-         return True;
+         return False;
 
       elsif Loc = No_Location then
          return False;
index 00959cd29130281af7806b8a718844c77a0362ab..5c490cd2014c1088e20a98e676867ae5fb904307 100644 (file)
@@ -520,6 +520,14 @@ package Lib is
    --  instantiations are included in the extended main unit for this call.
    --  If the main unit is itself a subunit, then the extended main code unit
    --  includes its parent unit, and the parent unit spec if it is separate.
+   --
+   --  This routine (and the following three routines) all return False if
+   --  Sloc (N) is No_Location or Standard_Location. In an earlier version,
+   --  they returned True for Standard_Location, but this was odd, and some
+   --  archeology indicated that this was done for the sole benefit of the
+   --  call in Restrict.Check_Restriction_No_Dependence, so we have moved
+   --  the special case check to that routine. This avoids some difficulties
+   --  with some other calls that malfunctioned with the odd return of True.
 
    function In_Extended_Main_Code_Unit (Loc : Source_Ptr) return Boolean;
    --  Same function as above, but argument is a source pointer rather
index e244526389d1fc03164a5c2361a5cf2c87e91cbb..01c5f87a973de5c00378f5ea8126aba5d2711687 100644 (file)
@@ -625,8 +625,12 @@ package body Restrict is
    begin
       --  Ignore call if node U is not in the main source unit. This avoids
       --  cascaded errors, e.g. when Ada.Containers units with other units.
+      --  However, allow Standard_Location here, since this catches some cases
+      --  of constructs that get converted to run-time calls.
 
-      if not In_Extended_Main_Source_Unit (U) then
+      if not In_Extended_Main_Source_Unit (U)
+        and then Sloc (U) /= Standard_Location
+      then
          return;
       end if;
 
index 9793aa4e18834d5492c14de3bdb86966d2773496..62dd8898760e4f3b6706f4f0e3644c0051ee748e 100644 (file)
@@ -3218,13 +3218,13 @@ package body Sem_Ch6 is
       --  family index (if applicable). This form of early expansion is done
       --  when the Expander is active because Install_Private_Data_Declarations
       --  references entities which were created during regular expansion. The
-      --  body may be the rewritting of an expression function, and we need to
-      --  verify that the original node is in the source.
+      --  subprogram entity must come from source, and not be an internally
+      --  generated subprogram.
 
       if Expander_Active
-        and then Comes_From_Source (Original_Node (N))
         and then Present (Prot_Typ)
         and then Present (Spec_Id)
+        and then Comes_From_Source (Spec_Id)
         and then not Is_Eliminated (Spec_Id)
       then
          Install_Private_Data_Declarations
index 9289971d0f86f05bf178167bfb6deef1ed2f12f0..537a6e166ae4fddde39e8061181885d276ff21a0 100644 (file)
@@ -5468,6 +5468,30 @@ package body Sem_Res is
          end if;
       end if;
 
+      --  If the SPARK_05 restriction is active, we are not allowed
+      --  to have a call to a subprogram before we see its completion.
+
+      if not Has_Completion (Nam)
+        and then Restriction_Check_Required (SPARK_05)
+
+        --  Don't flag strange internal calls
+
+        and then Comes_From_Source (N)
+        and then Comes_From_Source (Nam)
+
+        --  Only flag calls in extended main source
+
+        and then In_Extended_Main_Source_Unit (Nam)
+        and then In_Extended_Main_Source_Unit (N)
+
+        --  Exclude enumeration literals from this processing
+
+        and then Ekind (Nam) /= E_Enumeration_Literal
+      then
+         Check_SPARK_Restriction
+           ("call to subprogram cannot appear before its body", N);
+      end if;
+
       --  Check that this is not a call to a protected procedure or entry from
       --  within a protected function.