[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

Neil Booth neil at daikokuya.co.uk
Thu Jan 17 15:01:33 PST 2008

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.


More information about the cfe-commits mailing list