diff options
| author | Gary Guo <gary@garyguo.net> | 2020-05-23 07:33:09 +0100 |
|---|---|---|
| committer | Gary Guo <gary@garyguo.net> | 2020-05-23 07:33:09 +0100 |
| commit | e04baed0db5aa880f0b9fcdfcf9295159dd3ee01 (patch) | |
| tree | d64cfd119e4a3d1fc1969c54c11d678d6fbac709 | |
| parent | 215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d (diff) | |
| download | rust-e04baed0db5aa880f0b9fcdfcf9295159dd3ee01.tar.gz rust-e04baed0db5aa880f0b9fcdfcf9295159dd3ee01.zip | |
Fix ice-72487
| -rw-r--r-- | src/librustc_target/asm/mod.rs | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/librustc_target/asm/mod.rs b/src/librustc_target/asm/mod.rs index 05aa85ecb74..774146a679a 100644 --- a/src/librustc_target/asm/mod.rs +++ b/src/librustc_target/asm/mod.rs @@ -223,19 +223,19 @@ impl InlineAsmReg { name: Symbol, ) -> Result<Self, &'static str> { // FIXME: use direct symbol comparison for register names - name.with(|name| { - Ok(match arch { - InlineAsmArch::X86 | InlineAsmArch::X86_64 => { - Self::X86(X86InlineAsmReg::parse(arch, has_feature, name)?) - } - InlineAsmArch::Arm => Self::Arm(ArmInlineAsmReg::parse(arch, has_feature, name)?), - InlineAsmArch::AArch64 => { - Self::AArch64(AArch64InlineAsmReg::parse(arch, has_feature, name)?) - } - InlineAsmArch::RiscV32 | InlineAsmArch::RiscV64 => { - Self::RiscV(RiscVInlineAsmReg::parse(arch, has_feature, name)?) - } - }) + // Use `Symbol::as_str` instead of `Symbol::with` here because `has_feature` may access `Symbol`. + let name = name.as_str(); + Ok(match arch { + InlineAsmArch::X86 | InlineAsmArch::X86_64 => { + Self::X86(X86InlineAsmReg::parse(arch, has_feature, &name)?) + } + InlineAsmArch::Arm => Self::Arm(ArmInlineAsmReg::parse(arch, has_feature, &name)?), + InlineAsmArch::AArch64 => { + Self::AArch64(AArch64InlineAsmReg::parse(arch, has_feature, &name)?) + } + InlineAsmArch::RiscV32 | InlineAsmArch::RiscV64 => { + Self::RiscV(RiscVInlineAsmReg::parse(arch, has_feature, &name)?) + } }) } |
