Auto merge of #42738 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 7 pull requests - Successful merges: #42695, #42714, #42720, #42723, #42730, #42731, #42734 - Failed merges: #42722
This commit is contained in:
commit
247a0184ff
|
@ -251,6 +251,14 @@ dependencies = [
|
||||||
"gcc 0.3.50 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gcc 0.3.50 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "collections"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"alloc 0.0.0",
|
||||||
|
"core 0.0.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "compiler_builtins"
|
name = "compiler_builtins"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
|
@ -1586,6 +1594,7 @@ dependencies = [
|
||||||
"alloc_jemalloc 0.0.0",
|
"alloc_jemalloc 0.0.0",
|
||||||
"alloc_system 0.0.0",
|
"alloc_system 0.0.0",
|
||||||
"build_helper 0.1.0",
|
"build_helper 0.1.0",
|
||||||
|
"collections 0.0.0",
|
||||||
"compiler_builtins 0.0.0",
|
"compiler_builtins 0.0.0",
|
||||||
"core 0.0.0",
|
"core 0.0.0",
|
||||||
"gcc 0.3.50 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gcc 0.3.50 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
|
@ -550,6 +550,7 @@ pub fn rust_src(build: &Build) {
|
||||||
"src/liballoc_jemalloc",
|
"src/liballoc_jemalloc",
|
||||||
"src/liballoc_system",
|
"src/liballoc_system",
|
||||||
"src/libbacktrace",
|
"src/libbacktrace",
|
||||||
|
"src/libcollections",
|
||||||
"src/libcompiler_builtins",
|
"src/libcompiler_builtins",
|
||||||
"src/libcore",
|
"src/libcore",
|
||||||
"src/liblibc",
|
"src/liblibc",
|
||||||
|
|
|
@ -254,7 +254,7 @@ pub fn std(build: &Build, stage: u32, target: &str) {
|
||||||
// for which docs must be built.
|
// for which docs must be built.
|
||||||
if !build.config.compiler_docs {
|
if !build.config.compiler_docs {
|
||||||
cargo.arg("--no-deps");
|
cargo.arg("--no-deps");
|
||||||
for krate in &["alloc", "core", "std", "std_unicode"] {
|
for krate in &["alloc", "collections", "core", "std", "std_unicode"] {
|
||||||
cargo.arg("-p").arg(krate);
|
cargo.arg("-p").arg(krate);
|
||||||
// Create all crate output directories first to make sure rustdoc uses
|
// Create all crate output directories first to make sure rustdoc uses
|
||||||
// relative links.
|
// relative links.
|
||||||
|
|
|
@ -242,11 +242,18 @@ Arguments:
|
||||||
let cwd = t!(env::current_dir());
|
let cwd = t!(env::current_dir());
|
||||||
let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
|
let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
|
||||||
|
if fs::metadata("config.toml").is_ok() {
|
||||||
|
Some(PathBuf::from("config.toml"))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// All subcommands can have an optional "Available paths" section
|
// All subcommands can have an optional "Available paths" section
|
||||||
if matches.opt_present("verbose") {
|
if matches.opt_present("verbose") {
|
||||||
let flags = Flags::parse(&["build".to_string()]);
|
let flags = Flags::parse(&["build".to_string()]);
|
||||||
let mut config = Config::default();
|
let mut config = Config::parse(&flags.build, cfg_file.clone());
|
||||||
config.build = flags.build.clone();
|
config.build = flags.build.clone();
|
||||||
let mut build = Build::new(flags, config);
|
let mut build = Build::new(flags, config);
|
||||||
metadata::build(&mut build);
|
metadata::build(&mut build);
|
||||||
|
@ -307,14 +314,6 @@ Arguments:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
|
|
||||||
if fs::metadata("config.toml").is_ok() {
|
|
||||||
Some(PathBuf::from("config.toml"))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
|
let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
|
||||||
|
|
||||||
if matches.opt_present("incremental") {
|
if matches.opt_present("incremental") {
|
||||||
|
|
|
@ -155,18 +155,18 @@ token : simple_token | ident | literal | symbol | whitespace token ;
|
||||||
<p id="keyword-table-marker"></p>
|
<p id="keyword-table-marker"></p>
|
||||||
|
|
||||||
| | | | | |
|
| | | | | |
|
||||||
|----------|----------|----------|----------|---------|
|
|----------|----------|----------|----------|----------|
|
||||||
| abstract | alignof | as | become | box |
|
| _ | abstract | alignof | as | become |
|
||||||
| break | const | continue | crate | do |
|
| box | break | const | continue | crate |
|
||||||
| else | enum | extern | false | final |
|
| do | else | enum | extern | false |
|
||||||
| fn | for | if | impl | in |
|
| final | fn | for | if | impl |
|
||||||
| let | loop | macro | match | mod |
|
| in | let | loop | macro | match |
|
||||||
| move | mut | offsetof | override | priv |
|
| mod | move | mut | offsetof | override |
|
||||||
| proc | pub | pure | ref | return |
|
| priv | proc | pub | pure | ref |
|
||||||
| Self | self | sizeof | static | struct |
|
| return | Self | self | sizeof | static |
|
||||||
| super | trait | true | type | typeof |
|
| struct | super | trait | true | type |
|
||||||
| unsafe | unsized | use | virtual | where |
|
| typeof | unsafe | unsized | use | virtual |
|
||||||
| while | yield | | | |
|
| where | while | yield | | |
|
||||||
|
|
||||||
|
|
||||||
Each of these keywords has special meaning in its grammar, and all of them are
|
Each of these keywords has special meaning in its grammar, and all of them are
|
||||||
|
|
|
@ -108,6 +108,7 @@
|
||||||
- [char_escape_debug](library-features/char-escape-debug.md)
|
- [char_escape_debug](library-features/char-escape-debug.md)
|
||||||
- [coerce_unsized](library-features/coerce-unsized.md)
|
- [coerce_unsized](library-features/coerce-unsized.md)
|
||||||
- [collection_placement](library-features/collection-placement.md)
|
- [collection_placement](library-features/collection-placement.md)
|
||||||
|
- [collections](library-features/collections.md)
|
||||||
- [collections_range](library-features/collections-range.md)
|
- [collections_range](library-features/collections-range.md)
|
||||||
- [command_envs](library-features/command-envs.md)
|
- [command_envs](library-features/command-envs.md)
|
||||||
- [compiler_builtins_lib](library-features/compiler-builtins-lib.md)
|
- [compiler_builtins_lib](library-features/compiler-builtins-lib.md)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# `collections`
|
||||||
|
|
||||||
|
This feature is internal to the Rust compiler and is not intended for general use.
|
||||||
|
|
||||||
|
------------------------
|
|
@ -0,0 +1,12 @@
|
||||||
|
[package]
|
||||||
|
authors = ["The Rust Project Developers"]
|
||||||
|
name = "collections"
|
||||||
|
version = "0.0.0"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "collections"
|
||||||
|
path = "lib.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
alloc = { path = "../liballoc" }
|
||||||
|
core = { path = "../libcore" }
|
|
@ -0,0 +1,72 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
#![crate_name = "collections"]
|
||||||
|
#![crate_type = "rlib"]
|
||||||
|
#![allow(unused_attributes)]
|
||||||
|
#![unstable(feature = "collections",
|
||||||
|
reason = "this library is unlikely to be stabilized in its current \
|
||||||
|
form or name",
|
||||||
|
issue = "27783")]
|
||||||
|
#![rustc_deprecated(since = "1.20.0",
|
||||||
|
reason = "collections moved to `alloc`")]
|
||||||
|
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
||||||
|
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
||||||
|
html_root_url = "https://doc.rust-lang.org/nightly/",
|
||||||
|
issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/",
|
||||||
|
test(no_crate_inject, attr(allow(unused_variables), deny(warnings))))]
|
||||||
|
#![no_std]
|
||||||
|
#![needs_allocator]
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
|
#![feature(alloc)]
|
||||||
|
#![feature(collections_range)]
|
||||||
|
#![feature(macro_reexport)]
|
||||||
|
#![feature(needs_allocator)]
|
||||||
|
#![feature(staged_api)]
|
||||||
|
|
||||||
|
//! Collection types
|
||||||
|
//!
|
||||||
|
//! See [`std::collections`](../std/collections/index.html) for a detailed
|
||||||
|
//! discussion of collections in Rust.
|
||||||
|
|
||||||
|
#[macro_reexport(vec, format)]
|
||||||
|
extern crate alloc;
|
||||||
|
|
||||||
|
pub use alloc::Bound;
|
||||||
|
|
||||||
|
pub use alloc::binary_heap;
|
||||||
|
pub use alloc::borrow;
|
||||||
|
pub use alloc::fmt;
|
||||||
|
pub use alloc::linked_list;
|
||||||
|
pub use alloc::range;
|
||||||
|
pub use alloc::slice;
|
||||||
|
pub use alloc::str;
|
||||||
|
pub use alloc::string;
|
||||||
|
pub use alloc::vec;
|
||||||
|
pub use alloc::vec_deque;
|
||||||
|
|
||||||
|
pub use alloc::btree_map;
|
||||||
|
pub use alloc::btree_set;
|
||||||
|
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::binary_heap::BinaryHeap;
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::btree_map::BTreeMap;
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::btree_set::BTreeSet;
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::linked_list::LinkedList;
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::vec_deque::VecDeque;
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::string::String;
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use alloc::vec::Vec;
|
|
@ -618,7 +618,10 @@ impl<'a, 'b> StrSearcher<'a, 'b> {
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<'a, 'b> Searcher<'a> for StrSearcher<'a, 'b> {
|
unsafe impl<'a, 'b> Searcher<'a> for StrSearcher<'a, 'b> {
|
||||||
fn haystack(&self) -> &'a str { self.haystack }
|
#[inline]
|
||||||
|
fn haystack(&self) -> &'a str {
|
||||||
|
self.haystack
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> SearchStep {
|
fn next(&mut self) -> SearchStep {
|
||||||
|
|
|
@ -774,6 +774,10 @@ fn constructor_sub_pattern_tys<'a, 'tcx: 'a>(cx: &MatchCheckCtxt<'a, 'tcx>,
|
||||||
},
|
},
|
||||||
ty::TyRef(_, ref ty_and_mut) => vec![ty_and_mut.ty],
|
ty::TyRef(_, ref ty_and_mut) => vec![ty_and_mut.ty],
|
||||||
ty::TyAdt(adt, substs) => {
|
ty::TyAdt(adt, substs) => {
|
||||||
|
if adt.is_box() {
|
||||||
|
// Use T as the sub pattern type of Box<T>.
|
||||||
|
vec![substs[0].as_type().unwrap()]
|
||||||
|
} else {
|
||||||
adt.variants[ctor.variant_index_for_adt(adt)].fields.iter().map(|field| {
|
adt.variants[ctor.variant_index_for_adt(adt)].fields.iter().map(|field| {
|
||||||
let is_visible = adt.is_enum()
|
let is_visible = adt.is_enum()
|
||||||
|| field.vis.is_accessible_from(cx.module, cx.tcx);
|
|| field.vis.is_accessible_from(cx.module, cx.tcx);
|
||||||
|
@ -790,6 +794,7 @@ fn constructor_sub_pattern_tys<'a, 'tcx: 'a>(cx: &MatchCheckCtxt<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
}).collect()
|
}).collect()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
_ => vec![],
|
_ => vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ alloc_jemalloc = { path = "../liballoc_jemalloc", optional = true }
|
||||||
alloc_system = { path = "../liballoc_system" }
|
alloc_system = { path = "../liballoc_system" }
|
||||||
panic_unwind = { path = "../libpanic_unwind", optional = true }
|
panic_unwind = { path = "../libpanic_unwind", optional = true }
|
||||||
panic_abort = { path = "../libpanic_abort" }
|
panic_abort = { path = "../libpanic_abort" }
|
||||||
|
collections = { path = "../libcollections" }
|
||||||
core = { path = "../libcore" }
|
core = { path = "../libcore" }
|
||||||
libc = { path = "../rustc/libc_shim" }
|
libc = { path = "../rustc/libc_shim" }
|
||||||
rand = { path = "../librand" }
|
rand = { path = "../librand" }
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
// 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)]
|
||||||
|
#![allow(warnings)]
|
||||||
|
|
||||||
|
struct Attr {
|
||||||
|
name: String,
|
||||||
|
value: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Element {
|
||||||
|
attrs: Vec<Box<Attr>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Element {
|
||||||
|
pub unsafe fn get_attr<'a>(&'a self, name: &str) {
|
||||||
|
self.attrs
|
||||||
|
.iter()
|
||||||
|
.find(|attr| {
|
||||||
|
let attr: &&Box<Attr> = std::mem::transmute(attr);
|
||||||
|
true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rustc_error]
|
||||||
|
fn main() { //~ ERROR compilation successful
|
||||||
|
let element = Element { attrs: Vec::new() };
|
||||||
|
let _ = unsafe { element.get_attr("foo") };
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
// 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)]
|
||||||
|
#![allow(warnings)]
|
||||||
|
|
||||||
|
trait A<T> {}
|
||||||
|
struct B<T> where B<T>: A<B<T>> { t: T }
|
||||||
|
|
||||||
|
#[rustc_error]
|
||||||
|
fn main() { //~ ERROR compilation successful
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
// 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(unboxed_closures, fn_traits, rustc_attrs)]
|
||||||
|
|
||||||
|
struct Foo;
|
||||||
|
|
||||||
|
impl<A> FnOnce<(A,)> for Foo {
|
||||||
|
type Output = ();
|
||||||
|
extern "rust-call" fn call_once(self, (_,): (A,)) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[rustc_error]
|
||||||
|
fn main() { //~ ERROR compilation successful
|
||||||
|
println!("{:?}", Foo("bar"));
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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(unboxed_closures, fn_traits, rustc_attrs)]
|
||||||
|
|
||||||
|
#[rustc_error]
|
||||||
|
fn main() { //~ ERROR compilation successful
|
||||||
|
let k = |x: i32| { x + 1 };
|
||||||
|
Fn::call(&k, (0,));
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
// 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)]
|
||||||
|
#![allow(warnings)]
|
||||||
|
|
||||||
|
trait Mirror {
|
||||||
|
type It;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Mirror for T {
|
||||||
|
type It = Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[rustc_error]
|
||||||
|
fn main() { //~ ERROR compilation successful
|
||||||
|
let c: <u32 as Mirror>::It = 5;
|
||||||
|
const CCCC: <u32 as Mirror>::It = 5;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright 2012 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(box_syntax)]
|
||||||
|
#![feature(box_patterns)]
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
enum Test {
|
||||||
|
Foo(usize),
|
||||||
|
Bar(isize),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a = box Test::Foo(10);
|
||||||
|
let b = box Test::Bar(-20);
|
||||||
|
match (a, b) {
|
||||||
|
(_, box Test::Foo(_)) => unreachable!(),
|
||||||
|
(box Test::Foo(x), b) => {
|
||||||
|
assert_eq!(x, 10);
|
||||||
|
assert_eq!(b, box Test::Bar(-20));
|
||||||
|
},
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,10 @@ fn plus_one(x: i32) -> i32 {
|
||||||
x + 1;
|
x + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn foo() -> Result<u8, u64> {
|
||||||
|
Ok(1);
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x = plus_one(5);
|
let x = plus_one(5);
|
||||||
println!("X = {}", x);
|
println!("X = {}", x);
|
||||||
|
|
|
@ -15,5 +15,22 @@ help: consider removing this semicolon:
|
||||||
14 | x + 1;
|
14 | x + 1;
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/coercion-missing-tail-expected-type.rs:17:29
|
||||||
|
|
|
||||||
|
17 | fn foo() -> Result<u8, u64> {
|
||||||
|
| _____________________________^
|
||||||
|
18 | | Ok(1);
|
||||||
|
19 | | }
|
||||||
|
| |_^ expected enum `std::result::Result`, found ()
|
||||||
|
|
|
||||||
|
= note: expected type `std::result::Result<u8, u64>`
|
||||||
|
found type `()`
|
||||||
|
help: consider removing this semicolon:
|
||||||
|
--> $DIR/coercion-missing-tail-expected-type.rs:18:10
|
||||||
|
|
|
||||||
|
18 | Ok(1);
|
||||||
|
| ^
|
||||||
|
|
||||||
error: aborting due to previous error(s)
|
error: aborting due to previous error(s)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue