[Ada] Issue warning or error message on ignored typing constraint

GNAT ignores the discriminant constraint on a component when it applies
to the type of the record being analyzed. Now issue a warning on Ada
code when ignoring this constraint, or an error on SPARK code.

2019-07-22  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_ch3.adb (Constrain_Access): Issue a message about ignored
	constraint.

gcc/testsuite/

	* gnat.dg/warn24.adb: New testcase.

From-SVN: r273684
This commit is contained in:
Yannick Moy 2019-07-22 13:57:42 +00:00 committed by Pierre-Marie de Rodat
parent 1169925707
commit 5dcbefb1c4
4 changed files with 28 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2019-07-22 Yannick Moy <moy@adacore.com>
* sem_ch3.adb (Constrain_Access): Issue a message about ignored
constraint.
2019-07-22 Eric Botcazou <ebotcazou@adacore.com>
* sem_ch8.adb (End_Use_Type): Reset the In_Use flag on the

View File

@ -12970,6 +12970,10 @@ package body Sem_Ch3 is
if Desig_Type = Current_Scope
and then No (Def_Id)
then
Error_Msg_Warn := SPARK_Mode /= On;
Error_Msg_N ("<<constraint is ignored on component that is "
& "access to current record", S);
Set_Ekind (Desig_Subtype, E_Record_Subtype);
Def_Id := Entity (Subtype_Mark (S));

View File

@ -1,3 +1,7 @@
2019-07-22 Yannick Moy <moy@adacore.com>
* gnat.dg/warn24.adb: New testcase.
2019-07-22 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/inline17.adb, gnat.dg/inline17_pkg1.adb,

View File

@ -0,0 +1,15 @@
-- { dg-do compile }
procedure Warn24 is
type List_D (D : Boolean);
type List_Acc is access List_D;
type List_D (D : Boolean) is record
Next : List_Acc (D); -- { dg-warning "constraint is ignored on component that is access to current record" }
end record;
X : List_D (True);
begin
X.Next := new List_D (False);
end Warn24;