aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_attr.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-09-26 22:50:28 +0200
committerMarc Poulhiès <poulhies@adacore.com>2022-09-29 11:08:47 +0200
commit0f8a934b44ef0d64b5c96c673d14da78867a2738 (patch)
treed4a8b01d962b742679a4c616870c59b413a75b20 /gcc/ada/sem_attr.adb
parent9ebc54a8c472e19d81e23ee4094f619e0437e673 (diff)
downloadgcc-0f8a934b44ef0d64b5c96c673d14da78867a2738.zip
gcc-0f8a934b44ef0d64b5c96c673d14da78867a2738.tar.gz
gcc-0f8a934b44ef0d64b5c96c673d14da78867a2738.tar.bz2
ada: Further tweak new expansion of contracts
The original extended return statement is mandatory for functions whose result type is limited in Ada 2005 and later. gcc/ada/ * contracts.adb (Build_Subprogram_Contract_Wrapper): Put back the extended return statement if the result type is built-in-place. * sem_attr.adb (Analyze_Attribute_Old_Result): Also expect an extended return statement.
Diffstat (limited to 'gcc/ada/sem_attr.adb')
-rw-r--r--gcc/ada/sem_attr.adb8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index 0c88be7..d27d956 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -1454,10 +1454,12 @@ package body Sem_Attr is
Subp_Decl := Find_Related_Declaration_Or_Body (Prag);
end if;
- -- 'Old objects appear in block statements as part of the expansion
- -- of contract wrappers.
+ -- 'Old objects appear in block and extended return statements as
+ -- part of the expansion of contract wrappers.
- if Nkind (Subp_Decl) = N_Block_Statement then
+ if Nkind (Subp_Decl) in N_Block_Statement
+ | N_Extended_Return_Statement
+ then
Subp_Decl := Parent (Parent (Subp_Decl));
end if;