2016-12-15 2 views
0

Durch Zufall, lief ich llc auf einige Code aus einem llvm Backend Dump. Ich meine, es gibt Code auf Produktionsebene, der dieses Beispiel erfolgreich kompiliert und das Ergebnis korrekt ausführt.Reproduzieren llvm IR-Typ Fehler programmatisch

Hier ist ein (verkürzt und abstrahiert) Auszug:

%s = type { i8* } 

define double @foo(i8*) { ret double 0.0 } 

@"foo" = constant %s { double (i8*)* @"foo" } 

llc klagt:

error: element 0 of struct initializer doesn't match struct element type

Wie kann ich den gleichen Fehler mit dem C++ API auslösen? Die Einstellung verifyModules erzeugt keinen Fehler.

Antwort

0

llc ist korrekt. Ihre Struktur hat Elemente vom Typ i8 *, aber Ihr Initialisierer hat den Typ (i8 *) *, daher würden Sie hier explizit Bitcast benötigen. Sie könnten einfach den gleichen Code über C++ API neu erstellen, aber ich glaube, dass Sie hier eine Bestätigung mit C++ API erhalten.