[m-rev.] for review: deconstruct.named_arg for java

Julien Fischer juliensf at csse.unimelb.edu.au
Mon Jul 5 15:53:10 AEST 2010


On Mon, 5 Jul 2010, Ian MacLarty wrote:

> On Mon, Jul 05, 2010 at 03:18:38PM +1000, Paul Bone wrote:
>> On Mon, Jul 05, 2010 at 02:35:32PM +1000, Ian MacLarty wrote:
>>> On Mon, Jul 5, 2010 at 2:21 PM, Paul Bone <pbone at csse.unimelb.edu.au> wrote:
>>>> On Mon, Jul 05, 2010 at 02:04:23PM +1000, Ian MacLarty wrote:
>>>>>
>>>>> What seems to be happening is that functions are being declared with
>>>>> a prototype like the following:
>>>>>
>>>>>     static void mercury__tree234__LCMCpr_insert2_1_4_0(void) __asm__("_entry_" "mercury__tree234__LCMCpr_insert2_1_4_0")
>>>>>
>>>>> and then being referred to without being defined in C code.
>>>>> The functions are in fact defined using assembly code.
>>>>>
>>>>> It seems to be the fact that the function is declared static that is
>>>>> causing gcc to expect a definition of the function in the same file.
>>>>> Removing the static keyword appears to fix the problem.
>>>>>
>>>>> Here is the hack I used to test this:
>>>>
>>>> Why is there a static definition but no declaration?  In other words, are these
>>>> symbols really indented to be static?
>>>>
>>>
>>> There is a static declaration.  It is the definition that is missing.
>>> I'm not sure if the static keyword makes any difference if the
>>> function is defined in assembler.  It doesn't appear to (running nm on
>>> the .o files yields the same results).
>>>
>>>> If this is true then they should be created using a different preprocessor
>>>> macro, rather than making a static macro create non-static declarations.
>>>>
>>>
>>> Yes I know.  That was just a hack I used to test my theory.
>>
>> Ah, okay.
>>
>>>> Alternativly, is there a missing (static) definition of these symbols?  I
>>>> wouldn't think so otherwise the linker wuld fail to link the executable.  Can
>>>> GCC see the static definitions if they exist?
>>>
>>> The definition, as far as I can tell, is done with some inline
>>> assembler.  There is no C code definition of the function, which is
>>> why gcc complains.
>>
>> In that case I'm happy to use a new macro that doesn't make the definition
>> static.
>>
>
> I don't want to change the compiler code to emit a different macro
> depending on whether we're using asm labels or not, because,
> as I understand it, the compiler should emit the same code for
> all the low level grades and the differences between the grades should
> be hidden behind macros.

Yes, and you are not allowed to break that behaviour!

> This allows us to build in none.gc, reg.gc or
> asm_fast.gc from the same source distribution.  I could change the name
> of the MR_decl_static and MR_declare_static macros, but what to?
> (MR_decl_local is already used for something else).

Maybe there is a GCC function attribute that we could attach to the
declaration that would inhibit the warning,
<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes>?

Julien.


More information about the reviews mailing list