[gcc/devel/gccgo] [Ada] Link failure with call to expression function in precondition

Ian Lance Taylor ian@gcc.gnu.org
Sun Jul 12 19:34:01 GMT 2020


https://gcc.gnu.org/g:9aa63bdded3b3aa7f4497cf5326e71fc03fda106

commit 9aa63bdded3b3aa7f4497cf5326e71fc03fda106
Author: Ed Schonberg <schonberg@adacore.com>
Date:   Mon Mar 30 08:26:27 2020 -0400

    [Ada] Link failure with call to expression function in precondition
    
    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.

Diff:
---
 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 760cf7c1d53..ea1274e7c77 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;


More information about the Gcc-cvs mailing list