Rollup merge of #119365 - nbdd0121:asm-goto, r=Amanieu
Add asm goto support to `asm!` Tracking issue: #119364 This PR implements asm-goto support, using the syntax described in "future possibilities" section of [RFC2873](https://rust-lang.github.io/rfcs/2873-inline-asm.html#asm-goto). Currently I have only implemented the `label` part, not the `fallthrough` part (i.e. fallthrough is implicit). This doesn't reduce the expressive though, since you can use label-break to get arbitrary control flow or simply set a value and rely on jump threading optimisation to get the desired control flow. I can add that later if deemed necessary. r? ``@Amanieu`` cc ``@ojeda``
This commit is contained in:
commit
15722797fe
@ -255,6 +255,9 @@ fn never_loop_expr<'tcx>(
|
|||||||
InlineAsmOperand::Const { .. } | InlineAsmOperand::SymFn { .. } | InlineAsmOperand::SymStatic { .. } => {
|
InlineAsmOperand::Const { .. } | InlineAsmOperand::SymFn { .. } | InlineAsmOperand::SymStatic { .. } => {
|
||||||
NeverLoopResult::Normal
|
NeverLoopResult::Normal
|
||||||
},
|
},
|
||||||
|
InlineAsmOperand::Label { block } => {
|
||||||
|
never_loop_block(cx, block, local_labels, main_loop_id)
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
ExprKind::OffsetOf(_, _)
|
ExprKind::OffsetOf(_, _)
|
||||||
| ExprKind::Yield(_, _)
|
| ExprKind::Yield(_, _)
|
||||||
|
@ -833,6 +833,7 @@ pub fn hash_expr(&mut self, e: &Expr<'_>) {
|
|||||||
self.hash_body(anon_const.body);
|
self.hash_body(anon_const.body);
|
||||||
},
|
},
|
||||||
InlineAsmOperand::SymStatic { path, def_id: _ } => self.hash_qpath(path),
|
InlineAsmOperand::SymStatic { path, def_id: _ } => self.hash_qpath(path),
|
||||||
|
InlineAsmOperand::Label { block } => self.hash_block(block),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user