aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-11-16 18:36:44 +0100
committerEric Botcazou <ebotcazou@adacore.com>2023-11-16 18:38:23 +0100
commit4d8b41bb0512947ce13636fc460ea9fb8dea419a (patch)
treeb1849828717df680f4b0c4fb3c494a8daf06f99e /gcc/testsuite/gnat.dg
parent23725aa53bd264941c4fb228227736be4da59761 (diff)
downloadgcc-4d8b41bb0512947ce13636fc460ea9fb8dea419a.zip
gcc-4d8b41bb0512947ce13636fc460ea9fb8dea419a.tar.gz
gcc-4d8b41bb0512947ce13636fc460ea9fb8dea419a.tar.bz2
Fix internal error on function returning dynamically-sized type
This is a tree sharing issue for the internal return type synthesized for a function returning a dynamically-sized type and taking an Out or In/Out parameter passed by copy. gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Also create a TYPE_DECL for the return type built for the CI/CO mechanism. gcc/testsuite/ * gnat.dg/varsize4.ads, gnat.dg/varsize4.adb: New test. * gnat.dg/varsize4_pkg.ads: New helper.
Diffstat (limited to 'gcc/testsuite/gnat.dg')
-rw-r--r--gcc/testsuite/gnat.dg/varsize4.adb19
-rw-r--r--gcc/testsuite/gnat.dg/varsize4.ads9
-rw-r--r--gcc/testsuite/gnat.dg/varsize4_pkg.ads5
3 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/gnat.dg/varsize4.adb b/gcc/testsuite/gnat.dg/varsize4.adb
new file mode 100644
index 0000000..3d0430d
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/varsize4.adb
@@ -0,0 +1,19 @@
+-- { dg-do compile }
+
+package body Varsize4 is
+
+ function Func (bytes_read : out Natural) return Arr is
+ Ret : Arr := (others => False);
+ begin
+ return Ret;
+ end;
+
+ function Get return Natural is
+ Data : Arr;
+ Bytes : Natural;
+ begin
+ Data := Func (Bytes);
+ return Bytes;
+ end;
+
+end Varsize4;
diff --git a/gcc/testsuite/gnat.dg/varsize4.ads b/gcc/testsuite/gnat.dg/varsize4.ads
new file mode 100644
index 0000000..62b673f
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/varsize4.ads
@@ -0,0 +1,9 @@
+with Varsize4_Pkg;
+
+package Varsize4 is
+
+ type Arr is array (1 .. Varsize4_Pkg.F) of Boolean;
+
+ function Get return Natural;
+
+end Varsize4;
diff --git a/gcc/testsuite/gnat.dg/varsize4_pkg.ads b/gcc/testsuite/gnat.dg/varsize4_pkg.ads
new file mode 100644
index 0000000..e07a6b0
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/varsize4_pkg.ads
@@ -0,0 +1,5 @@
+package Varsize4_Pkg is
+
+ function F return Natural;
+
+end Varsize4_Pkg;