Implicitly defined special member functions

Hi,

I'm trying to use clang as a front end to a static analysis tool (Stanse,
http://stanse.fi.muni.cz/). For that purpose, I'd like to get special
member functions defined even if they are not used. Can I somehow achieve
that? (Note that I'm consuming the AST in HandleTranslationUnit of my
custom ASTConsumer.)

Furthermore, it seems that fn->isThisDeclarationADefinition() returns
false for default constructors and destructors even when the function is
used (and therefore implicitly defined). Is that correct? Shouldn't these
functions receive an empty CompoundStatement as their bodies?

Thanks in advance,

Hi,

I'm trying to use clang as a front end to a static analysis tool (Stanse,
http://stanse.fi.muni.cz/). For that purpose, I'd like to get special
member functions defined even if they are not used. Can I somehow achieve
that? (Note that I'm consuming the AST in HandleTranslationUnit of my
custom ASTConsumer.)

You'll need to ask the Sema object for the constructors, destructors, and assignment operator, so that it will generate them.

Furthermore, it seems that fn->isThisDeclarationADefinition() returns
false for default constructors and destructors even when the function is
used (and therefore implicitly defined). Is that correct? Shouldn't these
functions receive an empty CompoundStatement as their bodies?

Yes, that would make sense. Care to submit a patch?

  - Doug

I'm trying to use clang as a front end to a static analysis tool (Stanse,
http://stanse.fi.muni.cz/). For that purpose, I'd like to get special
member functions defined even if they are not used. Can I somehow achieve
that? (Note that I'm consuming the AST in HandleTranslationUnit of my
custom ASTConsumer.)

You'll need to ask the Sema object for the constructors, destructors,
and assignment operator, so that it will generate them.

Thanks, I've found the function Sema::MarkDeclarationReferenced, I'm calling it on all methods of all CXXRecordDecls, and it seems to work perfectly.

Furthermore, it seems that fn->isThisDeclarationADefinition() returns
false for default constructors and destructors even when the function is
used (and therefore implicitly defined). Is that correct? Shouldn't these
functions receive an empty CompoundStatement as their bodies?

Yes, that would make sense. Care to submit a patch?

Attached.

smf_bodies.patch (1 KB)

I'm trying to use clang as a front end to a static analysis tool (Stanse,
http://stanse.fi.muni.cz/). For that purpose, I'd like to get special
member functions defined even if they are not used. Can I somehow achieve
that? (Note that I'm consuming the AST in HandleTranslationUnit of my
custom ASTConsumer.)

You'll need to ask the Sema object for the constructors, destructors,
and assignment operator, so that it will generate them.

Thanks, I've found the function Sema::MarkDeclarationReferenced, I'm calling it on all methods of all CXXRecordDecls, and it seems to work perfectly.

Yes, that will force the creation of the method.

Furthermore, it seems that fn->isThisDeclarationADefinition() returns
false for default constructors and destructors even when the function is
used (and therefore implicitly defined). Is that correct? Shouldn't these
functions receive an empty CompoundStatement as their bodies?

Yes, that would make sense. Care to submit a patch?

Attached.

Thanks! Committed as r114329.

  - Doug