From: Justin Squirek <squi...@adacore.com>

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

Reply via email to