[cfe-dev] Is it safe to cast-away constness in RecursiveASTVisitors?

David Tarditi via cfe-dev cfe-dev at lists.llvm.org
Tue Jul 10 11:23:52 PDT 2018


It should be safe to do, as long as  the new code that you add to your visitor doesn’t modify AST objects.   I’ve done this in the past and haven’t run into any issues.

From: cfe-dev <cfe-dev-bounces at lists.llvm.org> On Behalf Of Roman Popov via cfe-dev
Sent: Thursday, June 28, 2018 5:53 AM
To: Clang Dev <cfe-dev at lists.llvm.org>
Subject: [cfe-dev] Is it safe to cast-away constness in RecursiveASTVisitors?

Hi all,

I want to implement RecursiveASTVisitor to find certain nodes in AST.  This class should not modify AST, so I want to make a search method to be const:

bool MyCallSearch::FindMyCall (const clang::Stmt *rootStmt ) const {
     this->TraverseStmt(stmt);
}

Unfortunately,  RecursiveASTVisitor methods are non-const and accept non-const pointers to AST nodes. So I wonder, is it safe to cast away constness like this ? :

bool MyCallSearch::FindMyCall (const clang::Stmt *rootStmt ) const {
     const_cast<MyCallSearch*>(this)->TraverseStmt(const_cast<clang::Stmt *>(stmt));
}

Thanks,
Roman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180710/b30345af/attachment-0001.html>


More information about the cfe-dev mailing list