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

Julien Fischer juliensf at csse.unimelb.edu.au
Mon Jul 5 17:17:54 AEST 2010


On Mon, 5 Jul 2010, Ian MacLarty wrote:

> On Mon, Jul 5, 2010 at 3:53 PM, Julien Fischer
> <juliensf at csse.unimelb.edu.au> wrote:
>>
>> 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>?
>>
>
> Thanks for the link.  There are a lot of useful looking attributes
> there, but I didn't see any that would help in this case.

Neither did I.

Julien.


More information about the reviews mailing list