2017-04-19 3 views
0

Je dois extraire le nom du répertoire et du nom de fichier au cours d'une passe llvm. La version actuelle de llvm a déplacé getFilename et getDirectory de DebugLoc à DebugInfoMetadata. Je ne peux pas trouver un membre de classe getFilename directement dans l'en-tête DebugLoc. Ainsi, comment faire je passe d'une instruction au nom de fichier et au répertoire du code source.Comment obtenir le nom de fichier et le répertoire d'une instruction LLVM?

http://llvm.org/docs/doxygen/html/classllvm_1_1DebugLoc.html

De plus, il est fonction d'impression qui pourrait aider, mais il ne prend que LLVM :: raw_ostream et ne peut pas être redirigé vers une std :: string.

void print (raw_ostream &OS) const prints source location /path/to/file.exe:line:col @[inlined at]

Le code ci-dessous est ce qui donne l'erreur

const DebugLoc &location = an_instruction_iter->getDebugLoc() StringRef File = location->getFilename() // Gives an error

--- solution que je cernées il y a quelques minutes ----

const DebugLoc &location = i_iter->getDebugLoc(); const DILocation *test =location.get(); test->getFilename();

Répondre

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(); 
+0

solutions Second oeuvre. La première solution donne une erreur 'aucune fonction de membre correspondante pour l'appel à 'imprimer' location-> print (stream);' –

+0

@QuentinMayo J'ai mis à jour la réponse. – hailinzeng