Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gnat.dg/private_overriding.adb @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
-- { 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;