Skip to content

-Wasm-operand-widths when building 4.2.0 for ARM64 Windows (+ ASM bignum seems broken) #1210

@vszakats

Description

@vszakats

Example:

-- The C compiler identification is Clang 21.1.4
-- The ASM compiler identification is Clang with GNU-like command-line
-- Found assembler: /home/appveyor/projects/curl-for-win/llvm-mingw/bin/clang
[...]
[107/508] Building C object crypto/CMakeFiles/crypto_obj.dir/bn/bn_add.c.obj

In file included from /home/appveyor/projects/curl-for-win/libressl/crypto/bn/bn_add.c:63:
/home/appveyor/projects/curl-for-win/libressl/crypto/bn/arch/aarch64/bn_arch.h:35:16: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
   35 |             : [n]"=r"(n)
      |                       ^
/home/appveyor/projects/curl-for-win/libressl/crypto/bn/arch/aarch64/bn_arch.h:34:18: note: use constraint modifier "w"
   34 |         __asm__ ("clz   %[n], %[w]"
      |                         ^~~~
      |                         %w[n]
/home/appveyor/projects/curl-for-win/libressl/crypto/bn/arch/aarch64/bn_arch.h:36:15: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
   36 |             : [w]"r"(w));
      |                      ^
/home/appveyor/projects/curl-for-win/libressl/crypto/bn/arch/aarch64/bn_arch.h:34:24: note: use constraint modifier "w"
   34 |         __asm__ ("clz   %[n], %[w]"
      |                               ^~~~
      |                               %w[w]
[...]

2365 of them appear in total.

Minimal reproducer with CMake:

cmake -B _bld \
  -DBUILD_SHARED_LIBS=OFF -DLIBRESSL_APPS=OFF -DLIBRESSL_TESTS=OFF \
  -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  -DCMAKE_C_COMPILER_TARGET=aarch64-w64-mingw32 \
  -DCMAKE_C_COMPILER=/path/to/llvm-mingw/bin/clang

The toolchain used is llvm-mingw:
https://github.com/mstorsjo/llvm-mingw/releases/tag/20251021

Complete live log:
https://ci.appveyor.com/project/curlorg/curl-for-win/builds/52968287
https://ci.appveyor.com/api/buildjobs/whw97v32kq69hj67/log

Full compiler command-line:

[112/508] /path/to/llvm-mingw/bin/clang --target=aarch64-w64-mingw32 -DHAVE_ASPRINTF 
-DHAVE_FTRUNCATE -DHAVE_GETOPT -DHAVE_STRCASECMP -DHAVE_STRNLEN 
-DLIBRESSL_CRYPTO_INTERNAL -DLIBRESSL_INTERNAL -DNO_SYSLOG 
-DOPENSSLDIR=\"C:/Windows/libressl/ssl\" -DOPENSSL_NO_HW_PADLOCK 
-DWIN32_LEAN_AND_MEAN -D_CRT_DEPRECATED_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS 
-D_GNU_SOURCE -D_POSIX -D_POSIX_SOURCE -D_POSIX_THREAD_SAFE_FUNCTIONS 
-D_REENTRANT -D_WIN32_WINNT=0x0600 -D__BEGIN_HIDDEN_DECLS="" 
-D__END_HIDDEN_DECLS="" -D__USE_MINGW_ANSI_STDIO 
-I/path/to/libressl-4.2.0/crypto/. -I/path/to/libressl-4.2.0/crypto/aes -I/path/to/libressl-4.2.0/crypto/asn1 
-I/path/to/libressl-4.2.0/crypto/bio -I/path/to/libressl-4.2.0/crypto/bn -I/path/to/libressl-4.2.0/crypto/bytestring 
-I/path/to/libressl-4.2.0/crypto/conf -I/path/to/libressl-4.2.0/crypto/dh -I/path/to/libressl-4.2.0/crypto/dsa 
-I/path/to/libressl-4.2.0/crypto/curve25519 -I/path/to/libressl-4.2.0/crypto/ec -I/path/to/libressl-4.2.0/crypto/ecdh 
-I/path/to/libressl-4.2.0/crypto/ecdsa -I/path/to/libressl-4.2.0/crypto/err -I/path/to/libressl-4.2.0/crypto/evp 
-I/path/to/libressl-4.2.0/crypto/hidden -I/path/to/libressl-4.2.0/crypto/hmac -I/path/to/libressl-4.2.0/crypto/lhash 
-I/path/to/libressl-4.2.0/crypto/mlkem -I/path/to/libressl-4.2.0/crypto/modes -I/path/to/libressl-4.2.0/crypto/ocsp 
-I/path/to/libressl-4.2.0/crypto/pkcs12 -I/path/to/libressl-4.2.0/crypto/rsa -I/path/to/libressl-4.2.0/crypto/sha 
-I/path/to/libressl-4.2.0/crypto/stack -I/path/to/libressl-4.2.0/crypto/x509 -I/path/to/libressl-4.2.0/crypto/../include/compat 
-I/path/to/libressl-4.2.0/crypto/../include -I/path/to/libressl-4.2.0/_cm-bld-llvm-mingw-libressl-1210/include 
-I/path/to/libressl-4.2.0/crypto/arch/aarch64 -I/path/to/libressl-4.2.0/crypto/bn/arch/aarch64 
-Wall -O3  -Wno-pointer-sign -MD -MT crypto/CMakeFiles/crypto_obj.dir/bn/bn_add.c.obj 
-MF crypto/CMakeFiles/crypto_obj.dir/bn/bn_add.c.obj.d -o crypto/CMakeFiles/crypto_obj.dir/bn/bn_add.c.obj 
-c /path/to/libressl-4.2.0/crypto/bn/bn_add.c

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions