diff options
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/private_overriding.adb | 62 |
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; |