如何使用clang ast matcher匹配typedef

如何使用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; 我的问

我正在为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; 
我的问题是,我匹配了
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()。我想他们中的一个会给你想要的