Skip to content

Instantly share code, notes, and snippets.

@waTeim
Created March 2, 2015 21:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save waTeim/8757662c445ce3b4084f to your computer and use it in GitHub Desktop.
Save waTeim/8757662c445ce3b4084f to your computer and use it in GitHub Desktop.
Typedef traversal assert failure
#include <iostream>
#include "clang/Frontend/FrontendActions.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
#include "clang/ASTMatchers/ASTMatchers.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
using namespace std;
using namespace clang;
using namespace clang::ast_matchers;
using namespace clang::tooling;
using namespace llvm;
static llvm::cl::OptionCategory MyToolCategory("my-tool options");
static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);
static cl::extrahelp MoreHelp("\nMore help text...");
DeclarationMatcher ParseNodeMatcher = typedefDecl(isExpansionInFileMatching(".*parsenodes\\.h")).bind("typedef");
class TypedefPrinter: public MatchFinder::MatchCallback
{
public:
virtual void run(const MatchFinder::MatchResult &Result)
{
if(const TypedefDecl *decl = Result.Nodes.getNodeAs<clang::TypedefDecl>("typedef"))
{
const Type *type = decl->getTypeForDecl();
string id = decl->getDeclName().getAsString();
if(type)
{
if(type->isRecordType())
{
cout << "Processing record type: " << id << endl;
const RecordType *asRecordType = static_cast<const RecordType*>(type);
RecordDecl *rdecl = asRecordType->getDecl();
for(RecordDecl::field_iterator field = rdecl->field_begin();field != rdecl->field_end();field++)
{
string fieldId = field->getDeclName().getAsString();
cout << "\t" << fieldId << endl;
}
}
}
else cout << "Skipping non-record type: " << id << endl;
}
else cout << "Missing type information for typeName: " << id << endl;
}
}
};
int main(int argc, const char **argv)
{
CommonOptionsParser OptionsParser(argc,argv,MyToolCategory);
ClangTool Tool(OptionsParser.getCompilations(),OptionsParser.getSourcePathList());
TypedefPrinter Printer;
MatchFinder Finder;
Finder.addMatcher(ParseNodeMatcher,&Printer);
return Tool.run(newFrontendActionFactory(&Finder).get());
}
include <postgres.h>
#include <nodes/parsenodes.h>
QuerySource QuerySource_var; SortByDir SortByDir_var; SortByNulls SortByNulls_var; AclMode AclMode_var; Query Query_var; TypeName TypeName_var; ColumnRef ColumnRef_var; ParamRef ParamRef_var; A_Expr_Kind A_Expr_Kind_var; A_Expr A_Expr_var; A_Const A_Const_var; TypeCast TypeCast_var; CollateClause CollateClause_var; FuncCall FuncCall_var; A_Star A_Star_var; A_Indices A_Indices_var; A_Indirection A_Indirection_var; A_ArrayExpr A_ArrayExpr_var; ResTarget ResTarget_var; MultiAssignRef MultiAssignRef_var; SortBy SortBy_var; WindowDef WindowDef_var; RangeSubselect RangeSubselect_var; RangeFunction RangeFunction_var; ColumnDef ColumnDef_var; TableLikeClause TableLikeClause_var; TableLikeOption TableLikeOption_var; IndexElem IndexElem_var; DefElemAction DefElemAction_var; DefElem DefElem_var; LockClauseStrength LockClauseStrength_var; LockingClause LockingClause_var; XmlSerialize XmlSerialize_var; RTEKind RTEKind_var; RangeTblEntry RangeTblEntry_var; RangeTblFunction RangeTblFunction_var; WithCheckOption WithCheckOption_var; SortGroupClause SortGroupClause_var; WindowClause WindowClause_var; RowMarkClause RowMarkClause_var; WithClause WithClause_var; CommonTableExpr CommonTableExpr_var; InsertStmt InsertStmt_var; DeleteStmt DeleteStmt_var; UpdateStmt UpdateStmt_var; SetOperation SetOperation_var; SelectStmt SelectStmt_var; SetOperationStmt SetOperationStmt_var; ObjectType ObjectType_var; CreateSchemaStmt CreateSchemaStmt_var; DropBehavior DropBehavior_var; AlterTableStmt AlterTableStmt_var; AlterTableType AlterTableType_var; ReplicaIdentityStmt ReplicaIdentityStmt_var; AlterTableCmd AlterTableCmd_var; AlterDomainStmt AlterDomainStmt_var; GrantTargetType GrantTargetType_var; GrantObjectType GrantObjectType_var; GrantStmt GrantStmt_var; PrivGrantee PrivGrantee_var; FuncWithArgs FuncWithArgs_var; AccessPriv AccessPriv_var; GrantRoleStmt GrantRoleStmt_var; AlterDefaultPrivilegesStmt AlterDefaultPrivilegesStmt_var; CopyStmt CopyStmt_var; VariableSetKind VariableSetKind_var; VariableSetStmt VariableSetStmt_var; VariableShowStmt VariableShowStmt_var; CreateStmt CreateStmt_var; ConstrType ConstrType_var; Constraint Constraint_var; CreateTableSpaceStmt CreateTableSpaceStmt_var; DropTableSpaceStmt DropTableSpaceStmt_var; AlterTableSpaceOptionsStmt AlterTableSpaceOptionsStmt_var; AlterTableMoveAllStmt AlterTableMoveAllStmt_var; CreateExtensionStmt CreateExtensionStmt_var; AlterExtensionStmt AlterExtensionStmt_var; AlterExtensionContentsStmt AlterExtensionContentsStmt_var; CreateFdwStmt CreateFdwStmt_var; AlterFdwStmt AlterFdwStmt_var; CreateForeignServerStmt CreateForeignServerStmt_var; AlterForeignServerStmt AlterForeignServerStmt_var; CreateForeignTableStmt CreateForeignTableStmt_var; CreateUserMappingStmt CreateUserMappingStmt_var; AlterUserMappingStmt AlterUserMappingStmt_var; DropUserMappingStmt DropUserMappingStmt_var; ImportForeignSchemaType ImportForeignSchemaType_var; ImportForeignSchemaStmt ImportForeignSchemaStmt_var; CreatePolicyStmt CreatePolicyStmt_var; AlterPolicyStmt AlterPolicyStmt_var; CreateTrigStmt CreateTrigStmt_var; CreateEventTrigStmt CreateEventTrigStmt_var; AlterEventTrigStmt AlterEventTrigStmt_var; CreatePLangStmt CreatePLangStmt_var; RoleStmtType RoleStmtType_var; CreateRoleStmt CreateRoleStmt_var; AlterRoleStmt AlterRoleStmt_var; AlterRoleSetStmt AlterRoleSetStmt_var; DropRoleStmt DropRoleStmt_var; CreateSeqStmt CreateSeqStmt_var; AlterSeqStmt AlterSeqStmt_var; DefineStmt DefineStmt_var; CreateDomainStmt CreateDomainStmt_var; CreateOpClassStmt CreateOpClassStmt_var; CreateOpClassItem CreateOpClassItem_var; CreateOpFamilyStmt CreateOpFamilyStmt_var; AlterOpFamilyStmt AlterOpFamilyStmt_var; DropStmt DropStmt_var; TruncateStmt TruncateStmt_var; CommentStmt CommentStmt_var; SecLabelStmt SecLabelStmt_var; DeclareCursorStmt DeclareCursorStmt_var; ClosePortalStmt ClosePortalStmt_var; FetchDirection FetchDirection_var; FetchStmt FetchStmt_var; IndexStmt IndexStmt_var; CreateFunctionStmt CreateFunctionStmt_var; FunctionParameterMode FunctionParameterMode_var; FunctionParameter FunctionParameter_var; AlterFunctionStmt AlterFunctionStmt_var; DoStmt DoStmt_var; InlineCodeBlock InlineCodeBlock_var; RenameStmt RenameStmt_var; AlterObjectSchemaStmt AlterObjectSchemaStmt_var; AlterOwnerStmt AlterOwnerStmt_var; RuleStmt RuleStmt_var; NotifyStmt NotifyStmt_var; ListenStmt ListenStmt_var; UnlistenStmt UnlistenStmt_var; TransactionStmtKind TransactionStmtKind_var; TransactionStmt TransactionStmt_var; CompositeTypeStmt CompositeTypeStmt_var; CreateEnumStmt CreateEnumStmt_var; CreateRangeStmt CreateRangeStmt_var; AlterEnumStmt AlterEnumStmt_var; ViewCheckOption ViewCheckOption_var; ViewStmt ViewStmt_var; LoadStmt LoadStmt_var; CreatedbStmt CreatedbStmt_var; AlterDatabaseStmt AlterDatabaseStmt_var; AlterDatabaseSetStmt AlterDatabaseSetStmt_var; DropdbStmt DropdbStmt_var; AlterSystemStmt AlterSystemStmt_var; ClusterStmt ClusterStmt_var; VacuumOption VacuumOption_var; VacuumStmt VacuumStmt_var; ExplainStmt ExplainStmt_var; CreateTableAsStmt CreateTableAsStmt_var; RefreshMatViewStmt RefreshMatViewStmt_var; CheckPointStmt CheckPointStmt_var; DiscardMode DiscardMode_var; DiscardStmt DiscardStmt_var; LockStmt LockStmt_var; ConstraintsSetStmt ConstraintsSetStmt_var; ReindexObjectType ReindexObjectType_var; ReindexStmt ReindexStmt_var; CreateConversionStmt CreateConversionStmt_var; CreateCastStmt CreateCastStmt_var; PrepareStmt PrepareStmt_var; ExecuteStmt ExecuteStmt_var; DeallocateStmt DeallocateStmt_var; DropOwnedStmt DropOwnedStmt_var; ReassignOwnedStmt ReassignOwnedStmt_var; AlterTSDictionaryStmt AlterTSDictionaryStmt_var; AlterTSConfigurationStmt AlterTSConfigurationStmt_var;
int main(int argc,char *argv[]){}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment