2016-12-15 38 views
0

純屬偶然,我運行了一些從工作 llvm後端傾銷的代碼。通過工作我的意思是,有生產級的代碼,成功地編譯這個例子,結果正確執行。以編程方式重現llvm IR類型錯誤

這裏是一個(簡稱和抽象)摘錄:

%s = type { i8* } 

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

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

LLC抱怨:

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

如何觸發與C++ API相同的錯誤? verifyModules設置不會產生任何錯誤。

回答

0

llc是正確的。你的結構體具有i8 *類型的元素,但是你的初始化器具有類型(i8 *)*,所以你需要在這裏顯式的bitcast。您可以通過C++ API輕鬆地重新創建相同的代碼,但是,我相信您會在此處使用C++ API進行斷言。