【发布时间】:2019-08-03 16:07:56
【问题描述】:
我正在为 clang-tidy 编写一个检查器,它检查 int 和指针之间的转换。
例如,对于代码:
int val = 0xbaddeef;
char* ptr = (char*)val;
我想修复它:
char* ptr = (char*)(uintptr_t)val;
但如果a 已经是uintptr_t,我不修复它。
typedef uintptr_t myType;
myType val = 0xbaddeef;
char* ptr = (char*)val;
我的问题是我匹配了CStyleCastExpr并获得了匹配结果,但是我无法获得演员表的源类型,我使用CStyleCastExpr.getSubExpr().getType().getXXXXType(),我得到val的类型是myType或long/int,但不是uintptr_t。
我怎么知道val 是uintptr_t 的一个类型?
【问题讨论】:
标签: clang abstract-syntax-tree clang-static-analyzer clang-ast-matchers