Skip to content

Commit 70baf4f

Browse files
committed
Auto merge of #41591 - frewsxcv:rollup, r=frewsxcv
Rollup of 7 pull requests - Successful merges: #41438, #41523, #41526, #41546, #41556, #41572, #41578 - Failed merges:
2 parents a8ebd08 + 1cd3d2f commit 70baf4f

18 files changed

+395
-70
lines changed

src/Cargo.lock

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/librustc/middle/mem_categorization.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,10 @@ impl<'a, 'gcx, 'tcx> MemCategorizationContext<'a, 'gcx, 'tcx> {
451451
// So peel off one-level, turning the &T into T.
452452
match base_ty.builtin_deref(false, ty::NoPreference) {
453453
Some(t) => t.ty,
454-
None => { return Err(()); }
454+
None => {
455+
debug!("By-ref binding of non-derefable type {:?}", base_ty);
456+
return Err(());
457+
}
455458
}
456459
}
457460
_ => base_ty,
@@ -1039,6 +1042,7 @@ impl<'a, 'gcx, 'tcx> MemCategorizationContext<'a, 'gcx, 'tcx> {
10391042
match base_cmt.ty.builtin_index() {
10401043
Some(ty) => (ty, ElementKind::VecElement),
10411044
None => {
1045+
debug!("Explicit index of non-indexable type {:?}", base_cmt);
10421046
return Err(());
10431047
}
10441048
}
@@ -1154,7 +1158,10 @@ impl<'a, 'gcx, 'tcx> MemCategorizationContext<'a, 'gcx, 'tcx> {
11541158
PatKind::TupleStruct(hir::QPath::Resolved(_, ref path), ..) |
11551159
PatKind::Struct(hir::QPath::Resolved(_, ref path), ..) => {
11561160
match path.def {
1157-
Def::Err => return Err(()),
1161+
Def::Err => {
1162+
debug!("access to unresolvable pattern {:?}", pat);
1163+
return Err(())
1164+
}
11581165
Def::Variant(variant_did) |
11591166
Def::VariantCtor(variant_did, ..) => {
11601167
// univariant enums do not need downcasts

src/librustc_borrowck/borrowck/gather_loans/move_error.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use borrowck::BorrowckCtxt;
1212
use rustc::middle::mem_categorization as mc;
1313
use rustc::middle::mem_categorization::Categorization;
14+
use rustc::middle::mem_categorization::NoteClosureEnv;
1415
use rustc::middle::mem_categorization::InteriorOffsetKind as Kind;
1516
use rustc::ty;
1617
use syntax::ast;
@@ -71,10 +72,12 @@ fn report_move_errors<'a, 'tcx>(bccx: &BorrowckCtxt<'a, 'tcx>,
7172
let mut err = report_cannot_move_out_of(bccx, error.move_from.clone());
7273
let mut is_first_note = true;
7374
for move_to in &error.move_to_places {
74-
err = note_move_destination(err, move_to.span,
75-
move_to.name, is_first_note);
75+
err = note_move_destination(err, move_to.span, move_to.name, is_first_note);
7676
is_first_note = false;
7777
}
78+
if let NoteClosureEnv(upvar_id) = error.move_from.note {
79+
err.span_label(bccx.tcx.hir.span(upvar_id.var_id), &"captured outer variable");
80+
}
7881
err.emit();
7982
}
8083
}

src/librustc_errors/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,9 @@ impl Handler {
375375
panic!(ExplicitBug);
376376
}
377377
pub fn delay_span_bug<S: Into<MultiSpan>>(&self, sp: S, msg: &str) {
378+
if self.treat_err_as_bug {
379+
self.span_bug(sp, msg);
380+
}
378381
let mut delayed = self.delayed_span_bug.borrow_mut();
379382
*delayed = Some((sp.into(), msg.to_string()));
380383
}

src/librustc_typeck/check/method/confirm.rs

+11
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,8 @@ impl<'a, 'gcx, 'tcx> ConfirmContext<'a, 'gcx, 'tcx> {
516516
};
517517

518518
let index_expr_ty = self.node_ty(index_expr.id);
519+
let adjusted_base_ty = self.resolve_type_vars_if_possible(&adjusted_base_ty);
520+
let index_expr_ty = self.resolve_type_vars_if_possible(&index_expr_ty);
519521

520522
let result = self.try_index_step(ty::MethodCall::expr(expr.id),
521523
expr,
@@ -531,6 +533,15 @@ impl<'a, 'gcx, 'tcx> ConfirmContext<'a, 'gcx, 'tcx> {
531533

532534
let expr_ty = self.node_ty(expr.id);
533535
self.demand_suptype(expr.span, expr_ty, return_ty);
536+
} else {
537+
// We could not perform a mutable index. Re-apply the
538+
// immutable index adjustments - borrowck will detect
539+
// this as an error.
540+
if let Some(adjustment) = adjustment {
541+
self.apply_adjustment(expr.id, adjustment);
542+
}
543+
self.tcx.sess.delay_span_bug(
544+
expr.span, "convert_lvalue_derefs_to_mutable failed");
534545
}
535546
}
536547
hir::ExprUnary(hir::UnDeref, ref base_expr) => {

src/libstd/net/tcp.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -72,24 +72,23 @@ pub struct TcpStream(net_imp::TcpStream);
7272
///
7373
/// # Examples
7474
///
75-
/// ```no_run
75+
/// ```
76+
/// # use std::io;
7677
/// use std::net::{TcpListener, TcpStream};
7778
///
78-
/// let listener = TcpListener::bind("127.0.0.1:80").unwrap();
79-
///
8079
/// fn handle_client(stream: TcpStream) {
8180
/// // ...
8281
/// }
8382
///
83+
/// # fn process() -> io::Result<()> {
84+
/// let listener = TcpListener::bind("127.0.0.1:80").unwrap();
85+
///
8486
/// // accept connections and process them serially
8587
/// for stream in listener.incoming() {
86-
/// match stream {
87-
/// Ok(stream) => {
88-
/// handle_client(stream);
89-
/// }
90-
/// Err(e) => { /* connection failed */ }
91-
/// }
88+
/// handle_client(stream?);
9289
/// }
90+
/// # Ok(())
91+
/// # }
9392
/// ```
9493
#[stable(feature = "rust1", since = "1.0.0")]
9594
pub struct TcpListener(net_imp::TcpListener);

0 commit comments

Comments
 (0)