rustc: Fix an ICE "Autoderef but type not derefable"
Related to #5062 (same error message), but that test case causes a different ICE than mentioned there (even without this fix).
This commit is contained in:
parent
c786b68dd3
commit
f3f9db133a
|
@ -3042,15 +3042,17 @@ pub fn adjust_ty(cx: ctxt,
|
|||
Some(@AutoDerefRef(ref adj)) => {
|
||||
let mut adjusted_ty = unadjusted_ty;
|
||||
|
||||
for uint::range(0, adj.autoderefs) |i| {
|
||||
match ty::deref(cx, adjusted_ty, true) {
|
||||
Some(mt) => { adjusted_ty = mt.ty; }
|
||||
None => {
|
||||
cx.sess.span_bug(
|
||||
span,
|
||||
fmt!("The %uth autoderef failed: %s",
|
||||
i, ty_to_str(cx,
|
||||
adjusted_ty)));
|
||||
if (!ty::type_is_error(adjusted_ty)) {
|
||||
for uint::range(0, adj.autoderefs) |i| {
|
||||
match ty::deref(cx, adjusted_ty, true) {
|
||||
Some(mt) => { adjusted_ty = mt.ty; }
|
||||
None => {
|
||||
cx.sess.span_bug(
|
||||
span,
|
||||
fmt!("The %uth autoderef failed: %s",
|
||||
i, ty_to_str(cx,
|
||||
adjusted_ty)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1108,6 +1108,12 @@ pub mod guarantor {
|
|||
-> ExprCategorizationType {
|
||||
let mut ct = ct;
|
||||
let tcx = rcx.fcx.ccx.tcx;
|
||||
|
||||
if (ty::type_is_error(ct.ty)) {
|
||||
ct.cat.pointer = NotPointer;
|
||||
return ct;
|
||||
}
|
||||
|
||||
for uint::range(0, autoderefs) |_| {
|
||||
ct.cat.guarantor = guarantor_of_deref(&ct.cat);
|
||||
|
||||
|
|
Loading…
Reference in New Issue