Skip to content

Commit e309796

Browse files
committed
---
yaml --- r: 277375 b: refs/heads/try c: 0b5b782 h: refs/heads/master i: 277373: 9ae6a39 277371: b65ef92 277367: ee58f53 277359: c9a6a03 277343: b6cdbdc 277311: 080e83c 277247: f6e1c7d
1 parent 1cf2ca5 commit e309796

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+237
-560
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 6dbb0e86aec11050480beb76eade6fb805010ba7
33
refs/heads/snap-stage3: 235d77457d80b549dad3ac36d94f235208a1eafb
4-
refs/heads/try: b50a2ff4d15324bebf6ce8a1661448195c213f5d
4+
refs/heads/try: 0b5b782e392f0e1d000a7e9fefaad9cbebc0e586
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
66
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
77
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try/src/doc/book/const-and-static.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,5 @@ the result of a function call or anything similarly complex or at runtime.
7979

8080
Almost always, if you can choose between the two, choose `const`. It’s pretty
8181
rare that you actually want a memory location associated with your constant,
82-
and using a `const` allows for optimizations like constant propagation not only
82+
and using a const allows for optimizations like constant propagation not only
8383
in your crate but downstream crates.

branches/try/src/librustc/infer/mod.rs

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use ty::fold::TypeFoldable;
3535
use ty::relate::{Relate, RelateResult, TypeRelation};
3636
use traits::{self, PredicateObligations, ProjectionMode};
3737
use rustc_data_structures::unify::{self, UnificationTable};
38-
use std::cell::{Cell, RefCell, Ref};
38+
use std::cell::{RefCell, Ref};
3939
use std::fmt;
4040
use syntax::ast;
4141
use syntax::codemap;
@@ -110,25 +110,6 @@ pub struct InferCtxt<'a, 'tcx: 'a> {
110110
// documentation for `ProjectionMode`.
111111
projection_mode: ProjectionMode,
112112

113-
// When an error occurs, we want to avoid reporting "derived"
114-
// errors that are due to this original failure. Normally, we
115-
// handle this with the `err_count_on_creation` count, which
116-
// basically just tracks how many errors were reported when we
117-
// started type-checking a fn and checks to see if any new errors
118-
// have been reported since then. Not great, but it works.
119-
//
120-
// However, when errors originated in other passes -- notably
121-
// resolve -- this heuristic breaks down. Therefore, we have this
122-
// auxiliary flag that one can set whenever one creates a
123-
// type-error that is due to an error in a prior pass.
124-
//
125-
// Don't read this flag directly, call `is_tainted_by_errors()`
126-
// and `set_tainted_by_errors()`.
127-
tainted_by_errors_flag: Cell<bool>,
128-
129-
// Track how many errors were reported when this infcx is created.
130-
// If the number of errors increases, that's also a sign (line
131-
// `tained_by_errors`) to avoid reporting certain kinds of errors.
132113
err_count_on_creation: usize,
133114
}
134115

@@ -398,7 +379,6 @@ pub fn new_infer_ctxt<'a, 'tcx>(tcx: &'a TyCtxt<'tcx>,
398379
reported_trait_errors: RefCell::new(FnvHashSet()),
399380
normalize: false,
400381
projection_mode: projection_mode,
401-
tainted_by_errors_flag: Cell::new(false),
402382
err_count_on_creation: tcx.sess.err_count()
403383
}
404384
}
@@ -1148,36 +1128,15 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
11481128
.map(|method| resolve_ty(method.ty)))
11491129
}
11501130

