Zig MSVC - unable to build libcxxabi: SubCompilationFailed
Zig Version
0.11.0-dev.2775+21aa55d34
Steps to Reproduce and Observed Behavior
Ref:
- #15444 (same example code)
- https://github.com/kassane/outcome/issues/1
- https://github.com/ziglang/zig/issues/5312
Switch target to MSVC.
CI test: https://github.com/kassane/outcome/actions/runs/4789289937
$> zig build -DTests -fsummary -freference-trace -Dtarget=x86_64-windows-msvc
zig build-exe single-header-test Debug x86_64-windows-msvc: error: error(compilation): clang failed with stderr: zig: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
zig: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:16:12: error: cannot define or redeclare '~type_info' here because namespace 'std' does not enclose namespace 'type_info'
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:22:11: error: redefinition of 'bad_cast'
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_typeinfo.h:151:5: note: previous definition is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:26:11: warning: function previously declared with an implicit exception specification redeclared with an explicit exception specification [-Wimplicit-exception-spec-mismatch]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_typeinfo.h:146:7: note: previous declaration is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:26:11: error: definition of implicitly declared destructor
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:31:11: error: out-of-line definition of 'what' does not match any declaration in 'std::bad_cast'
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:38:13: error: redefinition of 'bad_typeid'
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_typeinfo.h:174:5: note: previous definition is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:42:13: warning: function previously declared with an implicit exception specification redeclared with an explicit exception specification [-Wimplicit-exception-spec-mismatch]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_typeinfo.h:169:7: note: previous declaration is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:42:13: error: definition of implicitly declared destructor
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_typeinfo.cpp:47:13: error: out-of-line definition of 'what' does not match any declaration in 'std::bad_typeid'
error(compilation): clang failed with stderr: zig: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
zig: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_new_delete.cpp:34:36: error: no member named 'get_new_handler' in namespace 'std'
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_new_delete.cpp:154:36: error: no member named 'get_new_handler' in namespace 'std'
error(compilation): clang failed with stderr: zig: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
zig: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:17:12: error: redefinition of '~exception'
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:88:13: note: previous definition is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:21:24: warning: exception specification in declaration does not match previous declaration [-Wmicrosoft-exception-spec]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:93:36: note: previous declaration is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:21:24: error: redefinition of 'what'
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:93:36: note: previous definition is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:28:16: warning: function previously declared with an implicit exception specification redeclared with an explicit exception specification [-Wimplicit-exception-spec-mismatch]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:103:7: note: previous declaration is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:28:16: error: definition of implicitly declared destructor
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:32:28: error: out-of-line definition of 'what' does not match any declaration in 'std::bad_exception'
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:40:12: error: redefinition of 'bad_alloc'
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:119:5: note: previous definition is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:44:12: warning: function previously declared with an implicit exception specification redeclared with an explicit exception specification [-Wimplicit-exception-spec-mismatch]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:114:7: note: previous declaration is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:44:12: error: definition of implicitly declared destructor
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:49:12: error: out-of-line definition of 'what' does not match any declaration in 'std::bad_alloc'
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:56:23: error: redefinition of 'bad_array_new_length'
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:139:5: note: previous definition is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:56:23: error: constructor for 'std::bad_array_new_length' must explicitly initialize the base class 'bad_alloc' which does not have a default constructor
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:114:7: note: 'std::bad_alloc' declared here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:60:23: warning: function previously declared with an implicit exception specification redeclared with an explicit exception specification [-Wimplicit-exception-spec-mismatch]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include/vcruntime_exception.h:134:7: note: previous declaration is here
C:\hostedtoolcache\windows\zig\zig-windows-x86_64-0.11.0-dev.2775+21aa55d34\x64\lib\libcxxabi\src/stdlib_exception.cpp:60:23: error: definition of implicitly declared destructor
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
D:\a\outcome\outcome\test\tests\swap.cpp:1:1: error: unable to build C object: clang exited with code 1
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
D:\a\outcome\outcome\test\tests\issue0059.cpp:1:1: error: unable to build C object: clang exited with code 1
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
error: unable to build libcxxabi: SubCompilationFailed
How to test
My fork library (header only) has build.zig to zig master
git clone --recursive https://github.com/kassane/outcome
cd outcome
zig build -DTests
Expected Behavior
MinGW works (x86_64, x86 and aarch64)
$>zig build -DTests -fsummary -freference-trace -Dtarget=aarch64-windows-gnu
Build Summary: 86/86 steps succeeded
install success
+- install single-header/ success
+- install outcome success
| +- zig build-lib outcome Debug aarch64-windows-gnu success 1m MaxRSS:35M
+- install single-header-test success
| +- zig build-exe single-header-test Debug aarch64-windows-gnu success 1m MaxRSS:121M
+- install WG21_P1886a success
| +- zig build-exe WG21_P1886a Debug aarch64-windows-gnu success 2s MaxRSS:50M
+- install coroutine-support success
| +- zig build-exe coroutine-support Debug aarch64-windows-gnu success 2s MaxRSS:50M
+- install comparison success
| +- zig build-exe comparison Debug aarch64-windows-gnu success 5s MaxRSS:61M
+- install constexpr success
| +- zig build-exe constexpr Debug aarch64-windows-gnu success 6s MaxRSS:61M
+- install core-outcome success
| +- zig build-exe core-outcome Debug aarch64-windows-gnu success 5s MaxRSS:63M
+- install core-result success
| +- zig build-exe core-result Debug aarch64-windows-gnu success 5s MaxRSS:63M
+- install containers success
| +- zig build-exe containers Debug aarch64-windows-gnu success 5s MaxRSS:63M
+- install hooks success
| +- zig build-exe hooks Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install fileopen success
| +- zig build-exe fileopen Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install default-construction success
| +- zig build-exe default-construction Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install propagate success
| +- zig build-exe propagate Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install serialisation success
| +- zig build-exe serialisation Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install noexcept-propagation success
| +- zig build-exe noexcept-propagation Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install swap success
| +- zig build-exe swap Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install udts success
| +- zig build-exe udts Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install success-failure success
| +- zig build-exe success-failure Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install value-or-error success
| +- zig build-exe value-or-error Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install expected-pass success
| +- zig build-exe expected-pass Debug aarch64-windows-gnu success 4s MaxRSS:64M
+- install issue0007 success
| +- zig build-exe issue0007 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0009 success
| +- zig build-exe issue0009 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0010 success
| +- zig build-exe issue0010 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0012 success
| +- zig build-exe issue0012 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0016 success
| +- zig build-exe issue0016 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0059 success
| +- zig build-exe issue0059 Debug aarch64-windows-gnu success 5s MaxRSS:63M
+- install issue0061 success
| +- zig build-exe issue0061 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0064 success
| +- zig build-exe issue0064 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0065 success
| +- zig build-exe issue0065 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0071 success
| +- zig build-exe issue0071 Debug aarch64-windows-gnu success 5s MaxRSS:63M
+- install issue0095 success
| +- zig build-exe issue0095 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0115 success
| +- zig build-exe issue0115 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0116 success
| +- zig build-exe issue0116 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0140 success
| +- zig build-exe issue0140 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0182 success
| +- zig build-exe issue0182 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0203 success
| +- zig build-exe issue0203 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0210 success
| +- zig build-exe issue0210 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0220 success
| +- zig build-exe issue0220 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0244 success
| +- zig build-exe issue0244 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0247 success
| +- zig build-exe issue0247 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0255 success
| +- zig build-exe issue0255 Debug aarch64-windows-gnu success 5s MaxRSS:64M
+- install issue0259 success
+- zig build-exe issue0259 Debug aarch64-windows-gnu success 5s MaxRSS:64M
@Vexu , please tags!! :sweat_smile:
New tests with MSVC (test-msvc branch)
https://github.com/kassane/outcome/blob/d154f77a1620dd6f2e39de2e09a5801124692982/build.zig#L271-L277 https://github.com/kassane/outcome/actions/runs/5323326728
x86_64
+- install experimental-p0709a success
| +- zig build-exe experimental-p0709a Debug x86_64-windows-msvc success 961ms MaxRSS:50M
+- install experimental-core-outcome-status success
| +- zig build-exe experimental-core-outcome-status Debug x86_64-windows-msvc success 4s MaxRSS:50M
+- install experimental-core-result-status success
| +- zig build-exe experimental-core-result-status Debug x86_64-windows-msvc success 4s MaxRSS:50M
+- install issue0259 success
+- zig build-exe issue0259 Debug x86_64-windows-msvc success 4s MaxRSS:50M
error: lld-link: undefined symbol: class outcome_v2::basic_result<int, class std::error_code, struct outcome_v2::policy::error_code_throw_as_system_error<int, class std::error_code, void>> __cdecl unknown(void)
note: referenced by D:\a\outcome\outcome\test\constexprs\max_result_get_value.cpp:36
note: D:\a\outcome\outcome\zig-cache\o\ce08a147e079231f107601dc4113081c\max_result_get_value.obj:(int __cdecl test1(void))
error: lld-link: undefined symbol: class outcome_v2::basic_result<int, class std::error_code, struct outcome_v2::policy::error_code_throw_as_system_error<int, class std::error_code, void>> __cdecl unknown(void)
note: referenced by D:\a\outcome\outcome\test\constexprs\max_result_construct_value_move_destruct.cpp:37
note: D:\a\outcome\outcome\zig-cache\o\34e14b8115d5109bb306347cf955a4ab\max_result_construct_value_move_destruct.obj:(int __cdecl test1(void))
x86 and aarch64
# x86
error: lld-link: undefined symbol: void __cdecl __ExceptionPtrDestroy(void *)
note: referenced by C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.36.32532\include\exception:232
note: D:\a\outcome\outcome\zig-cache\o\13d54646001d4ebcc6381e697d836a82\single-header-test.obj:(public: __thiscall std::exception_ptr::~exception_ptr(void))
error: lld-link: libcmtd.lib(std_type_info_static.obj): machine type x64 conflicts with x86
error: lld-link: libcmtd.lib(std_type_info_static.obj): machine type x64 conflicts with x86
error: lld-link: libcmtd.lib(delete_scalar_size.obj): machine type x64 conflicts with x86
error: lld-link: libcmtd.lib(chkstk.obj): machine type x64 conflicts with x86
error: lld-link: libcmtd.lib(delete_scalar.obj): machine type x64 conflicts with x86
error: lld-link: libucrtd.lib(debug_heap.obj): machine type x64 conflicts with x86
error: lld-link: libcmtd.lib(gs_report.obj): machine type x64 conflicts with x86
#[...]
# arm64
+- install issue0259 transitive failure
+- zig build-exe issue0259 Debug aarch64-windows-msvc 298 errors
error: lld-link: libcmtd.lib(amdsecgs.obj): machine type x64 conflicts with arm64
error: lld-link: libcmtd.lib(gs_cookie.obj): machine type x64 conflicts with arm64
error: lld-link: libcpmtd.lib(excptptr.obj): machine type x64 conflicts with arm64
error: lld-link: libcmtd.lib(gs_report.obj): machine type x64 conflicts with arm64
error: lld-link: libcmtd.lib(delete_scalar_size.obj): machine type x64 conflicts with arm64
error: lld-link: libcmtd.lib(utility.obj): machine type x64 conflicts with arm64
error: lld-link: libvcruntimed.lib(memcpy.obj): machine type x64 conflicts with arm64
error: lld-link: libvcruntimed.lib(memset.obj): machine type x64 conflicts with arm64
error: lld-link: libucrtd.lib(free.obj): machine type x64 conflicts with arm64
New test, works on x86_64 only: https://github.com/kassane/outcome/actions/runs/5324168411/jobs/9643086657
Currently, just replace libcpp to libc. It will compile without any errors!! An example of this is the test with xwin for hermetic build.