comp.lang.ada
 help / color / mirror / Atom feed
From: Jerry <lanceboyle@qwest.net>
Subject: Re: Possible compiler bug with this simple program
Date: Wed, 3 Sep 2008 17:22:02 -0700 (PDT)
Date: 2008-09-03T17:22:02-07:00	[thread overview]
Message-ID: <5ca524f3-0fde-4c3b-b1a0-fe2281180ef3@k36g2000pri.googlegroups.com> (raw)
In-Reply-To: 0494a60a-a452-436b-86f9-844b398aab4f@b38g2000prf.googlegroups.com

On Sep 3, 7:20 am, Adam Beneschan <a...@irvine.com> wrote:
>
> Several of us have pointed out that it's a bad idea to use an
> unconstrained array type (i.e. Real_Vector) as a parameter to an
> imported routine (or a routine with convention C), but the above code
> still did it.
>
>                               -- Adam

In about a hundred cases in this same binding project, I have passed
an unconstrained array (and its length) as a parameter to an Imported
C subprogram without consequence--no warnings, no errors, no hangs--on
several kinds of machines (32-bit and 64-bit). This seems to be
allowed by ARM B.3.70: "An Ada parameter of an array type with
component type T, of any mode, is passed as a t* argument to a C
function, where t is the C type corresponding to the Ada type T."
There is no restriction on unconstrained array types.

The reason that I posted the modified code (mixed Ada and C) is that
Randy's post indicated that it should work.

In one instance (of the "hundred"), I "rename" one of these Imported C
subprograms (it has two unconstrained arrays and their length as
parameters). At the point of the "rename," GNAT generates two
warnings, "foreign caller must pass bounds explicitly," and "type of
argument "plfill.y" is unconstrained array." (plfill is the procedure
name and y is one of the unconstrained arrays. A similar pair of
warnings is generated for the other passed unconstrained array.) The
purpose for renaming the procedure, which is originally declared as an
Import with C conventions in another package (without warnings), is to
allow the user to pass it as a callback to another Imported C
subprogram. This works without problems.

The difference between the two cases ([1] described above, herein, and
[2] the code in mixed Ada and C that I posted earlier), is that in
[1], both the called procedure and the callback procedure are written
in C, and the in problematic code [2], the called subprogram is in C
(plmap) but the callback (mapform19) is written in Ada, with C
conventions.

In a third scenario in the binding project [3], Ada successfully calls
an Imported procedure written in C and passes a callback written in
Ada with C conventions; this closely resembles the problematic code
[2] except that in [3], the callback function is passed with 'Access
and in [2] it is passed with 'Unrestricted_Access. Also, [3] doesn't
pass an unconstrained array. (I don't see how to make [2] work with
'access without requiring the user to put the user-written callback
into the binding package.)

Jerry



  reply	other threads:[~2008-09-04  0:22 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-28  7:28 Possible compiler bug with this simple program Jerry
2008-08-28  7:56 ` Ludovic Brenta
2008-08-28 21:08   ` Jerry
2008-08-29 20:39     ` Ludovic Brenta
2008-08-29 21:20       ` Jerry
2008-08-29 21:31         ` Jerry
2008-09-02 22:10     ` Santiago Urueña
2008-08-28  8:03 ` Niklas Holsti
2008-08-28 15:54   ` Adam Beneschan
2008-08-28 15:56     ` Adam Beneschan
2008-08-28 21:01   ` Randy Brukardt
2008-08-28 21:29     ` Jerry
2008-08-30  1:00       ` Randy Brukardt
2008-08-30  4:47         ` Jerry
2008-09-01 11:19           ` Jerry
2008-09-03  4:22             ` Jerry
2008-09-03 14:20               ` Adam Beneschan
2008-09-04  0:22                 ` Jerry [this message]
2008-09-04  1:18                   ` Adam Beneschan
2008-09-04  3:53                     ` Randy Brukardt
2008-09-04  1:31                   ` Jeffrey R. Carter
2008-09-04 14:35                     ` Adam Beneschan
2008-09-04 14:42                       ` Jacob Sparre Andersen
2008-09-06  3:03                       ` Jerry
2008-09-05  8:17                     ` Ludovic Brenta
2008-09-05 15:56                       ` Adam Beneschan
2008-09-05 17:09                       ` Jeffrey R. Carter
2008-09-04 20:49                   ` Simon Wright
2008-08-28 21:16 ` Jerry
2008-08-29  7:41   ` Niklas Holsti
2008-08-30  0:50     ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox