This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [c++] builtin functions and namespaces


> brent@dust$ g++ x.cc -o x
> x.cc: In function `int main ()':
> x.cc:15: call of overloaded `abs (int)' is ambiguous
> <internal>:15: candidates are: int abs (int)
> x.cc:3:                 int _C_::abs (int)
>
> I've spent some time in gcc/gcc/cp/ digging for the cause of this bug,

> and am now somewhat familiar with the code, but I've obviously not
> found the solution, so if one of you could point me in the direction
> of the solution, I might be able to pull it off.
>
> now I'll ramble...
>
> gcc/cp/call.c: build_new_function_call()
>   which kicks the error because
> gcc/cp/call.c: tourney()
>   returns 0 because
> gcc/cp/call.c: joust()
>   returns 0 because joust can't decide whether to pick the
>   ::std::__builtin_fn or ::__buitlin_fn as the better candidate
>
> my question is this.
> is it best to make changes:
>   A) in joust() to arbitrarily choose one when the functions differ
>        only in CONTEXT_DECL? how would I verify this condition?
>   B) elsewhere to ensure that the the ::__builtin_fn is not a
candidate
>        at all. where would this be done?
>   C) remove the gcc source from my box and take a real vacation :-)

I suggest another solution.  When a builtin function is declared as
extern
"C" in a namespace, we just record the namespace in the existing builtin

function.  Doing this way, we only have one function candidate in
build_new_function_call().  So somewhere in grokfndecl or grokdeclarator

functions in decl.c are the places to look at.

--Kriang



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]