Как получить имя файла и каталог из инструкции LLVM?
Мне нужно извлечь каталог и имя файла во время прохода llvm. Текущая версия llvm переместила getFilename и getDirectory из DebugLoc в DebugInfoMetadata. Я не могу найти члена класса getFilename непосредственно в заголовке DebugLoc. Таким образом, как мне перейти от инструкции к исходному коду имени файла и каталога.
http://llvm.org/docs/doxygen/html/classllvm_1_1DebugLoc.html
Кроме того, есть функция печати, которая может помочь, но она принимает только llvm::raw_ostream и не может быть перенаправлена на std::string.
void print (raw_ostream &OS) const
prints source location /path/to/file.exe:line:col @[inlined at]
Код ниже - это то, что выдает ошибку
const DebugLoc &location = an_instruction_iter->getDebugLoc()
StringRef File = location->getFilename() // Gives an error
--- решение, которое я выяснил несколько минут назад ----
const DebugLoc &location = i_iter->getDebugLoc();
const DILocation *test =location.get();
test->getFilename();
1 ответ
1)
std::string dbgInfo;
llvm::raw_string_ostream rso(dbgInfo);
location->print(rso);
std::sting dbgStr = rso.str()
2)
auto *Scope = cast<DIScope>(location->getScope());
std::string fileName = Scope->getFilename();
F.getParent()->getSourceFileName();
Где F - функция, для которой вы хотите получить исходное имя файла.