Workaround two bugs
This commit is contained in:
parent
21c52c70b3
commit
d4b6bce39c
1 changed files with 14 additions and 10 deletions
24
src/base.rs
24
src/base.rs
|
@ -188,16 +188,20 @@ pub fn trans_fn<'a, 'tcx: 'a>(
|
||||||
values,
|
values,
|
||||||
targets,
|
targets,
|
||||||
} => {
|
} => {
|
||||||
let discr = trans_operand(fx, discr).load_value(fx);
|
fx.bcx.ins().trap(TrapCode::User(0));
|
||||||
let mut jt_data = JumpTableData::new();
|
// TODO: prevent panics on large and negative disciminants
|
||||||
for (i, value) in values.iter().enumerate() {
|
if false {
|
||||||
let ebb = fx.get_ebb(targets[i]);
|
let discr = trans_operand(fx, discr).load_value(fx);
|
||||||
jt_data.set_entry(*value as usize, ebb);
|
let mut jt_data = JumpTableData::new();
|
||||||
|
for (i, value) in values.iter().enumerate() {
|
||||||
|
let ebb = fx.get_ebb(targets[i]);
|
||||||
|
jt_data.set_entry(*value as usize, ebb);
|
||||||
|
}
|
||||||
|
let jump_table = fx.bcx.create_jump_table(jt_data);
|
||||||
|
fx.bcx.ins().br_table(discr, jump_table);
|
||||||
|
let otherwise_ebb = fx.get_ebb(targets[targets.len() - 1]);
|
||||||
|
fx.bcx.ins().jump(otherwise_ebb, &[]);
|
||||||
}
|
}
|
||||||
let jump_table = fx.bcx.create_jump_table(jt_data);
|
|
||||||
fx.bcx.ins().br_table(discr, jump_table);
|
|
||||||
let otherwise_ebb = fx.get_ebb(targets[targets.len() - 1]);
|
|
||||||
fx.bcx.ins().jump(otherwise_ebb, &[]);
|
|
||||||
}
|
}
|
||||||
TerminatorKind::Call {
|
TerminatorKind::Call {
|
||||||
func,
|
func,
|
||||||
|
@ -431,7 +435,7 @@ fn trans_stmt<'a, 'tcx: 'a>(
|
||||||
let val = CValue::const_val(fx, fx.tcx.types.usize, ty_size as i64);
|
let val = CValue::const_val(fx, fx.tcx.types.usize, ty_size as i64);
|
||||||
lval.write_cvalue(fx, val);
|
lval.write_cvalue(fx, val);
|
||||||
}
|
}
|
||||||
Rvalue::Aggregate(_, _) => bug!("shouldn't exist at trans {:?}", rval),
|
Rvalue::Aggregate(_, _) => return Err(format!("shouldn't exist at trans {:?}", rval)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StatementKind::StorageLive(_)
|
StatementKind::StorageLive(_)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue