[cfe-commits] r46132 - in /cfe/trunk: AST/Expr.cpp AST/StmtPrinter.cpp CodeGen/CGBuiltin.cpp CodeGen/CGExpr.cpp CodeGen/CGExprScalar.cpp CodeGen/CodeGenFunction.h Parse/ParseExpr.cpp Sema/Sema.h Sema/SemaExpr.cpp include/clang/AST/Expr.h include/clang/AST/StmtNodes.def include/clang/Basic/DiagnosticKinds.def include/clang/Basic/TokenKinds.def include/clang/Parse/Action.h

Nate Begeman natebegeman at mac.com
Thu Jan 17 15:04:56 PST 2008


On Jan 17, 2008, at 3:01 PM, Neil Booth wrote:

> Nate Begeman wrote:-
>
>> Author: sampo
>> Date: Thu Jan 17 11:46:27 2008
>> New Revision: 46132
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=46132&view=rev
>> Log:
>> Implement basic overload support via a new builtin,  
>> __builtin_overload.
>>
>> __builtin_overload takes 2 or more arguments:
>> 0) a non-zero constant-expr for the number of arguments the  
>> overloaded
>>   functions will take
>> 1) the arguments to pass to the matching overloaded function
>> 2) a list of functions to match.
>>
>> The return type of __builtin_overload is inferred from the function  
>> whose args
>> match the types of the arguments passed to the builtin.  For example:
>>
>> float a;
>> float sinf(float);
>> int   sini(int);
>>
>> float b = __builtin_overload(1, a, sini, sinf);
>>
>> Says that we are overloading functions that take one argument, and  
>> trying to
>> pass an argument of the same type as 'a'.  sini() does not match  
>> since it takes
>> and argument of type int.  sinf does match, so at codegen time this  
>> will turn
>> into float b = sinf(a);
>
> It would be nice if passing functions with undisinguishable prototypes
> to __builtin_overload raised a diagnostic, to catch typos.  e.g.  
> passing
> sini twice, or sini and cosi.

Totally agree




More information about the cfe-commits mailing list