[Ada] Better error message for "is null" subunit
authorBob Duff <duff@adacore.com>
Mon, 16 Dec 2019 10:34:03 +0000 (10:34 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 16 Dec 2019 10:34:03 +0000 (10:34 +0000)
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_ch10.adb (Analyze_Subunit): Give an error if the subunit
is not a proper body. This hides the confusing "duplicate body"
message that was previously given.

From-SVN: r279424

gcc/ada/ChangeLog
gcc/ada/sem_ch10.adb

index 2151a4e60bdee0f58fa06c4ee5a0f919d8e6a9b7..88732bd5f30e7fd7d6383ce8a3de6ff285ae7c8c 100644 (file)
@@ -1,3 +1,9 @@
+2019-12-16  Bob Duff  <duff@adacore.com>
+
+       * sem_ch10.adb (Analyze_Subunit): Give an error if the subunit
+       is not a proper body. This hides the confusing "duplicate body"
+       message that was previously given.
+
 2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>
 
        * exp_ch8.adb (Expand_N_Object_Renaming_Declaration): Document
index ae8bca7e239b2d809e3bca1b12197c0d43e00694..ee18b3716c698ea23356e79e83632d3b1efdf943 100644 (file)
@@ -2433,6 +2433,20 @@ package body Sem_Ch10 is
 
       Install_Elaboration_Model (Par_Unit);
 
+      --  The syntax rules require a proper body for a subprogram subunit
+
+      if Nkind (Proper_Body (Sinfo.Unit (N))) = N_Subprogram_Declaration then
+         if Null_Present (Specification (Proper_Body (Sinfo.Unit (N)))) then
+            Error_Msg_N
+              ("null procedure not allowed as subunit",
+               Proper_Body (Unit (N)));
+         else
+            Error_Msg_N
+              ("subprogram declaration not allowed as subunit",
+               Defining_Unit_Name (Specification (Proper_Body (Unit (N)))));
+         end if;
+      end if;
+
       Analyze (Proper_Body (Unit (N)));
       Remove_Context (N);