2016-12-15 29 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进行断言。