https://gcc.gnu.org/g:ef494b147f6d210cfa7e1647fb0979aa3666022a

commit r13-8831-gef494b147f6d210cfa7e1647fb0979aa3666022a
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Mon Jun 10 12:12:21 2024 +0200

    Fix crash on access-to-incomplete type
    
    This just adds the missing guard.
    
    gcc/ada/
            PR ada/114708
            * exp_util.adb (Finalize_Address): Add guard for incomplete types.
    
    gcc/testsuite/
            * gnat.dg/incomplete8.adb: New test.

Diff:
---
 gcc/ada/exp_util.adb                  |  6 ++++++
 gcc/testsuite/gnat.dg/incomplete8.adb | 22 ++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 5e76ca21132..5435375d92e 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -6013,6 +6013,12 @@ package body Exp_Util is
 
       Utyp := Underlying_Type (Base_Type (Utyp));
 
+      --  Handle incomplete types
+
+      if No (Utyp) then
+         return Empty;
+      end if;
+
       --  Deal with untagged derivation of private views. If the parent is
       --  now known to be protected, the finalization routine is the one
       --  defined on the corresponding record of the ancestor (corresponding
diff --git a/gcc/testsuite/gnat.dg/incomplete8.adb 
b/gcc/testsuite/gnat.dg/incomplete8.adb
new file mode 100644
index 00000000000..63fef59e866
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/incomplete8.adb
@@ -0,0 +1,22 @@
+-- PR ada/114708
+-- Reported by Jere <jhb.c...@gmail.com>
+
+-- { dg-do compile }
+
+procedure Incomplete8 is
+
+  generic
+    type Element_Type(<>);
+  package Test_Incomplete_Formal is
+    type Element_Access is access Element_Type;
+  end Test_Incomplete_Formal;
+
+  type Node;
+
+  package P is new Test_Incomplete_Formal(Node);
+
+  type Node is limited null record;
+   
+begin
+  null;
+end;

Reply via email to