ada: Spurious error on Lock_Free protected type with discriminants

This patch corrects an issue in the compiler whereby unprefixed discriminants
appearing in protected subprograms were unable to be properly resolved -
leading to spurious resolution errors.

gcc/ada/

	* sem_ch8.adb (Set_Entity_Or_Discriminal): Verify we are actually
	resetting the entity field of a non-prefixed discriminant
	reference.
This commit is contained in:
Justin Squirek 2022-12-05 22:05:44 +00:00 committed by Marc Poulhiès
parent 8313c5f600
commit 2aa5f94243

View File

@ -4891,14 +4891,16 @@ package body Sem_Ch8 is
then
null;
-- Don't replace the discriminant in strict preanalysis mode since
-- it can lead to errors during full analysis when the discriminant
-- gets referenced later.
-- Don't replace a non-qualified discriminant in strict preanalysis
-- mode since it can lead to errors during full analysis when the
-- discriminant gets referenced later.
-- This can occur in situations where a protected type contains
-- an expression function which references a discriminant.
-- an expression function which references a non-prefixed
-- discriminant.
elsif Preanalysis_Active
elsif No (P)
and then Preanalysis_Active
and then Inside_Preanalysis_Without_Freezing = 0
then
null;