about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGary Guo <gary@garyguo.net>2020-05-23 07:33:09 +0100
committerGary Guo <gary@garyguo.net>2020-05-23 07:33:09 +0100
commite04baed0db5aa880f0b9fcdfcf9295159dd3ee01 (patch)
treed64cfd119e4a3d1fc1969c54c11d678d6fbac709
parent215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d (diff)
downloadrust-e04baed0db5aa880f0b9fcdfcf9295159dd3ee01.tar.gz
rust-e04baed0db5aa880f0b9fcdfcf9295159dd3ee01.zip
Fix ice-72487
-rw-r--r--src/librustc_target/asm/mod.rs26
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)?)
+            }
         })
     }