aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_attr.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/sem_attr.adb')
-rw-r--r--gcc/ada/sem_attr.adb21
1 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index 002f727..ff00878 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -4586,11 +4586,26 @@ package body Sem_Attr is
-- During pre-analysis, Prag is the enclosing pragma node if any
begin
- -- Find enclosing scopes, excluding loops
+ -- Find the proper enclosing scope
CS := Current_Scope;
- while Ekind (CS) = E_Loop loop
- CS := Scope (CS);
+ while Present (CS) loop
+
+ -- Skip generated loops
+
+ if Ekind (CS) = E_Loop then
+ CS := Scope (CS);
+
+ -- Skip the special _Parent scope generated to capture references
+ -- to formals during the process of subprogram inlining.
+
+ elsif Ekind (CS) = E_Function
+ and then Chars (CS) = Name_uParent
+ then
+ CS := Scope (CS);
+ else
+ exit;
+ end if;
end loop;
PS := Scope (CS);