![]() |
1
3
在我看来这是个gcc错误。C++ 17警告是一个红色鲱鱼。代码对我来说很好(当用GCC 7编译时),但是它在
根据 documentation for local register variables ,这不是预期的,因此这可能是gcc错误。根据 this bug report ,它甚至与优化无关,但最终是由模板的使用引起的。
我建议只对最终系统调用包装器中的系统调用参数的数量进行超载,并使用
您将不得不使用更好的转换(可能是类型索引转换函数),当然,您仍然需要以其他方式处理SysCAR-ABI方差(X32)。
|
![]() |
2
4
看来您发现了GCC错误:GNU寄存器ASM局部变量在模板函数中不起作用。(clang正确地编译了您的示例)。显然这已经是 a known bug ,谢谢@florian找到它。
在常规函数中,代码编译得很好,没有任何警告,即使使用
但是clang6.0没有这个bug,我们得到:
注意我附加到模板中的asm注释(用c++字符串文字连接)。我们可以让编译器告诉我们它认为它在做什么,而不必费解。 (主要是发布这个答案来讨论调试技术;弗洛里安的答案已经涵盖了这个实际情况的细节。) 代替模板,可以使用Myl现有的便携式标题:它是一个C库,所以它可能需要一点额外的铸造来保持C++编译器的快乐。或者避免在ARM头中将临时表达式用作左值。 但应该注意弗洛里安所指出的大多数问题。它有一个许可证,所以您可以将它的syscall包装头复制到您的项目中。它们工作时不与musl的其他部分相连接,并且是真正的内联的。 http://git.musl-libc.org/cgit/musl/tree/arch/x86_64/syscall_arch.h 是x86-64版本。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |