Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 20 pull requests #48113

Merged
merged 46 commits into from
Feb 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
fdfb964
Document the behaviour of infinite iterators on potentially-computabl…
varkor Jan 18, 2018
91668fb
Make example no_run
varkor Jan 18, 2018
0be5173
Adjust language as per suggestions
varkor Jan 19, 2018
f129374
Use repeat instead of RangeFrom
varkor Jan 21, 2018
838ddbf
derive PartialEq and Eq for `ParseCharError`
tinaun Jan 26, 2018
505ef7b
Remove unused blake2b implementation
Mark-Simulacrum Jan 22, 2018
caa42e1
Remove VecCell
Mark-Simulacrum Jan 22, 2018
79d85da
Create a directory for --out-dir if it does not already exist
varkor Jan 29, 2018
7be8e2f
Add build.tools option to manage installation of extended rust tools.
o01eg Feb 5, 2018
daaa9a4
Fix ICE for mismatched args on target without span
etaoins Feb 7, 2018
528d6b6
rustdoc: Hide `-> ()` in cross crate inlined Fn* bounds
ollie27 Feb 7, 2018
78a0b7f
Refactor checks on list of extended tools.
o01eg Feb 7, 2018
37b5af2
Update binaryen to fix -Werror with GCC 8
cuviper Feb 7, 2018
04fde1c
intra-doc-links: bail early for linky things
Manishearth Feb 8, 2018
35dca7e
Add `rustc_args_required_const` to the feature whitelist
alexcrichton Feb 8, 2018
7a20fc1
Disallow function pointers to #[rustc_args_required_const]
alexcrichton Feb 8, 2018
e9bcb4e
Hide theme button under menu in mobile mode and fix top margin issue …
GuillaumeGomez Feb 8, 2018
64a8730
rustbuild: Pass `ccache` to build scripts
alexcrichton Feb 7, 2018
774997d
Fix visitation order of calls so that it matches execution order. Fix…
Zoxc Feb 9, 2018
9c05bab
ci: Actually bootstrap on i686 dist
alexcrichton Feb 9, 2018
fe8e0d9
Update books for next release
Mark-Simulacrum Feb 9, 2018
1335b3d
Add fetch_nand.
Mark-Simulacrum Feb 9, 2018
e6f910e
fix typo: substract -> subtract.
matthiaskrgr Feb 9, 2018
6bbee8d
Rollup merge of #47790 - tinaun:patch-1, r=sfackler
kennytm Feb 10, 2018
4f8ea49
Rollup merge of #47835 - Mark-Simulacrum:remove-data-structs, r=nikom…
kennytm Feb 10, 2018
262703c
Rollup merge of #47854 - varkor:create-out-dir, r=pnkfelix
kennytm Feb 10, 2018
077979f
Rollup merge of #48015 - o01eg:disableable-installation, r=alexcrichton
kennytm Feb 10, 2018
c04ec2c
Rollup merge of #48047 - etaoins:fix-ice-for-mismatched-args-on-targe…
kennytm Feb 10, 2018
4139c0a
Rollup merge of #48051 - ollie27:rustdoc_fn_unit_return, r=QuietMisdr…
kennytm Feb 10, 2018
2259e0d
Rollup merge of #48058 - cuviper:binaryen-gcc8, r=alexcrichton
kennytm Feb 10, 2018
73d2767
Rollup merge of #48059 - alexcrichton:sccachebs, r=Mark-Simulacrum
kennytm Feb 10, 2018
d6394e5
Rollup merge of #48064 - Manishearth:intra-doc-bail, r=QuietMisdreavus
kennytm Feb 10, 2018
1e10ca0
Rollup merge of #48078 - alexcrichton:fix-required-const-and-proc-mac…
kennytm Feb 10, 2018
a580eef
Rollup merge of #48080 - GuillaumeGomez:mobile-docs-fixes, r=QuietMis…
kennytm Feb 10, 2018
3554c3a
Rollup merge of #48086 - Zoxc:gen-fix, r=nikomatsakis
kennytm Feb 10, 2018
22c5067
Rollup merge of #48098 - alexcrichton:fix-i686-dist-bootstrap, r=Mark…
kennytm Feb 10, 2018
a37a329
Rollup merge of #48101 - Mark-Simulacrum:new-books, r=steveklabnik
kennytm Feb 10, 2018
6605d03
Rollup merge of #48107 - matthiaskrgr:typo__substract_to_subtract, r=…
kennytm Feb 10, 2018
8550ac8
Rollup merge of #48100 - Mark-Simulacrum:fetch-nand, r=alexcrichton
kennytm Feb 10, 2018
7ee3e39
fix typos in src/{bootstrap,ci,etc,lib{backtrace,core,fmt_macros}}
matthiaskrgr Feb 10, 2018
49f7ccd
Update the dlmalloc submodule
alexcrichton Feb 9, 2018
3a96767
Explain unusual debugging code in librustc
alexcrichton Feb 10, 2018
c888f72
Rollup merge of #48085 - alexcrichton:update-dlmalloc, r=Mark-Simulacrum
kennytm Feb 10, 2018
18d7be3
Rollup merge of #48120 - matthiaskrgr:typos_src_1, r=alexcrichton
kennytm Feb 10, 2018
b37c602
Rollup merge of #48124 - alexcrichton:clean-up-debugging, r=kennytm
kennytm Feb 10, 2018
4a82718
Rollup merge of #47547 - varkor:infinite-iterators-warning-doc, r=fre…
kennytm Feb 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions config.toml.example
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,10 @@
# default.
#extended = false

