Auto merge of #106111 - matthiaskrgr:rollup-nnpoe5h, r=matthiaskrgr

Rollup of 6 pull requests

Successful merges:

 - #105465 (Improve top-level docs)
 - #105872 (Suggest remove last method call when type coerce with expected  type)
 - #106032 (std: only use LFS function on glibc)
 - #106078 (Provide more context on FileCheck failures)
 - #106100 (Codegen test for derived `<` on trivial newtype [TEST ONLY])
 - #106109 (rustdoc: make line number CSS for doc comment and scraped the same)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2022-12-24 10:46:43 +00:00
commit 8766bbdc30
21 changed files with 281 additions and 120 deletions

View file

@ -8,9 +8,9 @@ members](https://rust-lang.zulipchat.com/#narrow/stream/122652-new-members)
Zulip stream. We have lots of docs below of how to get started on your own, but Zulip stream. We have lots of docs below of how to get started on your own, but
the Zulip stream is the best place to *ask* for help. the Zulip stream is the best place to *ask* for help.
Documentation for contributing to Rust is located in the [Guide to Rustc Development](https://rustc-dev-guide.rust-lang.org/), Documentation for contributing to the compiler or tooling is located in the [Guide to Rustc
commonly known as the [rustc-dev-guide]. Despite the name, this guide documents Development][rustc-dev-guide], commonly known as the [rustc-dev-guide]. Documentation for the
not just how to develop rustc (the Rust compiler), but also how to contribute to the standard library and rustdoc. standard library in the [Standard library developers Guide][std-dev-guide], commonly known as the [std-dev-guide].
## About the [rustc-dev-guide] ## About the [rustc-dev-guide]
@ -35,6 +35,7 @@ refer to [this section][contributing-bug-reports] and [open an issue][issue temp
[Contributing to Rust]: https://rustc-dev-guide.rust-lang.org/contributing.html#contributing-to-rust [Contributing to Rust]: https://rustc-dev-guide.rust-lang.org/contributing.html#contributing-to-rust
[rustc-dev-guide]: https://rustc-dev-guide.rust-lang.org/ [rustc-dev-guide]: https://rustc-dev-guide.rust-lang.org/
[std-dev-guide]: https://std-dev-guide.rust-lang.org/
[contributing-bug-reports]: https://rustc-dev-guide.rust-lang.org/contributing.html#bug-reports [contributing-bug-reports]: https://rustc-dev-guide.rust-lang.org/contributing.html#bug-reports
[issue template]: https://github.com/rust-lang/rust/issues/new/choose [issue template]: https://github.com/rust-lang/rust/issues/new/choose
[internals]: https://internals.rust-lang.org [internals]: https://internals.rust-lang.org

109
README.md
View file

@ -6,11 +6,7 @@ standard library, and documentation.
[Rust]: https://www.rust-lang.org [Rust]: https://www.rust-lang.org
**Note: this README is for _users_ rather than _contributors_. **Note: this README is for _users_ rather than _contributors_.
If you wish to _contribute_ to the compiler, you should read the If you wish to _contribute_ to the compiler, you should read [CONTRIBUTING.md](CONTRIBUTING.md) instead.
[Getting Started][gettingstarted] section of the rustc-dev-guide instead.
You can ask for help in the [#new members Zulip stream][new-members].**
[new-members]: https://rust-lang.zulipchat.com/#narrow/stream/122652-new-members
## Quick Start ## Quick Start
@ -48,20 +44,37 @@ by running it with the `--help` flag or reading the [rustc dev guide][rustcguide
[gettingstarted]: https://rustc-dev-guide.rust-lang.org/getting-started.html [gettingstarted]: https://rustc-dev-guide.rust-lang.org/getting-started.html
[rustcguidebuild]: https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html [rustcguidebuild]: https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html
### Building on a Unix-like system ### Dependencies
1. Make sure you have installed the dependencies:
Make sure you have installed the dependencies:
* `g++` 5.1 or later or `clang++` 3.5 or later
* `python` 3 or 2.7 * `python` 3 or 2.7
* GNU `make` 3.81 or later
* `cmake` 3.13.4 or later
* `ninja`
* `curl`
* `git` * `git`
* `ssl` which comes in `libssl-dev` or `openssl-devel` * A C compiler (when building for the host, `cc` is enough; cross-compiling may need additional compilers)
* `curl` (not needed on Windows)
* `pkg-config` if you are compiling on Linux and targeting Linux * `pkg-config` if you are compiling on Linux and targeting Linux
* `libiconv` (already included with glibc on Debian-based distros)
2. Clone the [source] with `git`: To build cargo, you'll also need OpenSSL (`libssl-dev` or `openssl-devel` on most Unix distros).
If building LLVM from source, you'll need additional tools:
* `g++`, `clang++`, or MSVC with versions listed on
[LLVM's documentation](https://llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library)
* `ninja`, or GNU `make` 3.81 or later (ninja is recommended, especially on Windows)
* `cmake` 3.13.4 or later
* `libstdc++-static` may be required on some Linux distributions such as Fedora and Ubuntu
On tier 1 or tier 2 with host tools platforms, you can also choose to download LLVM by setting `llvm.download-ci-llvm = true`.
Otherwise, you'll need LLVM installed and `llvm-config` in your path.
See [the rustc-dev-guide for more info][sysllvm].
[sysllvm]: https://rustc-dev-guide.rust-lang.org/building/new-target.html#using-pre-built-llvm
### Building on a Unix-like system
1. Clone the [source] with `git`:
```sh ```sh
git clone https://github.com/rust-lang/rust.git git clone https://github.com/rust-lang/rust.git
@ -70,22 +83,21 @@ by running it with the `--help` flag or reading the [rustc dev guide][rustcguide
[source]: https://github.com/rust-lang/rust [source]: https://github.com/rust-lang/rust
3. Configure the build settings: 2. Configure the build settings:
The Rust build system uses a file named `config.toml` in the root of the The Rust build system uses a file named `config.toml` in the root of the
source tree to determine various configuration settings for the build. source tree to determine various configuration settings for the build.
Copy the default `config.toml.example` to `config.toml` to get started. Set up the defaults intended for distros to get started. You can see a full list of options
in `config.toml.example`.
```sh ```sh
cp config.toml.example config.toml printf 'profile = "user" \nchangelog-seen = 2 \n' > config.toml
``` ```
If you plan to use `x.py install` to create an installation, it is recommended If you plan to use `x.py install` to create an installation, it is recommended
that you set the `prefix` value in the `[install]` section to a directory. that you set the `prefix` value in the `[install]` section to a directory.
Create an install directory if you are not installing in the default directory. 3. Build and install:
4. Build and install:
```sh ```sh
./x.py build && ./x.py install ./x.py build && ./x.py install
@ -93,15 +105,27 @@ by running it with the `--help` flag or reading the [rustc dev guide][rustcguide
When complete, `./x.py install` will place several programs into When complete, `./x.py install` will place several programs into
`$PREFIX/bin`: `rustc`, the Rust compiler, and `rustdoc`, the `$PREFIX/bin`: `rustc`, the Rust compiler, and `rustdoc`, the
API-documentation tool. This install does not include [Cargo], API-documentation tool. If you've set `profile = "user"` or `build.extended = true`, it will
Rust's package manager. To build and install Cargo, you may also include [Cargo], Rust's package manager.
run `./x.py install cargo` or set the `build.extended` key in
`config.toml` to `true` to build and install all tools.
[Cargo]: https://github.com/rust-lang/cargo [Cargo]: https://github.com/rust-lang/cargo
### Building on Windows ### Building on Windows
On Windows, we suggest using [winget] to install dependencies by running the following in a terminal:
```powershell
winget install -e Python.Python.3
winget install -e Kitware.CMake
winget install -e Git.Git
```
Then edit your system's `PATH` variable and add: `C:\Program Files\CMake\bin`. See
[this guide on editing the system `PATH`](https://www.java.com/en/download/help/path.html) from the
Java documentation.
[winget]: https://github.com/microsoft/winget-cli
There are two prominent ABIs in use on Windows: the native (MSVC) ABI used by There are two prominent ABIs in use on Windows: the native (MSVC) ABI used by
Visual Studio and the GNU ABI used by the GCC toolchain. Which version of Rust Visual Studio and the GNU ABI used by the GCC toolchain. Which version of Rust
you need depends largely on what C/C++ libraries you want to interoperate with. you need depends largely on what C/C++ libraries you want to interoperate with.
@ -190,7 +214,7 @@ Windows build triples are:
- `x86_64-pc-windows-msvc` - `x86_64-pc-windows-msvc`
The build triple can be specified by either specifying `--build=<triple>` when The build triple can be specified by either specifying `--build=<triple>` when
invoking `x.py` commands, or by copying the `config.toml` file (as described invoking `x.py` commands, or by creating a `config.toml` file (as described
in [Installing From Source](#installing-from-source)), and modifying the in [Installing From Source](#installing-from-source)), and modifying the
`build` option under the `[build]` section. `build` option under the `[build]` section.
@ -204,9 +228,7 @@ configure script and makefile (the latter of which just invokes `x.py`).
make && sudo make install make && sudo make install
``` ```
When using the configure script, the generated `config.mk` file may override the `configure` generates a `config.toml` which can also be used with normal `x.py` invocations.
`config.toml` file. To go back to the `config.toml` file, delete the generated
`config.mk` file.
## Building Documentation ## Building Documentation
@ -227,41 +249,20 @@ precompiled "snapshot" version of itself (made in an earlier stage of
development). As such, source builds require an Internet connection to development). As such, source builds require an Internet connection to
fetch snapshots, and an OS that can execute the available snapshot binaries. fetch snapshots, and an OS that can execute the available snapshot binaries.
Snapshot binaries are currently built and tested on several platforms: See https://doc.rust-lang.org/nightly/rustc/platform-support.html for a list of supported platforms.
Only "host tools" platforms have a pre-compiled snapshot binary available; to compile for a platform
| Platform / Architecture | x86 | x86_64 | without host tools you must cross-compile.
|---------------------------------------------|-----|--------|
| Windows (7, 8, 10, ...) | ✓ | ✓ |
| Linux (kernel 3.2, glibc 2.17 or later) | ✓ | ✓ |
| macOS (10.7 Lion or later) | (\*) | ✓ |
(\*): Apple dropped support for running 32-bit binaries starting from macOS 10.15 and iOS 11.
Due to this decision from Apple, the targets are no longer useful to our users.
Please read [our blog post][macx32] for more info.
[macx32]: https://blog.rust-lang.org/2020/01/03/reducing-support-for-32-bit-apple-targets.html
You may find that other platforms work, but these are our officially You may find that other platforms work, but these are our officially
supported build environments that are most likely to work. supported build environments that are most likely to work.
## Getting Help ## Getting Help
The Rust community congregates in a few places: See https://www.rust-lang.org/community for a list of chat platforms and forums.
* [Stack Overflow] - Direct questions about using the language.
* [users.rust-lang.org] - General discussion and broader questions.
* [/r/rust] - News and general discussion.
[Stack Overflow]: https://stackoverflow.com/questions/tagged/rust
[/r/rust]: https://reddit.com/r/rust
[users.rust-lang.org]: https://users.rust-lang.org/
## Contributing ## Contributing
If you are interested in contributing to the Rust project, please take a look See [CONTRIBUTING.md](CONTRIBUTING.md).
at the [Getting Started][gettingstarted] guide in the [rustc-dev-guide].
[rustc-dev-guide]: https://rustc-dev-guide.rust-lang.org
## License ## License

View file

@ -38,6 +38,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
// Use `||` to give these suggestions a precedence // Use `||` to give these suggestions a precedence
let _ = self.suggest_missing_parentheses(err, expr) let _ = self.suggest_missing_parentheses(err, expr)
|| self.suggest_remove_last_method_call(err, expr, expected)
|| self.suggest_associated_const(err, expr, expected) || self.suggest_associated_const(err, expr, expected)
|| self.suggest_deref_ref_or_into(err, expr, expected, expr_ty, expected_ty_expr) || self.suggest_deref_ref_or_into(err, expr, expected, expr_ty, expected_ty_expr)
|| self.suggest_option_to_bool(err, expr, expr_ty, expected) || self.suggest_option_to_bool(err, expr, expr_ty, expected)

View file

@ -329,6 +329,31 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
} }
} }
pub fn suggest_remove_last_method_call(
&self,
err: &mut Diagnostic,
expr: &hir::Expr<'tcx>,
expected: Ty<'tcx>,
) -> bool {
if let hir::ExprKind::MethodCall(hir::PathSegment { ident: method, .. }, recv_expr, &[], _) = expr.kind &&
let Some(recv_ty) = self.typeck_results.borrow().expr_ty_opt(recv_expr) &&
self.can_coerce(recv_ty, expected) {
let span = if let Some(recv_span) = recv_expr.span.find_ancestor_inside(expr.span) {
expr.span.with_lo(recv_span.hi())
} else {
expr.span.with_lo(method.span.lo() - rustc_span::BytePos(1))
};
err.span_suggestion_verbose(
span,
"try removing the method call",
"",
Applicability::MachineApplicable,
);
return true;
}
false
}
pub fn suggest_deref_ref_or_into( pub fn suggest_deref_ref_or_into(
&self, &self,
err: &mut Diagnostic, err: &mut Diagnostic,

View file

@ -1754,11 +1754,11 @@ mod remove_dir_impl {
use crate::sys::{cvt, cvt_r}; use crate::sys::{cvt, cvt_r};
#[cfg(not(any( #[cfg(not(any(
target_os = "linux", all(target_os = "linux", target_env = "gnu"),
all(target_os = "macos", not(target_arch = "aarch64")) all(target_os = "macos", not(target_arch = "aarch64"))
)))] )))]
use libc::{fdopendir, openat, unlinkat}; use libc::{fdopendir, openat, unlinkat};
#[cfg(target_os = "linux")] #[cfg(all(target_os = "linux", target_env = "gnu"))]
use libc::{fdopendir, openat64 as openat, unlinkat}; use libc::{fdopendir, openat64 as openat, unlinkat};
#[cfg(all(target_os = "macos", not(target_arch = "aarch64")))] #[cfg(all(target_os = "macos", not(target_arch = "aarch64")))]
use macos_weak::{fdopendir, openat, unlinkat}; use macos_weak::{fdopendir, openat, unlinkat};

View file

@ -61,9 +61,9 @@ use crate::ptr;
use crate::sync::atomic::{AtomicBool, AtomicU8, Ordering}; use crate::sync::atomic::{AtomicBool, AtomicU8, Ordering};
use crate::sys::cvt; use crate::sys::cvt;
use crate::sys::weak::syscall; use crate::sys::weak::syscall;
#[cfg(not(target_os = "linux"))] #[cfg(not(all(target_os = "linux", target_env = "gnu")))]
use libc::sendfile as sendfile64; use libc::sendfile as sendfile64;
#[cfg(target_os = "linux")] #[cfg(all(target_os = "linux", target_env = "gnu"))]
use libc::sendfile64; use libc::sendfile64;
use libc::{EBADF, EINVAL, ENOSYS, EOPNOTSUPP, EOVERFLOW, EPERM, EXDEV}; use libc::{EBADF, EINVAL, ENOSYS, EOPNOTSUPP, EOVERFLOW, EPERM, EXDEV};

View file

@ -95,9 +95,9 @@ pub unsafe fn init(argc: isize, argv: *const *const u8, sigpipe: u8) {
)))] )))]
'poll: { 'poll: {
use crate::sys::os::errno; use crate::sys::os::errno;
#[cfg(not(target_os = "linux"))] #[cfg(not(all(target_os = "linux", target_env = "gnu")))]
use libc::open as open64; use libc::open as open64;
#[cfg(target_os = "linux")] #[cfg(all(target_os = "linux", target_env = "gnu"))]
use libc::open64; use libc::open64;
let pfds: &mut [_] = &mut [ let pfds: &mut [_] = &mut [
libc::pollfd { fd: 0, events: 0, revents: 0 }, libc::pollfd { fd: 0, events: 0, revents: 0 },
@ -143,9 +143,9 @@ pub unsafe fn init(argc: isize, argv: *const *const u8, sigpipe: u8) {
)))] )))]
{ {
use crate::sys::os::errno; use crate::sys::os::errno;
#[cfg(not(target_os = "linux"))] #[cfg(not(all(target_os = "linux", target_env = "gnu")))]
use libc::open as open64; use libc::open as open64;
#[cfg(target_os = "linux")] #[cfg(all(target_os = "linux", target_env = "gnu"))]
use libc::open64; use libc::open64;
for fd in 0..3 { for fd in 0..3 {
if libc::fcntl(fd, libc::F_GETFD) == -1 && errno() == libc::EBADF { if libc::fcntl(fd, libc::F_GETFD) == -1 && errno() == libc::EBADF {

View file

@ -45,9 +45,9 @@ mod imp {
use crate::thread; use crate::thread;
use libc::MAP_FAILED; use libc::MAP_FAILED;
#[cfg(not(target_os = "linux"))] #[cfg(not(all(target_os = "linux", target_env = "gnu")))]
use libc::{mmap as mmap64, munmap}; use libc::{mmap as mmap64, munmap};
#[cfg(target_os = "linux")] #[cfg(all(target_os = "linux", target_env = "gnu"))]
use libc::{mmap64, munmap}; use libc::{mmap64, munmap};
use libc::{sigaction, sighandler_t, SA_ONSTACK, SA_SIGINFO, SIGBUS, SIG_DFL}; use libc::{sigaction, sighandler_t, SA_ONSTACK, SA_SIGINFO, SIGBUS, SIG_DFL};
use libc::{sigaltstack, SIGSTKSZ, SS_DISABLE}; use libc::{sigaltstack, SIGSTKSZ, SS_DISABLE};

View file

@ -653,9 +653,9 @@ pub mod guard {
))] ))]
#[cfg_attr(test, allow(dead_code))] #[cfg_attr(test, allow(dead_code))]
pub mod guard { pub mod guard {
#[cfg(not(target_os = "linux"))] #[cfg(not(all(target_os = "linux", target_env = "gnu")))]
use libc::{mmap as mmap64, mprotect}; use libc::{mmap as mmap64, mprotect};
#[cfg(target_os = "linux")] #[cfg(all(target_os = "linux", target_env = "gnu"))]
use libc::{mmap64, mprotect}; use libc::{mmap64, mprotect};
use libc::{MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_PRIVATE, PROT_NONE, PROT_READ, PROT_WRITE}; use libc::{MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_PRIVATE, PROT_NONE, PROT_READ, PROT_WRITE};

View file

@ -80,18 +80,12 @@ The script accepts commands, flags, and arguments to determine what to do:
## Configuring rustbuild ## Configuring rustbuild
There are currently two methods for configuring the rustbuild build system. rustbuild offers a TOML-based configuration system with a `config.toml`
First, rustbuild offers a TOML-based configuration system with a `config.toml`
file. An example of this configuration can be found at `config.toml.example`, file. An example of this configuration can be found at `config.toml.example`,
and the configuration file can also be passed as `--config path/to/config.toml` and the configuration file can also be passed as `--config path/to/config.toml`
if the build system is being invoked manually (via the python script). if the build system is being invoked manually (via the python script).
Next, the `./configure` options serialized in `config.mk` will be You can generate a config.toml using `./configure` options if you want to automate creating the file without having to edit it.
parsed and read. That is, if any `./configure` options are passed, they'll be
handled naturally. `./configure` should almost never be used for local
installations, and is primarily useful for CI. Prefer to customize behavior
using `config.toml`.
Finally, rustbuild makes use of the [cc-rs crate] which has [its own Finally, rustbuild makes use of the [cc-rs crate] which has [its own
method][env-vars] of configuring C compilers and C flags via environment method][env-vars] of configuring C compilers and C flags via environment

View file

@ -49,10 +49,7 @@ pub enum DryRun {
/// Global configuration for the entire build and/or bootstrap. /// Global configuration for the entire build and/or bootstrap.
/// ///
/// This structure is derived from a combination of both `config.toml` and /// This structure is parsed from `config.toml`, and some of the fields are inferred from `git` or build-time parameters.
/// `config.mk`. As of the time of this writing it's unlikely that `config.toml`
/// is used all that much, so this is primarily filled out by `config.mk` which
/// is generated from `./configure`.
/// ///
/// Note that this structure is not decoded directly into, but rather it is /// Note that this structure is not decoded directly into, but rather it is
/// filled out from the decoded forms of the structs below. For documentation /// filled out from the decoded forms of the structs below. For documentation

View file

@ -347,6 +347,9 @@ pre {
.source .content pre { .source .content pre {
padding: 20px; padding: 20px;
} }
.rustdoc.source .example-wrap > pre.src-line-numbers {
padding: 20px 0 20px 4px;
}
img { img {
max-width: 100%; max-width: 100%;
@ -519,10 +522,6 @@ ul.block, .block li {
display: none; display: none;
} }
.source .content pre.rust {
padding-left: 0;
}
.rustdoc .example-wrap { .rustdoc .example-wrap {
display: flex; display: flex;
position: relative; position: relative;
@ -550,23 +549,21 @@ ul.block, .block li {
-moz-user-select: none; -moz-user-select: none;
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
padding: 14px 8px;
color: var(--src-line-numbers-span-color);
} }
.example-line-numbers { .rustdoc .example-wrap > pre.src-line-numbers {
border: 1px solid; padding: 14px 0;
padding: 13px 8px;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
border-color: var(--example-line-numbers-border-color);
} }
.src-line-numbers a, .src-line-numbers span { .src-line-numbers a, .src-line-numbers span {
color: var(--src-line-numbers-span-color); color: var(--src-line-numbers-span-color);
padding: 0 8px;
} }
.src-line-numbers :target { .src-line-numbers :target {
background-color: transparent; background-color: transparent;
border-right: none; border-right: none;
padding-right: 0; padding: 0 8px;
} }
.src-line-numbers .line-highlighted { .src-line-numbers .line-highlighted {
background-color: var(--src-line-number-highlighted-background-color); background-color: var(--src-line-number-highlighted-background-color);
@ -1958,15 +1955,6 @@ in storage.js
bottom: 0; bottom: 0;
} }
.scraped-example .code-wrapper .src-line-numbers {
padding: 14px 0;
}
.scraped-example .code-wrapper .src-line-numbers a,
.scraped-example .code-wrapper .src-line-numbers span {
padding: 0 14px;
}
.scraped-example .code-wrapper .example-wrap { .scraped-example .code-wrapper .example-wrap {
width: 100%; width: 100%;
overflow-y: hidden; overflow-y: hidden;

View file

@ -62,7 +62,6 @@ Original by Dempfi (https://github.com/dempfi/ayu)
--code-highlight-question-mark-color: #ff9011; --code-highlight-question-mark-color: #ff9011;
--code-highlight-comment-color: #788797; --code-highlight-comment-color: #788797;
--code-highlight-doc-comment-color: #a1ac88; --code-highlight-doc-comment-color: #a1ac88;
--example-line-numbers-border-color: none;
--src-line-numbers-span-color: #5c6773; --src-line-numbers-span-color: #5c6773;
--src-line-number-highlighted-background-color: rgba(255, 236, 164, 0.06); --src-line-number-highlighted-background-color: rgba(255, 236, 164, 0.06);
--test-arrow-color: #788797; --test-arrow-color: #788797;
@ -132,7 +131,7 @@ pre, .rustdoc.source .example-wrap {
.src-line-numbers .line-highlighted { .src-line-numbers .line-highlighted {
color: #708090; color: #708090;
padding-right: 4px; padding-right: 7px;
border-right: 1px solid #ffb44c; border-right: 1px solid #ffb44c;
} }

View file

@ -57,7 +57,6 @@
--code-highlight-question-mark-color: #ff9011; --code-highlight-question-mark-color: #ff9011;
--code-highlight-comment-color: #8d8d8b; --code-highlight-comment-color: #8d8d8b;
--code-highlight-doc-comment-color: #8ca375; --code-highlight-doc-comment-color: #8ca375;
--example-line-numbers-border-color: #4a4949;
--src-line-numbers-span-color: #3b91e2; --src-line-numbers-span-color: #3b91e2;
--src-line-number-highlighted-background-color: #0a042f; --src-line-number-highlighted-background-color: #0a042f;
--test-arrow-color: #dedede; --test-arrow-color: #dedede;

View file

@ -57,7 +57,6 @@
--code-highlight-question-mark-color: #ff9011; --code-highlight-question-mark-color: #ff9011;
--code-highlight-comment-color: #8e908c; --code-highlight-comment-color: #8e908c;
--code-highlight-doc-comment-color: #4d4d4c; --code-highlight-doc-comment-color: #4d4d4c;
--example-line-numbers-border-color: #c7c7c7;
--src-line-numbers-span-color: #c67e2d; --src-line-numbers-span-color: #c67e2d;
--src-line-number-highlighted-background-color: #fdffd3; --src-line-number-highlighted-background-color: #fdffd3;
--test-arrow-color: #f5f5f5; --test-arrow-color: #f5f5f5;

View file

@ -0,0 +1,49 @@
// The `derive(PartialOrd)` for a newtype doesn't override `lt`/`le`/`gt`/`ge`.
// This double-checks that the `Option<Ordering>` intermediate values used
// in the operators for such a type all optimize away.
// compile-flags: -C opt-level=1
// min-llvm-version: 15.0
#![crate_type = "lib"]
use std::cmp::Ordering;
#[derive(PartialOrd, PartialEq)]
pub struct Foo(u16);
// CHECK-LABEL: @check_lt
// CHECK-SAME: (i16 %[[A:.+]], i16 %[[B:.+]])
#[no_mangle]
pub fn check_lt(a: Foo, b: Foo) -> bool {
// CHECK: %[[R:.+]] = icmp ult i16 %[[A]], %[[B]]
// CHECK-NEXT: ret i1 %[[R]]
a < b
}
// CHECK-LABEL: @check_le
// CHECK-SAME: (i16 %[[A:.+]], i16 %[[B:.+]])
#[no_mangle]
pub fn check_le(a: Foo, b: Foo) -> bool {
// CHECK: %[[R:.+]] = icmp ule i16 %[[A]], %[[B]]
// CHECK-NEXT: ret i1 %[[R]]
a <= b
}
// CHECK-LABEL: @check_gt
// CHECK-SAME: (i16 %[[A:.+]], i16 %[[B:.+]])
#[no_mangle]
pub fn check_gt(a: Foo, b: Foo) -> bool {
// CHECK: %[[R:.+]] = icmp ugt i16 %[[A]], %[[B]]
// CHECK-NEXT: ret i1 %[[R]]
a > b
}
// CHECK-LABEL: @check_ge
// CHECK-SAME: (i16 %[[A:.+]], i16 %[[B:.+]])
#[no_mangle]
pub fn check_ge(a: Foo, b: Foo) -> bool {
// CHECK: %[[R:.+]] = icmp uge i16 %[[A]], %[[B]]
// CHECK-NEXT: ret i1 %[[R]]
a >= b
}

View file

@ -1,23 +1,53 @@
// Checks that the setting "line numbers" is working as expected. // Checks that the setting "line numbers" is working as expected.
goto: "file://" + |DOC_PATH| + "/test_docs/fn.foo.html" goto: "file://" + |DOC_PATH| + "/test_docs/fn.foo.html"
// Otherwise, we can't check text color
show-text: true
// We check that without this setting, there is no line number displayed. // We check that without this setting, there is no line number displayed.
assert-false: "pre.example-line-numbers" assert-false: "pre.example-line-numbers"
// We now set the setting to show the line numbers on code examples.
local-storage: {"rustdoc-line-numbers": "true" }
// We reload to make the line numbers appear.
reload:
// We wait for them to be added into the DOM by the JS...
wait-for: "pre.example-line-numbers"
// If the test didn't fail, it means that it was found!
// Let's now check some CSS properties... // Let's now check some CSS properties...
assert-css: ("pre.example-line-numbers", { define-function: (
"margin": "0px", "check-colors",
"padding": "13px 8px", (theme, color),
"text-align": "right", [
// We now set the setting to show the line numbers on code examples.
("local-storage", {
"rustdoc-theme": |theme|,
"rustdoc-use-system-theme": "false",
"rustdoc-line-numbers": "true"
}),
// We reload to make the line numbers appear and change theme.
("reload"),
// We wait for them to be added into the DOM by the JS...
("wait-for", "pre.example-line-numbers"),
// If the test didn't fail, it means that it was found!
("assert-css", (
"pre.example-line-numbers",
{
"color": |color|,
"margin": "0px",
"padding": "14px 8px",
"text-align": "right",
},
ALL,
)),
],
)
call-function: ("check-colors", {
"theme": "ayu",
"color": "rgb(92, 103, 115)",
}) })
call-function: ("check-colors", {
"theme": "dark",
"color": "rgb(59, 145, 226)",
})
call-function: ("check-colors", {
"theme": "light",
"color": "rgb(198, 126, 45)",
})
// The first code block has two lines so let's check its `<pre>` elements lists both of them. // The first code block has two lines so let's check its `<pre>` elements lists both of them.
assert-text: ("pre.example-line-numbers", "1\n2") assert-text: ("pre.example-line-numbers", "1\n2")

View file

@ -89,9 +89,9 @@ assert-css: (".src-line-numbers", {"text-align": "right"})
// do anything (and certainly not add a `#NaN` to the URL!). // do anything (and certainly not add a `#NaN` to the URL!).
goto: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html" goto: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html"
// We use this assert-position to know where we will click. // We use this assert-position to know where we will click.
assert-position: ("//*[@id='1']", {"x": 104, "y": 112}) assert-position: ("//*[@id='1']", {"x": 88, "y": 112})
// We click on the left of the "1" anchor but still in the "src-line-number" `<pre>`. // We click on the left of the "1" anchor but still in the "src-line-number" `<pre>`.
click: (103, 103) click: (87, 103)
assert-document-property: ({"URL": "/lib.rs.html"}, ENDS_WITH) assert-document-property: ({"URL": "/lib.rs.html"}, ENDS_WITH)
// Checking the source code sidebar. // Checking the source code sidebar.

View file

@ -0,0 +1,22 @@
fn test1() {
let _v: i32 = (1 as i32).to_string(); //~ ERROR mismatched types
// won't suggestion
let _v: i32 = (1 as i128).to_string(); //~ ERROR mismatched types
let _v: &str = "foo".to_string(); //~ ERROR mismatched types
}
fn test2() {
let mut path: String = "/usr".to_string();
let folder: String = "lib".to_string();
path = format!("{}/{}", path, folder).as_str(); //~ ERROR mismatched types
println!("{}", &path);
}
fn main() {
test1();
test2();
}

View file

@ -0,0 +1,54 @@
error[E0308]: mismatched types
--> $DIR/issue-105494.rs:2:19
|
LL | let _v: i32 = (1 as i32).to_string();
| --- ^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found struct `String`
| |
| expected due to this
|
help: try removing the method call
|
LL - let _v: i32 = (1 as i32).to_string();
LL + let _v: i32 = (1 as i32);
|
error[E0308]: mismatched types
--> $DIR/issue-105494.rs:5:19
|
LL | let _v: i32 = (1 as i128).to_string();
| --- ^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found struct `String`
| |
| expected due to this
error[E0308]: mismatched types
--> $DIR/issue-105494.rs:7:20
|
LL | let _v: &str = "foo".to_string();
| ---- ^^^^^^^^^^^^^^^^^ expected `&str`, found struct `String`
| |
| expected due to this
|
help: try removing the method call
|
LL - let _v: &str = "foo".to_string();
LL + let _v: &str = "foo";
|
error[E0308]: mismatched types
--> $DIR/issue-105494.rs:14:12
|
LL | let mut path: String = "/usr".to_string();
| ------ expected due to this type
...
LL | path = format!("{}/{}", path, folder).as_str();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `String`, found `&str`
|
help: try removing the method call
|
LL - path = format!("{}/{}", path, folder).as_str();
LL + path = format!("{}/{}", path, folder);
|
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0308`.

View file

@ -2303,6 +2303,8 @@ impl<'test> TestCx<'test> {
} else { } else {
filecheck.args(&["--check-prefixes", &prefixes]); filecheck.args(&["--check-prefixes", &prefixes]);
} }
// Provide more context on failures.
filecheck.args(&["--dump-input-context", "100"]);
self.compose_and_run(filecheck, "", None, None) self.compose_and_run(filecheck, "", None, None)
} }