Date: Thu, 26 Feb 2009 22:02:28 +0100 From: Christoph Mallon <christoph.mallon@gmx.de> To: Ed Schouten <ed@80386.nl>, hackers@FreeBSD.ORG Subject: Re: Renaming all symbols in libmp(3) Message-ID: <49A70364.1020707@gmx.de> In-Reply-To: <49A70092.6030601@gmx.de> References: <20090226180756.GX19161@hoeg.nl> <20090226204243.GA96251@zim.MIT.EDU> <49A70092.6030601@gmx.de>
next in thread | previous in thread | raw e-mail | index | archive | help
Christoph Mallon schrieb:
> David Schultz schrieb:
>> On Thu, Feb 26, 2009, Ed Schouten wrote:
>>> One of the reasons why we can't compile the base system yet, is because
>>> some applications in the base system (keyserv, newkey, chkey, libtelnet)
>>> won't compile, because a library they depend (libmp)on has a function
>>> called pow(). By default, LLVM has a built-in prototype of pow(),
>>> similar to GCC. Unlike GCC, LLVM raises a compiler error by default. The
>>> manual page also mentions this issue.
>>
>> I think most apps that used to use libmp have transitioned to
>> libgmp, so I don't have much of an opinion on this change...
>>
>> However, if the compiler as a builtin for the math.h-style pow()
>> function, and the builtin causes it to choke even when math.h
>> isn't #included, that's a bug in the compiler. The people who are
>> proposing that we make the base system LLVM-compatible should be
>> more forceful in insisting that LLVM be fixed. ;-) What do the LLVM
>> folks propose to do about all the (perfectly legal) programs out
>> there that have a variable called 'exp'?
>
> No, it's invalid code to have a function named pow() in a hosted
> environment which is not /The/ pow().
> Having a *local* variable named exp is fine, because this declaration
> shadows the function. A *global* variable on the other hand is not allowed.
Just a hint, why you really mustn't use global names which are reserved
by the standard:
double pow(double x, double y)
{
abort();
}
int main(void)
{
printf("%f\n", pow(10., 2.));
return 0;
}
%gcc -w bla.c
%./a.out
100.000000
%
Yes, GCC does that and it's perfectly valid.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49A70364.1020707>
