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

Started by Larry Rosenmanabout 23 years ago4 messages
#1Larry Rosenman
ler@lerctr.org

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Larry Rosenman (#1)
Re: UnixWare 7.1.3 (BETA), C99 compiler, current CVS, error...

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

#3Larry Rosenman
ler@lerctr.org
In reply to: Tom Lane (#2)
Re: UnixWare 7.1.3 (BETA), C99 compiler, current CVS,

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

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Larry Rosenman (#3)
Re: UnixWare 7.1.3 (BETA), C99 compiler, current CVS, error...

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__
#endif
int32
ApplySortFunction

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

regards, tom lane