Je vais avoir le problème suivant quand je lance mon programme:Erreur: X86CodeEmitter LLVM
pseudo instructions should be removed before code emission
UNREACHABLE executed at /home/leonor/llvm/llvm/lib/Target/X86/X86CodeEmitter.cpp:1164!
Stack dump:
0. Running pass 'X86 Machine Code Emitter' on function '@main'
./build/Release+Asserts/bin/llvm-dis: Bitcode stream must be at least 16 bytes in length
Mon programme prend en entrée un fichier .BC et charge le fichier et l'affiche. Mon doute est: Pourquoi cette erreur se produit uniquement lorsque le programme C contient des instructions conditionnelles (si, pour ..). Comment résoudre??
Mon code:
int main(int argc, char **argv) {
InitializeNativeTarget();
LLVMContext &Context = getGlobalContext();
std::string Err;
const std::string InputFile = "teste_f1.bc";
OwningPtr<MemoryBuffer> result;
error_code ec = MemoryBuffer::getFile(InputFile, result);
MemoryBuffer *buffer = result.take();
Module * Mod = ParseBitcodeFile(buffer, Context);
ExecutionEngine* EE = 0;
EngineBuilder builder(Mod);
builder.setErrorStr(&Err);
builder.setEngineKind(EngineKind::JIT);
EE = builder.create();
Function * func = Mod->getFunction("main");
std::vector <std::string> params;
params.push_back(Mod->getModuleIdentifier());
EE->runStaticConstructorsDestructors(false);
int Result = EE->runFunctionAsMain(func, params, NULL);
EE->runStaticConstructorsDestructors(true);
WriteBitcodeToFile(Mod, outs());
delete Mod;
return 0;
}
« Mon programme prend en entrée un fichier .BC et charge le fichier et l'affiche » - bien, ce n'est pas ce que le code fait. Le code charge un fichier .bc, * exécute la fonction 'main' à l'intérieur *, puis restitue le contenu du fichier .bc (qui est binaire) à la sortie. Et le problème se produit pendant l'exécution (ou plus exactement, la compilation JIT). En passant, si vous suivez ceci avec 'llvm-dis', vous pouvez simplement appeler' print' ou 'dump' sur le module pour obtenir la représentation textuelle. – Oak