【问题标题】:How to use clang ast matcher to match a typedef如何使用 clang ast 匹配器匹配 typedef
【发布时间】: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的类型是myTypelong/int,但不是uintptr_t

我怎么知道valuintptr_t 的一个类型?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 2019-11-03
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多