2016-04-09 16 views
1

Ich versuche Erklärung von Funktionen in LLVM zu verwenden vorwärts, aber ich bin nicht in der Lage, es zu tun ... Der Grund dafür tun, ist dieser Fehler:Vorwärts Erklärung Funktion LLVM

error: invalid forward reference to function 'f' with wrong type! "

Rechts jetzt versuche ich es mit diesem Code zu tun:

Aber es zeigt nicht in der IR, wenn ich den Code erzeugen. Wenn ich die Funktion erneut mit dem gleichen Code oben erstellt, funktioniert es. Ich frage mich, ob das daran liegt, dass ich direkt nach dem Einfügen von Dingen in die Funktion einen BasicBlock einfüge.

Gerade jetzt das ist, wie es meine IR ist

define internal void @main() { 
entry: 
    ... 
} 
define internal %struct.f @f(i32* %x) { 
entry: 
    ... 
} 

Ich glaube, dass ein declare %struct.f @f(i32*) vor der @main Funktion setzen würde dieses Problem beheben, aber ich kann nicht herausfinden, wie es zu tun ...

Zusammenfassung: ich möchte nur etwas mit einem declare auf der Oberseite der Datei erstellen, kann ich die define es später so verwenden und beginnen Anweisungen der Funktion Einfügen

Antwort

1

Ok, so scheint es, LLVM tut das ‚automatisch‘.

Ich habe gerade festgestellt, dass die Funktionen ihre Reihenfolge geändert haben, als ich den Code erneut ausgeführt habe. Wenn Sie also zuvor eine Funktion erstellen, obwohl Sie keinen Code (body) einfügen, wird der Prototyp erstellt und auf weitere Deklarationen für den Rumpf gewartet, solange Sie diese Funktion mit der getOrInsert()-Methode des Moduls referenzieren Klasse.

Ich weiß nicht, ob das die richtige Antwort ist oder ob es klar ist, aber es löste mein Problem ...