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

Compilation with vcc or clang (msvc) on Windows fails by using nimRawSetjmp #19957

Closed
rockcavera opened this issue Jul 1, 2022 · 5 comments
Closed

Comments

@rockcavera
Copy link
Contributor

This error only happens with clang msvc compiler. In the clang gnu compiler this does not happen. The default LLVM installer for Windows is msvc.

Example

# test.nim
echo "test"

Current Output

nim c --cc:clang test
Hint: used config file 'D:\Nim\config\nim.cfg' [Conf]
Hint: used config file 'D:\Nim\config\config.nims' [Conf]
.........................................................
CC: D:/Nim/lib/system/ansi_c.nim
CC: D:/Nim/lib/std/private/digitsutils.nim
CC: D:/Nim/lib/system/dollars.nim
CC: D:/Nim/lib/std/syncio.nim
CC: D:/Nim/lib/system.nim
CC: test.nim
C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem@sansi_c.nim.c:27:25: error: too many arguments to function call,
      expected single argument '_Buf', have 2 arguments
        result = _setjmp(jmpb, NIM_NIL);
                 ~~~~~~~       ^~~~~~~
D:\Nim\lib\nimbase.h:350:19: note: expanded from macro 'NIM_NIL'
#  define NIM_NIL ((void*)0) /* C's NULL is fucked up in some C compilers, so
                  ^~~~~~~~~~
1 error generated.
Error: execution of an external compiler program 'D:\compilers\LLVM64\bin\clang.exe -c -w -ferror-limit=3   -ID:\Nim\lib -IC:\Users\josep\Desktop -o C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem@sansi_c.nim.c.o C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem@sansi_c.nim.c' failed with exit code: 1



C:\Users\josep\Desktop>C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem.nim.c:4448:93: error: too many arguments to function call,
      expected single argument '_Buf', have 2 arguments
                TM__Q5wkpxktOdTGvlSRo9bzt9aw_26.status = _setjmp(TM__Q5wkpxktOdTGvlSRo9bzt9aw_26.context, 0);
                                                         ~~~~~~~                                          ^
1 error generated.

Expected Output

Compile without error.

Additional Information

nim -v
Nim Compiler Version 1.7.1 [Windows: amd64]
Compiled at 2022-07-01
Copyright (c) 2006-2022 by Andreas Rumpf

git hash: ce4078acd40bb27de5d05832f486dbc95918a3c9
active boot switches: -d:release
@ringabout
Copy link
Member

ringabout commented Jul 1, 2022

@rockcavera Hello, could you try not defined(clang) or clang_cl here => https://github.com/nim-lang/Nim/pull/19899/files

@rockcavera
Copy link
Contributor Author

@rockcavera Hello, could you try not defined(clang) or clang_cl here => https://github.com/nim-lang/Nim/pull/19899/files

I tried and the error persists.

The problem also happens with the vcc compiler:

nim c --cc:vcc test
Hint: used config file 'D:\Nim\config\nim.cfg' [Conf]
Hint: used config file 'D:\Nim\config\config.nims' [Conf]
.........................................................
CC: D:/Nim/lib/std/private/digitsutils.nim
CC: D:/Nim/lib/system/dollars.nim
CC: D:/Nim/lib/std/syncio.nim
CC: D:/Nim/lib/system.nim
CC: test.nim
@mD@c@sNim@slib@sstd@sprivate@sdigitsutils.nim.c
@mtest.nim.c
@mD@c@sNim@slib@ssystem@sdollars.nim.c
@mD@c@sNim@slib@sstd@ssyncio.nim.c
@mD@c@sNim@slib@ssystem.nim.c
C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem.nim.c(4559): warning C4020: '_setjmp': muitos parâmetros reais
C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem.nim.c(4559): error C2167: '_setjmp': muitos parâmetros reais para função intrínseca
Error: execution of an external compiler program 'vccexe.exe /c --platform:amd64 /nologo   /ID:\Nim\lib /IC:\Users\josep\Desktop /nologo /FoC:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem.nim.c.obj C:\Users\josep\nimcache\test_d\@mD@c@sNim@slib@ssystem.nim.c' failed with exit code: 2

@rockcavera
Copy link
Contributor Author

I fixed the problem with vcc.

The problem with clang can be fixed as well. But the variation between clang msvc or gnu complicates a bit. The clang-cl I'm not sure would be the msvc abi.

@rockcavera rockcavera changed the title Compilation with clang (msvc) on Windows fails by using nimRawSetjmp Compilation with vcc or clang (msvc) on Windows fails by using nimRawSetjmp Jul 1, 2022
@rockcavera
Copy link
Contributor Author

The biggest problem with clang on Windows is that the default target is msvc in the installer available for download from the llvm website. So much so that for this, to differentiate the msvc and gnu clang, I did it here. You will only use clang-cl if you want some msvc cl option.

@ringabout
Copy link
Member

#20758

#19891 has been reverted, it shouldn't cause problems by default.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants