Auto merge of #60877 - Centril:rollup-j0o5mo5, r=Centril
Rollup of 6 pull requests Successful merges: - #59825 (string: implement From<&String> for String) - #59923 (Fix convert module's documentation links) - #60691 (Include expression to wait for to the span of Await) - #60769 (Update rustc book CLI docs.) - #60816 (README.md: Mention MSVC 2017+, not 2013(!)) - #60851 (Move `box` from the stable keyword to unstable keywords list) Failed merges: r? @ghost
This commit is contained in:
commit
1962adea6a
12
README.md
12
README.md
@ -128,9 +128,15 @@ build.
|
||||
#### MSVC
|
||||
[windows-msvc]: #windows-msvc
|
||||
|
||||
MSVC builds of Rust additionally require an installation of Visual Studio 2013
|
||||
(or later) so `rustc` can use its linker. Make sure to check the “C++ tools”
|
||||
option.
|
||||
MSVC builds of Rust additionally require an installation of Visual Studio 2017
|
||||
(or later) so `rustc` can use its linker. The simplest way is to get the
|
||||
[Visual Studio Build Tools] and check the “C++ build tools” workload.
|
||||
|
||||
[Visual Studio Build Tools]: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019
|
||||
|
||||
At last check (cmake 3.14.3 and msvc 16.0.3) using the 2019 tools fails to
|
||||
build the in-tree LLVM build with a CMake error, so use 2017 instead by
|
||||
including the “MSVC v141 – VS 2017 C++ x64/x86 build tools (v14.16)” component.
|
||||
|
||||
With these dependencies installed, you can build the compiler in a `cmd.exe`
|
||||
shell with:
|
||||
|
@ -17,28 +17,147 @@ to `#[cfg(verbose)]` and `#[cfg(feature = "serde")]` respectively.
|
||||
|
||||
## `-L`: add a directory to the library search path
|
||||
|
||||
When looking for external crates, a directory passed to this flag will be searched.
|
||||
When looking for external crates or libraries, a directory passed to this flag
|
||||
will be searched.
|
||||
|
||||
The kind of search path can optionally be specified with the form `-L
|
||||
KIND=PATH` where `KIND` may be one of:
|
||||
|
||||
- `dependency` — Only search for transitive dependencies in this directory.
|
||||
- `crate` — Only search for this crate's direct dependencies in this
|
||||
directory.
|
||||
- `native` — Only search for native libraries in this directory.
|
||||
- `framework` — Only search for macOS frameworks in this directory.
|
||||
- `all` — Search for all library kinds in this directory. This is the default
|
||||
if `KIND` is not specified.
|
||||
|
||||
## `-l`: link the generated crate to a native library
|
||||
|
||||
This flag allows you to specify linking to a specific native library when building
|
||||
a crate.
|
||||
|
||||
The kind of library can optionally be specified with the form `-l KIND=lib`
|
||||
where `KIND` may be one of:
|
||||
|
||||
- `dylib` — A native dynamic library.
|
||||
- `static` — A native static library (such as a `.a` archive).
|
||||
- `framework` — A macOS framework.
|
||||
|
||||
The kind of library can be specified in a [`#[link]`
|
||||
attribute][link-attribute]. If the kind is not specified in the `link`
|
||||
attribute or on the command-line, it will link a dynamic library if available,
|
||||
otherwise it will use a static library. If the kind is specified on the
|
||||
command-line, it will override the kind specified in a `link` attribute.
|
||||
|
||||
The name used in a `link` attribute may be overridden using the form `-l
|
||||
ATTR_NAME:LINK_NAME` where `ATTR_NAME` is the name in the `link` attribute,
|
||||
and `LINK_NAME` is the name of the actual library that will be linked.
|
||||
|
||||
[link-attribute]: ../reference/items/external-blocks.html#the-link-attribute
|
||||
|
||||
## `--crate-type`: a list of types of crates for the compiler to emit
|
||||
|
||||
This instructs `rustc` on which crate type to build.
|
||||
This instructs `rustc` on which crate type to build. This flag accepts a
|
||||
comma-separated list of values, and may be specified multiple times. The valid
|
||||
crate types are:
|
||||
|
||||
- `lib` — Generates a library kind preferred by the compiler, currently
|
||||
defaults to `rlib`.
|
||||
- `rlib` — A Rust static library.
|
||||
- `staticlib` — A native static library.
|
||||
- `dylib` — A Rust dynamic library.
|
||||
- `cdylib` — A native dynamic library.
|
||||
- `bin` — A runnable executable program.
|
||||
- `proc-macro` — Generates a format suitable for a procedural macro library
|
||||
that may be loaded by the compiler.
|
||||
|
||||
The crate type may be specified with the [`crate_type` attribute][crate_type].
|
||||
The `--crate-type` command-line value will override the `crate_type`
|
||||
attribute.
|
||||
|
||||
More details may be found in the [linkage chapter] of the reference.
|
||||
|
||||
[linkage chapter]: ../reference/linkage.html
|
||||
[crate_type]: ../reference/linkage.html
|
||||
|
||||
## `--crate-name`: specify the name of the crate being built
|
||||
|
||||
This informs `rustc` of the name of your crate.
|
||||
|
||||
## `--emit`: emit output other than a crate
|
||||
## `--edition`: specify the edition to use
|
||||
|
||||
Instead of producing a crate, this flag can print out things like the assembly or LLVM-IR.
|
||||
This flag takes a value of `2015` or `2018`. The default is `2015`. More
|
||||
information about editions may be found in the [edition guide].
|
||||
|
||||
[edition guide]: ../edition-guide/introduction.html
|
||||
|
||||
## `--emit`: specifies the types of output files to generate
|
||||
|
||||
This flag controls the types of output files generated by the compiler. It
|
||||
accepts a comma-separated list of values, and may be specified multiple times.
|
||||
The valid emit kinds are:
|
||||
|
||||
- `asm` — Generates a file with the crate's assembly code. The default output
|
||||
filename is `CRATE_NAME.s`.
|
||||
- `dep-info` — Generates a file with Makefile syntax that indicates all the
|
||||
source files that were loaded to generate the crate. The default output
|
||||
filename is `CRATE_NAME.d`.
|
||||
- `link` — Generates the crates specified by `--crate-type`. The default
|
||||
output filenames depend on the crate type and platform. This is the default
|
||||
if `--emit` is not specified.
|
||||
- `llvm-bc` — Generates a binary file containing the [LLVM bitcode]. The
|
||||
default output filename is `CRATE_NAME.bc`.
|
||||
- `llvm-ir` — Generates a file containing [LLVM IR]. The default output
|
||||
filename is `CRATE_NAME.ll`.
|
||||
- `metadata` — Generates a file containing metadata about the crate. The
|
||||
default output filename is `CRATE_NAME.rmeta`.
|
||||
- `mir` — Generates a file containing rustc's mid-level intermediate
|
||||
representation. The default output filename is `CRATE_NAME.mir`.
|
||||
- `obj` — Generates a native object file. The default output filename is
|
||||
`CRATE_NAME.o`.
|
||||
|
||||
The output filename can be set with the `-o` flag. A suffix may be added to
|
||||
the filename with the `-C extra-filename` flag. The files are written to the
|
||||
current directory unless the `--out-dir` flag is used. Each emission type may
|
||||
also specify the output filename with the form `KIND=PATH`, which takes
|
||||
precedence over the `-o` flag.
|
||||
|
||||
[LLVM bitcode]: https://llvm.org/docs/BitCodeFormat.html
|
||||
[LLVM IR]: https://llvm.org/docs/LangRef.html
|
||||
|
||||
## `--print`: print compiler information
|
||||
|
||||
This flag prints out various information about the compiler.
|
||||
This flag prints out various information about the compiler. This flag may be
|
||||
specified multiple times, and the information is printed in the order the
|
||||
flags are specified. Specifying a `--print` flag will usually disable the
|
||||
`--emit` step and will only print the requested information. The valid types
|
||||
of print values are:
|
||||
|
||||
- `crate-name` — The name of the crate.
|
||||
- `file-names` — The names of the files created by the `link` emit kind.
|
||||
- `sysroot` — Path to the sysroot.
|
||||
- `cfg` — List of cfg values. See [conditional compilation] for more
|
||||
information about cfg values.
|
||||
- `target-list` — List of known targets. The target may be selected with the
|
||||
`--target` flag.
|
||||
- `target-cpus` — List of available CPU values for the current target. The
|
||||
target CPU may be selected with the `-C target-cpu=val` flag.
|
||||
- `target-features` — List of available target features for the current
|
||||
target. Target features may be enabled with the `-C target-feature=val`
|
||||
flag.
|
||||
- `relocation-models` — List of relocation models. Relocation models may be
|
||||
selected with the `-C relocation-model=val` flag.
|
||||
- `code-models` — List of code models. Code models may be selected with the
|
||||
`-C code-model=val` flag.
|
||||
- `tls-models` — List of Thread Local Storage models supported. The model may
|
||||
be selected with the `-Z tls-model=val` flag.
|
||||
- `native-static-libs` — This may be used when creating a `staticlib` crate
|
||||
type. If this is the only flag, it will perform a full compilation and
|
||||
include a diagnostic note that indicates the linker flags to use when
|
||||
linking the resulting static library. The note starts with the text
|
||||
`native-static-libs:` to make it easier to fetch the output.
|
||||
|
||||
[conditional compilation]: ../reference/conditional-compilation.html
|
||||
|
||||
## `-g`: include debug information
|
||||
|
||||
@ -54,7 +173,8 @@ This flag controls the output filename.
|
||||
|
||||
## `--out-dir`: directory to write the output in
|
||||
|
||||
The outputted crate will be written to this directory.
|
||||
The outputted crate will be written to this directory. This flag is ignored if
|
||||
the `-o` flag is used.
|
||||
|
||||
## `--explain`: provide a detailed explanation of an error message
|
||||
|
||||
@ -111,8 +231,9 @@ This flag, when combined with other flags, makes them produce extra output.
|
||||
|
||||
## `--extern`: specify where an external library is located
|
||||
|
||||
This flag allows you to pass the name and location of an external crate that will
|
||||
be linked into the crate you're buildling.
|
||||
This flag allows you to pass the name and location of an external crate that
|
||||
will be linked into the crate you are building. This flag may be specified
|
||||
multiple times. The format of the value should be `CRATENAME=PATH`.
|
||||
|
||||
## `--sysroot`: Override the system root
|
||||
|
||||
@ -121,8 +242,32 @@ distribution; this flag allows that to be overridden.
|
||||
|
||||
## `--error-format`: control how errors are produced
|
||||
|
||||
This flag lets you control the format of errors.
|
||||
This flag lets you control the format of messages. Messages are printed to
|
||||
stderr. The valid options are:
|
||||
|
||||
- `human` — Human-readable output. This is the default.
|
||||
- `json` — Structured JSON output.
|
||||
- `short` — Short, one-line messages.
|
||||
|
||||
## `--color`: configure coloring of output
|
||||
|
||||
This flag lets you control color settings of the output.
|
||||
This flag lets you control color settings of the output. The valid options
|
||||
are:
|
||||
|
||||
- `auto` — Use colors if output goes to a tty. This is the default.
|
||||
- `always` — Always use colors.
|
||||
- `never` — Never colorize output.
|
||||
|
||||
## `--remap-path-prefix`: remap source names in output
|
||||
|
||||
Remap source path prefixes in all output, including compiler diagnostics,
|
||||
debug information, macro expansions, etc. It takes a value of the form
|
||||
`FROM=TO` where a path prefix equal to `FROM` is rewritten to the value `TO`.
|
||||
The `FROM` may itself contain an `=` symbol, but the `TO` value may not. This
|
||||
flag may be specified multiple times.
|
||||
|
||||
This is useful for normalizing build products, for example by removing the
|
||||
current directory out of pathnames emitted into the object files. The
|
||||
replacement is purely textual, with no consideration of the current system's
|
||||
pathname syntax. For example `--remap-path-prefix foo=bar` will match
|
||||
`foo/lib.rs` but not `./foo/lib.rs`.
|
||||
|
@ -2189,6 +2189,14 @@ impl From<&str> for String {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "from_ref_string", since = "1.35.0")]
|
||||
impl From<&String> for String {
|
||||
#[inline]
|
||||
fn from(s: &String) -> String {
|
||||
s.clone()
|
||||
}
|
||||
}
|
||||
|
||||
// note: test pulls in libstd, which causes errors here
|
||||
#[cfg(not(test))]
|
||||
#[stable(feature = "string_from_box", since = "1.18.0")]
|
||||
|
@ -104,7 +104,6 @@ pub const fn identity<T>(x: T) -> T { x }
|
||||
/// If you need to do a costly conversion it is better to implement [`From`] with type
|
||||
/// `&T` or write a custom function.
|
||||
///
|
||||
///
|
||||
/// `AsRef` has the same signature as [`Borrow`], but `Borrow` is different in few aspects:
|
||||
///
|
||||
/// - Unlike `AsRef`, `Borrow` has a blanket impl for any `T`, and can be used to accept either
|
||||
@ -133,7 +132,7 @@ pub const fn identity<T>(x: T) -> T { x }
|
||||
/// converted a the specified type `T`.
|
||||
///
|
||||
/// For example: By creating a generic function that takes an `AsRef<str>` we express that we
|
||||
/// want to accept all references that can be converted to &str as an argument.
|
||||
/// want to accept all references that can be converted to `&str` as an argument.
|
||||
/// Since both [`String`] and `&str` implement `AsRef<str>` we can accept both as input argument.
|
||||
///
|
||||
/// [`String`]: ../../std/string/struct.String.html
|
||||
@ -149,7 +148,6 @@ pub const fn identity<T>(x: T) -> T { x }
|
||||
/// let s = "hello".to_string();
|
||||
/// is_hello(s);
|
||||
/// ```
|
||||
///
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub trait AsRef<T: ?Sized> {
|
||||
/// Performs the conversion.
|
||||
@ -182,6 +180,7 @@ pub trait AsRef<T: ?Sized> {
|
||||
/// write a function `add_one`that takes all arguments that can be converted to `&mut u64`.
|
||||
/// Because [`Box<T>`] implements `AsMut<T>` `add_one` accepts arguments of type
|
||||
/// `&mut Box<u64>` as well:
|
||||
///
|
||||
/// ```
|
||||
/// fn add_one<T: AsMut<u64>>(num: &mut T) {
|
||||
/// *num.as_mut() += 1;
|
||||
@ -191,8 +190,8 @@ pub trait AsRef<T: ?Sized> {
|
||||
/// add_one(&mut boxed_num);
|
||||
/// assert_eq!(*boxed_num, 1);
|
||||
/// ```
|
||||
/// [`Box<T>`]: ../../std/boxed/struct.Box.html
|
||||
///
|
||||
/// [`Box<T>`]: ../../std/boxed/struct.Box.html
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub trait AsMut<T: ?Sized> {
|
||||
/// Performs the conversion.
|
||||
@ -203,9 +202,9 @@ pub trait AsMut<T: ?Sized> {
|
||||
/// A value-to-value conversion that consumes the input value. The
|
||||
/// opposite of [`From`].
|
||||
///
|
||||
/// One should only implement [`Into`] if a conversion to a type outside the current crate is
|
||||
/// required. Otherwise one should always prefer implementing [`From`] over [`Into`] because
|
||||
/// implementing [`From`] automatically provides one with a implementation of [`Into`] thanks to
|
||||
/// One should only implement `Into` if a conversion to a type outside the current crate is
|
||||
/// required. Otherwise one should always prefer implementing [`From`] over `Into` because
|
||||
/// implementing [`From`] automatically provides one with a implementation of `Into` thanks to
|
||||
/// the blanket implementation in the standard library. [`From`] cannot do these type of
|
||||
/// conversions because of Rust's orphaning rules.
|
||||
///
|
||||
@ -213,8 +212,8 @@ pub trait AsMut<T: ?Sized> {
|
||||
///
|
||||
/// # Generic Implementations
|
||||
///
|
||||
/// - [`From<T>`]` for U` implies `Into<U> for T`
|
||||
/// - [`Into`]` is reflexive, which means that `Into<T> for T` is implemented
|
||||
/// - [`From`]`<T> for U` implies `Into<U> for T`
|
||||
/// - `Into` is reflexive, which means that `Into<T> for T` is implemented
|
||||
///
|
||||
/// # Implementing `Into` for conversions to external types
|
||||
///
|
||||
@ -273,7 +272,7 @@ pub trait AsMut<T: ?Sized> {
|
||||
/// [`Option<T>`]: ../../std/option/enum.Option.html
|
||||
/// [`Result<T, E>`]: ../../std/result/enum.Result.html
|
||||
/// [`String`]: ../../std/string/struct.String.html
|
||||
/// [From]: trait.From.html
|
||||
/// [`From`]: trait.From.html
|
||||
/// [`into`]: trait.Into.html#tymethod.into
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub trait Into<T>: Sized {
|
||||
@ -285,18 +284,18 @@ pub trait Into<T>: Sized {
|
||||
/// Used to do value-to-value conversions while consuming the input value. It is the reciprocal of
|
||||
/// [`Into`].
|
||||
///
|
||||
/// One should always prefer implementing [`From`] over [`Into`]
|
||||
/// because implementing [`From`] automatically provides one with a implementation of [`Into`]
|
||||
/// One should always prefer implementing `From` over [`Into`]
|
||||
/// because implementing `From` automatically provides one with a implementation of [`Into`]
|
||||
/// thanks to the blanket implementation in the standard library.
|
||||
///
|
||||
/// Only implement [`Into`] if a conversion to a type outside the current crate is required.
|
||||
/// [`From`] cannot do these type of conversions because of Rust's orphaning rules.
|
||||
/// `From` cannot do these type of conversions because of Rust's orphaning rules.
|
||||
/// See [`Into`] for more details.
|
||||
///
|
||||
/// Prefer using [`Into`] over using [`From`] when specifying trait bounds on a generic function.
|
||||
/// Prefer using [`Into`] over using `From` when specifying trait bounds on a generic function.
|
||||
/// This way, types that directly implement [`Into`] can be used as arguments as well.
|
||||
///
|
||||
/// The [`From`] is also very useful when performing error handling. When constructing a function
|
||||
/// The `From` is also very useful when performing error handling. When constructing a function
|
||||
/// that is capable of failing, the return type will generally be of the form `Result<T, E>`.
|
||||
/// The `From` trait simplifies error handling by allowing a function to return a single error type
|
||||
/// that encapsulate multiple error types. See the "Examples" section and [the book][book] for more
|
||||
@ -306,14 +305,15 @@ pub trait Into<T>: Sized {
|
||||
///
|
||||
/// # Generic Implementations
|
||||
///
|
||||
/// - [`From<T>`]` for U` implies [`Into<U>`]` for T`
|
||||
/// - [`From`] is reflexive, which means that `From<T> for T` is implemented
|
||||
/// - `From<T> for U` implies [`Into`]`<U> for T`
|
||||
/// - `From` is reflexive, which means that `From<T> for T` is implemented
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// [`String`] implements `From<&str>`:
|
||||
///
|
||||
/// An explicit conversion from a &str to a String is done as follows:
|
||||
/// An explicit conversion from a `&str` to a String is done as follows:
|
||||
///
|
||||
/// ```
|
||||
/// let string = "hello".to_string();
|
||||
/// let other_string = String::from("hello");
|
||||
@ -361,7 +361,7 @@ pub trait Into<T>: Sized {
|
||||
/// [`Option<T>`]: ../../std/option/enum.Option.html
|
||||
/// [`Result<T, E>`]: ../../std/result/enum.Result.html
|
||||
/// [`String`]: ../../std/string/struct.String.html
|
||||
/// [`Into<U>`]: trait.Into.html
|
||||
/// [`Into`]: trait.Into.html
|
||||
/// [`from`]: trait.From.html#tymethod.from
|
||||
/// [book]: ../../book/ch09-00-error-handling.html
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@ -422,7 +422,7 @@ pub trait TryInto<T>: Sized {
|
||||
///
|
||||
/// # Generic Implementations
|
||||
///
|
||||
/// - `TryFrom<T> for U` implies [`TryInto<U>`]` for T`
|
||||
/// - `TryFrom<T> for U` implies [`TryInto`]`<U> for T`
|
||||
/// - [`try_from`] is reflexive, which means that `TryFrom<T> for T`
|
||||
/// is implemented and cannot fail -- the associated `Error` type for
|
||||
/// calling `T::try_from()` on a value of type `T` is `Infallible`.
|
||||
|
@ -1744,8 +1744,7 @@ pub fn rustc_short_optgroups() -> Vec<RustcOptGroup> {
|
||||
opt::multi_s(
|
||||
"",
|
||||
"print",
|
||||
"Comma separated list of compiler information to \
|
||||
print on stdout",
|
||||
"Compiler information to print on stdout",
|
||||
"[crate-name|file-names|sysroot|cfg|target-list|\
|
||||
target-cpus|target-features|relocation-models|\
|
||||
code-models|tls-models|target-spec-json|native-static-libs]",
|
||||
|
@ -2635,6 +2635,7 @@ impl<'a> Parser<'a> {
|
||||
self.expect(&token::OpenDelim(token::Paren))?;
|
||||
let expr = self.parse_expr()?;
|
||||
self.expect(&token::CloseDelim(token::Paren))?;
|
||||
hi = self.prev_span;
|
||||
ex = ExprKind::Await(ast::AwaitOrigin::MacroLike, expr);
|
||||
} else if self.token.is_path_start() {
|
||||
let path = self.parse_path(PathStyle::Expr)?;
|
||||
|
@ -30,7 +30,6 @@ symbols! {
|
||||
|
||||
// Keywords that are used in stable Rust.
|
||||
As: "as",
|
||||
Box: "box",
|
||||
Break: "break",
|
||||
Const: "const",
|
||||
Continue: "continue",
|
||||
@ -69,6 +68,7 @@ symbols! {
|
||||
// Keywords that are used in unstable Rust or reserved for future use.
|
||||
Abstract: "abstract",
|
||||
Become: "become",
|
||||
Box: "box",
|
||||
Do: "do",
|
||||
Final: "final",
|
||||
Macro: "macro",
|
||||
|
@ -2,7 +2,7 @@ error[E0658]: `await!(<expr>)` macro syntax is unstable, and will soon be remove
|
||||
--> $DIR/await-macro.rs:9:5
|
||||
|
|
||||
LL | await!(bar());
|
||||
| ^^^^^
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: for more information, see https://github.com/rust-lang/rust/issues/50547
|
||||
= help: add #![feature(await_macro)] to the crate attributes to enable
|
||||
|
Loading…
x
Reference in New Issue
Block a user