[Ada] Missing diagnostic of categorization dependency

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
This commit is contained in:
Hristian Kirtchev 2018-01-11 08:54:26 +00:00 committed by Pierre-Marie de Rodat
parent 715a5d5191
commit ed27b86ba1
5 changed files with 32 additions and 1 deletions

View 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

View 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;

View 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.

View File

@ -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 }

View File

@ -0,0 +1,2 @@
package Pure_Subp_Body_Pkg is
end Pure_Subp_Body_Pkg;