From: Justin Squirek <[email protected]>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_ch8.adb | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index 841076bbd01..fe89e1127ee 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -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;
--
2.34.1