| Issue |
124852
|
| Summary |
[libc] register exhaustion with gcc-14
|
| Labels |
build-problem,
libc
|
| Assignees |
|
| Reporter |
nickdesaulniers
|
llvm-project/libc/src/__support/threads/linux/thread.cpp fails to compile for me with gcc-14:
```
In file included from /android0/llvm-project/libc/src/__support/CPP/type_traits/integral_constant.h:11,
from /android0/llvm-project/libc/src/__support/CPP/type_traits/has_unique_object_representations.h:11,
from /android0/llvm-project/libc/src/__support/CPP/atomic.h:12,
from /android0/llvm-project/libc/src/__support/threads/thread.h:12,
from /android0/llvm-project/libc/src/__support/threads/linux/thread.cpp:9:
In function ‘long int __llvm_libc_20_0_0_git::syscall_impl(long int, long int, long int)’,
inlined from ‘R __llvm_libc_20_0_0_git::syscall_impl(long int, Ts ...) [with R = long int; Ts = {void*, long unsigned int}]’ at /android0/llvm-project/libc/src/__support/OSUtil/linux/syscall.h:34:49,
inlined from ‘void __llvm_libc_20_0_0_git::free_stack(void*, size_t, size_t)’ at /android0/llvm-project/libc/src/__support/threads/linux/thread.cpp:128:37,
inlined from ‘void __llvm_libc_20_0_0_git::cleanup_thread_resources(ThreadAttributes*)’ at /android0/llvm-project/libc/src/__support/threads/linux/thread.cpp:153:15,
inlined from ‘int __llvm_libc_20_0_0_git::Thread::run(__llvm_libc_20_0_0_git::ThreadStyle, __llvm_libc_20_0_0_git::ThreadRunner, void*, void*, size_t, size_t, bool)’ at /android0/llvm-project/libc/src/__support/threads/linux/thread.cpp:335:29:
/android0/llvm-project/libc/src/__support/macros/attributes.h:28:25: error: ‘asm’ operand has impossible constraints or there are not enough registers
28 | #define LIBC_INLINE_ASM __asm__ __volatile__
| ^~~~~~~
/android0/llvm-project/libc/src/__support/OSUtil/linux/x86_64/syscall.h:39:3: note: in expansion of macro ‘LIBC_INLINE_ASM’
39 | LIBC_INLINE_ASM("syscall"
| ^~~~~~~~~~~~~~~
```
If I change the arity-2 syscall to use just `asm` rather than `LIBC_INLINE_ASM` (removing the `volatile` qualifier), we do not observe register exhaustion. It's not immediately clear why that would fail; only with gcc and only with newer gcc, but I've been of the opinion that `LIBC_INLINE_ASM` needs to die. I'd rather put [[nodiscard]] on our syscall wrappers. Found while trying to test #124036.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs