To Explain what happend, I'd like to repeat the steps as simple as I could . :D
1.I've created a ConsoleApplication with the wizard of Visual Studio 2015 Pro. Without Pre-compiled Header.
2.I chose the Toolset "Clang 3.7 with Microsoft CodeGen(v140_clang_3_7)" and add "-fblocks" to C/C++ compiler options.
3.I wrote some code below to test if clang works fine:
//////////////////////////////////
#include "stdafx.h"
typedef void(^blktype)(int, int);
int main()
{
__block int c = 0;
blktype blk1 = ^(int a, int b)
{
++a;++b;
c=b;
};
blk1(9, 19);
return 0;
}
//////////////////////////////////
4. In order to solve some missing var and C functions not-found-error, I put
"runtime.c, data.c, Block.h, Block_private.h" into my project.
These source code files all come from "compiler-rt" which downloaded from LLVM.org .
5. I started to build the project in DEBUG mode, a lot of crash info came out at Output Panel:
1> ConsoleApplication1.cpp
1> 0x108B5FB0 (0x0250A548 0x04586760 0x00000000 0x026B8EA8), DllGetC2Telemetry() + 0x526030 bytes(s)
1> 0x108B6018 (0x0250A58C 0x04586760 0x00000000 0x00000000), DllGetC2Telemetry() + 0x526098 bytes(s)
1> 0x107F81FD (0x04586760 0x00000000 0x00000000 0x045867E0), DllGetC2Telemetry() + 0x46827D bytes(s)
1> 0x1080E9EC (0x04586760 0x02670640 0x025ED2E4 0x0454BC78), DllGetC2Telemetry() + 0x47EA6C bytes(s)
1> 0x108AC3E8 (0x04530578 0x0250BD44 0x04530578 0x0250BD44), DllGetC2Telemetry() + 0x51C468 bytes(s)
1> 0x108AD64C (0x026B5E50 0x04530578 0x045EC344 0x0268A2C0), DllGetC2Telemetry() + 0x51D6CC bytes(s)
1> 0x108AA826 (0x04530578 0x0250B8FC 0x00000030 0x00000016), DllGetC2Telemetry() + 0x51A8A6 bytes(s)
1> 0x108AB53E (0x04586328 0x04586328 0x00000030 0x00010000), DllGetC2Telemetry() + 0x51B5BE bytes(s)
1> 0x1089D3DE (0x04586328 0x0250B8FC 0x04586334 0x00010040), DllGetC2Telemetry() + 0x50D45E bytes(s)
1> 0x108A09F7 (0x0250BD44 0x0250BD44 0x04586334 0x0250BD44), DllGetC2Telemetry() + 0x510A77 bytes(s)
1> 0x1089D6B0 (0x04586334 0x045860D0 0x0250BD44 0x0250BE00), DllGetC2Telemetry() + 0x50D730 bytes(s)
1> 0x1089B108 (0x04586334 0x00000000 0x0250BD44 0x045860D0), DllGetC2Telemetry() + 0x50B188 bytes(s)
1> 0x1081D176 (0x04586334 0x045860E8 0x00000000 0x0261FC7C), DllGetC2Telemetry() + 0x48D1F6 bytes(s)
1> 0x1081C748 (0x04586334 0x045860E8 0x00000000 0x0261FC7C), DllGetC2Telemetry() + 0x48C7C8 bytes(s)
1> 0x1081C0BC (0x0250BB88 0x00000000 0x0250BD44 0x045860E8), DllGetC2Telemetry() + 0x48C13C bytes(s)
1> 0x1081D7A7 (0x045860E8 0x0458634C 0x0250BBD8 0x10874940), DllGetC2Telemetry() + 0x48D827 bytes(s)
1> 0x1081C540 (0x045860E8 0x0250BD44 0x04586348 0x04586348), DllGetC2Telemetry() + 0x48C5C0 bytes(s)
1> 0x10874940 (0x04586348 0x0250BD44 0x00000000 0x0FD12C64), DllGetC2Telemetry() + 0x4E49C0 bytes(s)
1> 0x10875CBE (0x04586348 0x00000001 0x04586434 0x0250BD44), DllGetC2Telemetry() + 0x4E5D3E bytes(s)
1> 0x10875E97 (0x04586348 0x0250BD44 0x04586420 0x0250BD44), DllGetC2Telemetry() + 0x4E5F17 bytes(s)
1> 0x108743F9 (0x04586420 0x00000000 0x00000000 0x00000000), DllGetC2Telemetry() + 0x4E4479 bytes(s)
1> 0x1080BA6A (0x0250BCB0 0x04586420 0x025ECF64 0x04585FA8), DllGetC2Telemetry() + 0x47BAEA bytes(s)
1> 0x1080E00C (0x04585FA8 0x025ECF64 0x026B9608 0x026B5E50), DllGetC2Telemetry() + 0x47E08C bytes(s)
1> 0x107A475D (0x04585FA8 0x00000000 0x026B5E50 0x0250CA48), DllGetC2Telemetry() + 0x4147DD bytes(s)
1> 0x107A4426 (0x04585FA8 0x00000000 0x0250CA48 0x04585FA8), DllGetC2Telemetry() + 0x4144A6 bytes(s)
1> 0x107A40A4 (0x04585FA8 0x026714B0 0x0250CA48 0x00000000), DllGetC2Telemetry() + 0x414124 bytes(s)
1> 0x107A5E6E (0x04585FA8 0x04585FA8 0x02632C38 0x02660EA8), DllGetC2Telemetry() + 0x415EEE bytes(s)
1> 0x116E119D (0x04585FA8 0x02660EA8 0x026B0178 0x00000000), DllGetC2Telemetry() + 0x135121D bytes(s)
1> 0x116E02E5 (0x04585FA8 0x0261E270 0x02600178 0x0261E270), DllGetC2Telemetry() + 0x1350365 bytes(s)
1> 0x1098BDE4 (0x026992C8 0x00000000 0x00000000 0x0261E270), DllGetC2Telemetry() + 0x5FBE64 bytes(s)
1> 0x10912511 (0x0261E270 0x02600178 0x118CDCB8 0x108EDDBB), DllGetC2Telemetry() + 0x582591 bytes(s)
1> 0x1091244F (0x0261E270 0x746F4C50 0x02603110 0x02600178), DllGetC2Telemetry() + 0x5824CF bytes(s)
1> 0x1094EB46 (0x02600178 0x025F7380 0x026212F0 0x0250F0E0), DllGetC2Telemetry() + 0x5BEBC6 bytes(s)
1> 0x1029EE32 (0x02600178 0x0250F93C 0x02600178 0x0260929F), UTCExecuteCompilerInvocation() + 0x582 bytes(s)
1> 0x1065AF38 (0x0250F0E0 0x0250F794 0x0000006A 0x02609248), DllGetC2Telemetry() + 0x2CAFB8 bytes(s)
1> 0x1029E895 (0x0250F794 0x0000006A 0x02609248 0x00061F30), utc_cc1_main() + 0x45 bytes(s)
1> 0x00061D18 (0x0250F78C 0x0000006C 0x0260929F 0x00000000)
1> 0x00063EF5 (0x0000006C 0x025FDFD0 0x025FCE90 0x00000000)
1> 0x01249F09 (0x7EFDE000 0x0250FD88 0x772B9F72 0x7EFDE000)
1> 0x768133AA (0x7EFDE000 0x75454491 0x00000000 0x00000000), BaseThreadInitThunk() + 0x12 bytes(s)
1> 0x772B9F72 (0x01249FC1 0x7EFDE000 0x00000000 0x00000000), RtlInitializeExceptionChain() + 0x63 bytes(s)
1> 0x772B9F45 (0x01249FC1 0x7EFDE000 0x00000000 0x00000000), RtlInitializeExceptionChain() + 0x36 bytes(s)
1>clang.exe : error : clang frontend command failed due to signal (use -v to see invocation)
1> clang with Microsoft CodeGen version 3.7.0
1> Provided as - is without support
1> C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\Clang 3.7\bin\x86\x86\c2.dll version 19.0.25115.0
1> Target: i686-pc-windows-msvc
1> Thread model: posix
1> clang.exe: note: diagnostic msg: PLEASE submit a bug report to
https://connect.microsoft.com/VisualStudio and include the crash
backtrace, preprocessed source, and associated run script.
1> clang.exe: note: diagnostic msg:
1> ********************
1>
1> PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
1> Preprocessed source(s) and associated run script(s) are located at:
1> clang.exe: note: diagnostic msg: C:\Users\xxx\AppData\Local\Temp\ConsoleApplication1-023e15.cpp
1> clang.exe: note: diagnostic msg: C:\Users\xxx\AppData\Local\Temp\ConsoleApplication1-023e15.sh
1> clang.exe: note: diagnostic msg:
1>
1> ********************
After some test , I found that if the source code does not include "__block int c = 0;" and "c=b;" , clang works fine. Or it crashs.
But when I use the clang compiling option "-gline-tables-only" , clang works fine and VS will build the project successfully.
So I think it crashs when generating the symbol information for "__block int c" , a __block var.
Is this a Clang3.7 bug? Or I just use VS/Clang improperly?
My intention is build a simple program which only have the "block" feature with it. So I chose clang Toolset. What do I miss ? :)
PS: Content of file ConsoleApplication1-023e15.cpp is:
........System Header files content.............
# 2418 "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10240.0\\ucrt\\tchar.h" 3
# 12 "./stdafx.h" 2
// TODO:
# 5 "ConsoleApplication1.cpp" 2
typedef void(^blktype)(int, int);
int main()
{
__block int c = 0;
blktype blk1 = ^(int a, int b)
{
++a;++b;
c=b;
};
blk1(9, 19);
return 0;
}
Content of file ConsoleApplication1-023e15.sh is:
# Crash reproducer for clang with Microsoft CodeGen version 3.7.0
# Driver args: "-c" "-fdiagnostics-format=msvc" "--target=i686-pc-windows-msvc" "-I" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\include" "-I" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include" "-I" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\atlmfc\\include" "-I" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10240.0\\ucrt" "-I" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\um" "-I" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared" "-I" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\winrt" "-g2" "-gdwarf-2" "-o" "Debug\\ConsoleApplication1.obj" "-Wall" "-O0" "-fno-strict-aliasing" "-fno-omit-frame-pointer" "-fexceptions" "-fstack-protector" "-fpic" "-fno-short-enums" "-fno-rtti" "-D" "WIN32" "-D" "_DEBUG" "-D" "_CONSOLE" "-D" "NDEBUG" "-D" "_UNICODE" "-D" "UNICODE" "-x" "c++" "-fms-extensions" "-fno-ms-compatibility" "-fblocks" "-D" "_DEBUG" "-D" "_MT" "-D" "_DLL" "-Xclang" "--dependent-lib=msvcrtd" "-Xclang" "--dependent-lib=oldnames" "ConsoleApplication1.cpp"
# Original command: "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\bin\\x86\\clang.exe" "-cc1" "-triple" "i686-pc-windows-msvc19.0.0" "-emit-obj" "-mrelax-all" "-disable-free" "-disable-llvm-verifier" "-main-file-name" "ConsoleApplication1.cpp" "-mrelocation-model" "pic" "-pic-level" "1" "-mthread-model" "posix" "-mdisable-fp-elim" "-relaxed-aliasing" "-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-target-cpu" "pentium4" "-gdwarf-2" "-dwarf-column-info" "-coverage-file" "\\\\psf\\home\\documents\\visual studio 2015\\Projects\\ConsoleApplication1\\ConsoleApplication1\\Debug\\ConsoleApplication1.obj" "-resource-dir" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\bin\\x86\\..\\lib\\clang\\3.7.0" "-D" "WIN32" "-D" "_DEBUG" "-D" "_CONSOLE" "-D" "NDEBUG" "-D" "_UNICODE" "-D" "UNICODE" "-D" "_DEBUG" "-D" "_MT" "-D" "_DLL" "-I" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\include" "-I" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include" "-I" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\atlmfc\\include" "-I" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10240.0\\ucrt" "-I" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\um" "-I" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared" "-I" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\winrt" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\bin\\x86\\..\\lib\\clang\\3.7.0\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\atlmfc\\include" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10240.0\\ucrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\winrt" "-O0" "-Wall" "-fdeprecated-macro" "-fdebug-compilation-dir" "\\\\psf\\home\\documents\\visual studio 2015\\Projects\\ConsoleApplication1\\ConsoleApplication1" "-ferror-limit" "19" "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fno-rtti" "-fms-extensions" "-fms-compatibility-version=19" "-std=c++14" "-fdelayed-template-parsing" "-fobjc-runtime=gnustep" "-fcxx-exceptions" "-fexceptions" "-fdiagnostics-show-option" "-fdiagnostics-format" "msvc" "--dependent-lib=msvcrtd" "--dependent-lib=oldnames" "-o" "Debug\\ConsoleApplication1.obj" "-x" "c++" "ConsoleApplication1.cpp""C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\Clang 3.7\\bin\\x86\\clang.exe" "-cc1" "-triple" "i686-pc-windows-msvc19.0.0" "-emit-obj" "-mrelax-all" "-disable-free" "-disable-llvm-verifier" "-main-file-name" "ConsoleApplication1.cpp" "-mrelocation-model" "pic" "-pic-level" "1" "-mthread-model" "posix" "-mdisable-fp-elim" "-relaxed-aliasing" "-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-target-cpu" "pentium4" "-gdwarf-2" "-dwarf-column-info" "-D" "WIN32" "-D" "_DEBUG" "-D" "_CONSOLE" "-D" "NDEBUG" "-D" "_UNICODE" "-D" "UNICODE" "-D" "_DEBUG" "-D" "_MT" "-D" "_DLL" "-O0" "-Wall" "-fdeprecated-macro" "-ferror-limit" "19" "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fno-rtti" "-fms-extensions" "-fms-compatibility-version=19" "-std=c++14" "-fdelayed-template-parsing" "-fobjc-runtime=gnustep" "-fcxx-exceptions" "-fexceptions" "-fdiagnostics-show-option" "-fdiagnostics-format" "msvc" "--dependent-lib=msvcrtd" "--dependent-lib=oldnames" "-x" "c++" "ConsoleApplication1-023e15.cpp"
我们在天上的父,愿人都尊你的名为圣。愿你的国降临。愿你的旨意行在地上,如同行在天上。