Merge from rustc
This commit is contained in:
commit
7bd29f8efc
517 changed files with 3394 additions and 5415 deletions
|
|
@ -55,14 +55,14 @@ check-aux:
|
|||
$(BOOTSTRAP_ARGS)
|
||||
# Run standard library tests in Miri.
|
||||
$(Q)$(BOOTSTRAP) miri --stage 2 \
|
||||
library/core \
|
||||
library/coretests \
|
||||
library/alloc \
|
||||
$(BOOTSTRAP_ARGS) \
|
||||
--no-doc
|
||||
# Some doctests use file system operations to demonstrate dealing with `Result`.
|
||||
$(Q)MIRIFLAGS="-Zmiri-disable-isolation" \
|
||||
$(BOOTSTRAP) miri --stage 2 \
|
||||
library/core \
|
||||
library/coretests \
|
||||
library/alloc \
|
||||
$(BOOTSTRAP_ARGS) \
|
||||
--doc
|
||||
|
|
|
|||
|
|
@ -16,11 +16,7 @@ use bootstrap::{
|
|||
};
|
||||
use build_helper::ci::CiEnv;
|
||||
#[cfg(feature = "tracing")]
|
||||
use tracing::*;
|
||||
#[cfg(feature = "tracing")]
|
||||
use tracing_subscriber::EnvFilter;
|
||||
#[cfg(feature = "tracing")]
|
||||
use tracing_subscriber::prelude::*;
|
||||
use tracing::{debug, instrument};
|
||||
|
||||
#[cfg_attr(feature = "tracing", instrument(level = "trace", name = "main"))]
|
||||
fn main() {
|
||||
|
|
@ -33,7 +29,11 @@ fn main() {
|
|||
return;
|
||||
}
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
debug!("parsing flags");
|
||||
let flags = Flags::parse(&args);
|
||||
#[cfg(feature = "tracing")]
|
||||
debug!("parsing config based on flags");
|
||||
let config = Config::parse(flags);
|
||||
|
||||
let mut build_lock;
|
||||
|
|
@ -95,6 +95,8 @@ fn main() {
|
|||
let dump_bootstrap_shims = config.dump_bootstrap_shims;
|
||||
let out_dir = config.out.clone();
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
debug!("creating new build based on config");
|
||||
Build::new(config).build();
|
||||
|
||||
if suggest_setup {
|
||||
|
|
@ -211,16 +213,14 @@ fn check_version(config: &Config) -> Option<String> {
|
|||
// "tracing", instrument(..))]`.
|
||||
#[cfg(feature = "tracing")]
|
||||
fn setup_tracing() {
|
||||
let filter = EnvFilter::from_env("BOOTSTRAP_TRACING");
|
||||
let layer = tracing_tree::HierarchicalLayer::default()
|
||||
.with_writer(std::io::stderr)
|
||||
.with_ansi(true)
|
||||
.with_targets(true)
|
||||
.with_bracketed_fields(true)
|
||||
.with_indent_amount(2)
|
||||
.with_indent_lines(true);
|
||||
let subscriber = tracing_subscriber::registry().with(filter).with(layer);
|
||||
use tracing_subscriber::EnvFilter;
|
||||
use tracing_subscriber::layer::SubscriberExt;
|
||||
|
||||
tracing::subscriber::set_global_default(subscriber).unwrap();
|
||||
trace!("tracing subscriber setup");
|
||||
let filter = EnvFilter::from_env("BOOTSTRAP_TRACING");
|
||||
// cf. <https://docs.rs/tracing-tree/latest/tracing_tree/struct.HierarchicalLayer.html>.
|
||||
let layer = tracing_tree::HierarchicalLayer::default().with_targets(true).with_indent_amount(2);
|
||||
|
||||
let registry = tracing_subscriber::registry().with(filter).with(layer);
|
||||
|
||||
tracing::subscriber::set_global_default(registry).unwrap();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ impl Step for Std {
|
|||
const DEFAULT: bool = true;
|
||||
|
||||
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||
run.crate_or_deps("sysroot").path("library")
|
||||
run.crate_or_deps("sysroot").crate_or_deps("coretests").path("library")
|
||||
}
|
||||
|
||||
fn make_run(run: RunConfig<'_>) {
|
||||
|
|
|
|||
|
|
@ -2658,7 +2658,7 @@ impl Step for Crate {
|
|||
const DEFAULT: bool = true;
|
||||
|
||||
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||
run.crate_or_deps("sysroot")
|
||||
run.crate_or_deps("sysroot").crate_or_deps("coretests")
|
||||
}
|
||||
|
||||
fn make_run(run: RunConfig<'_>) {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ use build_helper::exit;
|
|||
use build_helper::git::{GitConfig, get_closest_merge_commit, output_result};
|
||||
use serde::{Deserialize, Deserializer};
|
||||
use serde_derive::Deserialize;
|
||||
#[cfg(feature = "tracing")]
|
||||
use tracing::{instrument, span};
|
||||
|
||||
use crate::core::build_steps::compile::CODEGEN_BACKEND_PREFIX;
|
||||
use crate::core::build_steps::llvm;
|
||||
|
|
@ -1227,7 +1229,14 @@ define_config! {
|
|||
}
|
||||
|
||||
impl Config {
|
||||
#[cfg_attr(
|
||||
feature = "tracing",
|
||||
instrument(target = "CONFIG_HANDLING", level = "trace", name = "Config::default_opts")
|
||||
)]
|
||||
pub fn default_opts() -> Config {
|
||||
#[cfg(feature = "tracing")]
|
||||
span!(target: "CONFIG_HANDLING", tracing::Level::TRACE, "constructing default config");
|
||||
|
||||
Config {
|
||||
bypass_bootstrap_lock: false,
|
||||
llvm_optimize: true,
|
||||
|
|
@ -1311,10 +1320,23 @@ impl Config {
|
|||
})
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
feature = "tracing",
|
||||
instrument(target = "CONFIG_HANDLING", level = "trace", name = "Config::parse", skip_all)
|
||||
)]
|
||||
pub fn parse(flags: Flags) -> Config {
|
||||
Self::parse_inner(flags, Self::get_toml)
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
feature = "tracing",
|
||||
instrument(
|
||||
target = "CONFIG_HANDLING",
|
||||
level = "trace",
|
||||
name = "Config::parse_inner",
|
||||
skip_all
|
||||
)
|
||||
)]
|
||||
pub(crate) fn parse_inner(
|
||||
mut flags: Flags,
|
||||
get_toml: impl Fn(&Path) -> Result<TomlConfig, toml::de::Error>,
|
||||
|
|
@ -1323,6 +1345,17 @@ impl Config {
|
|||
|
||||
// Set flags.
|
||||
config.paths = std::mem::take(&mut flags.paths);
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
span!(
|
||||
target: "CONFIG_HANDLING",
|
||||
tracing::Level::TRACE,
|
||||
"collecting paths and path exclusions",
|
||||
"flags.paths" = ?flags.paths,
|
||||
"flags.skip" = ?flags.skip,
|
||||
"flags.exclude" = ?flags.exclude
|
||||
);
|
||||
|
||||
config.skip = flags
|
||||
.skip
|
||||
.into_iter()
|
||||
|
|
@ -1339,6 +1372,14 @@ impl Config {
|
|||
})
|
||||
.collect();
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
span!(
|
||||
target: "CONFIG_HANDLING",
|
||||
tracing::Level::TRACE,
|
||||
"normalizing and combining `flag.skip`/`flag.exclude` paths",
|
||||
"config.skip" = ?config.skip,
|
||||
);
|
||||
|
||||
config.include_default_paths = flags.include_default_paths;
|
||||
config.rustc_error_format = flags.rustc_error_format;
|
||||
config.json_output = flags.json_output;
|
||||
|
|
@ -1418,7 +1459,11 @@ impl Config {
|
|||
|
||||
config.stage0_metadata = build_helper::stage0_parser::parse_stage0_file();
|
||||
|
||||
// Read from `--config`, then `RUST_BOOTSTRAP_CONFIG`, then `./config.toml`, then `config.toml` in the root directory.
|
||||
// Find configuration file, with the following cascading fallback (first match wins):
|
||||
// - `--config <path>`
|
||||
// - `RUST_BOOTSTRAP_CONFIG`
|
||||
// - `./config.toml`
|
||||
// - `config.toml` in the root directory.
|
||||
let toml_path = flags
|
||||
.config
|
||||
.clone()
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
use std::path::{Path, PathBuf};
|
||||
|
||||
use clap::{CommandFactory, Parser, ValueEnum};
|
||||
#[cfg(feature = "tracing")]
|
||||
use tracing::instrument;
|
||||
|
||||
use crate::core::build_steps::setup::Profile;
|
||||
use crate::core::builder::{Builder, Kind};
|
||||
|
|
@ -211,6 +213,10 @@ impl Flags {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
feature = "tracing",
|
||||
instrument(level = "trace", name = "Flags::parse", skip_all, fields(args = ?args))
|
||||
)]
|
||||
pub fn parse(args: &[String]) -> Self {
|
||||
Flags::parse_from(normalize_args(args))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,10 @@ pub struct Finder {
|
|||
// Targets can be removed from this list once they are present in the stage0 compiler (usually by updating the beta compiler of the bootstrap).
|
||||
const STAGE0_MISSING_TARGETS: &[&str] = &[
|
||||
// just a dummy comment so the list doesn't get onelined
|
||||
"aarch64-unknown-nto-qnx710_iosock",
|
||||
"x86_64-pc-nto-qnx710_iosock",
|
||||
"x86_64-pc-nto-qnx800",
|
||||
"aarch64-unknown-nto-qnx800",
|
||||
];
|
||||
|
||||
/// Minimum version threshold for libstdc++ required when using prebuilt LLVM
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ use std::{env, fs, io, str};
|
|||
use build_helper::ci::gha;
|
||||
use build_helper::exit;
|
||||
use termcolor::{ColorChoice, StandardStream, WriteColor};
|
||||
#[cfg(feature = "tracing")]
|
||||
use tracing::{debug, instrument, span, trace};
|
||||
use utils::build_stamp::BuildStamp;
|
||||
use utils::channel::GitInfo;
|
||||
|
||||
|
|
@ -537,14 +539,25 @@ impl Build {
|
|||
}
|
||||
|
||||
/// Executes the entire build, as configured by the flags and configuration.
|
||||
#[cfg_attr(feature = "tracing", instrument(level = "debug", name = "Build::build", skip_all))]
|
||||
pub fn build(&mut self) {
|
||||
#[cfg(feature = "tracing")]
|
||||
trace!("setting up job management");
|
||||
unsafe {
|
||||
crate::utils::job::setup(self);
|
||||
}
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
trace!("downloading rustfmt early");
|
||||
|
||||
// Download rustfmt early so that it can be used in rust-analyzer configs.
|
||||
let _ = &builder::Builder::new(self).initial_rustfmt();
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
let hardcoded_span =
|
||||
span!(tracing::Level::DEBUG, "handling hardcoded subcommands (Format, Suggest, Perf)")
|
||||
.entered();
|
||||
|
||||
// hardcoded subcommands
|
||||
match &self.config.cmd {
|
||||
Subcommand::Format { check, all } => {
|
||||
|
|
@ -561,25 +574,50 @@ impl Build {
|
|||
Subcommand::Perf { .. } => {
|
||||
return core::build_steps::perf::perf(&builder::Builder::new(self));
|
||||
}
|
||||
_ => (),
|
||||
_cmd => {
|
||||
#[cfg(feature = "tracing")]
|
||||
debug!(cmd = ?_cmd, "not a hardcoded subcommand; returning to normal handling");
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
drop(hardcoded_span);
|
||||
#[cfg(feature = "tracing")]
|
||||
debug!("handling subcommand normally");
|
||||
|
||||
if !self.config.dry_run() {
|
||||
#[cfg(feature = "tracing")]
|
||||
let _real_run_span = span!(tracing::Level::DEBUG, "executing real run").entered();
|
||||
|
||||
{
|
||||
#[cfg(feature = "tracing")]
|
||||
let _sanity_check_span =
|
||||
span!(tracing::Level::DEBUG, "(1) executing dry-run sanity-check").entered();
|
||||
|
||||
// We first do a dry-run. This is a sanity-check to ensure that
|
||||
// steps don't do anything expensive in the dry-run.
|
||||
self.config.dry_run = DryRun::SelfCheck;
|
||||
let builder = builder::Builder::new(self);
|
||||
builder.execute_cli();
|
||||
}
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
let _actual_run_span =
|
||||
span!(tracing::Level::DEBUG, "(2) executing actual run").entered();
|
||||
self.config.dry_run = DryRun::Disabled;
|
||||
let builder = builder::Builder::new(self);
|
||||
builder.execute_cli();
|
||||
} else {
|
||||
#[cfg(feature = "tracing")]
|
||||
let _dry_run_span = span!(tracing::Level::DEBUG, "executing dry run").entered();
|
||||
|
||||
let builder = builder::Builder::new(self);
|
||||
builder.execute_cli();
|
||||
}
|
||||
|
||||
#[cfg(feature = "tracing")]
|
||||
debug!("checking for postponed test failures from `test --no-fail-fast`");
|
||||
|
||||
// Check for postponed failures from `test --no-fail-fast`.
|
||||
let failures = self.delayed_failures.borrow();
|
||||
if failures.len() > 0 {
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ def run_workflow_locally(job_data: Dict[str, Any], job_name: str, pr_jobs: bool)
|
|||
env = os.environ.copy()
|
||||
env.update(custom_env)
|
||||
|
||||
subprocess.run(args, env=env)
|
||||
subprocess.run(args, env=env, check=True)
|
||||
|
||||
|
||||
def calculate_job_matrix(job_data: Dict[str, Any]):
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 8a0eee28f769387e543882352b12d956aa1b7c38
|
||||
Subproject commit 82a4a49789bc96db1a1b2a210b4c5ed7c9ef0c0d
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# Debugging bootstrap
|
||||
|
||||
> FIXME: this page could be expanded
|
||||
> FIXME: this section should be expanded
|
||||
|
||||
## `tracing` in bootstrap
|
||||
|
||||
|
|
@ -10,21 +10,69 @@ Bootstrap has conditional [`tracing`][tracing] setup to provide structured loggi
|
|||
|
||||
### Enabling `tracing` output
|
||||
|
||||
Bootstrap will conditionally enable `tracing` output if the `BOOTSTRAP_TRACING` env var is set.
|
||||
Bootstrap will conditionally build `tracing` support and enable `tracing` output if the `BOOTSTRAP_TRACING` env var is set.
|
||||
|
||||
Example usage:
|
||||
#### Basic usage
|
||||
|
||||
Example basic usage[^just-trace]:
|
||||
|
||||
[^just-trace]: It is not recommend to use *just* `BOOTSTRAP_TRACING=TRACE` because that will dump *everything* at `TRACE` level, including logs intentionally gated behind custom targets as they are too verbose even for `TRACE` level by default.
|
||||
|
||||
```bash
|
||||
$ BOOTSTRAP_TRACING=TRACE ./x build library --stage 1
|
||||
$ BOOTSTRAP_TRACING=bootstrap=TRACE ./x build library --stage 1
|
||||
```
|
||||
|
||||
Example output[^experimental]:
|
||||
Example output[^unstable]:
|
||||
|
||||

|
||||
```
|
||||
$ BOOTSTRAP_TRACING=bootstrap=TRACE ./x check src/bootstrap/
|
||||
Building bootstrap
|
||||
Compiling bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap)
|
||||
Finished `dev` profile [unoptimized] target(s) in 2.74s
|
||||
DEBUG bootstrap parsing flags
|
||||
bootstrap::core::config::flags::Flags::parse args=["check", "src/bootstrap/"]
|
||||
DEBUG bootstrap parsing config based on flags
|
||||
DEBUG bootstrap creating new build based on config
|
||||
bootstrap::Build::build
|
||||
TRACE bootstrap setting up job management
|
||||
TRACE bootstrap downloading rustfmt early
|
||||
bootstrap::handling hardcoded subcommands (Format, Suggest, Perf)
|
||||
DEBUG bootstrap not a hardcoded subcommand; returning to normal handling, cmd=Check { all_targets: false }
|
||||
DEBUG bootstrap handling subcommand normally
|
||||
bootstrap::executing real run
|
||||
bootstrap::(1) executing dry-run sanity-check
|
||||
bootstrap::(2) executing actual run
|
||||
Checking stage0 library artifacts (x86_64-unknown-linux-gnu)
|
||||
Finished `release` profile [optimized + debuginfo] target(s) in 0.04s
|
||||
Checking stage0 compiler artifacts {rustc-main, rustc_abi, rustc_arena, rustc_ast, rustc_ast_ir, rustc_ast_lowering, rustc_ast_passes, rustc_ast_pretty, rustc_attr_data_structures, rustc_attr_parsing, rustc_baked_icu_data, rustc_borrowck, rustc_builtin_macros, rustc_codegen_llvm, rustc_codegen_ssa, rustc_const_eval, rustc_data_structures, rustc_driver, rustc_driver_impl, rustc_error_codes, rustc_error_messages, rustc_errors, rustc_expand, rustc_feature, rustc_fluent_macro, rustc_fs_util, rustc_graphviz, rustc_hir, rustc_hir_analysis, rustc_hir_pretty, rustc_hir_typeck, rustc_incremental, rustc_index, rustc_index_macros, rustc_infer, rustc_interface, rustc_lexer, rustc_lint, rustc_lint_defs, rustc_llvm, rustc_log, rustc_macros, rustc_metadata, rustc_middle, rustc_mir_build, rustc_mir_dataflow, rustc_mir_transform, rustc_monomorphize, rustc_next_trait_solver, rustc_parse, rustc_parse_format, rustc_passes, rustc_pattern_analysis, rustc_privacy, rustc_query_impl, rustc_query_system, rustc_resolve, rustc_sanitizers, rustc_serialize, rustc_session, rustc_smir, rustc_span, rustc_symbol_mangling, rustc_target, rustc_trait_selection, rustc_traits, rustc_transmute, rustc_ty_utils, rustc_type_ir, rustc_type_ir_macros, stable_mir} (x86_64-unknown-linux-gnu)
|
||||
Finished `release` profile [optimized + debuginfo] target(s) in 0.23s
|
||||
Checking stage0 bootstrap artifacts (x86_64-unknown-linux-gnu)
|
||||
Checking bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap)
|
||||
Finished `release` profile [optimized + debuginfo] target(s) in 0.64s
|
||||
DEBUG bootstrap checking for postponed test failures from `test --no-fail-fast`
|
||||
Build completed successfully in 0:00:08
|
||||
```
|
||||
|
||||
[^experimental]: This shows what's *possible* with the infra in an experimental implementation.
|
||||
#### Controlling log output
|
||||
|
||||
The env var `BOOTSTRAP_TRACING` accepts a [`tracing` env-filter][tracing-env-filter]. The `TRACE` filter will enable *all* `trace` level or less verbose level tracing output.
|
||||
The env var `BOOTSTRAP_TRACING` accepts a [`tracing` env-filter][tracing-env-filter].
|
||||
|
||||
There are two orthogonal ways to control which kind of logs you want:
|
||||
|
||||
1. You can specify the log **level**, e.g. `DEBUG` or `TRACE`.
|
||||
2. You can also control the log **target**, e.g. `bootstrap` or `bootstrap::core::config` vs custom targets like `CONFIG_HANDLING`.
|
||||
- Custom targets are used to limit what is output when `BOOTSTRAP_TRACING=bootstrap=TRACE` is used, as they can be too verbose even for `TRACE` level by default. Currently used custom targets:
|
||||
- `CONFIG_HANDLING`
|
||||
|
||||
The `TRACE` filter will enable *all* `trace` level or less verbose level tracing output.
|
||||
|
||||
You can of course combine them (custom target logs are typically gated behind `TRACE` log level additionally):
|
||||
|
||||
```bash
|
||||
$ BOOTSTRAP_TRACING=CONFIG_HANDLING=TRACE ./x build library --stage 1
|
||||
```
|
||||
|
||||
[^unstable]: This output is always subject to further changes.
|
||||
|
||||
[tracing-env-filter]: https://docs.rs/tracing-subscriber/0.3.19/tracing_subscriber/filter/struct.EnvFilter.html
|
||||
|
||||
|
|
@ -73,28 +121,6 @@ For `#[instrument]`, it's recommended to:
|
|||
- Explicitly pick an instrumentation name via `name = ".."` to distinguish between e.g. `run` of different steps.
|
||||
- Take care to not cause diverging behavior via tracing, e.g. building extra things only when tracing infra is enabled.
|
||||
|
||||
### Enabling `tracing` bootstrap feature in rust-analyzer
|
||||
### rust-analyzer integration?
|
||||
|
||||
You can adjust your `settings.json`'s `rust-analyzer.check.overrideCommand` and `rust-analyzer.cargo.buildScripts.overrideCommand` if you want to also enable `logging` cargo feature by default in your editor. This is mostly useful if you want proper r-a completions and such when working on bootstrap itself.
|
||||
|
||||
```json
|
||||
"rust-analyzer.check.overrideCommand": [
|
||||
"BOOTSTRAP_TRACING=1", // <- BOOTSTRAP_TRACING=1 won't enable tracing filter, but it will activate bootstrap's `tracing` feature
|
||||
"python3",
|
||||
"x.py",
|
||||
"check",
|
||||
"--json-output",
|
||||
"--build-dir=build-rust-analyzer"
|
||||
],
|
||||
```
|
||||
|
||||
```json
|
||||
"rust-analyzer.cargo.buildScripts.overrideCommand": [
|
||||
"BOOTSTRAP_TRACING=1", // <- note this
|
||||
"python3",
|
||||
"x.py",
|
||||
"check",
|
||||
"--json-output",
|
||||
"--build-dir=build-rust-analyzer"
|
||||
],
|
||||
```
|
||||
Unfortunately, because bootstrap is a `rust-analyzer.linkedProjects`, you can't ask r-a to check/build bootstrap itself with `tracing` feature enabled to get relevant completions, due to lack of support as described in <https://github.com/rust-lang/rust-analyzer/issues/8521>.
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 137 KiB |
|
|
@ -259,8 +259,10 @@ target | std | host | notes
|
|||
`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
|
||||
[`aarch64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | ARM64 NetBSD
|
||||
[`aarch64-unknown-nto-qnx700`](platform-support/nto-qnx.md) | ? | | ARM64 QNX Neutrino 7.0 RTOS |
|
||||
[`aarch64-unknown-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | ARM64 QNX Neutrino 7.1 RTOS |
|
||||
[`aarch64-unknown-nuttx`](platform-support/nuttx.md) | * | | ARM64 with NuttX
|
||||
[`aarch64-unknown-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | ARM64 QNX Neutrino 7.1 RTOS with default network stack (io-pkt) |
|
||||
[`aarch64-unknown-nto-qnx710_iosock`](platform-support/nto-qnx.md) | ✓ | | ARM64 QNX Neutrino 7.1 RTOS with new network stack (io-sock) |
|
||||
[`aarch64-unknown-nto-qnx800`](platform-support/nto-qnx.md) | ✓ | | ARM64 QNX Neutrino 8.0 RTOS |
|
||||
[`aarch64-unknown-nuttx`](platform-support/nuttx.md) | ✓ | | ARM64 with NuttX
|
||||
[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
|
||||
[`aarch64-unknown-redox`](platform-support/redox.md) | ✓ | | ARM64 Redox OS
|
||||
[`aarch64-unknown-teeos`](platform-support/aarch64-unknown-teeos.md) | ? | | ARM64 TEEOS |
|
||||
|
|
@ -296,8 +298,8 @@ target | std | host | notes
|
|||
[`armv7k-apple-watchos`](platform-support/apple-watchos.md) | ✓ | | Armv7-A Apple WatchOS
|
||||
[`armv7s-apple-ios`](platform-support/apple-ios.md) | ✓ | | Armv7-A Apple-A6 Apple iOS
|
||||
[`armv8r-none-eabihf`](platform-support/armv8r-none-eabihf.md) | * | | Bare Armv8-R, hardfloat
|
||||
[`armv7a-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv7-A with NuttX
|
||||
[`armv7a-nuttx-eabihf`](platform-support/nuttx.md) | * | | ARMv7-A with NuttX, hardfloat
|
||||
[`armv7a-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv7-A with NuttX
|
||||
[`armv7a-nuttx-eabihf`](platform-support/nuttx.md) | ✓ | | ARMv7-A with NuttX, hardfloat
|
||||
`avr-unknown-gnu-atmega328` | * | | AVR. Requires `-Z build-std=core`
|
||||
`bpfeb-unknown-none` | * | | BPF (big endian)
|
||||
`bpfel-unknown-none` | * | | BPF (little endian)
|
||||
|
|
@ -367,21 +369,21 @@ target | std | host | notes
|
|||
[`riscv32im-risc0-zkvm-elf`](platform-support/riscv32im-risc0-zkvm-elf.md) | ? | | RISC Zero's zero-knowledge Virtual Machine (RV32IM ISA)
|
||||
[`riscv32ima-unknown-none-elf`](platform-support/riscv32-unknown-none-elf.md) | * | | Bare RISC-V (RV32IMA ISA)
|
||||
[`riscv32imac-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
||||
[`riscv32imac-unknown-nuttx-elf`](platform-support/nuttx.md) | * | | RISC-V 32bit with NuttX
|
||||
[`riscv32imac-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 32bit with NuttX
|
||||
[`riscv32imac-unknown-xous-elf`](platform-support/riscv32imac-unknown-xous-elf.md) | ? | | RISC-V Xous (RV32IMAC ISA)
|
||||
[`riscv32imafc-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
||||
[`riscv32imafc-unknown-nuttx-elf`](platform-support/nuttx.md) | * | | RISC-V 32bit with NuttX
|
||||
[`riscv32imafc-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 32bit with NuttX
|
||||
[`riscv32imc-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
||||
[`riscv32imc-unknown-nuttx-elf`](platform-support/nuttx.md) | * | | RISC-V 32bit with NuttX
|
||||
[`riscv32imc-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 32bit with NuttX
|
||||
[`riscv64-linux-android`](platform-support/android.md) | ? | | RISC-V 64-bit Android
|
||||
[`riscv64-wrs-vxworks`](platform-support/vxworks.md) | ✓ | |
|
||||
`riscv64gc-unknown-freebsd` | ? | | RISC-V FreeBSD
|
||||
`riscv64gc-unknown-fuchsia` | ? | | RISC-V Fuchsia
|
||||
[`riscv64gc-unknown-hermit`](platform-support/hermit.md) | ✓ | | RISC-V Hermit
|
||||
[`riscv64gc-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | RISC-V NetBSD
|
||||
[`riscv64gc-unknown-nuttx-elf`](platform-support/nuttx.md) | * | | RISC-V 64bit with NuttX
|
||||
[`riscv64gc-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 64bit with NuttX
|
||||
[`riscv64gc-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/riscv64
|
||||
[`riscv64imac-unknown-nuttx-elf`](platform-support/nuttx.md) | * | | RISC-V 64bit with NuttX
|
||||
[`riscv64imac-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 64bit with NuttX
|
||||
[`s390x-unknown-linux-musl`](platform-support/s390x-unknown-linux-musl.md) | ✓ | | S390x Linux (kernel 3.2, musl 1.2.3)
|
||||
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
||||
[`sparc-unknown-none-elf`](./platform-support/sparc-unknown-none-elf.md) | * | | Bare 32-bit SPARC V7+
|
||||
|
|
@ -389,22 +391,24 @@ target | std | host | notes
|
|||
[`sparc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/sparc64
|
||||
[`thumbv4t-none-eabi`](platform-support/armv4t-none-eabi.md) | * | | Thumb-mode Bare Armv4T
|
||||
[`thumbv5te-none-eabi`](platform-support/armv5te-none-eabi.md) | * | | Thumb-mode Bare Armv5TE
|
||||
[`thumbv6m-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv6M with NuttX
|
||||
[`thumbv6m-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv6M with NuttX
|
||||
`thumbv7a-pc-windows-msvc` | | |
|
||||
[`thumbv7a-uwp-windows-msvc`](platform-support/uwp-windows-msvc.md) | | |
|
||||
[`thumbv7a-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv7-A with NuttX
|
||||
[`thumbv7a-nuttx-eabihf`](platform-support/nuttx.md) | * | | ARMv7-A with NuttX, hardfloat
|
||||
[`thumbv7em-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv7EM with NuttX
|
||||
[`thumbv7em-nuttx-eabihf`](platform-support/nuttx.md) | * | | ARMv7EM with NuttX, hardfloat
|
||||
[`thumbv7m-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv7M with NuttX
|
||||
[`thumbv7a-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv7-A with NuttX
|
||||
[`thumbv7a-nuttx-eabihf`](platform-support/nuttx.md) | ✓ | | ARMv7-A with NuttX, hardfloat
|
||||
[`thumbv7em-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv7EM with NuttX
|
||||
[`thumbv7em-nuttx-eabihf`](platform-support/nuttx.md) | ✓ | | ARMv7EM with NuttX, hardfloat
|
||||
[`thumbv7m-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv7M with NuttX
|
||||
`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode Armv7-A Linux with NEON, musl 1.2.3
|
||||
[`thumbv8m.base-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv8M Baseline with NuttX
|
||||
[`thumbv8m.main-nuttx-eabi`](platform-support/nuttx.md) | * | | ARMv8M Mainline with NuttX
|
||||
[`thumbv8m.main-nuttx-eabihf`](platform-support/nuttx.md) | * | | ARMv8M Mainline with NuttX, hardfloat
|
||||
[`thumbv8m.base-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv8M Baseline with NuttX
|
||||
[`thumbv8m.main-nuttx-eabi`](platform-support/nuttx.md) | ✓ | | ARMv8M Mainline with NuttX
|
||||
[`thumbv8m.main-nuttx-eabihf`](platform-support/nuttx.md) | ✓ | | ARMv8M Mainline with NuttX, hardfloat
|
||||
[`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? | | WebAssembly
|
||||
[`x86_64-apple-tvos`](platform-support/apple-tvos.md) | ✓ | | x86 64-bit tvOS
|
||||
[`x86_64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | x86 64-bit Apple WatchOS simulator
|
||||
[`x86_64-pc-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 7.1 RTOS |
|
||||
[`x86_64-pc-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 7.1 RTOS with default network stack (io-pkt) |
|
||||
[`x86_64-pc-nto-qnx710_iosock`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 7.1 RTOS with new network stack (io-sock) |
|
||||
[`x86_64-pc-nto-qnx800`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 8.0 RTOS |
|
||||
[`x86_64-unikraft-linux-musl`](platform-support/unikraft-linux-musl.md) | ✓ | | 64-bit Unikraft with musl 1.2.3
|
||||
`x86_64-unknown-dragonfly` | ✓ | ✓ | 64-bit DragonFlyBSD
|
||||
`x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
|
||||
|
|
|
|||
|
|
@ -2,11 +2,13 @@
|
|||
|
||||
**Tier: 3**
|
||||
|
||||
[QNX®][BlackBerry] Neutrino (nto) Real-time operating system.
|
||||
The support has been implemented jointly by [Elektrobit Automotive GmbH][Elektrobit]
|
||||
and [Blackberry QNX][BlackBerry].
|
||||
The [QNX®][qnx.com] Neutrino (nto) Real-time operating system. Known as QNX OS
|
||||
from version 8 onwards.
|
||||
|
||||
[BlackBerry]: https://blackberry.qnx.com
|
||||
This support has been implemented jointly by [Elektrobit Automotive GmbH][Elektrobit]
|
||||
and [QNX][qnx.com].
|
||||
|
||||
[qnx.com]: https://blackberry.qnx.com
|
||||
[Elektrobit]: https://www.elektrobit.com
|
||||
|
||||
## Target maintainers
|
||||
|
|
@ -18,21 +20,29 @@ and [Blackberry QNX][BlackBerry].
|
|||
|
||||
## Requirements
|
||||
|
||||
Currently, the following QNX Neutrino versions and compilation targets are supported:
|
||||
Currently, the following QNX versions and compilation targets are supported:
|
||||
|
||||
| QNX Neutrino Version | Target Architecture | Full support | `no_std` support |
|
||||
|----------------------|---------------------|:------------:|:----------------:|
|
||||
| 7.1 | AArch64 | ✓ | ✓ |
|
||||
| 7.1 | x86_64 | ✓ | ✓ |
|
||||
| 7.0 | AArch64 | ? | ✓ |
|
||||
| 7.0 | x86 | | ✓ |
|
||||
| Target Tuple | QNX Version | Target Architecture | Full support | `no_std` support |
|
||||
| ----------------------------------- | ----------------------------- | ------------------- | :----------: | :--------------: |
|
||||
| `aarch64-unknown-nto-qnx800` | QNX OS 8.0 | AArch64 | ? | ✓ |
|
||||
| `x86_64-pc-nto-qnx800` | QNX OS 8.0 | x86_64 | ? | ✓ |
|
||||
| `aarch64-unknown-nto-qnx710` | QNX Neutrino 7.1 with io-pkt | AArch64 | ✓ | ✓ |
|
||||
| `x86_64-pc-nto-qnx710` | QNX Neutrino 7.1 with io-pkt | x86_64 | ✓ | ✓ |
|
||||
| `aarch64-unknown-nto-qnx710_iosock` | QNX Neutrino 7.1 with io-sock | AArch64 | ? | ✓ |
|
||||
| `x86_64-pc-nto-qnx710_iosock` | QNX Neutrino 7.1 with io-sock | x86_64 | ? | ✓ |
|
||||
| `aarch64-unknown-nto-qnx700` | QNX Neutrino 7.0 | AArch64 | ? | ✓ |
|
||||
| `i586-pc-nto-qnx700` | QNX Neutrino 7.0 | x86 | | ✓ |
|
||||
|
||||
Adding other architectures that are supported by QNX Neutrino is possible.
|
||||
On QNX Neutrino 7.0 and 7.1, `io-pkt` is used as network stack by default.
|
||||
QNX Neutrino 7.1 includes the optional network stack `io-sock`.
|
||||
QNX OS 8.0 always uses `io-sock`. QNX OS 8.0 support is currently work in progress.
|
||||
|
||||
In the table above, 'full support' indicates support for building Rust applications with the full standard library.
|
||||
'`no_std` support' indicates that only `core` and `alloc` are available.
|
||||
Adding other architectures that are supported by QNX is possible.
|
||||
|
||||
For building or using the Rust toolchain for QNX Neutrino, the
|
||||
In the table above, 'full support' indicates support for building Rust applications with the full standard library. A '?' means that support is in-progress.
|
||||
'`no_std` support' is for building `#![no_std]` applications where only `core` and `alloc` are available.
|
||||
|
||||
For building or using the Rust toolchain for QNX, the
|
||||
[QNX Software Development Platform (SDP)](https://blackberry.qnx.com/en/products/foundation-software/qnx-software-development-platform)
|
||||
must be installed and initialized.
|
||||
Initialization is usually done by sourcing `qnxsdp-env.sh` (this will be installed as part of the SDP, see also installation instruction provided with the SDP).
|
||||
|
|
@ -98,52 +108,73 @@ fn panic(_panic: &PanicInfo<'_>) -> ! {
|
|||
pub extern "C" fn rust_eh_personality() {}
|
||||
```
|
||||
|
||||
The QNX Neutrino support of Rust has been tested with QNX Neutrino 7.0 and 7.1.
|
||||
The QNX support in Rust has been tested with QNX Neutrino 7.0 and 7.1. Support for QNX OS 8.0 is a work in progress.
|
||||
|
||||
There are no further known requirements.
|
||||
|
||||
## Conditional compilation
|
||||
|
||||
For conditional compilation, following QNX Neutrino specific attributes are defined:
|
||||
For conditional compilation, following QNX specific attributes are defined:
|
||||
|
||||
- `target_os` = `"nto"`
|
||||
- `target_env` = `"nto71"` (for QNX Neutrino 7.1)
|
||||
- `target_env` = `"nto71"` (for QNX Neutrino 7.1 with "classic" network stack "io_pkt")
|
||||
- `target_env` = `"nto71_iosock"` (for QNX Neutrino 7.1 with network stack "io_sock")
|
||||
- `target_env` = `"nto70"` (for QNX Neutrino 7.0)
|
||||
- `target_env` = `"nto80"` (for QNX OS 8.0)
|
||||
|
||||
## Building the target
|
||||
|
||||
1. Create a `config.toml`
|
||||
|
||||
Example content:
|
||||
Example content:
|
||||
|
||||
```toml
|
||||
profile = "compiler"
|
||||
change-id = 115898
|
||||
```
|
||||
```toml
|
||||
profile = "compiler"
|
||||
change-id = 999999
|
||||
```
|
||||
|
||||
2. Compile the Rust toolchain for an `x86_64-unknown-linux-gnu` host (for both `aarch64` and `x86_64` targets)
|
||||
2. Compile the Rust toolchain for an `x86_64-unknown-linux-gnu` host
|
||||
|
||||
Compiling the Rust toolchain requires the same environment variables used for compiling C binaries.
|
||||
Refer to the [QNX developer manual](https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.prog/topic/devel_OS_version.html).
|
||||
Compiling the Rust toolchain requires the same environment variables used for compiling C binaries.
|
||||
Refer to the [QNX developer manual](https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.prog/topic/devel_OS_version.html).
|
||||
|
||||
To compile for QNX Neutrino (aarch64 and x86_64) and Linux (x86_64):
|
||||
To compile for QNX, environment variables must be set to use the correct tools and compiler switches:
|
||||
|
||||
```bash
|
||||
export build_env='
|
||||
CC_aarch64-unknown-nto-qnx710=qcc
|
||||
CFLAGS_aarch64-unknown-nto-qnx710=-Vgcc_ntoaarch64le_cxx
|
||||
CXX_aarch64-unknown-nto-qnx710=qcc
|
||||
AR_aarch64_unknown_nto_qnx710=ntoaarch64-ar
|
||||
CC_x86_64-pc-nto-qnx710=qcc
|
||||
CFLAGS_x86_64-pc-nto-qnx710=-Vgcc_ntox86_64_cxx
|
||||
CXX_x86_64-pc-nto-qnx710=qcc
|
||||
AR_x86_64_pc_nto_qnx710=ntox86_64-ar'
|
||||
- `CC_<target>=qcc`
|
||||
- `CFLAGS_<target>=<nto_cflag>`
|
||||
- `CXX_<target>=qcc`
|
||||
- `AR_<target>=<nto_ar>`
|
||||
|
||||
env $build_env \
|
||||
./x.py build \
|
||||
--target aarch64-unknown-nto-qnx710,x86_64-pc-nto-qnx710,x86_64-unknown-linux-gnu \
|
||||
rustc library/core library/alloc library/std
|
||||
```
|
||||
With:
|
||||
|
||||
- `<target>` target triplet using underscores instead of hyphens, e.g. `aarch64_unknown_nto_qnx710`
|
||||
- `<nto_cflag>`
|
||||
|
||||
- `-Vgcc_ntox86_cxx` for x86 (32 bit)
|
||||
- `-Vgcc_ntox86_64_cxx` for x86_64 (64 bit)
|
||||
- `-Vgcc_ntoaarch64le_cxx` for Aarch64 (64 bit)
|
||||
|
||||
- `<nto_ar>`
|
||||
|
||||
- `ntox86-ar` for x86 (32 bit)
|
||||
- `ntox86_64-ar` for x86_64 (64 bit)
|
||||
- `ntoaarch64-ar` for Aarch64 (64 bit)
|
||||
|
||||
Example to build the Rust toolchain including a standard library for x86_64-linux-gnu and Aarch64-QNX-7.1:
|
||||
|
||||
```bash
|
||||
export build_env='
|
||||
CC_aarch64_unknown_nto_qnx710=qcc
|
||||
CFLAGS_aarch64_unknown_nto_qnx710=-Vgcc_ntoaarch64le_cxx
|
||||
CXX_aarch64_unknown_nto_qnx710=qcc
|
||||
AR_aarch64_unknown_nto_qnx710=ntoaarch64-ar
|
||||
'
|
||||
|
||||
env $build_env \
|
||||
./x.py build \
|
||||
--target x86_64-unknown-linux-gnu,aarch64-unknown-nto-qnx710 \
|
||||
rustc library/core library/alloc library/std
|
||||
```
|
||||
|
||||
## Running the Rust test suite
|
||||
|
||||
|
|
@ -153,19 +184,11 @@ addition of the TEST_DEVICE_ADDR environment variable.
|
|||
The TEST_DEVICE_ADDR variable controls the remote runner and should point to the target, despite localhost being shown in the following example.
|
||||
Note that some tests are failing which is why they are currently excluded by the target maintainers which can be seen in the following example.
|
||||
|
||||
To run all tests on a x86_64 QNX Neutrino target:
|
||||
To run all tests on a x86_64 QNX Neutrino 7.1 target:
|
||||
|
||||
```bash
|
||||
export TEST_DEVICE_ADDR="localhost:12345" # must address the test target, can be a SSH tunnel
|
||||
export build_env='
|
||||
CC_aarch64-unknown-nto-qnx710=qcc
|
||||
CFLAGS_aarch64-unknown-nto-qnx710=-Vgcc_ntoaarch64le_cxx
|
||||
CXX_aarch64-unknown-nto-qnx710=qcc
|
||||
AR_aarch64_unknown_nto_qnx710=ntoaarch64-ar
|
||||
CC_x86_64-pc-nto-qnx710=qcc
|
||||
CFLAGS_x86_64-pc-nto-qnx710=-Vgcc_ntox86_64_cxx
|
||||
CXX_x86_64-pc-nto-qnx710=qcc
|
||||
AR_x86_64_pc_nto_qnx710=ntox86_64-ar'
|
||||
export build_env=<see above>
|
||||
|
||||
# Disable tests that only work on the host or don't make sense for this target.
|
||||
# See also:
|
||||
|
|
@ -195,7 +218,7 @@ or build your own copy of `core` by using `build-std` or similar.
|
|||
|
||||
## Testing
|
||||
|
||||
Compiled executables can run directly on QNX Neutrino.
|
||||
Compiled executables can run directly on QNX.
|
||||
|
||||
### Rust std library test suite
|
||||
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ This target is not extensively tested in CI for the rust-lang/rust repository. I
|
|||
can be tested locally, for example, with:
|
||||
|
||||
```sh
|
||||
./x.py test --target wasm32-unknown-emscripten --skip src/tools/linkchecker
|
||||
EMCC_CFLAGS="-s MAXIMUM_MEMORY=2GB" ./x.py test --target wasm32-unknown-emscripten --skip src/tools/linkchecker
|
||||
```
|
||||
|
||||
To run these tests, both `emcc` and `node` need to be in your `$PATH`. You can
|
||||
|
|
|
|||
|
|
@ -268,6 +268,8 @@ Controls the format of the output. Valid options:
|
|||
|
||||
Writes the results of the tests to the given file.
|
||||
|
||||
This option is deprecated.
|
||||
|
||||
#### `--report-time`
|
||||
|
||||
⚠️ 🚧 This option is [unstable](#unstable-options), and requires the `-Z
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ class StdOsStringProvider(printer_base):
|
|||
self._valobj = valobj
|
||||
buf = self._valobj["inner"]["inner"]
|
||||
is_windows = "Wtf8Buf" in buf.type.name
|
||||
vec = buf[ZERO_FIELD] if is_windows else buf
|
||||
vec = buf["bytes"] if is_windows else buf
|
||||
|
||||
self._length = int(vec["len"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(vec["buf"]["inner"]["ptr"])
|
||||
|
|
|
|||
|
|
@ -192,15 +192,12 @@ h1, h2, h3, h4 {
|
|||
.rustdoc-breadcrumbs {
|
||||
grid-area: main-heading-breadcrumbs;
|
||||
line-height: 1.25;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: end;
|
||||
padding-top: 5px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.rustdoc-breadcrumbs a {
|
||||
padding: 4px 0;
|
||||
margin: -4px 0;
|
||||
z-index: 1;
|
||||
padding: 5px 0 7px;
|
||||
}
|
||||
/* The only headings that get underlines are:
|
||||
Markdown-generated headings within the top-doc
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<div class="main-heading">
|
||||
{% if !path_components.is_empty() %}
|
||||
<span class="rustdoc-breadcrumbs">
|
||||
<div class="rustdoc-breadcrumbs">
|
||||
{% for (i, component) in path_components.iter().enumerate() %}
|
||||
{% if i != 0 %}
|
||||
::<wbr>
|
||||
{% endif %}
|
||||
<a href="{{component.path|safe}}index.html">{{component.name}}</a>
|
||||
{% endfor %}
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
<h1>
|
||||
{{typ}}
|
||||
|
|
|
|||
|
|
@ -28,13 +28,11 @@
|
|||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{# This kind of layout error can occur with valid code, e.g. if you try to
|
||||
get the layout of a generic type such as `Vec<T>`. #}
|
||||
{# This kind of layout error can occur with valid code, for example
|
||||
if there are trivial bounds: `struct Foo(str, str) where str: Sized;`. #}
|
||||
{% when Err(LayoutError::Unknown(_)) %}
|
||||
<p> {# #}
|
||||
<strong>Note:</strong> Unable to compute type layout, {#+ #}
|
||||
possibly due to this type having generic parameters. {#+ #}
|
||||
Layout can only be computed for concrete, fully-instantiated types. {# #}
|
||||
<strong>Note:</strong> Unable to compute type layout. {# #}
|
||||
</p>
|
||||
{# This kind of error probably can't happen with valid code, but we don't
|
||||
want to panic and prevent the docs from building, so we just let the
|
||||
|
|
@ -44,6 +42,14 @@
|
|||
<strong>Note:</strong> Encountered an error during type layout; {#+ #}
|
||||
the type was too big. {# #}
|
||||
</p>
|
||||
{# This kind of layout error can occur with valid code, e.g. if you try to
|
||||
get the layout of a generic type such as `Vec<T>`. #}
|
||||
{% when Err(LayoutError::TooGeneric(_)) %}
|
||||
<p> {# #}
|
||||
<strong>Note:</strong> Unable to compute type layout, {#+ #}
|
||||
possibly due to this type having generic parameters. {#+ #}
|
||||
Layout can only be computed for concrete, fully-instantiated types. {# #}
|
||||
</p>
|
||||
{% when Err(LayoutError::ReferencesError(_)) %}
|
||||
<p> {# #}
|
||||
<strong>Note:</strong> Encountered an error during type layout; {#+ #}
|
||||
|
|
|
|||
6
src/tools/clippy/.github/driver.sh
vendored
6
src/tools/clippy/.github/driver.sh
vendored
|
|
@ -47,9 +47,9 @@ unset CARGO_MANIFEST_DIR
|
|||
|
||||
# Run a lint and make sure it produces the expected output. It's also expected to exit with code 1
|
||||
# FIXME: How to match the clippy invocation in compile-test.rs?
|
||||
./target/debug/clippy-driver -Dwarnings -Aunused -Zui-testing --emit metadata --crate-type bin tests/ui/double_neg.rs 2>double_neg.stderr && exit 1
|
||||
sed -e "/= help: for/d" double_neg.stderr > normalized.stderr
|
||||
diff -u normalized.stderr tests/ui/double_neg.stderr
|
||||
./target/debug/clippy-driver -Dwarnings -Aunused -Zui-testing --emit metadata --crate-type bin tests/ui/box_default.rs 2>box_default.stderr && exit 1
|
||||
sed -e "/= help: for/d" box_default.stderr > normalized.stderr
|
||||
diff -u normalized.stderr tests/ui/box_default.stderr
|
||||
|
||||
# make sure "clippy-driver --rustc --arg" and "rustc --arg" behave the same
|
||||
SYSROOT=$(rustc --print sysroot)
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ You can configure lint levels on the command line by adding
|
|||
`-A/W/D clippy::lint_name` like this:
|
||||
|
||||
```bash
|
||||
cargo clippy -- -Aclippy::style -Wclippy::double_neg -Dclippy::perf
|
||||
cargo clippy -- -Aclippy::style -Wclippy::box_default -Dclippy::perf
|
||||
```
|
||||
|
||||
For [CI] all warnings can be elevated to errors which will in turn fail
|
||||
|
|
@ -101,11 +101,10 @@ You can configure lint levels in source code the same way you can configure
|
|||
```rust,ignore
|
||||
#![allow(clippy::style)]
|
||||
|
||||
#[warn(clippy::double_neg)]
|
||||
#[warn(clippy::box_default)]
|
||||
fn main() {
|
||||
let x = 1;
|
||||
let y = --x;
|
||||
// ^^ warning: double negation
|
||||
let _ = Box::<String>::new(Default::default());
|
||||
// ^ warning: `Box::new(_)` of default value
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -455,7 +455,7 @@ fn setup_mod_file(path: &Path, lint: &LintData<'_>) -> io::Result<&'static str>
|
|||
});
|
||||
|
||||
// Find both the last lint declaration (declare_clippy_lint!) and the lint pass impl
|
||||
while let Some(LintDeclSearchResult { content, .. }) = iter.find(|result| result.token == TokenKind::Ident) {
|
||||
while let Some(LintDeclSearchResult { content, .. }) = iter.find(|result| result.token_kind == TokenKind::Ident) {
|
||||
let mut iter = iter
|
||||
.by_ref()
|
||||
.filter(|t| !matches!(t.token_kind, TokenKind::Whitespace | TokenKind::LineComment { .. }));
|
||||
|
|
@ -465,7 +465,7 @@ fn setup_mod_file(path: &Path, lint: &LintData<'_>) -> io::Result<&'static str>
|
|||
// matches `!{`
|
||||
match_tokens!(iter, Bang OpenBrace);
|
||||
if let Some(LintDeclSearchResult { range, .. }) =
|
||||
iter.find(|result| result.token == TokenKind::CloseBrace)
|
||||
iter.find(|result| result.token_kind == TokenKind::CloseBrace)
|
||||
{
|
||||
last_decl_curly_offset = Some(range.end);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -507,7 +507,6 @@ pub static LINTS: &[&crate::LintInfo] = &[
|
|||
crate::misc::USED_UNDERSCORE_BINDING_INFO,
|
||||
crate::misc::USED_UNDERSCORE_ITEMS_INFO,
|
||||
crate::misc_early::BUILTIN_TYPE_SHADOW_INFO,
|
||||
crate::misc_early::DOUBLE_NEG_INFO,
|
||||
crate::misc_early::DUPLICATE_UNDERSCORE_ARGUMENT_INFO,
|
||||
crate::misc_early::MIXED_CASE_HEX_LITERALS_INFO,
|
||||
crate::misc_early::REDUNDANT_AT_REST_PATTERN_INFO,
|
||||
|
|
|
|||
|
|
@ -129,6 +129,8 @@ declare_with_version! { RENAMED(RENAMED_VERSION): &[(&str, &str)] = &[
|
|||
("clippy::clone_double_ref", "suspicious_double_ref_op"),
|
||||
#[clippy::version = ""]
|
||||
("clippy::cmp_nan", "invalid_nan_comparisons"),
|
||||
#[clippy::version = "1.86.0"]
|
||||
("clippy::double_neg", "double_negations"),
|
||||
#[clippy::version = ""]
|
||||
("clippy::drop_bounds", "drop_bounds"),
|
||||
#[clippy::version = ""]
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ use clippy_utils::diagnostics::span_lint_and_note;
|
|||
use core::cmp::Ordering;
|
||||
use rustc_hir::{Arm, Expr, PatKind, RangeEnd};
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::mir;
|
||||
use rustc_middle::ty::Ty;
|
||||
use rustc_span::Span;
|
||||
|
||||
|
|
@ -36,14 +35,12 @@ fn all_ranges<'tcx>(cx: &LateContext<'tcx>, arms: &'tcx [Arm<'_>], ty: Ty<'tcx>)
|
|||
let lhs_const = if let Some(lhs) = lhs {
|
||||
ConstEvalCtxt::new(cx).eval_pat_expr(lhs)?
|
||||
} else {
|
||||
let min_val_const = ty.numeric_min_val(cx.tcx)?;
|
||||
mir_to_const(cx.tcx, mir::Const::from_ty_const(min_val_const, ty, cx.tcx))?
|
||||
mir_to_const(cx.tcx, ty.numeric_min_val(cx.tcx)?)?
|
||||
};
|
||||
let rhs_const = if let Some(rhs) = rhs {
|
||||
ConstEvalCtxt::new(cx).eval_pat_expr(rhs)?
|
||||
} else {
|
||||
let max_val_const = ty.numeric_max_val(cx.tcx)?;
|
||||
mir_to_const(cx.tcx, mir::Const::from_ty_const(max_val_const, ty, cx.tcx))?
|
||||
mir_to_const(cx.tcx, ty.numeric_max_val(cx.tcx)?)?
|
||||
};
|
||||
let lhs_val = lhs_const.int_value(cx.tcx, ty)?;
|
||||
let rhs_val = rhs_const.int_value(cx.tcx, ty)?;
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
use clippy_utils::diagnostics::span_lint;
|
||||
use rustc_ast::ast::{Expr, ExprKind, UnOp};
|
||||
use rustc_lint::EarlyContext;
|
||||
|
||||
use super::DOUBLE_NEG;
|
||||
|
||||
pub(super) fn check(cx: &EarlyContext<'_>, expr: &Expr) {
|
||||
if let ExprKind::Unary(UnOp::Neg, ref inner) = expr.kind {
|
||||
if let ExprKind::Unary(UnOp::Neg, _) = inner.kind {
|
||||
span_lint(
|
||||
cx,
|
||||
DOUBLE_NEG,
|
||||
expr.span,
|
||||
"`--x` could be misinterpreted as pre-decrement by C programmers, is usually a no-op",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
mod builtin_type_shadow;
|
||||
mod double_neg;
|
||||
mod literal_suffix;
|
||||
mod mixed_case_hex_literals;
|
||||
mod redundant_at_rest_pattern;
|
||||
|
|
@ -85,25 +84,6 @@ declare_clippy_lint! {
|
|||
"function arguments having names which only differ by an underscore"
|
||||
}
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// ### What it does
|
||||
/// Detects expressions of the form `--x`.
|
||||
///
|
||||
/// ### Why is this bad?
|
||||
/// It can mislead C/C++ programmers to think `x` was
|
||||
/// decremented.
|
||||
///
|
||||
/// ### Example
|
||||
/// ```no_run
|
||||
/// let mut x = 3;
|
||||
/// --x;
|
||||
/// ```
|
||||
#[clippy::version = "pre 1.29.0"]
|
||||
pub DOUBLE_NEG,
|
||||
style,
|
||||
"`--x`, which is a double negation of `x` and not a pre-decrement as in C/C++"
|
||||
}
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// ### What it does
|
||||
/// Warns on hexadecimal literals with mixed-case letter
|
||||
|
|
@ -352,7 +332,6 @@ declare_clippy_lint! {
|
|||
declare_lint_pass!(MiscEarlyLints => [
|
||||
UNNEEDED_FIELD_PATTERN,
|
||||
DUPLICATE_UNDERSCORE_ARGUMENT,
|
||||
DOUBLE_NEG,
|
||||
MIXED_CASE_HEX_LITERALS,
|
||||
UNSEPARATED_LITERAL_SUFFIX,
|
||||
SEPARATED_LITERAL_SUFFIX,
|
||||
|
|
@ -415,7 +394,6 @@ impl EarlyLintPass for MiscEarlyLints {
|
|||
if let ExprKind::Lit(lit) = expr.kind {
|
||||
MiscEarlyLints::check_lit(cx, lit, expr.span);
|
||||
}
|
||||
double_neg::check(cx, expr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,6 @@ use rustc_hir::{
|
|||
use rustc_lexer::{TokenKind, tokenize};
|
||||
use rustc_lint::{LateContext, Level, Lint, LintContext};
|
||||
use rustc_middle::hir::place::PlaceBase;
|
||||
use rustc_middle::mir::Const;
|
||||
use rustc_middle::ty::adjustment::{Adjust, Adjustment, AutoBorrow};
|
||||
use rustc_middle::ty::fast_reject::SimplifiedType;
|
||||
use rustc_middle::ty::layout::IntegerExt;
|
||||
|
|
@ -1584,8 +1583,8 @@ pub fn is_range_full(cx: &LateContext<'_>, expr: &Expr<'_>, container_path: Opti
|
|||
let start_is_none_or_min = start.is_none_or(|start| {
|
||||
if let rustc_ty::Adt(_, subst) = ty.kind()
|
||||
&& let bnd_ty = subst.type_at(0)
|
||||
&& let Some(min_val) = bnd_ty.numeric_min_val(cx.tcx)
|
||||
&& let Some(min_const) = mir_to_const(cx.tcx, Const::from_ty_const(min_val, bnd_ty, cx.tcx))
|
||||
&& let Some(min_const) = bnd_ty.numeric_min_val(cx.tcx)
|
||||
&& let Some(min_const) = mir_to_const(cx.tcx, min_const)
|
||||
&& let Some(start_const) = ConstEvalCtxt::new(cx).eval(start)
|
||||
{
|
||||
start_const == min_const
|
||||
|
|
@ -1597,8 +1596,8 @@ pub fn is_range_full(cx: &LateContext<'_>, expr: &Expr<'_>, container_path: Opti
|
|||
RangeLimits::Closed => {
|
||||
if let rustc_ty::Adt(_, subst) = ty.kind()
|
||||
&& let bnd_ty = subst.type_at(0)
|
||||
&& let Some(max_val) = bnd_ty.numeric_max_val(cx.tcx)
|
||||
&& let Some(max_const) = mir_to_const(cx.tcx, Const::from_ty_const(max_val, bnd_ty, cx.tcx))
|
||||
&& let Some(max_const) = bnd_ty.numeric_max_val(cx.tcx)
|
||||
&& let Some(max_const) = mir_to_const(cx.tcx, max_const)
|
||||
&& let Some(end_const) = ConstEvalCtxt::new(cx).eval(end)
|
||||
{
|
||||
end_const == max_const
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
#[warn(clippy::double_neg)]
|
||||
#[allow(clippy::no_effect)]
|
||||
fn main() {
|
||||
let x = 1;
|
||||
-x;
|
||||
-(-x);
|
||||
--x;
|
||||
//~^ ERROR: `--x` could be misinterpreted as pre-decrement by C programmers, is usually
|
||||
//~| NOTE: `-D clippy::double-neg` implied by `-D warnings`
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
error: `--x` could be misinterpreted as pre-decrement by C programmers, is usually a no-op
|
||||
--> tests/ui/double_neg.rs:7:5
|
||||
|
|
||||
LL | --x;
|
||||
| ^^^
|
||||
|
|
||||
= note: `-D clippy::double-neg` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::double_neg)]`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -13,9 +13,8 @@
|
|||
#![allow(clippy::disallowed_methods)]
|
||||
#![allow(clippy::disallowed_types)]
|
||||
#![allow(clippy::mixed_read_write_in_expression)]
|
||||
#![allow(clippy::manual_find_map)]
|
||||
#![allow(clippy::manual_filter_map)]
|
||||
#![allow(unpredictable_function_pointer_comparisons)]
|
||||
#![allow(clippy::manual_find_map)]
|
||||
#![allow(clippy::useless_conversion)]
|
||||
#![allow(clippy::redundant_pattern_matching)]
|
||||
#![allow(clippy::match_result_ok)]
|
||||
|
|
@ -30,6 +29,7 @@
|
|||
#![allow(clippy::unwrap_used)]
|
||||
#![allow(clippy::panicking_overflow_checks)]
|
||||
#![allow(clippy::needless_borrow)]
|
||||
#![allow(clippy::reversed_empty_ranges)]
|
||||
#![allow(clippy::single_char_add_str)]
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
#![allow(clippy::missing_const_for_thread_local)]
|
||||
|
|
@ -39,9 +39,11 @@
|
|||
#![allow(invalid_reference_casting)]
|
||||
#![allow(suspicious_double_ref_op)]
|
||||
#![allow(invalid_nan_comparisons)]
|
||||
#![allow(double_negations)]
|
||||
#![allow(drop_bounds)]
|
||||
#![allow(dropping_copy_types)]
|
||||
#![allow(dropping_references)]
|
||||
#![allow(unpredictable_function_pointer_comparisons)]
|
||||
#![allow(useless_ptr_null_checks)]
|
||||
#![allow(for_loops_over_fallibles)]
|
||||
#![allow(forgetting_copy_types)]
|
||||
|
|
@ -60,8 +62,6 @@
|
|||
#![allow(unknown_lints)]
|
||||
#![allow(unused_labels)]
|
||||
#![allow(ambiguous_wide_pointer_comparisons)]
|
||||
#![allow(unpredictable_function_pointer_comparisons)]
|
||||
#![allow(clippy::reversed_empty_ranges)]
|
||||
#![warn(clippy::almost_complete_range)] //~ ERROR: lint `clippy::almost_complete_letter_range`
|
||||
#![warn(clippy::disallowed_names)] //~ ERROR: lint `clippy::blacklisted_name`
|
||||
#![warn(clippy::blocks_in_conditions)] //~ ERROR: lint `clippy::block_in_if_condition_expr`
|
||||
|
|
@ -74,9 +74,8 @@
|
|||
#![warn(clippy::disallowed_methods)] //~ ERROR: lint `clippy::disallowed_method`
|
||||
#![warn(clippy::disallowed_types)] //~ ERROR: lint `clippy::disallowed_type`
|
||||
#![warn(clippy::mixed_read_write_in_expression)] //~ ERROR: lint `clippy::eval_order_dependence`
|
||||
#![warn(clippy::manual_find_map)] //~ ERROR: lint `clippy::find_map`
|
||||
#![warn(clippy::manual_filter_map)] //~ ERROR: lint `clippy::filter_map`
|
||||
#![warn(unpredictable_function_pointer_comparisons)] //~ ERROR: lint `clippy::fn_address_comparisons`
|
||||
#![warn(clippy::manual_find_map)] //~ ERROR: lint `clippy::find_map`
|
||||
#![warn(clippy::useless_conversion)] //~ ERROR: lint `clippy::identity_conversion`
|
||||
#![warn(clippy::redundant_pattern_matching)] //~ ERROR: lint `clippy::if_let_redundant_pattern_matching`
|
||||
#![warn(clippy::match_result_ok)] //~ ERROR: lint `clippy::if_let_some_result`
|
||||
|
|
@ -95,6 +94,7 @@
|
|||
#![warn(clippy::expect_used)] //~ ERROR: lint `clippy::result_expect_used`
|
||||
#![warn(clippy::map_unwrap_or)] //~ ERROR: lint `clippy::result_map_unwrap_or_else`
|
||||
#![warn(clippy::unwrap_used)] //~ ERROR: lint `clippy::result_unwrap_used`
|
||||
#![warn(clippy::reversed_empty_ranges)] //~ ERROR: lint `clippy::reverse_range_loop`
|
||||
#![warn(clippy::single_char_add_str)] //~ ERROR: lint `clippy::single_char_push_str`
|
||||
#![warn(clippy::module_name_repetitions)] //~ ERROR: lint `clippy::stutter`
|
||||
#![warn(clippy::missing_const_for_thread_local)] //~ ERROR: lint `clippy::thread_local_initializer_can_be_made_const`
|
||||
|
|
@ -104,9 +104,11 @@
|
|||
#![warn(invalid_reference_casting)] //~ ERROR: lint `clippy::cast_ref_to_mut`
|
||||
#![warn(suspicious_double_ref_op)] //~ ERROR: lint `clippy::clone_double_ref`
|
||||
#![warn(invalid_nan_comparisons)] //~ ERROR: lint `clippy::cmp_nan`
|
||||
#![warn(double_negations)] //~ ERROR: lint `clippy::double_neg`
|
||||
#![warn(drop_bounds)] //~ ERROR: lint `clippy::drop_bounds`
|
||||
#![warn(dropping_copy_types)] //~ ERROR: lint `clippy::drop_copy`
|
||||
#![warn(dropping_references)] //~ ERROR: lint `clippy::drop_ref`
|
||||
#![warn(unpredictable_function_pointer_comparisons)] //~ ERROR: lint `clippy::fn_address_comparisons`
|
||||
#![warn(useless_ptr_null_checks)] //~ ERROR: lint `clippy::fn_null_check`
|
||||
#![warn(for_loops_over_fallibles)] //~ ERROR: lint `clippy::for_loop_over_option`
|
||||
#![warn(for_loops_over_fallibles)] //~ ERROR: lint `clippy::for_loop_over_result`
|
||||
|
|
@ -128,6 +130,5 @@
|
|||
#![warn(unknown_lints)] //~ ERROR: lint `clippy::unknown_clippy_lints`
|
||||
#![warn(unused_labels)] //~ ERROR: lint `clippy::unused_label`
|
||||
#![warn(ambiguous_wide_pointer_comparisons)] //~ ERROR: lint `clippy::vtable_address_comparisons`
|
||||
#![warn(clippy::reversed_empty_ranges)] //~ ERROR: lint `clippy::reverse_range_loop`
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,8 @@
|
|||
#![allow(clippy::disallowed_methods)]
|
||||
#![allow(clippy::disallowed_types)]
|
||||
#![allow(clippy::mixed_read_write_in_expression)]
|
||||
#![allow(clippy::manual_find_map)]
|
||||
#![allow(clippy::manual_filter_map)]
|
||||
#![allow(unpredictable_function_pointer_comparisons)]
|
||||
#![allow(clippy::manual_find_map)]
|
||||
#![allow(clippy::useless_conversion)]
|
||||
#![allow(clippy::redundant_pattern_matching)]
|
||||
#![allow(clippy::match_result_ok)]
|
||||
|
|
@ -30,6 +29,7 @@
|
|||
#![allow(clippy::unwrap_used)]
|
||||
#![allow(clippy::panicking_overflow_checks)]
|
||||
#![allow(clippy::needless_borrow)]
|
||||
#![allow(clippy::reversed_empty_ranges)]
|
||||
#![allow(clippy::single_char_add_str)]
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
#![allow(clippy::missing_const_for_thread_local)]
|
||||
|
|
@ -39,9 +39,11 @@
|
|||
#![allow(invalid_reference_casting)]
|
||||
#![allow(suspicious_double_ref_op)]
|
||||
#![allow(invalid_nan_comparisons)]
|
||||
#![allow(double_negations)]
|
||||
#![allow(drop_bounds)]
|
||||
#![allow(dropping_copy_types)]
|
||||
#![allow(dropping_references)]
|
||||
#![allow(unpredictable_function_pointer_comparisons)]
|
||||
#![allow(useless_ptr_null_checks)]
|
||||
#![allow(for_loops_over_fallibles)]
|
||||
#![allow(forgetting_copy_types)]
|
||||
|
|
@ -60,8 +62,6 @@
|
|||
#![allow(unknown_lints)]
|
||||
#![allow(unused_labels)]
|
||||
#![allow(ambiguous_wide_pointer_comparisons)]
|
||||
#![allow(unpredictable_function_pointer_comparisons)]
|
||||
#![allow(clippy::reversed_empty_ranges)]
|
||||
#![warn(clippy::almost_complete_letter_range)] //~ ERROR: lint `clippy::almost_complete_letter_range`
|
||||
#![warn(clippy::blacklisted_name)] //~ ERROR: lint `clippy::blacklisted_name`
|
||||
#![warn(clippy::block_in_if_condition_expr)] //~ ERROR: lint `clippy::block_in_if_condition_expr`
|
||||
|
|
@ -74,9 +74,8 @@
|
|||
#![warn(clippy::disallowed_method)] //~ ERROR: lint `clippy::disallowed_method`
|
||||
#![warn(clippy::disallowed_type)] //~ ERROR: lint `clippy::disallowed_type`
|
||||
#![warn(clippy::eval_order_dependence)] //~ ERROR: lint `clippy::eval_order_dependence`
|
||||
#![warn(clippy::find_map)] //~ ERROR: lint `clippy::find_map`
|
||||
#![warn(clippy::filter_map)] //~ ERROR: lint `clippy::filter_map`
|
||||
#![warn(clippy::fn_address_comparisons)] //~ ERROR: lint `clippy::fn_address_comparisons`
|
||||
#![warn(clippy::find_map)] //~ ERROR: lint `clippy::find_map`
|
||||
#![warn(clippy::identity_conversion)] //~ ERROR: lint `clippy::identity_conversion`
|
||||
#![warn(clippy::if_let_redundant_pattern_matching)] //~ ERROR: lint `clippy::if_let_redundant_pattern_matching`
|
||||
#![warn(clippy::if_let_some_result)] //~ ERROR: lint `clippy::if_let_some_result`
|
||||
|
|
@ -95,6 +94,7 @@
|
|||
#![warn(clippy::result_expect_used)] //~ ERROR: lint `clippy::result_expect_used`
|
||||
#![warn(clippy::result_map_unwrap_or_else)] //~ ERROR: lint `clippy::result_map_unwrap_or_else`
|
||||
#![warn(clippy::result_unwrap_used)] //~ ERROR: lint `clippy::result_unwrap_used`
|
||||
#![warn(clippy::reverse_range_loop)] //~ ERROR: lint `clippy::reverse_range_loop`
|
||||
#![warn(clippy::single_char_push_str)] //~ ERROR: lint `clippy::single_char_push_str`
|
||||
#![warn(clippy::stutter)] //~ ERROR: lint `clippy::stutter`
|
||||
#![warn(clippy::thread_local_initializer_can_be_made_const)] //~ ERROR: lint `clippy::thread_local_initializer_can_be_made_const`
|
||||
|
|
@ -104,9 +104,11 @@
|
|||
#![warn(clippy::cast_ref_to_mut)] //~ ERROR: lint `clippy::cast_ref_to_mut`
|
||||
#![warn(clippy::clone_double_ref)] //~ ERROR: lint `clippy::clone_double_ref`
|
||||
#![warn(clippy::cmp_nan)] //~ ERROR: lint `clippy::cmp_nan`
|
||||
#![warn(clippy::double_neg)] //~ ERROR: lint `clippy::double_neg`
|
||||
#![warn(clippy::drop_bounds)] //~ ERROR: lint `clippy::drop_bounds`
|
||||
#![warn(clippy::drop_copy)] //~ ERROR: lint `clippy::drop_copy`
|
||||
#![warn(clippy::drop_ref)] //~ ERROR: lint `clippy::drop_ref`
|
||||
#![warn(clippy::fn_address_comparisons)] //~ ERROR: lint `clippy::fn_address_comparisons`
|
||||
#![warn(clippy::fn_null_check)] //~ ERROR: lint `clippy::fn_null_check`
|
||||
#![warn(clippy::for_loop_over_option)] //~ ERROR: lint `clippy::for_loop_over_option`
|
||||
#![warn(clippy::for_loop_over_result)] //~ ERROR: lint `clippy::for_loop_over_result`
|
||||
|
|
@ -128,6 +130,5 @@
|
|||
#![warn(clippy::unknown_clippy_lints)] //~ ERROR: lint `clippy::unknown_clippy_lints`
|
||||
#![warn(clippy::unused_label)] //~ ERROR: lint `clippy::unused_label`
|
||||
#![warn(clippy::vtable_address_comparisons)] //~ ERROR: lint `clippy::vtable_address_comparisons`
|
||||
#![warn(clippy::reverse_range_loop)] //~ ERROR: lint `clippy::reverse_range_loop`
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -73,132 +73,132 @@ error: lint `clippy::eval_order_dependence` has been renamed to `clippy::mixed_r
|
|||
LL | #![warn(clippy::eval_order_dependence)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::mixed_read_write_in_expression`
|
||||
|
||||
error: lint `clippy::find_map` has been renamed to `clippy::manual_find_map`
|
||||
--> tests/ui/rename.rs:77:9
|
||||
|
|
||||
LL | #![warn(clippy::find_map)]
|
||||
| ^^^^^^^^^^^^^^^^ help: use the new name: `clippy::manual_find_map`
|
||||
|
||||
error: lint `clippy::filter_map` has been renamed to `clippy::manual_filter_map`
|
||||
--> tests/ui/rename.rs:78:9
|
||||
--> tests/ui/rename.rs:77:9
|
||||
|
|
||||
LL | #![warn(clippy::filter_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::manual_filter_map`
|
||||
|
||||
error: lint `clippy::fn_address_comparisons` has been renamed to `unpredictable_function_pointer_comparisons`
|
||||
--> tests/ui/rename.rs:79:9
|
||||
error: lint `clippy::find_map` has been renamed to `clippy::manual_find_map`
|
||||
--> tests/ui/rename.rs:78:9
|
||||
|
|
||||
LL | #![warn(clippy::fn_address_comparisons)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unpredictable_function_pointer_comparisons`
|
||||
LL | #![warn(clippy::find_map)]
|
||||
| ^^^^^^^^^^^^^^^^ help: use the new name: `clippy::manual_find_map`
|
||||
|
||||
error: lint `clippy::identity_conversion` has been renamed to `clippy::useless_conversion`
|
||||
--> tests/ui/rename.rs:80:9
|
||||
--> tests/ui/rename.rs:79:9
|
||||
|
|
||||
LL | #![warn(clippy::identity_conversion)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::useless_conversion`
|
||||
|
||||
error: lint `clippy::if_let_redundant_pattern_matching` has been renamed to `clippy::redundant_pattern_matching`
|
||||
--> tests/ui/rename.rs:81:9
|
||||
--> tests/ui/rename.rs:80:9
|
||||
|
|
||||
LL | #![warn(clippy::if_let_redundant_pattern_matching)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::redundant_pattern_matching`
|
||||
|
||||
error: lint `clippy::if_let_some_result` has been renamed to `clippy::match_result_ok`
|
||||
--> tests/ui/rename.rs:82:9
|
||||
--> tests/ui/rename.rs:81:9
|
||||
|
|
||||
LL | #![warn(clippy::if_let_some_result)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::match_result_ok`
|
||||
|
||||
error: lint `clippy::incorrect_clone_impl_on_copy_type` has been renamed to `clippy::non_canonical_clone_impl`
|
||||
--> tests/ui/rename.rs:83:9
|
||||
--> tests/ui/rename.rs:82:9
|
||||
|
|
||||
LL | #![warn(clippy::incorrect_clone_impl_on_copy_type)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::non_canonical_clone_impl`
|
||||
|
||||
error: lint `clippy::incorrect_partial_ord_impl_on_ord_type` has been renamed to `clippy::non_canonical_partial_ord_impl`
|
||||
--> tests/ui/rename.rs:84:9
|
||||
--> tests/ui/rename.rs:83:9
|
||||
|
|
||||
LL | #![warn(clippy::incorrect_partial_ord_impl_on_ord_type)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::non_canonical_partial_ord_impl`
|
||||
|
||||
error: lint `clippy::integer_arithmetic` has been renamed to `clippy::arithmetic_side_effects`
|
||||
--> tests/ui/rename.rs:85:9
|
||||
--> tests/ui/rename.rs:84:9
|
||||
|
|
||||
LL | #![warn(clippy::integer_arithmetic)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::arithmetic_side_effects`
|
||||
|
||||
error: lint `clippy::logic_bug` has been renamed to `clippy::overly_complex_bool_expr`
|
||||
--> tests/ui/rename.rs:86:9
|
||||
--> tests/ui/rename.rs:85:9
|
||||
|
|
||||
LL | #![warn(clippy::logic_bug)]
|
||||
| ^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::overly_complex_bool_expr`
|
||||
|
||||
error: lint `clippy::new_without_default_derive` has been renamed to `clippy::new_without_default`
|
||||
--> tests/ui/rename.rs:87:9
|
||||
--> tests/ui/rename.rs:86:9
|
||||
|
|
||||
LL | #![warn(clippy::new_without_default_derive)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::new_without_default`
|
||||
|
||||
error: lint `clippy::option_and_then_some` has been renamed to `clippy::bind_instead_of_map`
|
||||
--> tests/ui/rename.rs:88:9
|
||||
--> tests/ui/rename.rs:87:9
|
||||
|
|
||||
LL | #![warn(clippy::option_and_then_some)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::bind_instead_of_map`
|
||||
|
||||
error: lint `clippy::option_expect_used` has been renamed to `clippy::expect_used`
|
||||
--> tests/ui/rename.rs:89:9
|
||||
--> tests/ui/rename.rs:88:9
|
||||
|
|
||||
LL | #![warn(clippy::option_expect_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::expect_used`
|
||||
|
||||
error: lint `clippy::option_map_unwrap_or` has been renamed to `clippy::map_unwrap_or`
|
||||
--> tests/ui/rename.rs:90:9
|
||||
--> tests/ui/rename.rs:89:9
|
||||
|
|
||||
LL | #![warn(clippy::option_map_unwrap_or)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||
|
||||
error: lint `clippy::option_map_unwrap_or_else` has been renamed to `clippy::map_unwrap_or`
|
||||
--> tests/ui/rename.rs:91:9
|
||||
--> tests/ui/rename.rs:90:9
|
||||
|
|
||||
LL | #![warn(clippy::option_map_unwrap_or_else)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||
|
||||
error: lint `clippy::option_unwrap_used` has been renamed to `clippy::unwrap_used`
|
||||
--> tests/ui/rename.rs:92:9
|
||||
--> tests/ui/rename.rs:91:9
|
||||
|
|
||||
LL | #![warn(clippy::option_unwrap_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_used`
|
||||
|
||||
error: lint `clippy::overflow_check_conditional` has been renamed to `clippy::panicking_overflow_checks`
|
||||
--> tests/ui/rename.rs:93:9
|
||||
--> tests/ui/rename.rs:92:9
|
||||
|
|
||||
LL | #![warn(clippy::overflow_check_conditional)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::panicking_overflow_checks`
|
||||
|
||||
error: lint `clippy::ref_in_deref` has been renamed to `clippy::needless_borrow`
|
||||
--> tests/ui/rename.rs:94:9
|
||||
--> tests/ui/rename.rs:93:9
|
||||
|
|
||||
LL | #![warn(clippy::ref_in_deref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::needless_borrow`
|
||||
|
||||
error: lint `clippy::result_expect_used` has been renamed to `clippy::expect_used`
|
||||
--> tests/ui/rename.rs:95:9
|
||||
--> tests/ui/rename.rs:94:9
|
||||
|
|
||||
LL | #![warn(clippy::result_expect_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::expect_used`
|
||||
|
||||
error: lint `clippy::result_map_unwrap_or_else` has been renamed to `clippy::map_unwrap_or`
|
||||
--> tests/ui/rename.rs:96:9
|
||||
--> tests/ui/rename.rs:95:9
|
||||
|
|
||||
LL | #![warn(clippy::result_map_unwrap_or_else)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||
|
||||
error: lint `clippy::result_unwrap_used` has been renamed to `clippy::unwrap_used`
|
||||
--> tests/ui/rename.rs:97:9
|
||||
--> tests/ui/rename.rs:96:9
|
||||
|
|
||||
LL | #![warn(clippy::result_unwrap_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_used`
|
||||
|
||||
error: lint `clippy::reverse_range_loop` has been renamed to `clippy::reversed_empty_ranges`
|
||||
--> tests/ui/rename.rs:97:9
|
||||
|
|
||||
LL | #![warn(clippy::reverse_range_loop)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::reversed_empty_ranges`
|
||||
|
||||
error: lint `clippy::single_char_push_str` has been renamed to `clippy::single_char_add_str`
|
||||
--> tests/ui/rename.rs:98:9
|
||||
|
|
||||
|
|
@ -253,155 +253,161 @@ error: lint `clippy::cmp_nan` has been renamed to `invalid_nan_comparisons`
|
|||
LL | #![warn(clippy::cmp_nan)]
|
||||
| ^^^^^^^^^^^^^^^ help: use the new name: `invalid_nan_comparisons`
|
||||
|
||||
error: lint `clippy::drop_bounds` has been renamed to `drop_bounds`
|
||||
error: lint `clippy::double_neg` has been renamed to `double_negations`
|
||||
--> tests/ui/rename.rs:107:9
|
||||
|
|
||||
LL | #![warn(clippy::double_neg)]
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use the new name: `double_negations`
|
||||
|
||||
error: lint `clippy::drop_bounds` has been renamed to `drop_bounds`
|
||||
--> tests/ui/rename.rs:108:9
|
||||
|
|
||||
LL | #![warn(clippy::drop_bounds)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `drop_bounds`
|
||||
|
||||
error: lint `clippy::drop_copy` has been renamed to `dropping_copy_types`
|
||||
--> tests/ui/rename.rs:108:9
|
||||
--> tests/ui/rename.rs:109:9
|
||||
|
|
||||
LL | #![warn(clippy::drop_copy)]
|
||||
| ^^^^^^^^^^^^^^^^^ help: use the new name: `dropping_copy_types`
|
||||
|
||||
error: lint `clippy::drop_ref` has been renamed to `dropping_references`
|
||||
--> tests/ui/rename.rs:109:9
|
||||
--> tests/ui/rename.rs:110:9
|
||||
|
|
||||
LL | #![warn(clippy::drop_ref)]
|
||||
| ^^^^^^^^^^^^^^^^ help: use the new name: `dropping_references`
|
||||
|
||||
error: lint `clippy::fn_address_comparisons` has been renamed to `unpredictable_function_pointer_comparisons`
|
||||
--> tests/ui/rename.rs:111:9
|
||||
|
|
||||
LL | #![warn(clippy::fn_address_comparisons)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unpredictable_function_pointer_comparisons`
|
||||
|
||||
error: lint `clippy::fn_null_check` has been renamed to `useless_ptr_null_checks`
|
||||
--> tests/ui/rename.rs:110:9
|
||||
--> tests/ui/rename.rs:112:9
|
||||
|
|
||||
LL | #![warn(clippy::fn_null_check)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `useless_ptr_null_checks`
|
||||
|
||||
error: lint `clippy::for_loop_over_option` has been renamed to `for_loops_over_fallibles`
|
||||
--> tests/ui/rename.rs:111:9
|
||||
--> tests/ui/rename.rs:113:9
|
||||
|
|
||||
LL | #![warn(clippy::for_loop_over_option)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||
|
||||
error: lint `clippy::for_loop_over_result` has been renamed to `for_loops_over_fallibles`
|
||||
--> tests/ui/rename.rs:112:9
|
||||
--> tests/ui/rename.rs:114:9
|
||||
|
|
||||
LL | #![warn(clippy::for_loop_over_result)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||
|
||||
error: lint `clippy::for_loops_over_fallibles` has been renamed to `for_loops_over_fallibles`
|
||||
--> tests/ui/rename.rs:113:9
|
||||
--> tests/ui/rename.rs:115:9
|
||||
|
|
||||
LL | #![warn(clippy::for_loops_over_fallibles)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||
|
||||
error: lint `clippy::forget_copy` has been renamed to `forgetting_copy_types`
|
||||
--> tests/ui/rename.rs:114:9
|
||||
--> tests/ui/rename.rs:116:9
|
||||
|
|
||||
LL | #![warn(clippy::forget_copy)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `forgetting_copy_types`
|
||||
|
||||
error: lint `clippy::forget_ref` has been renamed to `forgetting_references`
|
||||
--> tests/ui/rename.rs:115:9
|
||||
--> tests/ui/rename.rs:117:9
|
||||
|
|
||||
LL | #![warn(clippy::forget_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use the new name: `forgetting_references`
|
||||
|
||||
error: lint `clippy::into_iter_on_array` has been renamed to `array_into_iter`
|
||||
--> tests/ui/rename.rs:116:9
|
||||
--> tests/ui/rename.rs:118:9
|
||||
|
|
||||
LL | #![warn(clippy::into_iter_on_array)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `array_into_iter`
|
||||
|
||||
error: lint `clippy::invalid_atomic_ordering` has been renamed to `invalid_atomic_ordering`
|
||||
--> tests/ui/rename.rs:117:9
|
||||
--> tests/ui/rename.rs:119:9
|
||||
|
|
||||
LL | #![warn(clippy::invalid_atomic_ordering)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_atomic_ordering`
|
||||
|
||||
error: lint `clippy::invalid_ref` has been renamed to `invalid_value`
|
||||
--> tests/ui/rename.rs:118:9
|
||||
--> tests/ui/rename.rs:120:9
|
||||
|
|
||||
LL | #![warn(clippy::invalid_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_value`
|
||||
|
||||
error: lint `clippy::invalid_utf8_in_unchecked` has been renamed to `invalid_from_utf8_unchecked`
|
||||
--> tests/ui/rename.rs:119:9
|
||||
--> tests/ui/rename.rs:121:9
|
||||
|
|
||||
LL | #![warn(clippy::invalid_utf8_in_unchecked)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_from_utf8_unchecked`
|
||||
|
||||
error: lint `clippy::let_underscore_drop` has been renamed to `let_underscore_drop`
|
||||
--> tests/ui/rename.rs:120:9
|
||||
--> tests/ui/rename.rs:122:9
|
||||
|
|
||||
LL | #![warn(clippy::let_underscore_drop)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `let_underscore_drop`
|
||||
|
||||
error: lint `clippy::maybe_misused_cfg` has been renamed to `unexpected_cfgs`
|
||||
--> tests/ui/rename.rs:121:9
|
||||
--> tests/ui/rename.rs:123:9
|
||||
|
|
||||
LL | #![warn(clippy::maybe_misused_cfg)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unexpected_cfgs`
|
||||
|
||||
error: lint `clippy::mem_discriminant_non_enum` has been renamed to `enum_intrinsics_non_enums`
|
||||
--> tests/ui/rename.rs:122:9
|
||||
--> tests/ui/rename.rs:124:9
|
||||
|
|
||||
LL | #![warn(clippy::mem_discriminant_non_enum)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `enum_intrinsics_non_enums`
|
||||
|
||||
error: lint `clippy::mismatched_target_os` has been renamed to `unexpected_cfgs`
|
||||
--> tests/ui/rename.rs:123:9
|
||||
--> tests/ui/rename.rs:125:9
|
||||
|
|
||||
LL | #![warn(clippy::mismatched_target_os)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unexpected_cfgs`
|
||||
|
||||
error: lint `clippy::panic_params` has been renamed to `non_fmt_panics`
|
||||
--> tests/ui/rename.rs:124:9
|
||||
--> tests/ui/rename.rs:126:9
|
||||
|
|
||||
LL | #![warn(clippy::panic_params)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `non_fmt_panics`
|
||||
|
||||
error: lint `clippy::positional_named_format_parameters` has been renamed to `named_arguments_used_positionally`
|
||||
--> tests/ui/rename.rs:125:9
|
||||
--> tests/ui/rename.rs:127:9
|
||||
|
|
||||
LL | #![warn(clippy::positional_named_format_parameters)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `named_arguments_used_positionally`
|
||||
|
||||
error: lint `clippy::temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries`
|
||||
--> tests/ui/rename.rs:126:9
|
||||
--> tests/ui/rename.rs:128:9
|
||||
|
|
||||
LL | #![warn(clippy::temporary_cstring_as_ptr)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries`
|
||||
|
||||
error: lint `clippy::undropped_manually_drops` has been renamed to `undropped_manually_drops`
|
||||
--> tests/ui/rename.rs:127:9
|
||||
--> tests/ui/rename.rs:129:9
|
||||
|
|
||||
LL | #![warn(clippy::undropped_manually_drops)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `undropped_manually_drops`
|
||||
|
||||
error: lint `clippy::unknown_clippy_lints` has been renamed to `unknown_lints`
|
||||
--> tests/ui/rename.rs:128:9
|
||||
--> tests/ui/rename.rs:130:9
|
||||
|
|
||||
LL | #![warn(clippy::unknown_clippy_lints)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unknown_lints`
|
||||
|
||||
error: lint `clippy::unused_label` has been renamed to `unused_labels`
|
||||
--> tests/ui/rename.rs:129:9
|
||||
--> tests/ui/rename.rs:131:9
|
||||
|
|
||||
LL | #![warn(clippy::unused_label)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unused_labels`
|
||||
|
||||
error: lint `clippy::vtable_address_comparisons` has been renamed to `ambiguous_wide_pointer_comparisons`
|
||||
--> tests/ui/rename.rs:130:9
|
||||
--> tests/ui/rename.rs:132:9
|
||||
|
|
||||
LL | #![warn(clippy::vtable_address_comparisons)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `ambiguous_wide_pointer_comparisons`
|
||||
|
||||
error: lint `clippy::reverse_range_loop` has been renamed to `clippy::reversed_empty_ranges`
|
||||
--> tests/ui/rename.rs:131:9
|
||||
|
|
||||
LL | #![warn(clippy::reverse_range_loop)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::reversed_empty_ranges`
|
||||
|
||||
error: aborting due to 67 previous errors
|
||||
error: aborting due to 68 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -1385,7 +1385,6 @@ ui/issue-18502.rs
|
|||
ui/issue-24106.rs
|
||||
ui/issue-76387-llvm-miscompile.rs
|
||||
ui/issues-71798.rs
|
||||
ui/issues/auxiliary/issue-111011.rs
|
||||
ui/issues/auxiliary/issue-11224.rs
|
||||
ui/issues/auxiliary/issue-11508.rs
|
||||
ui/issues/auxiliary/issue-11529.rs
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ use ignore::Walk;
|
|||
const ENTRY_LIMIT: u32 = 901;
|
||||
// FIXME: The following limits should be reduced eventually.
|
||||
|
||||
const ISSUES_ENTRY_LIMIT: u32 = 1662;
|
||||
const ISSUES_ENTRY_LIMIT: u32 = 1658;
|
||||
|
||||
const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[
|
||||
"rs", // test source files
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue