From 9aa63bdded3b3aa7f4497cf5326e71fc03fda106 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Mon, 30 Mar 2020 08:26:27 -0400 Subject: [PATCH] [Ada] Link failure with call to expression function in precondition 2020-06-15 Ed Schonberg gcc/ada/ * freeze.adb (Freeze_Expression): When traversing the tree looking for the proper insertion point for the freeze node of an entity that is declared in an outer scope, set the candidate subprogram body node properly. Previous code has an off-by-one error. --- gcc/ada/freeze.adb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 760cf7c..ea1274e 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -7379,10 +7379,16 @@ package body Freeze is return; end if; - exit when - Nkind (Parent_P) = N_Subprogram_Body + -- If the parent is a subprogram body, the candidate insertion + -- point is just ahead of it. + + if Nkind (Parent_P) = N_Subprogram_Body and then Unique_Defining_Entity (Parent_P) = - Freeze_Outside_Subp; + Freeze_Outside_Subp + then + P := Parent_P; + exit; + end if; P := Parent_P; end loop; -- 2.7.4