aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2008-05-20 20:45:49 +0000
committerSamuel Tardieu <sam@gcc.gnu.org>2008-05-20 20:45:49 +0000
commit66ae7a814ceaffcc233286d30e133c3bcbf150f0 (patch)
treead1466bffe2a1870ccd27b361401e8f8778956e2
parent6be349364986cc95bf8e7691476c197f1ee629ea (diff)
downloadgcc-66ae7a814ceaffcc233286d30e133c3bcbf150f0.zip
gcc-66ae7a814ceaffcc233286d30e133c3bcbf150f0.tar.gz
gcc-66ae7a814ceaffcc233286d30e133c3bcbf150f0.tar.bz2
re PR ada/35791 ([Ada] V-table messed up with interface composition)
gcc/testsuite/ PR ada/35791 * gnat.dg/check_displace_generation.adb: New. From-SVN: r135677
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gnat.dg/check_displace_generation.adb50
2 files changed, 55 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c494086..092b122 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2008-05-20 Samuel Tardieu <sam@rfc1149.net>
+ PR ada/35791
+ * gnat.dg/check_displace_generation.adb: New.
+
+2008-05-20 Samuel Tardieu <sam@rfc1149.net>
+
PR ada/30740
* gnat.dg/modular.adb: New test.
diff --git a/gcc/testsuite/gnat.dg/check_displace_generation.adb b/gcc/testsuite/gnat.dg/check_displace_generation.adb
new file mode 100644
index 0000000..2ae2ed0
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/check_displace_generation.adb
@@ -0,0 +1,50 @@
+-- { dg-do run }
+procedure Check_Displace_Generation is
+
+ package Stuff is
+
+ type Base_1 is interface;
+ function F_1 (X : Base_1) return Integer is abstract;
+
+ type Base_2 is interface;
+ function F_2 (X : Base_2) return Integer is abstract;
+
+ type Concrete is new Base_1 and Base_2 with null record;
+ function F_1 (X : Concrete) return Integer;
+ function F_2 (X : Concrete) return Integer;
+
+ end Stuff;
+
+ package body Stuff is
+
+ function F_1 (X : Concrete) return Integer is
+ begin
+ return 1;
+ end F_1;
+
+ function F_2 (X : Concrete) return Integer is
+ begin
+ return 2;
+ end F_2;
+
+ end Stuff;
+
+ use Stuff;
+
+ function Make_Concrete return Concrete is
+ C : Concrete;
+ begin
+ return C;
+ end Make_Concrete;
+
+ B_1 : Base_1'Class := Make_Concrete;
+ B_2 : Base_2'Class := Make_Concrete;
+
+begin
+ if B_1.F_1 /= 1 then
+ raise Program_Error with "bad B_1.F_1 call";
+ end if;
+ if B_2.F_2 /= 2 then
+ raise Program_Error with "bad B_2.F_2 call";
+ end if;
+end Check_Displace_Generation;