Как использовать clang ast matcher для соответствия typedef - PullRequest
1 голос
/ 13 марта 2019

Я пишу средство проверки для 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?

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете взглянуть на getType (). GetAsString (), getType (). GetCanonicalType.getAsString () и getType (). GetUnqualifiedType.getAsString (). Я думаю, что один из них вернет то, что вы хотите.

...