From: Ed Schonberg Date: Fri, 5 Jul 2019 07:03:20 +0000 (+0000) Subject: [Ada] Fix position of subprogram body generated for static predicate X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c365eb26e87eab31f55b760fe4220b68fb952b72;p=gcc.git [Ada] Fix position of subprogram body generated for static predicate 2019-07-05 Ed Schonberg gcc/ada/ * sem_ch13.adb (Build_Predicate_Functions): If a subtype that carries a static predicate aspect is frozen immediately after its declaration, ensure that the generated function body created for predicate checking is inserted after the corresponding subprogram declaration, which is created at the point the declaration is elaborated. From-SVN: r273122 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 6da90f23352..c5dcd039079 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,12 @@ +2019-07-05 Ed Schonberg + + * sem_ch13.adb (Build_Predicate_Functions): If a subtype that + carries a static predicate aspect is frozen immediately after + its declaration, ensure that the generated function body created + for predicate checking is inserted after the corresponding + subprogram declaration, which is created at the point the + declaration is elaborated. + 2019-07-05 Hristian Kirtchev * exp_ch7.adb (Cleanup_Record): Use the underlying type when diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index b18f74ba548..4c743666b23 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -8902,9 +8902,15 @@ package body Sem_Ch13 is Expression => Expr)))); -- The declaration has been analyzed when created, and placed - -- after type declaration. Insert body itself after freeze node. + -- after type declaration. Insert body itself after freeze node, + -- unless subprogram declaration is already there, in which case + -- body better be placed afterwards. - Insert_After_And_Analyze (N, FBody); + if FDecl = Next (N) then + Insert_After_And_Analyze (FDecl, FBody); + else + Insert_After_And_Analyze (N, FBody); + end if; -- The defining identifier of a quantified expression carries the -- scope in which the type appears, but when unnesting we need