aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gnat.dg/nested_controlled_alloc.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gnat.dg/nested_controlled_alloc.adb')
-rw-r--r--gcc-4.9/gcc/testsuite/gnat.dg/nested_controlled_alloc.adb49
1 files changed, 49 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gnat.dg/nested_controlled_alloc.adb b/gcc-4.9/gcc/testsuite/gnat.dg/nested_controlled_alloc.adb
new file mode 100644
index 000000000..963ba76be
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gnat.dg/nested_controlled_alloc.adb
@@ -0,0 +1,49 @@
+-- { dg-do run }
+
+with Text_IO; use Text_IO;
+with Ada.Finalization; use Ada.Finalization;
+
+procedure Nested_Controlled_Alloc is
+
+ package Controlled_Alloc is
+
+ type Fin is new Limited_Controlled with null record;
+ procedure Finalize (X : in out Fin);
+
+ F : Fin;
+
+ type T is limited private;
+ type Ref is access all T;
+
+ private
+
+ type T is new Limited_Controlled with null record;
+ procedure Finalize (X : in out T);
+
+ end Controlled_Alloc;
+
+ package body Controlled_Alloc is
+
+ procedure Finalize (X : in out T) is
+ begin
+ Put_Line ("Finalize (T)");
+ end Finalize;
+
+ procedure Finalize (X : in out Fin) is
+ R : Ref;
+ begin
+ begin
+ R := new T;
+ raise Constraint_Error;
+
+ exception
+ when Program_Error =>
+ null; -- OK
+ end;
+ end Finalize;
+
+ end Controlled_Alloc;
+
+begin
+ null;
+end Nested_Controlled_Alloc;