I'm afraid I'm not clear on the semantics of builtin_with_linkage_p (as in 
the current checked-in version).  It says:

/* Return true if the builtin DECL is implemented in a standard library.
   Otherwise returns false which doesn't guarantee it is not (thus the list of
   handled builtins below may be incomplete).  */

But what does "is implemented in a standard library" mean?  Certainly 
plenty of GCC ports are for systems that e.g. don't have fmaf64 which is 
included in that switch statement, and calls to fmaf64 on such systems 
will result in an undefined reference unless it's on an architecture where 
GCC can expand that inline.

Specifically: does Tejas's roundeven patch (and likewise the fadd patch) 
need updating to add those functions to the switch statement in 
builtin_with_linkage_p?  What are the correct semantics for a built-in 
function with the following properties: it may not be in the system libc / 
libm on all systems, but GCC can't always expand it inline either, so it 
may result in an undefined reference on systems where it's not in system 
libc / libm?

If it's only meant to be for functions you *know* are in a standard 
library on the system used, I'd expect checks of the libc_has_function 
target hook.  If, however, it's meant to be for functions that might 
result in an undefined reference (where GCC expects there to be a library 
function to satisfy that reference, but some systems don't have that 
function), I'd expect it to be based on whether a library name was passed 
when add_builtin_function was called, if that's something you can 
determine by examining the DECL - and in that case I wouldn't expect 
there to be a long switch statement listing particular functions, because 
the relevant information is specified when the built-in functions are 
created in the first place.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to