由LLVM版本引发的诡异问题

LLVM提供了编译器基础设施,根据语法树可以方便的生成LLVM IR,然后编译成可执行文件。

然而在尝试创建一个函数时,发现无法获取函数参数值。代码如下:

1
2
3
4
5
6
auto t_fib = FunctionType::get(t_int, t_fibargs, false);
auto fib = Function::Create(t_fib, Function::ExternalLinkage, "func_fib", m);

auto argsfib = fib->arg_begin();
auto n = argsfib++;
n->setName("n");    // n == NULL

此段代码非常简单,首先创建一个函数原型int fib(int n),使用原型创建实例,然后在 实例中获取第一个参数n。然而执行到注释的语句时会出现空指针错误。

在此处浪费了许多时间,最终发现是由于LLVM版本错乱而引发的问题。我的开发环境是OS X、 Xcode。此前为了使用iPython安装了Anaconda,它自带了一份LLVM 3.3,并且设置了PATH 环境变量;而现在换成从Homebrew安装的LLVM 3.4.1,一切就正常了。

Comments