写入内联 x86_64 程序集时,内联 asm 约束 'i' 的操作数无效

Invalid operand for inline asm constraint 'i' when writing inline x86_64 assembly

下面的代码在 4 月份(Rust 版本 ~1.6)时构建得很好,但现在不行了。

#![feature(asm)]

enum MyEnum { One = 1 }

fn main() {
    unsafe {
        asm!("nop" : : "i" (MyEnum::One as isize) : : ); // broken
    }
}

错误消息并未指出可能导致此问题的任何明显变化。

"i" 约束的值必须是编译时常量,而您提供的不是编译时常量。如果将加法移动到 Rust 中,则可以使用寄存器以及使用约束 "ri".

的常量

为了内联汇编器的目的,某些东西是否是常量可能会受到优化选项的影响。