errout.adb (Error_Msg_Internal): For non-serious error set Fatal_Error to Ignored.
authorRobert Dewar <dewar@adacore.com>
Thu, 5 Feb 2015 14:31:10 +0000 (14:31 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 5 Feb 2015 14:31:10 +0000 (15:31 +0100)
2015-02-05  Robert Dewar  <dewar@adacore.com>

* errout.adb (Error_Msg_Internal): For non-serious error set
Fatal_Error to Ignored.
* lib-load.adb (Load_Unit): Minor comment updates.
* sem_ch10.adb (Analyze_With_Clause): Propagate Fatal_Error
setting from with'ed unit to with'ing unit.
* sem_prag.adb (Analyze_Pragma, case Warnings): Document handling
of ambiguity.

From-SVN: r220450

gcc/ada/ChangeLog
gcc/ada/errout.adb
gcc/ada/lib-load.adb
gcc/ada/sem_ch10.adb
gcc/ada/sem_prag.adb

index 69fa5f6eaabf846d06f77887ce7128b1ffba5cb6..6da97c7b27c3b6860c7b02f1c4df3cb1989aeab7 100644 (file)
@@ -1,3 +1,13 @@
+2015-02-05  Robert Dewar  <dewar@adacore.com>
+
+       * errout.adb (Error_Msg_Internal): For non-serious error set
+       Fatal_Error to Ignored.
+       * lib-load.adb (Load_Unit): Minor comment updates.
+       * sem_ch10.adb (Analyze_With_Clause): Propagate Fatal_Error
+       setting from with'ed unit to with'ing unit.
+       * sem_prag.adb (Analyze_Pragma, case Warnings): Document handling
+       of ambiguity.
+
 2015-02-05  Yannick Moy  <moy@adacore.com>
 
        * sem_prag.adb, par-prag.adb: Minor code clean up.
index df0fa96387d2fdaca9e43bf656a4a6fde6303643..86ea13f6fbb82bada745b41f0b4852624342e3d8 100644 (file)
@@ -1164,6 +1164,17 @@ package body Errout is
          if Errors.Table (Cur_Msg).Serious then
             Serious_Errors_Detected := Serious_Errors_Detected + 1;
             Handle_Serious_Error;
+
+         --  If not serious error, set Fatal_Error to indicate ignored error
+
+         else
+            declare
+               U : constant Unit_Number_Type := Get_Source_Unit (Sptr);
+            begin
+               if Fatal_Error (U) = None then
+                  Set_Fatal_Error (U, Error_Ignored);
+               end if;
+            end;
          end if;
       end if;
 
index fc52f84f4efe003deeb32a817eb4c270c0645204..aef313f979b6627b7360f80c287dde617ac0fb54 100644 (file)
@@ -740,16 +740,24 @@ package body Lib.Load is
                goto Done;
             end if;
 
-            --  If loaded unit had a fatal error, then caller inherits it
+            --  If loaded unit had a fatal error, then caller inherits setting
 
             if Present (Error_Node) then
                case Units.Table (Unum).Fatal_Error is
+
+                  --  Nothing to do if with'ed unit had no error
+
                   when None =>
                      null;
 
+                  --  If with'ed unit had a detected fatal error, propagate it
+
                   when Error_Detected =>
                      Units.Table (Calling_Unit).Fatal_Error := Error_Detected;
 
+                  --  If with'ed unit had an ignored error, then propagate it
+                  --  but do not overide an existring setting.
+
                   when Error_Ignored =>
                      if Units.Table (Calling_Unit).Fatal_Error = None then
                         Units.Table (Calling_Unit).Fatal_Error :=
index d7df7eb9bbba01cfcc0c816ca647b7918b61bf02..31542fe30257b3c41a46ac89599946f9ea5b0da1 100644 (file)
@@ -2821,6 +2821,29 @@ package body Sem_Ch10 is
       if Private_Present (N) then
          Set_Is_Immediately_Visible (E_Name, False);
       end if;
+
+      --  Propagate Fatal_Error setting from with'ed unit to current unit
+
+      case Fatal_Error (Get_Source_Unit (Library_Unit (N))) is
+
+         --  Nothing to do if with'ed unit had no error
+
+         when None =>
+            null;
+
+            --  If with'ed unit had a detected fatal error, propagate it
+
+         when Error_Detected =>
+            Set_Fatal_Error (Current_Sem_Unit, Error_Detected);
+
+            --  If with'ed unit had an ignored error, then propagate it
+            --  but do not overide an existring setting.
+
+         when Error_Ignored =>
+            if Fatal_Error (Current_Sem_Unit) = None then
+               Set_Fatal_Error (Current_Sem_Unit, Error_Ignored);
+            end if;
+      end case;
    end Analyze_With_Clause;
 
    ------------------------------
index 232d53de8cc0cb490e6aaf3379b802d03761dbc2..01fe51e263cbe45656bb958285b64d0197896b06 100644 (file)
@@ -21340,6 +21340,11 @@ package body Sem_Prag is
          --  always considered to be a tool name, even if there is a string
          --  variable of that name.
 
+         --  Note if the second argument of DETAILS is a local_NAME then the
+         --  second form is always understood. If the intention is to use
+         --  the fourth form, then you can write NAME & "" to force the
+         --  intepretation as a static_string_EXPRESSION.
+
          when Pragma_Warnings => Warnings : declare
             Reason : String_Id;