[Ada] Missing diagnostic of categorization dependency
authorHristian Kirtchev <kirtchev@adacore.com>
Thu, 11 Jan 2018 08:54:26 +0000 (08:54 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 11 Jan 2018 08:54:26 +0000 (08:54 +0000)
This patch modifies the analysis of subprogram bodies to catch a case where a
pure subprogram body unit depends on non-pure units.

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Check the
categorization of a subprogram body which does not complete a previous
declaration.

gcc/testsuite/

* gnat.dg/pure_subp_body.adb, gnat.dg/pure_subp_body_pkg.ads: New
testcase.

From-SVN: r256516

gcc/ada/ChangeLog
gcc/ada/sem_ch6.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/pure_subp_body.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/pure_subp_body_pkg.ads [new file with mode: 0644]

index 2bc53d7f8dc752543b24b4641ab540fd5ccd6c85..fd0a8d336249044ca4c4641dfc1b51e1ec30c00f 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Check the
+       categorization of a subprogram body which does not complete a previous
+       declaration.
+
 2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * sem_ch10.adb (Check_Private_Child_Unit): Ensure that the enclosing
index 1c0495f651200c616f0099035bda906e53e217da..186467d9cb3f5fa184d8cf8ac002189fb84a2b23 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2017, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2018, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
@@ -4463,6 +4463,12 @@ package body Sem_Ch6 is
             Set_First_Entity (Spec_Id, Empty);
             Set_Last_Entity  (Spec_Id, Empty);
          end if;
+
+      --  Otherwise the body does not complete a previous declaration. Check
+      --  the categorization of the body against the units it withs.
+
+      else
+         Validate_Categorization_Dependency (N, Body_Id);
       end if;
 
       Check_Missing_Return;
index 3bbd01c745eee7d38fba1251bd1a537cae725950..e5b1c350c7801a1682da827c7674589561e4a2f9 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * gnat.dg/pure_subp_body.adb, gnat.dg/pure_subp_body_pkg.ads: New
+       testcase.
+
 2018-01-11  Bob Duff  <duff@adacore.com>
 
        * gnat.dg/protected_null.adb: New testcase.
diff --git a/gcc/testsuite/gnat.dg/pure_subp_body.adb b/gcc/testsuite/gnat.dg/pure_subp_body.adb
new file mode 100644 (file)
index 0000000..31bf106
--- /dev/null
@@ -0,0 +1,12 @@
+--  { dg-do compile }
+
+with Pure_Subp_Body_Pkg;
+
+procedure Pure_Subp_Body with Pure is
+begin
+    null;
+end Pure_Subp_Body;
+
+--  cannot depend on "Pure_Subp_Body_Pkg" (wrong categorization)
+--  { dg-error "cannot depend on \"Pure_Subp_Body_Pkg\" \\(wrong categorization\\)" "" { target *-*-* } 3 }
+--  { dg-error "pure unit cannot depend on non-pure unit" "non-pure unit" { target *-*-* } 3 }
diff --git a/gcc/testsuite/gnat.dg/pure_subp_body_pkg.ads b/gcc/testsuite/gnat.dg/pure_subp_body_pkg.ads
new file mode 100644 (file)
index 0000000..b10db0a
--- /dev/null
@@ -0,0 +1,2 @@
+package Pure_Subp_Body_Pkg is
+end Pure_Subp_Body_Pkg;