# Installs choosen set of extended tools if enables. By default builds all.
# If choosen tool failed to build the installation fails.
#tools = ["cargo", "rls", "rustfmt", "analysis", "src"]

# Verbosity level: 0 == not verbose, 1 == verbose, 2 == very verbose
#verbose = 0

Expand Down
2 changes: 1 addition & 1 deletion src/binaryen
29 changes: 23 additions & 6 deletions src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ impl<'a> Builder<'a> {
// build scripts in that situation.
//
// If LLVM support is disabled we need to use the snapshot compiler to compile
// build scripts, as the new compiler doesnt support executables.
// build scripts, as the new compiler doesn't support executables.
if mode == Mode::Libstd || !self.build.config.llvm_enabled {
cargo.env("RUSTC_SNAPSHOT", &self.initial_rustc)
.env("RUSTC_SNAPSHOT_LIBDIR", self.rustc_snapshot_libdir());
Expand Down Expand Up @@ -600,9 +600,25 @@ impl<'a> Builder<'a> {
//
// FIXME: the guard against msvc shouldn't need to be here
if !target.contains("msvc") {
let cc = self.cc(target);
cargo.env(format!("CC_{}", target), cc)
.env("CC", cc);
let ccache = self.config.ccache.as_ref();
let ccacheify = |s: &Path| {
let ccache = match ccache {
Some(ref s) => s,
None => return s.display().to_string(),
};
// FIXME: the cc-rs crate only recognizes the literal strings
// `ccache` and `sccache` when doing caching compilations, so we
// mirror that here. It should probably be fixed upstream to
// accept a new env var or otherwise work with custom ccache
// vars.
match &ccache[..] {
"ccache" | "sccache" => format!("{} {}", ccache, s.display()),
_ => s.display().to_string(),
}
};
let cc = ccacheify(&self.cc(target));
cargo.env(format!("CC_{}", target), &cc)
.env("CC", &cc);

let cflags = self.cflags(target).join(" ");
cargo.env(format!("CFLAGS_{}", target), cflags.clone())
Expand All @@ -617,8 +633,9 @@ impl<'a> Builder<'a> {
}

if let Ok(cxx) = self.cxx(target) {
cargo.env(format!("CXX_{}", target), cxx)
.env("CXX", cxx)
let cxx = ccacheify(&cxx);
cargo.env(format!("CXX_{}", target), &cxx)
.env("CXX", &cxx)
.env(format!("CXXFLAGS_{}", target), cflags.clone())
.env("CXXFLAGS", cflags);
}
Expand Down
5 changes: 4 additions & 1 deletion src/bootstrap/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
//! This module implements parsing `config.toml` configuration files to tweak
//! how the build runs.

use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::env;
use std::fs::File;
use std::io::prelude::*;
Expand Down Expand Up @@ -52,6 +52,7 @@ pub struct Config {
pub target_config: HashMap<Interned<String>, Target>,
pub full_bootstrap: bool,
pub extended: bool,
pub tools: Option<HashSet<String>>,
pub sanitizers: bool,
pub profiler: bool,
pub ignore_git: bool,
Expand Down Expand Up @@ -191,6 +192,7 @@ struct Build {
python: Option<String>,
full_bootstrap: Option<bool>,
extended: Option<bool>,
tools: Option<HashSet<String>>,
verbose: Option<usize>,
sanitizers: Option<bool>,
profiler: Option<bool>,
Expand Down Expand Up @@ -395,6 +397,7 @@ impl Config {
set(&mut config.vendor, build.vendor);
set(&mut config.full_bootstrap, build.full_bootstrap);
set(&mut config.extended, build.extended);
config.tools = build.tools;
set(&mut config.verbose, build.verbose);
set(&mut config.sanitizers, build.sanitizers);
set(&mut config.profiler, build.profiler);
Expand Down
1 change: 1 addition & 0 deletions src/bootstrap/configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ def v(*args):
o("full-bootstrap", "build.full-bootstrap", "build three compilers instead of two")
o("extended", "build.extended", "build an extended rust tool set")

v("tools", "build.tools", "List of extended tools will be installed")
v("build", "build.build", "GNUs ./configure syntax LLVM build triple")
v("host", None, "GNUs ./configure syntax LLVM host triples")
v("target", None, "GNUs ./configure syntax LLVM target triples")
Expand Down
7 changes: 7 additions & 0 deletions src/bootstrap/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ use channel;
use util::{cp_r, libdir, is_dylib, cp_filtered, copy, replace_in_file};
use builder::{Builder, RunConfig, ShouldRun, Step};
use compile;
use native;
use tool::{self, Tool};
use cache::{INTERNER, Interned};
use time;
Expand Down Expand Up @@ -898,6 +899,12 @@ impl Step for PlainSourceTarball {
.arg("--vers").arg(CARGO_VENDOR_VERSION)
.arg("cargo-vendor")
.env("RUSTC", &build.initial_rustc);
if let Some(dir) = build.openssl_install_dir(build.config.build) {
builder.ensure(native::Openssl {
target: build.config.build,
});
cmd.env("OPENSSL_DIR", dir);
}
build.run(&mut cmd);
}

Expand Down
30 changes: 23 additions & 7 deletions src/bootstrap/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ use dist::{self, pkgname, sanitize_sh, tmpdir};

use builder::{Builder, RunConfig, ShouldRun, Step};
use cache::Interned;
use config::Config;

pub fn install_docs(builder: &Builder, stage: u32, host: Interned<String>) {
install_sh(builder, "docs", "rust-docs", stage, Some(host));
Expand Down Expand Up @@ -144,6 +145,19 @@ macro_rules! install {
pub host: Interned<String>,
}

impl $name {
#[allow(dead_code)]
fn should_build(config: &Config) -> bool {
config.extended && config.tools.as_ref()
.map_or(true, |t| t.contains($path))
}

#[allow(dead_code)]
fn should_install(builder: &Builder) -> bool {
builder.config.tools.as_ref().map_or(false, |t| t.contains($path))
}
}

impl Step for $name {
type Output = ();
const DEFAULT: bool = true;
Expand Down Expand Up @@ -185,32 +199,34 @@ install!((self, builder, _config),
install_std(builder, self.stage, *target);
}
};
Cargo, "cargo", _config.extended, only_hosts: true, {
Cargo, "cargo", Self::should_build(_config), only_hosts: true, {
builder.ensure(dist::Cargo { stage: self.stage, target: self.target });
install_cargo(builder, self.stage, self.target);
};
Rls, "rls", _config.extended, only_hosts: true, {
if builder.ensure(dist::Rls { stage: self.stage, target: self.target }).is_some() {
Rls, "rls", Self::should_build(_config), only_hosts: true, {
if builder.ensure(dist::Rls { stage: self.stage, target: self.target }).is_some() ||
Self::should_install(builder) {
install_rls(builder, self.stage, self.target);
} else {
println!("skipping Install RLS stage{} ({})", self.stage, self.target);
}
};
Rustfmt, "rustfmt", _config.extended, only_hosts: true, {
if builder.ensure(dist::Rustfmt { stage: self.stage, target: self.target }).is_some() {
Rustfmt, "rustfmt", Self::should_build(_config), only_hosts: true, {
if builder.ensure(dist::Rustfmt { stage: self.stage, target: self.target }).is_some() ||
Self::should_install(builder) {
install_rustfmt(builder, self.stage, self.target);
} else {
println!("skipping Install Rustfmt stage{} ({})", self.stage, self.target);
}
};
Analysis, "analysis", _config.extended, only_hosts: false, {
Analysis, "analysis", Self::should_build(_config), only_hosts: false, {
builder.ensure(dist::Analysis {
compiler: builder.compiler(self.stage, self.host),
target: self.target
});
install_analysis(builder, self.stage, self.target);
};
Src, "src", _config.extended, only_hosts: true, {
Src, "src", Self::should_build(_config) , only_hosts: true, {
builder.ensure(dist::Src);
install_src(builder, self.stage);
}, ONLY_BUILD;
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -666,7 +666,7 @@ impl Build {
}
}

/// Returns the path to the linker for the given target if it needs to be overriden.
/// Returns the path to the linker for the given target if it needs to be overridden.
fn linker(&self, target: Interned<String>) -> Option<&Path> {
if let Some(linker) = self.config.target_config.get(&target)
.and_then(|c| c.linker.as_ref()) {
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -902,7 +902,7 @@ impl Step for Compiletest {
}
}
if suite == "run-make" && !build.config.llvm_enabled {
println!("Ignoring run-make test suite as they generally dont work without LLVM");
println!("Ignoring run-make test suite as they generally don't work without LLVM");
return;
}

Expand Down
3 changes: 2 additions & 1 deletion src/ci/docker/dist-i686-linux/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ ENV RUST_CONFIGURE_ARGS \
--enable-extended \
--enable-sanitizers \
--enable-profiler \
--enable-emscripten
--enable-emscripten \
--build=i686-unknown-linux-gnu
ENV SCRIPT python2.7 ../x.py dist --host $HOSTS --target $HOSTS

# This is the only builder which will create source tarballs
Expand Down
2 changes: 1 addition & 1 deletion src/ci/docker/dist-x86_64-netbsd/build-netbsd-toolchain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ cd usr/src
# The options, in order, do the following
# * this is an unprivileged build
# * output to a predictable location
# * disable various uneeded stuff
# * disable various unneeded stuff
MKUNPRIVED=yes TOOLDIR=/x-tools/x86_64-unknown-netbsd \
MKSHARE=no MKDOC=no MKHTML=no MKINFO=no MKKMOD=no MKLINT=no MKMAN=no MKNLS=no MKPROFILE=no \
hide_output ./build.sh -j10 -m amd64 tools
Expand Down
2 changes: 1 addition & 1 deletion src/dlmalloc
Submodule dlmalloc updated 1 files
+1 −1 src/dlmalloc.rs
2 changes: 1 addition & 1 deletion src/doc/book
Submodule book updated 32 files
+2 −2 second-edition/dictionary.txt
+1 −0 second-edition/dot/trpl04-01.dot
+1 −0 second-edition/dot/trpl04-02.dot
+1 −0 second-edition/dot/trpl04-03.dot
+1 −0 second-edition/dot/trpl04-04.dot
+1 −0 second-edition/dot/trpl04-05.dot
+1 −0 second-edition/dot/trpl04-06.dot
+1 −0 second-edition/dot/trpl15-01.dot
+1 −0 second-edition/dot/trpl15-02.dot
+1 −0 second-edition/dot/trpl15-03.dot
+797 −1,274 second-edition/nostarch/chapter15.md
+ second-edition/nostarch/odt/chapter15.docx
+1 −1 second-edition/src/ch08-01-vectors.md
+2 −2 second-edition/src/ch10-02-traits.md
+37 −78 second-edition/src/ch15-00-smart-pointers.md
+116 −188 second-edition/src/ch15-01-box.md
+133 −201 second-edition/src/ch15-02-deref.md
+66 −111 second-edition/src/ch15-03-drop.md
+95 −119 second-edition/src/ch15-04-rc.md
+178 −217 second-edition/src/ch15-05-interior-mutability.md
+183 −257 second-edition/src/ch15-06-reference-cycles.md
+1 −1 second-edition/src/ch17-02-trait-objects.md
+6 −6 second-edition/src/ch18-01-all-the-places-for-patterns.md
+52 −49 second-edition/src/img/trpl04-01.svg
+75 −70 second-edition/src/img/trpl04-02.svg
+101 −95 second-edition/src/img/trpl04-03.svg
+76 −71 second-edition/src/img/trpl04-04.svg
+67 −62 second-edition/src/img/trpl04-05.svg
+95 −90 second-edition/src/img/trpl04-06.svg
+31 −30 second-edition/src/img/trpl15-01.svg
+14 −13 second-edition/src/img/trpl15-02.svg
+68 −53 second-edition/src/img/trpl15-03.svg
2 changes: 1 addition & 1 deletion src/doc/nomicon
2 changes: 1 addition & 1 deletion src/doc/reference
4 changes: 2 additions & 2 deletions src/etc/installer/msi/rust.wxs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<!-- Upgrade code should be different for each platform -->
<?if $(sys.BUILDARCH)="x64" ?>
<?if $(env.CFG_ABI)="GNU" ?>
<!-- UpgradeCode shoud stay the same for all MSI versions in channel -->
<!-- UpgradeCode should stay the same for all MSI versions in channel -->
<?if $(env.CFG_CHANNEL)="stable" ?>
<?define UpgradeCode="B440B077-F8D1-4730-8E1D-D6D37702B4CE" ?>
<?elseif $(env.CFG_CHANNEL)="beta" ?>
Expand Down Expand Up @@ -129,7 +129,7 @@

<!-- Path of cmd.exe for the shortcut -->
<Property Id="SHORTCUTTARGET" Value="%windir%\System32\cmd.exe" />
<!-- Microsoft Installer will resolve any Enviroment Variables in the working directory at install time -->
<!-- Microsoft Installer will resolve any Environment Variables in the working directory at install time -->
<Property Id="SHORTCUTWKDIR" Value="%SystemDrive%\" />

<InstallUISequence>
Expand Down
2 changes: 1 addition & 1 deletion src/etc/platform-intrinsics/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ def parse_args():
The X86 architecture is specified as multiple files (for the different
instruction sets that x86 supports). To generate the compiler
definitions one needs to pass the script a "platform information file"
(with the -i flag) next to the files of the different intruction sets.
(with the -i flag) next to the files of the different instruction sets.
For example, to generate the X86 compiler-definitions for SSE4.2, just:

python generator.py --format compiler-defs -i x86/info.json sse42.json
Expand Down
2 changes: 1 addition & 1 deletion src/etc/test-float-parse/runtests.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
(as a fraction, using the ``fractions`` module).

Given an input string and the corresponding float computed via Rust, simply
decode the float into f * 2^k (for intergers f, k) and the ULP.
decode the float into f * 2^k (for integers f, k) and the ULP.
We can now easily compute the error and check if it is within 0.5 ULP as it
should be. Zero and infinites are handled similarly:

Expand Down
2 changes: 1 addition & 1 deletion src/libbacktrace/ltmain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ func_mkdir_p ()
# While some portion of DIR does not yet exist...
while test ! -d "$my_directory_path"; do
# ...make a list in topmost first order. Use a colon delimited
# list incase some portion of path contains whitespace.
# list in case some portion of path contains whitespace.
my_dir_list="$my_directory_path:$my_dir_list"

# If the last portion added has no slash in it, the list is done
Expand Down
2 changes: 1 addition & 1 deletion src/libbacktrace/macho.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ macho_get_commands (struct backtrace_state *state, int descriptor,
goto end;
file_header_view_valid = 1;

// The endianess of the slice may be different than the fat image
// The endianness of the slice may be different than the fat image
switch (*(uint32_t *) file_header_view.data)
{
case MH_MAGIC:
Expand Down
2 changes: 1 addition & 1 deletion src/libcore/char.rs
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ impl From<u8> for char {

/// An error which can be returned when parsing a char.
#[stable(feature = "char_from_str", since = "1.20.0")]
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ParseCharError {
kind: CharErrorKind,
}
Expand Down
4 changes: 4 additions & 0 deletions src/libcore/iter/iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1431,6 +1431,10 @@ pub trait Iterator {
/// Folding is useful whenever you have a collection of something, and want
/// to produce a single value from it.
///
/// Note: `fold()`, and similar methods that traverse the entire iterator,
/// may not terminate for infinite iterators, even on traits for which a
/// result is determinable in finite time.
///
/// # Examples
///
/// Basic usage:
Expand Down
14 changes: 14 additions & 0 deletions src/libcore/iter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,21 @@
//!
//! This will print the numbers `0` through `4`, each on their own line.
//!
//! Bear in mind that methods on infinite iterators, even those for which a
//! result can be determined mathematically in finite time, may not terminate.
//! Specifically, methods such as [`min`], which in the general case require
//! traversing every element in the iterator, are likely not to return
//! successfully for any infinite iterators.
//!
//! ```no_run
//! let ones = std::iter::repeat(1);
//! let least = ones.min().unwrap(); // Oh no! An infinite loop!
//! // `ones.min()` causes an infinite loop, so we won't reach this point!
//! println!("The smallest number one is {}.", least);
//! ```
//!
//! [`take`]: trait.Iterator.html#method.take
//! [`min`]: trait.Iterator.html#method.min

#![stable(feature = "rust1", since = "1.0.0")]

Expand Down
2 changes: 1 addition & 1 deletion src/libcore/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ macro_rules! debug_assert_ne {
/// }
/// }
///
/// // The prefered method of quick returning Errors
/// // The preferred method of quick returning Errors
/// fn write_to_file_question() -> Result<(), MyError> {
/// let mut file = File::create("my_best_friends.txt")?;
/// file.write_all(b"This is a list of my best friends.")?;
Expand Down
4 changes: 2 additions & 2 deletions src/libcore/ops/arith.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ add_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
/// ```
#[lang = "sub"]
#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_on_unimplemented(message="cannot substract `{RHS}` from `{Self}`",
#[rustc_on_unimplemented(message="cannot subtract `{RHS}` from `{Self}`",
label="no implementation for `{Self} - {RHS}`")]
pub trait Sub<RHS=Self> {
/// The resulting type after applying the `-` operator.
Expand Down Expand Up @@ -716,7 +716,7 @@ add_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
/// ```
#[lang = "sub_assign"]
#[stable(feature = "op_assign_traits", since = "1.8.0")]
#[rustc_on_unimplemented(message="cannot substract-assign `{Rhs}` from `{Self}`",
#[rustc_on_unimplemented(message="cannot subtract-assign `{Rhs}` from `{Self}`",
label="no implementation for `{Self} -= {Rhs}`")]
pub trait SubAssign<Rhs=Self> {
/// Performs the `-=` operation.
Expand Down
Loading