For unimplemented builtins, (I think) a local symbol name is allocated and the builtin is mapped to the version in libc.
This causes a problem when there is already a local variable of the same name. For example, the apple headers have the following code which fails to build:
static __inline__ int __inline_isnormalf(float __x )
float fabsf = __builtin_fabsf(__x);
if( __x != __x ) return 0;
return fabsf < __builtin_inff() && fabsf >= __FLT_MIN__;
(found in /usr/include/architecture/i386/math.h)