В программе, использующей libtooling, есть ли способ сделать некоторые типы распознанными как «встроенные типы»?
Например, я бы хотел, чтобы int16_t, uint32_t и т. Д. Распознавались как канонические встроенные типы, а не как typedef для short, unsigned и т. Д.
Если вы посмотрите на ".../llvm/tools/clang/include/clang/AST/BuiltinTypes.def"
, тогда это объявит встроенные типы как int
а также long long
, Это не совсем ясно, правда. Вам нужно будет изменить немного кода, например, есть части определений типов в ".../llvm/tools/clang/lib/Sema/Sema.cpp"
а также ".../llvm/tools/clang/lib/AST/Type.cpp"
, Если вы grep для Int128
(хороший выбор, так как сам Clang не использует [много] в себе, в отличие от, например, size_t
), вы увидите, что он появляется во многих местах. Вы должны были бы покрыть все (или, по крайней мере, большинство) из этих мест дополнительным кодом, чтобы представить новые типы ваших собственных разработок.
Я бы сказал, что, вероятно, гораздо проще сделать что-то вроде clang -include cstdint myprog.cpp
, Другими словами, убедитесь, что #include <cstdint>
[или ваша собственная версия файла того же типа] выполняется за кулисами в компиляторе — вы также можете добавить это к своему драйверу в своем собственном коде.