[m-dev.] diff: pragma c_code fix
Fergus Henderson
fjh at cs.mu.OZ.AU
Fri Nov 10 16:51:32 AEDT 2000
On 10-Nov-2000, Tyson Dowd <trd at cs.mu.OZ.AU> wrote:
> On 09-Nov-2000, Peter Ross <peter.ross at miscrit.be> wrote:
> > mercury/compiler/llds_out.m:
> > Output any `pragma c_code' first for the LLDS backend. This is
> > because variables may be defined in a `pragma c_code' and we want
> > the definition to appear before any use of the variable. Also
> > output the `pragma c_code' fragments in the same order they appear
> > in the source file, as this is the more intuitive behaviour.
>
> I don't think this is the right approach to take. In fact, I think this
> is broken.
I agree.
> If you want to declare variables in the c_code that can be referenced
> from any place in the module, use pragma c_header_code, and put an
> extern declaration in for the variable. Declarations should go in the
> c_header code, definitions in c_code. (Perhaps the documentation should
> be clearer on this issue?).
>
> Then it doesn't matter *where* you put the actual definition of the
> variable.
>
> That way you can use --split-c-files and even if every procedure is put
> in a separate file, they can all see the c_header_code, and know there
> will be a variable defined somewhere to link to.
>
> Your change will just hide this problem -- the code will work fine when
> in a single file but cannot be split into separate files without
> breaking.
Right. Note that the causes problems for `--intermodule-optimization'
as well as for `--split-c-files', so it is something that we should
not ignore.
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
| of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list