1151-
/// True if errors have been reported since this infcx was
1152-
/// created. This is sometimes used as a heuristic to skip
1153-
/// reporting errors that often occur as a result of earlier
1154-
/// errors, but where it's hard to be 100% sure (e.g., unresolved
1155-
/// inference variables, regionck errors).
1156-
pub fn is_tainted_by_errors(&self) -> bool {
1157-
debug!("is_tainted_by_errors(err_count={}, err_count_on_creation={}, \
1158-
tainted_by_errors_flag={})",
1159-
self.tcx.sess.err_count(),
1160-
self.err_count_on_creation,
1161-
self.tainted_by_errors_flag.get());
1162-
1163-
if self.tcx.sess.err_count() > self.err_count_on_creation {
1164-
return true; // errors reported since this infcx was made
1165-
}
1166-
self.tainted_by_errors_flag.get()
1167-
}
1168-
1169-
/// Set the "tainted by errors" flag to true. We call this when we
1170-
/// observe an error from a prior pass.
1171-
pub fn set_tainted_by_errors(&self) {
1172-
debug!("set_tainted_by_errors()");
1173-
self.tainted_by_errors_flag.set(true)
1131+
pub fn errors_since_creation(&self) -> bool {
1132+
self.tcx.sess.err_count() - self.err_count_on_creation != 0
11741133
}
11751134

11761135
pub fn node_type(&self, id: ast::NodeId) -> Ty<'tcx> {
11771136
match self.tables.borrow().node_types.get(&id) {
11781137
Some(&t) => t,
11791138
// FIXME
1180-
None if self.is_tainted_by_errors() =>
1139+
None if self.errors_since_creation() =>
11811140
self.tcx.types.err,
11821141
None => {
11831142
bug!("no type for node {}: {} in fcx",
@@ -1199,7 +1158,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
11991158
free_regions: &FreeRegionMap,
12001159
subject_node_id: ast::NodeId) {
12011160
let errors = self.region_vars.resolve_regions(free_regions, subject_node_id);
1202-
if !self.is_tainted_by_errors() {
1161+
if !self.errors_since_creation() {
12031162
// As a heuristic, just skip reporting region errors
12041163
// altogether if other errors have been reported while
12051164
// this infcx was in use. This is totally hokey but

branches/try/src/librustc/infer/sub.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ impl<'a, 'tcx> TypeRelation<'a, 'tcx> for Sub<'a, 'tcx> {
9191
}
9292

9393
(&ty::TyError, _) | (_, &ty::TyError) => {
94-
infcx.set_tainted_by_errors();
9594
Ok(self.tcx().types.err)
9695
}
9796

branches/try/src/librustc/traits/error_reporting.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -624,12 +624,6 @@ pub fn maybe_report_ambiguity<'a, 'tcx>(infcx: &InferCtxt<'a, 'tcx>,
624624
predicate,
625625
obligation);
626626

627-
// Ambiguity errors are often caused as fallout from earlier
628-
// errors. So just ignore them if this infcx is tainted.
629-
if infcx.is_tainted_by_errors() {
630-
return;
631-
}
632-
633627
match predicate {
634628
ty::Predicate::Trait(ref data) => {
635629
let trait_ref = data.to_poly_trait_ref();

branches/try/src/librustc_back/target/apple_base.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ pub fn opts() -> TargetOptions {
3333
}).unwrap_or((10, 7));
3434

3535
TargetOptions {
36-
// OSX has -dead_strip, which doesn't rely on function_sections
36+
// OSX has -dead_strip, which doesn't rely on ffunction_sections
3737
function_sections: false,
38+
linker: "cc".to_string(),
3839
dynamic_linking: true,
3940
executables: true,
4041
is_like_osx: true,

branches/try/src/librustc_back/target/arm_linux_androideabi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use target::Target;
1212

1313
pub fn target() -> Target {
1414
let mut base = super::android_base::opts();
15-
base.features = "+v7,+vfp3,+d16".to_string();
15+
base.features = "+v7".to_string();
1616

1717
Target {
1818
llvm_target: "arm-linux-androideabi".to_string(),

branches/try/src/librustc_back/target/bitrig_base.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::default::Default;
1313

1414
pub fn opts() -> TargetOptions {
1515
TargetOptions {
16+
linker: "cc".to_string(),
1617
dynamic_linking: true,
1718
executables: true,
1819
linker_is_gnu: true,

branches/try/src/librustc_back/target/dragonfly_base.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::default::Default;
1313

1414
pub fn opts() -> TargetOptions {
1515
TargetOptions {
16+
linker: "cc".to_string(),
1617
dynamic_linking: true,
1718
executables: true,
1819
linker_is_gnu: true,

branches/try/src/librustc_back/target/freebsd_base.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::default::Default;
1313

1414
pub fn opts() -> TargetOptions {
1515
TargetOptions {
16+
linker: "cc".to_string(),
1617
dynamic_linking: true,
1718
executables: true,
1819
linker_is_gnu: true,

branches/try/src/librustc_back/target/netbsd_base.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::default::Default;
1313

1414
pub fn opts() -> TargetOptions {
1515
TargetOptions {
16+
linker: "cc".to_string(),
1617
dynamic_linking: true,
1718
executables: true,
1819
linker_is_gnu: true,

branches/try/src/librustc_back/target/openbsd_base.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::default::Default;
1313

1414
pub fn opts() -> TargetOptions {
1515
TargetOptions {
16+
linker: "cc".to_string(),
1617
dynamic_linking: true,
1718
executables: true,
1819
linker_is_gnu: true,

branches/try/src/librustc_back/target/solaris_base.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::default::Default;
1313

1414
pub fn opts() -> TargetOptions {
1515
TargetOptions {
16+
linker: "cc".to_string(),
1617
dynamic_linking: true,
1718
executables: true,
1819
has_rpath: true,

branches/try/src/librustc_typeck/astconv.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,6 @@ pub trait AstConv<'tcx> {
155155
_trait_ref: ty::TraitRef<'tcx>,
156156
_item_name: ast::Name)
157157
-> Ty<'tcx>;
158-
159-
/// Invoked when we encounter an error from some prior pass
160-
/// (e.g. resolve) that is translated into a ty-error. This is
161-
/// used to help suppress derived errors typeck might otherwise
162-
/// report.
163-
fn set_tainted_by_errors(&self);
164158
}
165159

166160
pub fn ast_region_to_region(tcx: &TyCtxt, lifetime: &hir::Lifetime)
@@ -1539,7 +1533,6 @@ fn base_def_to_ty<'tcx>(this: &AstConv<'tcx>,
15391533
prim_ty_to_ty(tcx, base_segments, prim_ty)
15401534
}
15411535
Def::Err => {
1542-
this.set_tainted_by_errors();
15431536
return this.tcx().types.err;
15441537
}
15451538
_ => {

branches/try/src/librustc_typeck/check/_match.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,6 @@ pub fn check_pat<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
209209
let self_ty = fcx.to_ty(&qself.ty);
210210
let path_res = if let Some(&d) = tcx.def_map.borrow().get(&pat.id) {
211211
if d.base_def == Def::Err {
212-
fcx.infcx().set_tainted_by_errors();
213212
fcx.write_error(pat.id);
214213
return;
215214
}
@@ -629,7 +628,6 @@ fn check_pat_enum<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
629628
let path_res = match tcx.def_map.borrow().get(&pat.id) {
630629
Some(&path_res) if path_res.base_def != Def::Err => path_res,
631630
_ => {
632-
fcx.infcx().set_tainted_by_errors();
633631
fcx.write_error(pat.id);
634632

635633
if let Some(subpats) = subpats {

branches/try/src/librustc_typeck/check/cast.rs

Lines changed: 8 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,19 @@ use super::structurally_resolved_type;
4545

4646
use lint;
4747
use hir::def_id::DefId;
48-
use rustc::hir;
49-
use rustc::traits;
5048
use rustc::ty::{self, Ty, TypeFoldable};
5149
use rustc::ty::cast::{CastKind, CastTy};
52-
use syntax::ast;
5350
use syntax::codemap::Span;
54-
use util::common::ErrorReported;
51+
use rustc::hir;
52+
use syntax::ast;
53+
5554

5655
/// Reifies a cast check to be checked once we have full type information for
5756
/// a function context.
5857
pub struct CastCheck<'tcx> {
5958
expr: &'tcx hir::Expr,
6059
expr_ty: Ty<'tcx>,
6160
cast_ty: Ty<'tcx>,
62-
cast_span: Span,
6361
span: Span,
6462
}
6563

@@ -113,37 +111,17 @@ enum CastError {
113111
}
114112

115113
impl<'tcx> CastCheck<'tcx> {
116-
pub fn new<'a>(fcx: &FnCtxt<'a, 'tcx>,
117-
expr: &'tcx hir::Expr,
118-
expr_ty: Ty<'tcx>,
119-
cast_ty: Ty<'tcx>,
120-
cast_span: Span,
121-
span: Span)
122-
-> Result<CastCheck<'tcx>, ErrorReported> {
123-
let check = CastCheck {
114+
pub fn new(expr: &'tcx hir::Expr, expr_ty: Ty<'tcx>, cast_ty: Ty<'tcx>, span: Span)
115+
-> CastCheck<'tcx> {
116+
CastCheck {
124117
expr: expr,
125118
expr_ty: expr_ty,
126119
cast_ty: cast_ty,
127-
cast_span: cast_span,
128120
span: span,
129-
};
130-
131-
// For better error messages, check for some obviously unsized
132-
// cases now. We do a more thorough check at the end, once
133-
// inference is more completely known.
134-
match cast_ty.sty {
135-
ty::TyTrait(..) | ty::TySlice(..) => {
136-
check.report_cast_to_unsized_type(fcx);
137-
Err(ErrorReported)
138-
}
139-
_ => {
140-
Ok(check)
141-
}
142121
}
143122
}
144123

145-
fn report_cast_error<'a>(&self,
146-
fcx: &FnCtxt<'a, 'tcx>,
124+
fn report_cast_error<'a>(&self, fcx: &FnCtxt<'a, 'tcx>,
147125
e: CastError) {
148126
match e {
149127
CastError::NeedViaPtr |
@@ -208,61 +186,6 @@ impl<'tcx> CastCheck<'tcx> {
208186
}
209187
}
210188

211-
fn report_cast_to_unsized_type<'a>(&self,
212-
fcx: &FnCtxt<'a, 'tcx>) {
213-
if
214-
self.cast_ty.references_error() ||
215-
self.expr_ty.references_error()
216-
{
217-
return;
218-
}
219-
220-
let tstr = fcx.infcx().ty_to_string(self.cast_ty);
221-
let mut err = fcx.type_error_struct(self.span, |actual| {
222-
format!("cast to unsized type: `{}` as `{}`", actual, tstr)
223-
}, self.expr_ty, None);
224-
match self.expr_ty.sty {
225-
ty::TyRef(_, ty::TypeAndMut { mutbl: mt, .. }) => {
226-
let mtstr = match mt {
227-
hir::MutMutable => "mut ",
228-
hir::MutImmutable => ""
229-
};
230-
if self.cast_ty.is_trait() {
231-
match fcx.tcx().sess.codemap().span_to_snippet(self.cast_span) {
232-
Ok(s) => {
233-
err.span_suggestion(self.cast_span,
234-
"try casting to a reference instead:",
235-
format!("&{}{}", mtstr, s));
236-
},
237-
Err(_) =>
238-
span_help!(err, self.cast_span,
239-
"did you mean `&{}{}`?", mtstr, tstr),
240-
}
241-
} else {
242-
span_help!(err, self.span,
243-
"consider using an implicit coercion to `&{}{}` instead",
244-
mtstr, tstr);
245-
}
246-
}
247-
ty::TyBox(..) => {
248-
match fcx.tcx().sess.codemap().span_to_snippet(self.cast_span) {
249-
Ok(s) => {
250-
err.span_suggestion(self.cast_span,
251-
"try casting to a `Box` instead:",
252-
format!("Box<{}>", s));
253-
},
254-
Err(_) =>
255-
span_help!(err, self.cast_span, "did you mean `Box<{}>`?", tstr),
256-
}
257-
}
258-
_ => {
259-
span_help!(err, self.expr.span,
260-
"consider using a box or reference as appropriate");
261-
}
262-
}
263-
err.emit();
264-
}
265-
266189
fn trivial_cast_lint<'a>(&self, fcx: &FnCtxt<'a, 'tcx>) {
267190
let t_cast = self.cast_ty;
268191
let t_expr = self.expr_ty;
@@ -295,9 +218,7 @@ impl<'tcx> CastCheck<'tcx> {
295218
debug!("check_cast({}, {:?} as {:?})", self.expr.id, self.expr_ty,
296219
self.cast_ty);
297220

298-
if !fcx.type_is_known_to_be_sized(self.cast_ty, self.span) {
299-
self.report_cast_to_unsized_type(fcx);
300-
} else if self.expr_ty.references_error() || self.cast_ty.references_error() {
221+
if self.expr_ty.references_error() || self.cast_ty.references_error() {
301222
// No sense in giving duplicate error messages
302223
} else if self.try_coercion_cast(fcx) {
303224
self.trivial_cast_lint(fcx);
@@ -482,17 +403,3 @@ impl<'tcx> CastCheck<'tcx> {
482403
}
483404

484405
}
485-
486-
impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
487-
fn type_is_known_to_be_sized(&self,
488-
ty: Ty<'tcx>,
489-
span: Span)
490-
-> bool
491-
{
492-
traits::type_known_to_meet_builtin_bound(self.infcx(),
493-
ty,
494-
ty::BoundSized,
495-
span)
496-
}
497-
}
498-

0 commit comments

Comments
 (0)