[cfe-dev] Generation of CallExpr to builtin function
Douglas Gregor
dgregor at apple.com
Tue Oct 6 08:03:31 PDT 2009
On Oct 6, 2009, at 12:42 AM, Abramo Bagnara wrote:
> Douglas Gregor ha scritto:
>>
>> On Oct 5, 2009, at 7:54 AM, Abramo Bagnara wrote:
>>
>>>
>>> In our application we need to generate a new CallExpr to a builtin
>>> function, but we are unable to find a way to do that.
>>>
>>> In SemaDecl.cpp we have found
>>>
>>> /// LazilyCreateBuiltin - The specified Builtin-ID was first used at
>>> /// file scope. lazily create a decl for it. ForRedeclaration is
>>> true
>>> /// if we're creating this built-in in anticipation of redeclaring
>>> the
>>> /// built-in.
>>> NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned
>>> bid,
>>> Scope *S, bool ForRedeclaration,
>>> SourceLocation Loc);
>>>
>>> but it's inaccessible (and does also other things).
>>>
>>> What's the right way to do that?
>>
>> You can find the built-in function using Sema::ActOnIdentifierExpr,
>> which will have the effect of implicitly declaring the builtin (or
>> finding it if it already existed) and then building a DeclRefExpr
>> that
>> you can use as the callee of your call expression.
>
> Sorry, I think I have not explained well the problem.
>
> What we need is a way for a program that uses clang as a library to
> create a CallExpr to a builtin function.
>
> Of course inside clang we would be able to use Sema to do that, but
> this
> is not the case.
Ah, okay.
> I think that having something similar to
>
> NamedDecl* ASTContext::BuiltinDecl(IdentifierInfo *II, Builtin::ID
> BID);
>
> could be a solution.
This would be a useful refactoring. The IdentifierInfo itself knows
whether it is a builtin, so BuiltinDecl could just take an
IdentifierInfo pointer or reference. Will you provide a patch that
provides this function?
- Doug
More information about the cfe-dev
mailing list