Also in meinem Ich habe folgende Snippet-CodeLLVM IR: find_if, var erfasst nicht
for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I){
Instruction *Inst = &*I;
if (isa<LoadInst>(Inst)) {
LoadInst *LI = dyn_cast<LoadInst>(Inst);
Value * LoadOperand = LI -> getPointerOperand();
auto it = std::find_if(DataStructureForTrace.begin(), DataStructureForTrace.end(), [](const std::tuple<Value*, unsigned, unsigned, Value* >& e) {return *(std::get<3>(e)) == *(LoadOperand);});
std::get<2>(*it) = 1;
}
}
In der Leitung 6, erhalte ich Fehler wie: LoadOperand
nicht erfasst.
Ich hatte versucht, eine Dummy-Implementierung (nicht von LLVM Typ, nur normalen C++ - Code) zu sehen, ob so etwas funktioniert, und es hat richtig funktioniert. Jetzt bin ich nicht sicher, ob der Fehler LLVM oder generisches C++ zugeordnet ist.
Irgendwelche Vorschläge?
Hallo danke für die Antwort. Also sollte das da gewesen sein: '[& LoadOperand]'? Kannst du bitte etwas mehr Erklärung hinzufügen? Im Dummy-Code, als ich nur 'int pointer' benutzte, funktionierte es mit '[]'. Wieso nicht jetzt? – algoProg
Variablen im Körper des Lambda, die nicht als Funktionsargumente übergeben werden, müssen in den Klammern festgehalten werden. Ich bin mir nicht sicher, warum Ihr anderes Beispiel funktioniert hat, es sei denn, es hat sich einfach nicht auf solche Variablen bezogen. –
Okay, verstanden. Mein anderes Beispiel funktionierte, weil ich mit einem int-Wert und nicht mit einer Variablen verglichen habe. Es tut mir leid für die Verwirrung. – algoProg