Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zig MSVC - unable to build libcxxabi: SubCompilationFailed #15448

Closed
kassane opened this issue Apr 24, 2023 · 2 comments
Closed

Zig MSVC - unable to build libcxxabi: SubCompilationFailed #15448

kassane opened this issue Apr 24, 2023 · 2 comments
Labels
bug Observed behavior contradicts documented or intended behavior

Comments

@kassane
Copy link
Contributor

kassane commented Apr 24, 2023

Zig Version

0.11.0-dev.2775+21aa55d34

Steps to Reproduce and Observed Behavior

Ref:

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
@kassane kassane added the bug Observed behavior contradicts documented or intended behavior label Apr 24, 2023
@kassane
Copy link
Contributor Author

kassane commented Jun 20, 2023

@Vexu , please tags!! 😅


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

@kassane
Copy link
Contributor Author

kassane commented Jun 30, 2023

Currently, just replace libcpp to libc. It will compile without any errors!! An example of this is the test with xwin for hermetic build.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Observed behavior contradicts documented or intended behavior
Projects
None yet
Development

No branches or pull requests

1 participant