如何使用cast ast matcher来匹配typedef

时间:2019-03-13 03:53:41

标签: clang abstract-syntax-tree clang-static-analyzer clang-ast-matchers

我正在编写clang-tidy的检查器,该检查器检查int和指针之间的转换。

例如,对于代码:

computed: {
    itemIds() {
        return Object.keys(state.itemByIds);
    },
    items() {
        return Object.values(state.itemByIds);
    }
}

我想将其修复为:

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,我得到了{{1 }}是CStyleCastExpr.getSubExpr().getType().getXXXXType()val,但不是myType

我怎么知道long/intuintptr_t的一种类型?

1 个答案:

答案 0 :(得分:0)

您可能会看到getType()。getAsString(),getType()。getCanonicalType.getAsString()和getType()。getUnqualifiedType.getAsString()。我认为其中一个会返回您想要的东西。