Rename Abort
terminator to Terminate
Unify terminology used in unwind action and terminator, and reflect the fact that a nounwind panic is triggered instead of an immediate abort is triggered for this terminator.
This commit is contained in:
parent
0a5dac3062
commit
e3f2edc75b
36 changed files with 112 additions and 67 deletions
|
@ -37,7 +37,19 @@ impl<'tcx> MirPatch<'tcx> {
|
|||
// Check if we already have a resume block
|
||||
if let TerminatorKind::Resume = block.terminator().kind && block.statements.is_empty() {
|
||||
result.resume_block = Some(bb);
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if we already have an unreachable block
|
||||
if let TerminatorKind::Unreachable = block.terminator().kind && block.statements.is_empty() {
|
||||
result.unreachable_block = Some(bb);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if we already have a terminate block
|
||||
if let TerminatorKind::Terminate = block.terminator().kind && block.statements.is_empty() {
|
||||
result.terminate_block = Some(bb);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,6 +73,40 @@ impl<'tcx> MirPatch<'tcx> {
|
|||
bb
|
||||
}
|
||||
|
||||
pub fn unreachable_block(&mut self) -> BasicBlock {
|
||||
if let Some(bb) = self.unreachable_block {
|
||||
return bb;
|
||||
}
|
||||
|
||||
let bb = self.new_block(BasicBlockData {
|
||||
statements: vec![],
|
||||
terminator: Some(Terminator {
|
||||
source_info: SourceInfo::outermost(self.body_span),
|
||||
kind: TerminatorKind::Unreachable,
|
||||
}),
|
||||
is_cleanup: true,
|
||||
});
|
||||
self.unreachable_block = Some(bb);
|
||||
bb
|
||||
}
|
||||
|
||||
pub fn terminate_block(&mut self) -> BasicBlock {
|
||||
if let Some(bb) = self.terminate_block {
|
||||
return bb;
|
||||
}
|
||||
|
||||
let bb = self.new_block(BasicBlockData {
|
||||
statements: vec![],
|
||||
terminator: Some(Terminator {
|
||||
source_info: SourceInfo::outermost(self.body_span),
|
||||
kind: TerminatorKind::Terminate,
|
||||
}),
|
||||
is_cleanup: true,
|
||||
});
|
||||
self.terminate_block = Some(bb);
|
||||
bb
|
||||
}
|
||||
|
||||
pub fn is_patched(&self, bb: BasicBlock) -> bool {
|
||||
self.patch_map[bb].is_some()
|
||||
}
|
||||
|
|
|
@ -262,7 +262,7 @@ pub fn terminator_kind_name(term: &Terminator<'_>) -> &'static str {
|
|||
Goto { .. } => "Goto",
|
||||
SwitchInt { .. } => "SwitchInt",
|
||||
Resume => "Resume",
|
||||
Abort => "Abort",
|
||||
Terminate => "Terminate",
|
||||
Return => "Return",
|
||||
Unreachable => "Unreachable",
|
||||
Drop { .. } => "Drop",
|
||||
|
|
|
@ -522,8 +522,8 @@ pub struct CopyNonOverlapping<'tcx> {
|
|||
///
|
||||
/// The basic block pointed to by a `Cleanup` unwind action must have its `cleanup` flag set.
|
||||
/// `cleanup` basic blocks have a couple restrictions:
|
||||
/// 1. All `unwind` fields in them must be `UnwindAction::Continue`.
|
||||
/// 2. `Return` terminators are not allowed in them. `Abort` and `Unwind` terminators are.
|
||||
/// 1. All `unwind` fields in them must be `UnwindAction::Terminate` or `UnwindAction::Unreachable`.
|
||||
/// 2. `Return` terminators are not allowed in them. `Terminate` and `Unwind` terminators are.
|
||||
/// 3. All other basic blocks (in the current body) that are reachable from `cleanup` basic blocks
|
||||
/// must also be `cleanup`. This is a part of the type system and checked statically, so it is
|
||||
/// still an error to have such an edge in the CFG even if it's known that it won't be taken at
|
||||
|
@ -565,11 +565,11 @@ pub enum TerminatorKind<'tcx> {
|
|||
/// deaggregation runs.
|
||||
Resume,
|
||||
|
||||
/// Indicates that the landing pad is finished and that the process should abort.
|
||||
/// Indicates that the landing pad is finished and that the process should terminate.
|
||||
///
|
||||
/// Used to prevent unwinding for foreign items or with `-C unwind=abort`. Only permitted in
|
||||
/// cleanup blocks.
|
||||
Abort,
|
||||
Terminate,
|
||||
|
||||
/// Returns from the function.
|
||||
///
|
||||
|
|
|
@ -155,7 +155,7 @@ impl<'tcx> TerminatorKind<'tcx> {
|
|||
Some(t).into_iter().chain((&[]).into_iter().copied())
|
||||
}
|
||||
Resume
|
||||
| Abort
|
||||
| Terminate
|
||||
| GeneratorDrop
|
||||
| Return
|
||||
| Unreachable
|
||||
|
@ -197,7 +197,7 @@ impl<'tcx> TerminatorKind<'tcx> {
|
|||
Some(t).into_iter().chain(&mut [])
|
||||
}
|
||||
Resume
|
||||
| Abort
|
||||
| Terminate
|
||||
| GeneratorDrop
|
||||
| Return
|
||||
| Unreachable
|
||||
|
@ -214,7 +214,7 @@ impl<'tcx> TerminatorKind<'tcx> {
|
|||
match *self {
|
||||
TerminatorKind::Goto { .. }
|
||||
| TerminatorKind::Resume
|
||||
| TerminatorKind::Abort
|
||||
| TerminatorKind::Terminate
|
||||
| TerminatorKind::Return
|
||||
| TerminatorKind::Unreachable
|
||||
| TerminatorKind::GeneratorDrop
|
||||
|
@ -233,7 +233,7 @@ impl<'tcx> TerminatorKind<'tcx> {
|
|||
match *self {
|
||||
TerminatorKind::Goto { .. }
|
||||
| TerminatorKind::Resume
|
||||
| TerminatorKind::Abort
|
||||
| TerminatorKind::Terminate
|
||||
| TerminatorKind::Return
|
||||
| TerminatorKind::Unreachable
|
||||
| TerminatorKind::GeneratorDrop
|
||||
|
@ -310,7 +310,7 @@ impl<'tcx> TerminatorKind<'tcx> {
|
|||
Return => write!(fmt, "return"),
|
||||
GeneratorDrop => write!(fmt, "generator_drop"),
|
||||
Resume => write!(fmt, "resume"),
|
||||
Abort => write!(fmt, "abort"),
|
||||
Terminate => write!(fmt, "abort"),
|
||||
Yield { value, resume_arg, .. } => write!(fmt, "{:?} = yield({:?})", resume_arg, value),
|
||||
Unreachable => write!(fmt, "unreachable"),
|
||||
Drop { place, .. } => write!(fmt, "drop({:?})", place),
|
||||
|
@ -389,7 +389,7 @@ impl<'tcx> TerminatorKind<'tcx> {
|
|||
pub fn fmt_successor_labels(&self) -> Vec<Cow<'static, str>> {
|
||||
use self::TerminatorKind::*;
|
||||
match *self {
|
||||
Return | Resume | Abort | Unreachable | GeneratorDrop => vec![],
|
||||
Return | Resume | Terminate | Unreachable | GeneratorDrop => vec![],
|
||||
Goto { .. } => vec!["".into()],
|
||||
SwitchInt { ref targets, .. } => targets
|
||||
.values
|
||||
|
|
|
@ -462,7 +462,7 @@ macro_rules! make_mir_visitor {
|
|||
match kind {
|
||||
TerminatorKind::Goto { .. } |
|
||||
TerminatorKind::Resume |
|
||||
TerminatorKind::Abort |
|
||||
TerminatorKind::Terminate |
|
||||
TerminatorKind::GeneratorDrop |
|
||||
TerminatorKind::Unreachable |
|
||||
TerminatorKind::FalseEdge { .. } |
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue