使用clang而不是gcc编译时编程段错误

时间:2013-04-10 05:27:49

标签: clang compiler-flags

摘要:当我在使用clang编译时设置-mcmodel=large标志,访问线程本地存储时我的应用程序会出现段错误。使用gcc进行编译时不会发生这种情况。这是一个铿锵的错误还是我做错了什么?

详情

在设置-mcmodel标志时使用clang编译时,以下代码段崩溃,但在使用gcc编译时运行正常

#include <stdio.h>
#include <pthread.h>

__thread int tlsTest;

int main(int argc, char **argv) {
  printf("&tlsTest is %p\n", &tlsTest);
  tlsTest = argc;
  printf("tlsTest is %d\n", tlsTest);
  return 0;
}

当我使用:clang test.c -pthread -mcmodel=large编译时,结果为:

&tlsTest is 0x7fd24262c6fc
Segmentation fault (core dumped)

但是:gcc test.c -pthread -mcmodel=large结果是:

&tlsTest is 0x7f1cf785c6fc
tlsTest is 1

使用以下代码编译时,该程序也可以正常工作:clang test.c -pthread

我阅读了以下link about mcmodel,但我不确定这与我观察到的段错误有何关系。请注意,-mcmodel=medium也会出现此问题,但-mcmodel=small不会出现此问题。

这是clang / llvm的错误还是对标准或某些未实现的功能的不同解释?

我的系统也是Ubuntu 12.04。我的gcc版本是4.6.3,我测试的clang / llvm版本是3.3开发的最新快照,我也用clang 3.2进行了测试。

0 个答案:

没有答案