Обсуждение: UnixWare 7.1.3 (BETA), C99 compiler, current CVS, error...

Поиск
Список
Период
Сортировка

UnixWare 7.1.3 (BETA), C99 compiler, current CVS, error...

От
Larry Rosenman
Дата:
Without specifying the -Xb switch to kill the C99 interpretation of
inline, I get the following from current CVS:

UX:acomp: ERROR: "tuplesort.c", line 1854: "inline" functions cannot use
"static" identifier: myFunctionCall2
UX:acomp: ERROR: "tuplesort.c", line 1856: "inline" functions cannot use
"static" identifier: myFunctionCall2
UX:acomp: ERROR: "tuplesort.c", line 1870: "inline" functions cannot use
"static" identifier: myFunctionCall2
UX:acomp: ERROR: "tuplesort.c", line 1872: "inline" functions cannot use
"static" identifier: myFunctionCall2
UX:acomp: ERROR: "tuplesort.c", line 1885: "inline" functions cannot use
"static" identifier: myFunctionCall2
UX:acomp: ERROR: "tuplesort.c", line 1897: "inline" functions cannot use
"static" identifier: myFunctionCall2



-- 
Larry Rosenman                     http://www.lerctr.org/~ler
Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749



Re: UnixWare 7.1.3 (BETA), C99 compiler, current CVS, error...

От
Tom Lane
Дата:
Larry Rosenman <ler@lerctr.org> writes:
> Without specifying the -Xb switch to kill the C99 interpretation of
> inline, I get the following from current CVS:

> UX:acomp: ERROR: "tuplesort.c", line 1854: "inline" functions cannot use
> "static" identifier: myFunctionCall2

I don't understand what it's unhappy about.  My C99 draft sez
      [#6] Any function with internal linkage  can  be  an  inline      function.

so the text of the message is surely not what they are really
complaining about?  Or is the compiler broken?
        regards, tom lane


Re: UnixWare 7.1.3 (BETA), C99 compiler, current CVS,

От
Larry Rosenman
Дата:
On Sat, 2002-10-26 at 10:07, Tom Lane wrote:
> Larry Rosenman <ler@lerctr.org> writes:
> > Without specifying the -Xb switch to kill the C99 interpretation of
> > inline, I get the following from current CVS:
> 
> > UX:acomp: ERROR: "tuplesort.c", line 1854: "inline" functions cannot use
> > "static" identifier: myFunctionCall2
> 
> I don't understand what it's unhappy about.  My C99 draft sez
> 
>        [#6] Any function with internal linkage  can  be  an  inline
>        function.
> 
> so the text of the message is surely not what they are really
> complaining about?  Or is the compiler broken?
I'll ask, it is Beta (although the Compiler has done this since the C99
functionality was added, and it causes a LOT of open source stuff to
require -Xb). 


> 
>             regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
> 
> http://archives.postgresql.org
> 
-- 
Larry Rosenman                     http://www.lerctr.org/~ler
Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749



Re: UnixWare 7.1.3 (BETA), C99 compiler, current CVS, error...

От
Tom Lane
Дата:
Larry Rosenman <ler@lerctr.org> writes:
>> so the text of the message is surely not what they are really
>> complaining about?  Or is the compiler broken?
> I'll ask, it is Beta (although the Compiler has done this since the C99
> functionality was added, and it causes a LOT of open source stuff to
> require -Xb). 

After reading a little further, it seems that the brain damage is in the
standard, not the compiler :-(.  It looks like C99's notion of a
function that is both global and inline is that you must provide *two*
definitions of the function, one marked inline and one not; moreover,
these must appear in separate translation units.  What in the world were
those people smoking?  That's a recipe for maintenance problems (edit
one definition, forget to edit the other), not to mention completely at
variance with the de facto standard behavior of inline that's been
around for a long time.

My inclination is to change the code for ApplySortFunction to look like
#if defined(__GNUC__)__inline__#endifint32ApplySortFunction

so that the inline optimization only gets done for gcc, which we know
interprets inline sanely.  Anyone see a better answer?
        regards, tom lane