代码之家  ›  专栏  ›  技术社区  ›  Jonathan Sterling

使用llvm/clang编译会导致崩溃,而不是GCC4.2

  •  0
  • Jonathan Sterling  · 技术社区  · 15 年前

    我正在开发一个iPhone应用程序,我遇到了一些编译问题。下面是最低点:

    1. 我正在使用Xcode3.2.3编译,目标是iOS 4.0:我的设备是运行iOS 4.0的第二代iPod touch。
    2. 使用GCC4.2进行编译:在模拟器和设备上工作
    3. 使用LLVM编译器1.5编译:在模拟器上工作,但在设备上不工作。
    4. 使用llvm gcc 4.2编译:与llvm编译器1.5相同的问题。

    当失败时,应用程序甚至无法完成加载。日志如下所示:

    run
    Running…
    [Switching to thread 11523]
    [Switching to thread 11523]
    sharedlibrary apply-load-rules all
    continue
    Program received signal:  “EXC_BAD_ACCESS”.
    warning: check_safe_call: could not restore current frame
    
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    

    我不知道这是怎么回事。我真的想更新我的代码以使用WWDC发布的最新功能(隐式 @synthesize 在类别中添加实例变量的能力,等等),但是clang是必要的。

    1 回复  |  直到 15 年前
        1
  •  3
  •   bbum    15 年前

    看起来像是记忆中的东西。更具体地说,在堆栈上。

    LLVM和GCC之间的代码生成存在一些相当显著的差异(尽管非常细微)。请记住,llvm-gcc实际上是gcc->llvm;即,为llvm代码生成引擎提供支持的gcc解析器。

    因此,我怀疑你碰到了一个可爱的边缘案件。要么是llvm的codegen中的一个bug,要么是程序中表现为此类崩溃的bug。

    我可以想象,复制一个块然后在另一个线程上执行该块的失败可能表现为这样的崩溃。

    在任何情况下,如果可以,请提交一个bug。