Auto merge of #42245 - frewsxcv:rollup, r=frewsxcv

Rollup of 7 pull requests

- Successful merges: #42169, #42215, #42216, #42224, #42230, #42236, #42241
- Failed merges:
This commit is contained in:
bors 2017-05-26 15:31:49 +00:00
commit 256e497fe6
20 changed files with 168 additions and 40 deletions

View File

@ -1,7 +1,7 @@
# `step_trait` # `step_trait`
The tracking issue for this feature is: [#27741] The tracking issue for this feature is: [#42168]
[#27741]: https://github.com/rust-lang/rust/issues/27741 [#42168]: https://github.com/rust-lang/rust/issues/42168
------------------------ ------------------------

View File

@ -393,7 +393,12 @@ impl<T> [T] {
} }
/// Returns a reference to an element or subslice, without doing bounds /// Returns a reference to an element or subslice, without doing bounds
/// checking. So use it very carefully! /// checking.
///
/// This is generally not recommended, use with caution! For a safe
/// alternative see [`get`].
///
/// [`get`]: #method.get
/// ///
/// # Examples /// # Examples
/// ///
@ -413,7 +418,12 @@ impl<T> [T] {
} }
/// Returns a mutable reference to an element or subslice, without doing /// Returns a mutable reference to an element or subslice, without doing
/// bounds checking. So use it very carefully! /// bounds checking.
///
/// This is generally not recommended, use with caution! For a safe
/// alternative see [`get_mut`].
///
/// [`get_mut`]: #method.get_mut
/// ///
/// # Examples /// # Examples
/// ///

View File

@ -435,6 +435,12 @@ impl str {
/// Creates a string slice from another string slice, bypassing safety /// Creates a string slice from another string slice, bypassing safety
/// checks. /// checks.
/// ///
/// This is generally not recommended, use with caution! For a safe
/// alternative see [`str`] and [`Index`].
///
/// [`str`]: primitive.str.html
/// [`Index`]: ops/trait.Index.html
///
/// This new slice goes from `begin` to `end`, including `begin` but /// This new slice goes from `begin` to `end`, including `begin` but
/// excluding `end`. /// excluding `end`.
/// ///
@ -477,6 +483,11 @@ impl str {
/// Creates a string slice from another string slice, bypassing safety /// Creates a string slice from another string slice, bypassing safety
/// checks. /// checks.
/// This is generally not recommended, use with caution! For a safe
/// alternative see [`str`] and [`IndexMut`].
///
/// [`str`]: primitive.str.html
/// [`IndexMut`]: ops/trait.IndexMut.html
/// ///
/// This new slice goes from `begin` to `end`, including `begin` but /// This new slice goes from `begin` to `end`, including `begin` but
/// excluding `end`. /// excluding `end`.
@ -1018,7 +1029,7 @@ impl str {
/// ///
/// ``` /// ```
/// let x = "(///)".to_string(); /// let x = "(///)".to_string();
/// let d: Vec<_> = x.split('/').collect();; /// let d: Vec<_> = x.split('/').collect();
/// ///
/// assert_eq!(d, &["(", "", "", ")"]); /// assert_eq!(d, &["(", "", "", ")"]);
/// ``` /// ```

View File

@ -309,7 +309,7 @@ pub use self::iterator::Iterator;
#[unstable(feature = "step_trait", #[unstable(feature = "step_trait",
reason = "likely to be replaced by finer-grained traits", reason = "likely to be replaced by finer-grained traits",
issue = "27741")] issue = "42168")]
pub use self::range::Step; pub use self::range::Step;
#[unstable(feature = "step_by", reason = "recent addition", #[unstable(feature = "step_by", reason = "recent addition",
issue = "27741")] issue = "27741")]

View File

