如何使用clang ast matcher匹配typedef
我正在为ClangTidy编写一个检查程序,它检查int和pointer之间的强制转换 例如,对于代码:如何使用clang ast matcher匹配typedef,clang,abstract-syntax-tree,clang-static-analyzer,clang-ast-matchers,Clang,Abstract Syntax Tree,Clang Static Analyzer,Clang Ast Matchers,我正在为ClangTidy编写一个检查程序,它检查int和pointer之间的强制转换 例如,对于代码: int val = 0xbaddeef; char* ptr = (char*)val; 我想将其修复为: char* ptr = (char*)(uintptr_t)val; 但是如果a已经是uintpttr\t,我不会修复它 typedef uintptr_t myType; myType val = 0xbaddeef; char* ptr = (char*)val; 我的问
int val = 0xbaddeef;
char* ptr = (char*)val;
我想将其修复为:
char* ptr = (char*)(uintptr_t)val;
但是如果a
已经是uintpttr\t
,我不会修复它
typedef uintptr_t myType;
myType val = 0xbaddeef;
char* ptr = (char*)val;
我的问题是,我匹配了CStyleCastExpr
并得到了匹配结果,但我无法得到强制转换的源类型,我使用CStyleCastExpr.getSubExpr().getType().getxxtype()
,我得到了val
的类型是myType
或long/int
,但不是uintpr\t
我怎么知道
val
是一种类型的uintptr\t
?您可以看看getType().getAsString()、getType().getCanonicalType.getAsString()和getType().getUnqualifiedType.getAsString()。我想其中一个会返回您想要的内容。您可以查看getType().getAsString()、getType().getCanonicalType.getAsString()和getType().getUnqualifiedType.getAsString()。我想他们中的一个会给你想要的