Apple LLVM 4.2段错误使用基于范围的循环和引用

Mor*_*eu5 2 c++ segmentation-fault llvm-clang c++11

我不确定这是否是Xcode 4.6.3(4H1503)附带的LLVM的实际错误,或者我是否正在做一些非常犹太的事情.代码片段如下

for(auto &a : matrix[j]) {
    a = false;
}
Run Code Online (Sandbox Code Playgroud)

matrix一个vectorvector含有布尔的.我一直在使用Visual Studio 2012进行一段时间的开发,这似乎不是问题,但是应用程序也需要在Mac上运行,所以我继续测试它......我有点惊讶于我无法编译.仔细观察后,我发现我从铿锵声中得到了一个完整的段落故障,这通常表明非常糟糕的恶作剧正在发生.所以我迅速隔离了这段代码,并使用整数索引和所有爵士乐将循环更改为更农民的版本.它就像一个魅力.

假设我的原始循环应该正常工作我是否正确(我在SO中看到了类似的东西,除了VS2012之外没有任何可说的,真的)或者我犯了一个严重的错误你真的不应该使用这样的引用?

在向Apple报告错误之前,我想知道这一点.

编辑

#include <vector>

using namespace std;

int main(void) {
    vector<vector<bool>> matrix = vector<vector<bool>>(10, vector<bool>(5, false));;

    for(auto &a : matrix[0]) {
        a = true;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

clang -x c++ -std=c++11 -stdlib=libc++收益率编制

0  clang 0x0000000100c57bb2 main + 12932498
Stack dump:
0.  Program arguments: /usr/bin/clang -cc1 -triple x86_64-apple-macosx10.8.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name rbloop.cpp -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 136 -resource-dir /usr/bin/../lib/clang/4.2 -fmodule-cache-path /var/folders/ny/y4mgzkq14db49kfh7rnvcnshqvrkjz/T/clang-module-cache -stdlib=libc++ -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/af6539/src -ferror-limit 19 -fmessage-length 120 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.8.0 -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/ny/y4mgzkq14db49kfh7rnvcnshqvrkjz/T/rbloop-AUzjp6.o -x c++ rbloop.cpp 
1.  rbloop.cpp:9:22: current parser token '{'
2.  rbloop.cpp:6:16: parsing function body 'main'
3.  rbloop.cpp:6:16: in compound statement ('{}')
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://developer.apple.com/bugreporter/ and include the crash backtrace, preprocessed source, and associated run script.
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/ny/y4mgzkq14db49kfh7rnvcnshqvrkjz/T/rbloop-HcbryW.cpp
clang: note: diagnostic msg: /var/folders/ny/y4mgzkq14db49kfh7rnvcnshqvrkjz/T/rbloop-HcbryW.sh
clang: note: diagnostic msg: 

********************
Run Code Online (Sandbox Code Playgroud)

我没有粘贴最后提到的文件,因为它们非常大而且似乎没有添加任何信息(只是一堆库标题,然后我的确切代码如上面粘贴在文件的末尾).此外,如果你有相同的编译器,你应该能够自己得到它们.

How*_*ant 5

让编译器转储堆栈跟踪始终是编译器中的错误.如果编译器不喜欢你的代码,它应该给你一个体面的错误信息,而不是它的内部的堆栈跟踪.

使用您的示例代码,我希望诊断符合以下方面:

test.cpp:8:15: error: non-const lvalue reference to type '__bit_reference<[2 * ...]>' cannot bind to a temporary of type
      '__bit_reference<[2 * ...]>'
    for(auto &a : matrix[0]) {
              ^ ~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/vector:2127:14: note: 
      selected 'begin' function with iterator type 'iterator' (aka '__bit_iterator<std::__1::vector<bool,
      std::__1::allocator<bool> >, false>')
    iterator begin() _NOEXCEPT
             ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)