[Ada] Link failure with call to expression function in precondition
authorEd Schonberg <schonberg@adacore.com>
Mon, 30 Mar 2020 12:26:27 +0000 (08:26 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 15 Jun 2020 08:04:20 +0000 (04:04 -0400)
2020-06-15  Ed Schonberg  <schonberg@adacore.com>

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

index 760cf7c1d536586ab48a4b0c7460675f893429e6..ea1274e7c77958a8deea8e61c110a27437f3f342 100644 (file)
@@ -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;