У меня есть llvm :: Значение. Значение :: свалка() печатаетLLVM: Как узнать, какой тип используется?
void (...)* bitcast (void()* @test_impl to void (...)*)
Обычно я предположил бы, что это BitCastOperator, однако, этот класс, кажется, не существует в LLVM 3.4.2 (который я использую, потому что один из инструментов, которые я я работаю с еще не портирован на более новую версию).
Какой подкласс Value это? И как я могу ответить на такие вопросы в будущем? Я пробовал:
- отладка с lldb. Это может сказать только класс высшего уровня.
- Доступ к информации rtti. У LLVM, похоже, есть собственная система RTTI, которая несовместима с typeid() и не имеет эквивалента typeid().
- Скомпилировав код API C++, это скажет мне, как создать это значение, и я мог видеть тип этого. Тем не менее, llc -march = cpp терпит неудачу с неясной ошибкой (Invalid primitive type), а clang -march = cpp говорит, что не знает эту архитектуру. Я подтвердил, что clang -version и llc -version дают тот же номер версии.
- Я подтвердил, что это не бит-код, потому что dyn_cast не работает.