Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Defect with formal package parameters

9 views
Skip to first unread message

Eric Hughes

unread,
Jun 19, 2008, 11:14:15 AM6/19/08
to
GNAT 2008 (just installed) fails to compile the following example,
which was cut down from existing code to isolate the problem. This is
the error message.
> foo.ada-spec:16:34: actual for "Operation" in actual instance does not match formal

Changing the syntax to eliminate "others =>", which is what the
commented-out line does, allows the example to compile without error.
Unfortunately, that's not a viable workaround, because the real code
requires named parameters.

At present I am assuming this is a defect with GNAT 2008 rather than
with the Ada 2005 language definition. I had the identical problem
with GNAT 2007. I had stopped development back then, a few months
ago, in the apparently-misplaced hope that a new compiler version
would fix this.

I should point out, for those without significant experience in
generic programming, that this defect completely blocks a huge class
of generic layering techniques that are primarily of interest to
library authors. Code that does not admit significant reconfiguration
does not require this technique.

Eric
=======================================================
package Foo is
pragma Elaborate_Body( Foo ) ;

generic
with procedure Operation is <> ;
package Signature is end ;

procedure Operation_Actual is null ;
package Impl is new Signature( Operation => Operation_Actual ) ;

generic
with package S is new Signature( others => <> ) ;
-- with package S is new Signature( <> ) ;
package Module is end ;

package M is new Module( S => Impl ) ;
end ;
=======================================================

Simon Wright

unread,
Jun 19, 2008, 3:49:19 PM6/19/08
to
Eric Hughes <eric...@gmail.com> writes:

> At present I am assuming this is a defect with GNAT 2008 rather than
> with the Ada 2005 language definition. I had the identical problem
> with GNAT 2007.

You don't mention the Bugzilla (or other) reference you reported this
under?

Georg Bauhaus

unread,
Jun 19, 2008, 6:48:36 PM6/19/08
to
Eric Hughes wrote:
> GNAT 2008 (just installed) fails to compile the following example,
...

> =======================================================
> package Foo is
> pragma Elaborate_Body( Foo ) ;
>
> generic
> with procedure Operation is <> ;
> package Signature is end ;
>
> procedure Operation_Actual is null ;
> package Impl is new Signature( Operation => Operation_Actual ) ;
>
> generic
> with package S is new Signature( others => <> ) ;
> -- with package S is new Signature( <> ) ;
> package Module is end ;
>
> package M is new Module( S => Impl ) ;
> end ;
> =======================================================

Another workaround:

package Foo is
pragma Elaborate_Body( Foo ) ;

generic
with procedure Operation is <> ;
package Signature is end ;

procedure Operation is null ;
package Impl is new Signature ;

generic
with package S is new Signature( others => <> ) ;

Eric Hughes

unread,
Jun 20, 2008, 1:25:15 PM6/20/08
to
Eric Hughes wrote:
> procedure Operation_Actual is null ;
> package Impl is new Signature( Operation => Operation_Actual ) ;

On Jun 19, 4:48 pm, Georg Bauhaus <rm.tsoh.plus-
bug.bauh...@maps.futureapps.de> wrote:
> Another workaround:


>
> procedure Operation is null ;
> package Impl is new Signature ;

The whole point is that I was stacking these package instantiations
two layers deep, and this would cut out the second layer.

Eric

Eric Hughes

unread,
Jun 21, 2008, 2:42:49 PM6/21/08
to
On Jun 19, 1:49 pm, Simon Wright <simon.j.wri...@mac.com> wrote:
> You don't mention the Bugzilla (or other) reference you reported this
> under?

Please feel free to do so.

Eric


0 new messages