aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/private_overriding.adb62
2 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d040a77..b9b09d4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-12-05 Ed Schonberg <schonberg@adacore.com>
+
+ * gnat.dg/private_overriding.adb: New testcase.
+
2017-12-05 Martin Liska <mliska@suse.cz>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/gnat.dg/private_overriding.adb b/gcc/testsuite/gnat.dg/private_overriding.adb
new file mode 100644
index 0000000..0d59ae0
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/private_overriding.adb
@@ -0,0 +1,62 @@
+-- { dg-do compile }
+
+procedure Private_Overriding is
+
+ package Foo is
+
+ type Bar is abstract tagged null record;
+
+ procedure Overloaded_Subprogram
+ (Self : in out Bar)
+ is abstract;
+
+ procedure Overloaded_Subprogram
+ (Self : in out Bar;
+ P1 : Integer)
+ is abstract;
+
+ procedure Not_Overloaded_Subprogram
+ (Self : in out Bar)
+ is abstract;
+
+
+ type Baz is new Bar with null record;
+ -- promise to override both overloaded subprograms,
+ -- shouldn't matter that they're defined in the private part,
+
+ private -- workaround: override in the public view
+
+ overriding
+ procedure Overloaded_Subprogram
+ (Self : in out Baz)
+ is null;
+
+ overriding
+ procedure Overloaded_Subprogram
+ (Self : in out Baz;
+ P1 : Integer)
+ is null;
+
+ overriding
+ procedure Not_Overloaded_Subprogram
+ (Self : in out Baz)
+ is null;
+
+ end Foo;
+
+ Qux : Foo.Baz;
+begin
+
+ -- this is allowed, as expected
+ Foo.Not_Overloaded_Subprogram(Qux);
+ Foo.Overloaded_Subprogram(Qux);
+ Foo.Overloaded_Subprogram(Foo.Baz'Class(Qux));
+ Foo.Overloaded_Subprogram(Foo.Bar'Class(Qux));
+
+ -- however, using object-dot notation
+ Qux.Not_Overloaded_Subprogram; -- this is allowed
+ Qux.Overloaded_Subprogram; -- "no selector..."
+ Foo.Baz'Class(Qux).Overloaded_Subprogram; -- "no selector..."
+ Foo.Bar'Class(Qux).Overloaded_Subprogram; -- this is allowed
+
+end Private_Overriding;