diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2022-09-26 22:50:28 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2022-09-29 11:08:47 +0200 |
commit | 0f8a934b44ef0d64b5c96c673d14da78867a2738 (patch) | |
tree | d4a8b01d962b742679a4c616870c59b413a75b20 /gcc/ada/sem_attr.adb | |
parent | 9ebc54a8c472e19d81e23ee4094f619e0437e673 (diff) | |
download | gcc-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.adb | 8 |
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; |