Как получить имя файла и каталог из инструкции 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 - функция, для которой вы хотите получить исходное имя файла.

Другие вопросы по тегам