@ -20,7 +20,7 @@ use super::{FusedIterator, TrustedLen};
/// two `Step` objects. /// two `Step` objects.
#[unstable(feature = "step_trait", #[unstable(feature = "step_trait",
reason = "likely to be replaced by finer-grained traits", reason = "likely to be replaced by finer-grained traits",
issue = "27741")] issue = "42168")]
pub trait Step: PartialOrd + Sized { pub trait Step: PartialOrd + Sized {
/// Steps `self` if possible. /// Steps `self` if possible.
fn step(&self, by: &Self) -> Option<Self>; fn step(&self, by: &Self) -> Option<Self>;
@ -55,7 +55,7 @@ macro_rules! step_impl_unsigned {
($($t:ty)*) => ($( ($($t:ty)*) => ($(
#[unstable(feature = "step_trait", #[unstable(feature = "step_trait",
reason = "likely to be replaced by finer-grained traits", reason = "likely to be replaced by finer-grained traits",
issue = "27741")] issue = "42168")]
impl Step for $t { impl Step for $t {
#[inline] #[inline]
fn step(&self, by: &$t) -> Option<$t> { fn step(&self, by: &$t) -> Option<$t> {
@ -115,7 +115,7 @@ macro_rules! step_impl_signed {
($($t:ty)*) => ($( ($($t:ty)*) => ($(
#[unstable(feature = "step_trait", #[unstable(feature = "step_trait",
reason = "likely to be replaced by finer-grained traits", reason = "likely to be replaced by finer-grained traits",
issue = "27741")] issue = "42168")]
impl Step for $t { impl Step for $t {
#[inline] #[inline]
fn step(&self, by: &$t) -> Option<$t> { fn step(&self, by: &$t) -> Option<$t> {
@ -187,7 +187,7 @@ macro_rules! step_impl_no_between {
($($t:ty)*) => ($( ($($t:ty)*) => ($(
#[unstable(feature = "step_trait", #[unstable(feature = "step_trait",
reason = "likely to be replaced by finer-grained traits", reason = "likely to be replaced by finer-grained traits",
issue = "27741")] issue = "42168")]
impl Step for $t { impl Step for $t {
#[inline] #[inline]
fn step(&self, by: &$t) -> Option<$t> { fn step(&self, by: &$t) -> Option<$t> {

View File

@ -1,22 +0,0 @@
[root]
name = "rustc_llvm"
version = "0.0.0"
dependencies = [
"build_helper 0.1.0",
"gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_bitflags 0.0.0",
]
[[package]]
name = "build_helper"
version = "0.1.0"
[[package]]
name = "gcc"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rustc_bitflags"
version = "0.0.0"

View File

@ -141,7 +141,7 @@ impl<'a, 'tcx> Visitor<'tcx> for CheckCrateVisitor<'a, 'tcx> {
let outer_penv = self.tcx.infer_ctxt(body_id, Reveal::UserFacing).enter(|infcx| { let outer_penv = self.tcx.infer_ctxt(body_id, Reveal::UserFacing).enter(|infcx| {
let param_env = infcx.param_env.clone(); let param_env = infcx.param_env.clone();
let outer_penv = mem::replace(&mut self.param_env, param_env); let outer_penv = mem::replace(&mut self.param_env, param_env);
let region_maps = &self.tcx.region_maps(item_def_id);; let region_maps = &self.tcx.region_maps(item_def_id);
euv::ExprUseVisitor::new(self, region_maps, &infcx).consume_body(body); euv::ExprUseVisitor::new(self, region_maps, &infcx).consume_body(body);
outer_penv outer_penv
}); });

View File

@ -901,7 +901,7 @@ impl<'a, 'tcx> MirContext<'a, 'tcx> {
let llty = type_of::type_of(bcx.ccx, val.ty); let llty = type_of::type_of(bcx.ccx, val.ty);
let cast_ptr = bcx.pointercast(dst.llval, llty.ptr_to()); let cast_ptr = bcx.pointercast(dst.llval, llty.ptr_to());
let in_type = val.ty; let in_type = val.ty;
let out_type = dst.ty.to_ty(bcx.tcx());; let out_type = dst.ty.to_ty(bcx.tcx());
let llalign = cmp::min(bcx.ccx.align_of(in_type), bcx.ccx.align_of(out_type)); let llalign = cmp::min(bcx.ccx.align_of(in_type), bcx.ccx.align_of(out_type));
self.store_operand(bcx, cast_ptr, Some(llalign), val); self.store_operand(bcx, cast_ptr, Some(llalign), val);
} }

View File

@ -963,7 +963,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
pub fn prohibit_projection(&self, span: Span) { pub fn prohibit_projection(&self, span: Span) {
let mut err = struct_span_err!(self.tcx().sess, span, E0229, let mut err = struct_span_err!(self.tcx().sess, span, E0229,
"associated type bindings are not allowed here"); "associated type bindings are not allowed here");
err.span_label(span, "associate type not allowed here").emit(); err.span_label(span, "associated type not allowed here").emit();
} }
// Check a type Path and convert it to a Ty. // Check a type Path and convert it to a Ty.

View File

@ -1545,7 +1545,7 @@ pub fn create_dir<P: AsRef<Path>>(path: P) -> io::Result<()> {
/// determined to not exist) are outlined by `fs::create_dir`. /// determined to not exist) are outlined by `fs::create_dir`.
/// ///
/// Notable exception is made for situations where any of the directories /// Notable exception is made for situations where any of the directories
/// specified in the `path` could not be created as it was created concurrently. /// specified in the `path` could not be created as it was being created concurrently.
/// Such cases are considered success. In other words: calling `create_dir_all` /// Such cases are considered success. In other words: calling `create_dir_all`
/// concurrently from multiple threads or processes is guaranteed to not fail /// concurrently from multiple threads or processes is guaranteed to not fail
/// due to race itself. /// due to race itself.

View File

@ -22,7 +22,7 @@ impl Foo for isize {
fn baz<I>(x: &<I as Foo<A=Bar>>::A) {} fn baz<I>(x: &<I as Foo<A=Bar>>::A) {}
//~^ ERROR associated type bindings are not allowed here [E0229] //~^ ERROR associated type bindings are not allowed here [E0229]
//~| NOTE associate type not allowed here //~| NOTE associated type not allowed here
fn main() { fn main() {
} }

View File

@ -16,7 +16,7 @@ pub trait D {
fn f<T>(self) fn f<T>(self)
where T<Bogus = Foo>: A; where T<Bogus = Foo>: A;
//~^ ERROR associated type bindings are not allowed here [E0229] //~^ ERROR associated type bindings are not allowed here [E0229]
//~| NOTE associate type not allowed here //~| NOTE associated type not allowed here
} }
fn main() {} fn main() {}

View File

@ -14,7 +14,7 @@ pub trait D {
fn f<T>(self) fn f<T>(self)
where T<Bogus = Self::AlsoBogus>: A; where T<Bogus = Self::AlsoBogus>: A;
//~^ ERROR associated type bindings are not allowed here [E0229] //~^ ERROR associated type bindings are not allowed here [E0229]
//~| NOTE associate type not allowed here //~| NOTE associated type not allowed here
} }
fn main() {} fn main() {}

View File

@ -0,0 +1,16 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(conservative_impl_trait, rustc_attrs)]
fn _test() -> impl Default { }
#[rustc_error]
fn main() { } //~ ERROR compilation successful

View File

@ -0,0 +1,18 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(const_fn)]
const fn x() {
let t = true; //~ ERROR blocks in constant functions are limited to items and tail expressions
let x = || t; //~ ERROR blocks in constant functions are limited to items and tail expressions
}
fn main() {}

View File

@ -0,0 +1,20 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -Z unstable-options --unpretty=mir
use std::path::MAIN_SEPARATOR;
fn main() {
let mut foo : String = "hello".to_string();
foo.push(MAIN_SEPARATOR);
println!("{}", foo);
let x: () = 0; //~ ERROR: mismatched types
}

View File

@ -0,0 +1,31 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(associated_consts, rustc_attrs)]
#![allow(warnings)]
trait MyTrait {
const MY_CONST: &'static str;
}
macro_rules! my_macro {
() => {
struct MyStruct;
impl MyTrait for MyStruct {
const MY_CONST: &'static str = stringify!(abc);
}
}
}
my_macro!();
#[rustc_error]
fn main() {} //~ ERROR compilation successful

View File

@ -0,0 +1,16 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(rustc_attrs)]
fn _test(ref _p: str) {}
#[rustc_error]
fn main() { } //~ ERROR compilation successful

View File

@ -0,0 +1,28 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
enum Foo {
Bar { bar: Bar, id: usize }
}
enum Bar {
A, B, C, D, E, F
}
fn test(f: Foo) {
match f {
//~^ ERROR non-exhaustive patterns
//~| patterns
Foo::Bar { bar: Bar::A, .. } => (),
Foo::Bar { bar: Bar::B, .. } => (),
}
}
fn main() {}

View File

@ -13,7 +13,7 @@
fn foo<F: FnOnce()>(_f: F) { } fn foo<F: FnOnce()>(_f: F) { }
fn main() { fn main() {
let mut var = Vec::new();; let mut var = Vec::new();
foo(move|| { foo(move|| {
var.push(1); var.push(1);
}); });