diff --git a/RELEASES.md b/RELEASES.md
index 755e73a34c6bf..0948eb85192e5 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,3 +1,126 @@
+Version 1.86.0 (2025-04-03)
+==========================
+
+
+
+Language
+--------
+- [Stabilize upcasting trait objects to supertraits.](https://github.com/rust-lang/rust/pull/134367)
+- [Allow safe functions to be marked with the `#[target_feature]` attribute.](https://github.com/rust-lang/rust/pull/134090)
+- [The `missing_abi` lint now warns-by-default.](https://github.com/rust-lang/rust/pull/132397)
+- Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (`--x`) as written in other languages. This was previously a clippy lint, `clippy::double_neg`, and is [now available directly in Rust as `double_negations`.](https://github.com/rust-lang/rust/pull/126604)
+- [More pointers are now detected as definitely not-null based on their alignment in const eval.](https://github.com/rust-lang/rust/pull/133700)
+- [Empty `repr()` attribute applied to invalid items are now correctly rejected.](https://github.com/rust-lang/rust/pull/133925)
+- [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer accepted in more places than intended.](https://github.com/rust-lang/rust/pull/134276)
+
+
+
+Compiler
+--------
+- [Debug-assert that raw pointers are non-null on access.](https://github.com/rust-lang/rust/pull/134424)
+- [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2` to match Cargo's defaults.](https://github.com/rust-lang/rust/pull/135439)
+- [Fix emission of `overflowing_literals` under certain macro environments.](https://github.com/rust-lang/rust/pull/136393)
+
+
+
+Platform Support
+----------------
+- [Replace `i686-unknown-redox` target with `i586-unknown-redox`.](https://github.com/rust-lang/rust/pull/136698)
+- [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.](https://github.com/rust-lang/rust/pull/136700)
+- New tier 3 targets:
+ - [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`](https://github.com/rust-lang/rust/pull/133631).
+ For supporting Neutrino QNX 7.1 with `io-socket` network stack.
+ - [`{aarch64-unknown,x86_64-pc}-nto-qnx800`](https://github.com/rust-lang/rust/pull/133631).
+ For supporting Neutrino QNX 8.0 (`no_std`-only).
+ - [`{x86_64,i686}-win7-windows-gnu`](https://github.com/rust-lang/rust/pull/134609).
+ Intended for backwards compatibility with Windows 7. `{x86_64,i686}-win7-windows-msvc` are the Windows MSVC counterparts that already exist as Tier 3 targets.
+ - [`amdgcn-amd-amdhsa`](https://github.com/rust-lang/rust/pull/134740).
+ - [`x86_64-pc-cygwin`](https://github.com/rust-lang/rust/pull/134999).
+ - [`{mips,mipsel}-mti-none-elf`](https://github.com/rust-lang/rust/pull/135074).
+ Initial bare-metal support.
+ - [`m68k-unknown-none-elf`](https://github.com/rust-lang/rust/pull/135085).
+ - [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and `thumbv7a-nuttx-{eabi,eabihf}`](https://github.com/rust-lang/rust/pull/135757).
+
+Refer to Rust's [platform support page][platform-support-doc]
+for more information on Rust's tiered platform support.
+
+
+
+Libraries
+---------
+- The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from an opaque struct to an enum](https://github.com/rust-lang/rust/pull/134143), allowing users to examine why the conversion failed.
+- [Remove `RustcDecodable` and `RustcEncodable`.](https://github.com/rust-lang/rust/pull/134272)
+- [Deprecate libtest's `--logfile` option.](https://github.com/rust-lang/rust/pull/134283)
+- [On recent versions of Windows, `std::fs::remove_file` will now remove read-only files.](https://github.com/rust-lang/rust/pull/134679)
+
+
+
+Stabilized APIs
+---------------
+
+- [`{float}::next_down`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down)
+- [`{float}::next_up`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up)
+- [`<[_]>::get_disjoint_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut)
+- [`<[_]>::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut)
+- [`slice::GetDisjointMutError`](https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html)
+- [`HashMap::get_disjoint_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut)
+- [`HashMap::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut)
+- [`NonZero::count_ones`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones)
+- [`Vec::pop_if`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if)
+- [`sync::Once::wait`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait)
+- [`sync::Once::wait_force`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force)
+- [`sync::OnceLock::wait`](https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)
+
+These APIs are now stable in const contexts:
+
+- [`hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
+- [`io::Cursor::get_mut`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut)
+- [`io::Cursor::set_position`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position)
+- [`str::is_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary)
+- [`str::split_at`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at)
+- [`str::split_at_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked)
+- [`str::split_at_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut)
+- [`str::split_at_mut_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)
+
+
+
+Cargo
+-----
+- [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.](https://github.com/rust-lang/cargo/pull/15066/)
+- [Error if both `--package` and `--workspace` are passed but the requested package is missing.](https://github.com/rust-lang/cargo/pull/15071/) This was previously silently ignored, which was considered a bug since missing packages should be reported.
+- [Deprecate the token argument in `cargo login` to avoid shell history leaks.](https://github.com/rust-lang/cargo/pull/15057/)
+- [Simplify the implementation of `SourceID` comparisons.](https://github.com/rust-lang/cargo/pull/14980/) This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
+
+
+
+Rustdoc
+-----
+- [Add a sans-serif font setting.](https://github.com/rust-lang/rust/pull/133636)
+
+
+
+Compatibility Notes
+-------------------
+- [The `wasm_c_abi` future compatibility warning is now a hard error.](https://github.com/rust-lang/rust/pull/133951)
+ Users of `wasm-bindgen` should upgrade to at least version 0.2.89, otherwise compilation will fail.
+- [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.](https://github.com/rust-lang/rust/pull/134300)
+- [The future incompatibility lint `cenum_impl_drop_cast` has been made into a hard error.](https://github.com/rust-lang/rust/pull/135964) This means it is now an error to cast a field-less enum to an integer if the enum implements `Drop`.
+- [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.](https://github.com/rust-lang/rust/pull/137037)
+ To compile for pre-SSE2 32-bit x86, use a "i586" target instead.
+
+
+
+Internal Changes
+----------------
+
+These changes do not affect any public interfaces of Rust, but they represent
+significant improvements to the performance or internals of rustc and related
+tools.
+
+- [Build the rustc on AArch64 Linux with ThinLTO + PGO.](https://github.com/rust-lang/rust/pull/133807)
+ The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.
+
+
Version 1.85.1 (2025-03-18)
==========================
diff --git a/compiler/rustc_ast_passes/src/feature_gate.rs b/compiler/rustc_ast_passes/src/feature_gate.rs
index a3fcc110a1666..c16e682fc371c 100644
--- a/compiler/rustc_ast_passes/src/feature_gate.rs
+++ b/compiler/rustc_ast_passes/src/feature_gate.rs
@@ -490,7 +490,6 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session, features: &Features) {
half_open_range_patterns_in_slices,
"half-open range patterns in slices are unstable"
);
- gate_all!(inline_const_pat, "inline-const in pattern position is experimental");
gate_all!(associated_const_equality, "associated const equality is incomplete");
gate_all!(yeet_expr, "`do yeet` expression is experimental");
gate_all!(dyn_star, "`dyn*` trait objects are experimental");
diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs
index 37755e7d61db1..295da5fa31fda 100644
--- a/compiler/rustc_driver_impl/src/lib.rs
+++ b/compiler/rustc_driver_impl/src/lib.rs
@@ -64,6 +64,7 @@ use rustc_session::lint::{Lint, LintId};
use rustc_session::output::{CRATE_TYPES, collect_crate_types, invalid_output_for_target};
use rustc_session::{EarlyDiagCtxt, Session, config, filesearch};
use rustc_span::FileName;
+use rustc_span::def_id::LOCAL_CRATE;
use rustc_target::json::ToJson;
use rustc_target::spec::{Target, TargetTuple};
use time::OffsetDateTime;
@@ -392,14 +393,10 @@ pub fn run_compiler(at_args: &[String], callbacks: &mut (dyn Callbacks + Send))
}
fn dump_feature_usage_metrics(tcxt: TyCtxt<'_>, metrics_dir: &Path) {
- let output_filenames = tcxt.output_filenames(());
- let mut metrics_file_name = std::ffi::OsString::from("unstable_feature_usage_metrics-");
- let mut metrics_path = output_filenames.with_directory_and_extension(metrics_dir, "json");
- let metrics_file_stem =
- metrics_path.file_name().expect("there should be a valid default output filename");
- metrics_file_name.push(metrics_file_stem);
- metrics_path.pop();
- metrics_path.push(metrics_file_name);
+ let hash = tcxt.crate_hash(LOCAL_CRATE);
+ let crate_name = tcxt.crate_name(LOCAL_CRATE);
+ let metrics_file_name = format!("unstable_feature_usage_metrics-{crate_name}-{hash}.json");
+ let metrics_path = metrics_dir.join(metrics_file_name);
if let Err(error) = tcxt.features().dump_feature_usage_metrics(metrics_path) {
// FIXME(yaahc): once metrics can be enabled by default we will want "failure to emit
// default metrics" to only produce a warning when metrics are enabled by default and emit
diff --git a/compiler/rustc_feature/src/removed.rs b/compiler/rustc_feature/src/removed.rs
index 47e4f9a2fe885..6ba7b22a0dffa 100644
--- a/compiler/rustc_feature/src/removed.rs
+++ b/compiler/rustc_feature/src/removed.rs
@@ -142,6 +142,9 @@ declare_features! (
/// Allows inferring `'static` outlives requirements (RFC 2093).
(removed, infer_static_outlives_requirements, "1.63.0", Some(54185),
Some("removed as it caused some confusion and discussion was inactive for years")),
+ /// Allow anonymous constants from an inline `const` block in pattern position
+ (removed, inline_const_pat, "CURRENT_RUSTC_VERSION", Some(76001),
+ Some("removed due to implementation concerns as it requires significant refactorings")),
/// Lazily evaluate constants. This allows constants to depend on type parameters.
(removed, lazy_normalization_consts, "1.46.0", Some(72219), Some("superseded by `generic_const_exprs`")),
/// Changes `impl Trait` to capture all lifetimes in scope.
diff --git a/compiler/rustc_feature/src/unstable.rs b/compiler/rustc_feature/src/unstable.rs
index 72468dd4714d7..7c931e32f63fd 100644
--- a/compiler/rustc_feature/src/unstable.rs
+++ b/compiler/rustc_feature/src/unstable.rs
@@ -531,8 +531,6 @@ declare_features! (
(unstable, import_trait_associated_functions, "1.86.0", Some(134691)),
/// Allows associated types in inherent impls.
(incomplete, inherent_associated_types, "1.52.0", Some(8995)),
- /// Allow anonymous constants from an inline `const` block in pattern position
- (unstable, inline_const_pat, "1.58.0", Some(76001)),
/// Allows using `pointer` and `reference` in intra-doc links
(unstable, intra_doc_pointers, "1.51.0", Some(80896)),
// Allows using the `kl` and `widekl` target features and the associated intrinsics
diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
index 86f1bcc46eea1..257bdc01993fb 100644
--- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
+++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
@@ -855,10 +855,15 @@ extern "C" LLVMRustResult LLVMRustOptimize(
}
if (LintIR) {
- PipelineStartEPCallbacks.push_back(
- [](ModulePassManager &MPM, OptimizationLevel Level) {
- MPM.addPass(createModuleToFunctionPassAdaptor(LintPass()));
- });
+ PipelineStartEPCallbacks.push_back([](ModulePassManager &MPM,
+ OptimizationLevel Level) {
+#if LLVM_VERSION_GE(21, 0)
+ MPM.addPass(
+ createModuleToFunctionPassAdaptor(LintPass(/*AbortOnError=*/true)));
+#else
+ MPM.addPass(createModuleToFunctionPassAdaptor(LintPass()));
+#endif
+ });
}
if (InstrumentCoverage) {
diff --git a/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs b/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs
index 89a306c610477..dd0e07f2218eb 100644
--- a/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs
+++ b/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs
@@ -219,6 +219,8 @@ pub(crate) fn coroutine_by_move_body_def_id<'tcx>(
mir::MirSource::from_instance(InstanceKind::Item(body_def.def_id().to_def_id()));
dump_mir(tcx, false, "built", &"after", &by_move_body, |_, _| Ok(()));
+ // Feed HIR because we try to access this body's attrs in the inliner.
+ body_def.feed_hir();
// Inherited from the by-ref coroutine.
body_def.codegen_fn_attrs(tcx.codegen_fn_attrs(coroutine_def_id).clone());
body_def.coverage_attr_on(tcx.coverage_attr_on(coroutine_def_id));
diff --git a/compiler/rustc_mir_transform/src/coverage/mappings.rs b/compiler/rustc_mir_transform/src/coverage/mappings.rs
index d83c0d40a7e54..73bd2d0705e17 100644
--- a/compiler/rustc_mir_transform/src/coverage/mappings.rs
+++ b/compiler/rustc_mir_transform/src/coverage/mappings.rs
@@ -96,7 +96,7 @@ pub(super) fn extract_all_mapping_info_from_mir<'tcx>(
}
} else {
// Extract coverage spans from MIR statements/terminators as normal.
- extract_refined_covspans(mir_body, hir_info, graph, &mut code_mappings);
+ extract_refined_covspans(tcx, mir_body, hir_info, graph, &mut code_mappings);
}
branch_pairs.extend(extract_branch_pairs(mir_body, hir_info, graph));
diff --git a/compiler/rustc_mir_transform/src/coverage/spans.rs b/compiler/rustc_mir_transform/src/coverage/spans.rs
index 8befe9c5d8dd8..f57a158e3e4a7 100644
--- a/compiler/rustc_mir_transform/src/coverage/spans.rs
+++ b/compiler/rustc_mir_transform/src/coverage/spans.rs
@@ -1,7 +1,9 @@
use std::collections::VecDeque;
+use std::iter;
use rustc_data_structures::fx::FxHashSet;
use rustc_middle::mir;
+use rustc_middle::ty::TyCtxt;
use rustc_span::{DesugaringKind, ExpnKind, MacroKind, Span};
use tracing::{debug, debug_span, instrument};
@@ -11,8 +13,9 @@ use crate::coverage::{ExtractedHirInfo, mappings, unexpand};
mod from_mir;
-pub(super) fn extract_refined_covspans(
- mir_body: &mir::Body<'_>,
+pub(super) fn extract_refined_covspans<'tcx>(
+ tcx: TyCtxt<'tcx>,
+ mir_body: &mir::Body<'tcx>,
hir_info: &ExtractedHirInfo,
graph: &CoverageGraph,
code_mappings: &mut impl Extend,
@@ -50,7 +53,7 @@ pub(super) fn extract_refined_covspans(
// First, perform the passes that need macro information.
covspans.sort_by(|a, b| graph.cmp_in_dominator_order(a.bcb, b.bcb));
remove_unwanted_expansion_spans(&mut covspans);
- split_visible_macro_spans(&mut covspans);
+ shrink_visible_macro_spans(tcx, &mut covspans);
// We no longer need the extra information in `SpanFromMir`, so convert to `Covspan`.
let mut covspans = covspans.into_iter().map(SpanFromMir::into_covspan).collect::>();
@@ -83,9 +86,7 @@ pub(super) fn extract_refined_covspans(
// Split the covspans into separate buckets that don't overlap any holes.
let buckets = divide_spans_into_buckets(covspans, &holes);
- for mut covspans in buckets {
- // Make sure each individual bucket is internally sorted.
- covspans.sort_by(compare_covspans);
+ for covspans in buckets {
let _span = debug_span!("processing bucket", ?covspans).entered();
let mut covspans = remove_unwanted_overlapping_spans(covspans);
@@ -129,82 +130,50 @@ fn remove_unwanted_expansion_spans(covspans: &mut Vec) {
}
/// When a span corresponds to a macro invocation that is visible from the
-/// function body, split it into two parts. The first part covers just the
-/// macro name plus `!`, and the second part covers the rest of the macro
-/// invocation. This seems to give better results for code that uses macros.
-fn split_visible_macro_spans(covspans: &mut Vec) {
- let mut extra_spans = vec![];
-
- covspans.retain(|covspan| {
- let Some(ExpnKind::Macro(MacroKind::Bang, visible_macro)) = covspan.expn_kind else {
- return true;
- };
-
- let split_len = visible_macro.as_str().len() as u32 + 1;
- let (before, after) = covspan.span.split_at(split_len);
- if !covspan.span.contains(before) || !covspan.span.contains(after) {
- // Something is unexpectedly wrong with the split point.
- // The debug assertion in `split_at` will have already caught this,
- // but in release builds it's safer to do nothing and maybe get a
- // bug report for unexpected coverage, rather than risk an ICE.
- return true;
+/// function body, truncate it to just the macro name plus `!`.
+/// This seems to give better results for code that uses macros.
+fn shrink_visible_macro_spans(tcx: TyCtxt<'_>, covspans: &mut Vec) {
+ let source_map = tcx.sess.source_map();
+
+ for covspan in covspans {
+ if matches!(covspan.expn_kind, Some(ExpnKind::Macro(MacroKind::Bang, _))) {
+ covspan.span = source_map.span_through_char(covspan.span, '!');
}
-
- extra_spans.push(SpanFromMir::new(before, covspan.expn_kind.clone(), covspan.bcb));
- extra_spans.push(SpanFromMir::new(after, covspan.expn_kind.clone(), covspan.bcb));
- false // Discard the original covspan that we just split.
- });
-
- // The newly-split spans are added at the end, so any previous sorting
- // is not preserved.
- covspans.extend(extra_spans);
+ }
}
/// Uses the holes to divide the given covspans into buckets, such that:
-/// - No span in any hole overlaps a bucket (truncating the spans if necessary).
+/// - No span in any hole overlaps a bucket (discarding spans if necessary).
/// - The spans in each bucket are strictly after all spans in previous buckets,
/// and strictly before all spans in subsequent buckets.
///
-/// The resulting buckets are sorted relative to each other, but might not be
-/// internally sorted.
+/// The lists of covspans and holes must be sorted.
+/// The resulting buckets are sorted relative to each other, and each bucket's
+/// contents are sorted.
#[instrument(level = "debug")]
fn divide_spans_into_buckets(input_covspans: Vec, holes: &[Hole]) -> Vec> {
debug_assert!(input_covspans.is_sorted_by(|a, b| compare_spans(a.span, b.span).is_le()));
debug_assert!(holes.is_sorted_by(|a, b| compare_spans(a.span, b.span).is_le()));
- // Now we're ready to start carving holes out of the initial coverage spans,
- // and grouping them in buckets separated by the holes.
+ // Now we're ready to start grouping spans into buckets separated by holes.
let mut input_covspans = VecDeque::from(input_covspans);
- let mut fragments = vec![];
// For each hole:
// - Identify the spans that are entirely or partly before the hole.
- // - Put those spans in a corresponding bucket, truncated to the start of the hole.
- // - If one of those spans also extends after the hole, put the rest of it
- // in a "fragments" vector that is processed by the next hole.
+ // - Discard any that overlap with the hole.
+ // - Add the remaining identified spans to the corresponding bucket.
let mut buckets = (0..holes.len()).map(|_| vec![]).collect::>();
for (hole, bucket) in holes.iter().zip(&mut buckets) {
- let fragments_from_prev = std::mem::take(&mut fragments);
-
- // Only inspect spans that precede or overlap this hole,
- // leaving the rest to be inspected by later holes.
- // (This relies on the spans and holes both being sorted.)
- let relevant_input_covspans =
- drain_front_while(&mut input_covspans, |c| c.span.lo() < hole.span.hi());
-
- for covspan in fragments_from_prev.into_iter().chain(relevant_input_covspans) {
- let (before, after) = covspan.split_around_hole_span(hole.span);
- bucket.extend(before);
- fragments.extend(after);
- }
+ bucket.extend(
+ drain_front_while(&mut input_covspans, |c| c.span.lo() < hole.span.hi())
+ .filter(|c| !c.span.overlaps(hole.span)),
+ );
}
- // After finding the spans before each hole, any remaining fragments/spans
- // form their own final bucket, after the final hole.
+ // Any remaining spans form their own final bucket, after the final hole.
// (If there were no holes, this will just be all of the initial spans.)
- fragments.extend(input_covspans);
- buckets.push(fragments);
+ buckets.push(Vec::from(input_covspans));
buckets
}
@@ -215,7 +184,7 @@ fn drain_front_while<'a, T>(
queue: &'a mut VecDeque,
mut pred_fn: impl FnMut(&T) -> bool,
) -> impl Iterator- {
- std::iter::from_fn(move || if pred_fn(queue.front()?) { queue.pop_front() } else { None })
+ iter::from_fn(move || queue.pop_front_if(|x| pred_fn(x)))
}
/// Takes one of the buckets of (sorted) spans extracted from MIR, and "refines"
@@ -258,22 +227,6 @@ struct Covspan {
}
impl Covspan {
- /// Splits this covspan into 0-2 parts:
- /// - The part that is strictly before the hole span, if any.
- /// - The part that is strictly after the hole span, if any.
- fn split_around_hole_span(&self, hole_span: Span) -> (Option, Option) {
- let before = try {
- let span = self.span.trim_end(hole_span)?;
- Self { span, ..*self }
- };
- let after = try {
- let span = self.span.trim_start(hole_span)?;
- Self { span, ..*self }
- };
-
- (before, after)
- }
-
/// If `self` and `other` can be merged (i.e. they have the same BCB),
/// mutates `self.span` to also include `other.span` and returns true.
///
diff --git a/compiler/rustc_mir_transform/src/coverage/spans/from_mir.rs b/compiler/rustc_mir_transform/src/coverage/spans/from_mir.rs
index 1faa2171c0b02..804cd8ab3f7d3 100644
--- a/compiler/rustc_mir_transform/src/coverage/spans/from_mir.rs
+++ b/compiler/rustc_mir_transform/src/coverage/spans/from_mir.rs
@@ -120,22 +120,20 @@ fn filtered_terminator_span(terminator: &Terminator<'_>) -> Option {
// an `if condition { block }` has a span that includes the executed block, if true,
// but for coverage, the code region executed, up to *and* through the SwitchInt,
// actually stops before the if's block.)
- TerminatorKind::Unreachable // Unreachable blocks are not connected to the MIR CFG
+ TerminatorKind::Unreachable
| TerminatorKind::Assert { .. }
| TerminatorKind::Drop { .. }
| TerminatorKind::SwitchInt { .. }
- // For `FalseEdge`, only the `real` branch is taken, so it is similar to a `Goto`.
| TerminatorKind::FalseEdge { .. }
| TerminatorKind::Goto { .. } => None,
// Call `func` operand can have a more specific span when part of a chain of calls
- TerminatorKind::Call { ref func, .. }
- | TerminatorKind::TailCall { ref func, .. } => {
+ TerminatorKind::Call { ref func, .. } | TerminatorKind::TailCall { ref func, .. } => {
let mut span = terminator.source_info.span;
- if let mir::Operand::Constant(box constant) = func {
- if constant.span.lo() > span.lo() {
- span = span.with_lo(constant.span.lo());
- }
+ if let mir::Operand::Constant(constant) = func
+ && span.contains(constant.span)
+ {
+ span = constant.span;
}
Some(span)
}
@@ -147,9 +145,7 @@ fn filtered_terminator_span(terminator: &Terminator<'_>) -> Option {
| TerminatorKind::Yield { .. }
| TerminatorKind::CoroutineDrop
| TerminatorKind::FalseUnwind { .. }
- | TerminatorKind::InlineAsm { .. } => {
- Some(terminator.source_info.span)
- }
+ | TerminatorKind::InlineAsm { .. } => Some(terminator.source_info.span),
}
}
diff --git a/compiler/rustc_mir_transform/src/lib.rs b/compiler/rustc_mir_transform/src/lib.rs
index 205d388f4fb50..c372b77ad2575 100644
--- a/compiler/rustc_mir_transform/src/lib.rs
+++ b/compiler/rustc_mir_transform/src/lib.rs
@@ -12,6 +12,7 @@
#![feature(map_try_insert)]
#![feature(never_type)]
#![feature(try_blocks)]
+#![feature(vec_deque_pop_if)]
#![feature(yeet_expr)]
// tidy-alphabetical-end
diff --git a/compiler/rustc_parse/messages.ftl b/compiler/rustc_parse/messages.ftl
index 3253222b8f23f..24679692a0b0b 100644
--- a/compiler/rustc_parse/messages.ftl
+++ b/compiler/rustc_parse/messages.ftl
@@ -838,8 +838,6 @@ parse_unexpected_expr_in_pat_const_sugg = consider extracting the expression int
parse_unexpected_expr_in_pat_create_guard_sugg = consider moving the expression to a match arm guard
-parse_unexpected_expr_in_pat_inline_const_sugg = consider wrapping the expression in an inline `const` (requires `{"#"}![feature(inline_const_pat)]`)
-
parse_unexpected_expr_in_pat_update_guard_sugg = consider moving the expression to the match arm guard
parse_unexpected_if_with_if = unexpected `if` in the condition expression
diff --git a/compiler/rustc_parse/src/errors.rs b/compiler/rustc_parse/src/errors.rs
index 1b4341ec28d1a..55cb76878238e 100644
--- a/compiler/rustc_parse/src/errors.rs
+++ b/compiler/rustc_parse/src/errors.rs
@@ -2769,17 +2769,6 @@ pub(crate) enum UnexpectedExpressionInPatternSugg {
/// The statement's block's indentation.
indentation: String,
},
-
- #[multipart_suggestion(
- parse_unexpected_expr_in_pat_inline_const_sugg,
- applicability = "maybe-incorrect"
- )]
- InlineConst {
- #[suggestion_part(code = "const {{ ")]
- start_span: Span,
- #[suggestion_part(code = " }}")]
- end_span: Span,
- },
}
#[derive(Diagnostic)]
diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs
index a79b40482883f..d865fd427641d 100644
--- a/compiler/rustc_parse/src/parser/mod.rs
+++ b/compiler/rustc_parse/src/parser/mod.rs
@@ -1370,9 +1370,6 @@ impl<'a> Parser<'a> {
/// Parses inline const expressions.
fn parse_const_block(&mut self, span: Span, pat: bool) -> PResult<'a, P> {
- if pat {
- self.psess.gated_spans.gate(sym::inline_const_pat, span);
- }
self.expect_keyword(exp!(Const))?;
let (attrs, blk) = self.parse_inner_attrs_and_block(None)?;
let anon_const = AnonConst {
@@ -1380,7 +1377,17 @@ impl<'a> Parser<'a> {
value: self.mk_expr(blk.span, ExprKind::Block(blk, None)),
};
let blk_span = anon_const.value.span;
- Ok(self.mk_expr_with_attrs(span.to(blk_span), ExprKind::ConstBlock(anon_const), attrs))
+ let kind = if pat {
+ let guar = self
+ .dcx()
+ .struct_span_err(blk_span, "`inline_const_pat` has been removed")
+ .with_help("use a named `const`-item or an `if`-guard instead")
+ .emit();
+ ExprKind::Err(guar)
+ } else {
+ ExprKind::ConstBlock(anon_const)
+ };
+ Ok(self.mk_expr_with_attrs(span.to(blk_span), kind, attrs))
}
/// Parses mutability (`mut` or nothing).
diff --git a/compiler/rustc_parse/src/parser/pat.rs b/compiler/rustc_parse/src/parser/pat.rs
index ec14c5718da53..174cc929fa70d 100644
--- a/compiler/rustc_parse/src/parser/pat.rs
+++ b/compiler/rustc_parse/src/parser/pat.rs
@@ -631,15 +631,6 @@ impl<'a> Parser<'a> {
ident,
indentation,
});
-
- // help: wrap the expr in a `const { expr }`
- // FIXME(inline_const_pat): once stabilized, remove this check and remove the `(requires #[feature(inline_const_pat)])` note from the message
- if self.parser.psess.unstable_features.is_nightly_build() {
- err.subdiagnostic(UnexpectedExpressionInPatternSugg::InlineConst {
- start_span: expr_span.shrink_to_lo(),
- end_span: expr_span.shrink_to_hi(),
- });
- }
},
);
}
diff --git a/compiler/rustc_trait_selection/src/traits/effects.rs b/compiler/rustc_trait_selection/src/traits/effects.rs
index 3c127416cbf7c..b8e15088853c3 100644
--- a/compiler/rustc_trait_selection/src/traits/effects.rs
+++ b/compiler/rustc_trait_selection/src/traits/effects.rs
@@ -106,10 +106,6 @@ fn match_candidate<'tcx>(
more_nested(selcx, &mut nested);
- for nested in &mut nested {
- nested.set_depth_from_parent(obligation.recursion_depth);
- }
-
Ok(nested)
}
@@ -378,10 +374,6 @@ fn evaluate_host_effect_from_selection_candiate<'tcx>(
}),
);
- for nested in &mut nested {
- nested.set_depth_from_parent(obligation.recursion_depth);
- }
-
Ok(nested)
}
_ => Err(EvaluationFailure::NoSolution),
diff --git a/compiler/rustc_trait_selection/src/traits/fulfill.rs b/compiler/rustc_trait_selection/src/traits/fulfill.rs
index e39f8e673dbac..e98a240a53f52 100644
--- a/compiler/rustc_trait_selection/src/traits/fulfill.rs
+++ b/compiler/rustc_trait_selection/src/traits/fulfill.rs
@@ -225,9 +225,15 @@ struct FulfillProcessor<'a, 'tcx> {
selcx: SelectionContext<'a, 'tcx>,
}
-fn mk_pending<'tcx>(os: PredicateObligations<'tcx>) -> PendingPredicateObligations<'tcx> {
+fn mk_pending<'tcx>(
+ parent: &PredicateObligation<'tcx>,
+ os: PredicateObligations<'tcx>,
+) -> PendingPredicateObligations<'tcx> {
os.into_iter()
- .map(|o| PendingPredicateObligation { obligation: o, stalled_on: vec![] })
+ .map(|mut o| {
+ o.set_depth_from_parent(parent.recursion_depth);
+ PendingPredicateObligation { obligation: o, stalled_on: vec![] }
+ })
.collect()
}
@@ -341,7 +347,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
);
if predicate != obligation.predicate {
obligations.push(obligation.with(infcx.tcx, predicate));
- return ProcessResult::Changed(mk_pending(obligations));
+ return ProcessResult::Changed(mk_pending(obligation, obligations));
}
}
let binder = obligation.predicate.kind();
@@ -385,7 +391,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
let mut obligations = PredicateObligations::with_capacity(1);
obligations.push(obligation.with(infcx.tcx, pred));
- ProcessResult::Changed(mk_pending(obligations))
+ ProcessResult::Changed(mk_pending(obligation, obligations))
}
ty::PredicateKind::Ambiguous => ProcessResult::Unchanged,
ty::PredicateKind::NormalizesTo(..) => {
@@ -410,6 +416,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
let host_obligation = obligation.with(infcx.tcx, data);
self.process_host_obligation(
+ obligation,
host_obligation,
&mut pending_obligation.stalled_on,
)
@@ -486,7 +493,10 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
// `>::Output` when this is an `Expr` representing
// `lhs + rhs`.
ty::ConstKind::Expr(_) => {
- return ProcessResult::Changed(mk_pending(PredicateObligations::new()));
+ return ProcessResult::Changed(mk_pending(
+ obligation,
+ PredicateObligations::new(),
+ ));
}
ty::ConstKind::Placeholder(_) => {
bug!("placeholder const {:?} in old solver", ct)
@@ -503,7 +513,10 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
ct_ty,
ty,
) {
- Ok(inf_ok) => ProcessResult::Changed(mk_pending(inf_ok.into_obligations())),
+ Ok(inf_ok) => ProcessResult::Changed(mk_pending(
+ obligation,
+ inf_ok.into_obligations(),
+ )),
Err(_) => ProcessResult::Error(FulfillmentErrorCode::Select(
SelectionError::ConstArgHasWrongType { ct, ct_ty, expected_ty: ty },
)),
@@ -537,7 +550,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
vec![TyOrConstInferVar::maybe_from_generic_arg(arg).unwrap()];
ProcessResult::Unchanged
}
- Some(os) => ProcessResult::Changed(mk_pending(os)),
+ Some(os) => ProcessResult::Changed(mk_pending(obligation, os)),
}
}
@@ -553,11 +566,8 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
vec![TyOrConstInferVar::Ty(a), TyOrConstInferVar::Ty(b)];
ProcessResult::Unchanged
}
- Ok(Ok(mut ok)) => {
- for subobligation in &mut ok.obligations {
- subobligation.set_depth_from_parent(obligation.recursion_depth);
- }
- ProcessResult::Changed(mk_pending(ok.obligations))
+ Ok(Ok(ok)) => {
+ ProcessResult::Changed(mk_pending(obligation, ok.obligations))
}
Ok(Err(err)) => {
let expected_found = if subtype.a_is_expected {
@@ -582,7 +592,9 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
vec![TyOrConstInferVar::Ty(a), TyOrConstInferVar::Ty(b)];
ProcessResult::Unchanged
}
- Ok(Ok(ok)) => ProcessResult::Changed(mk_pending(ok.obligations)),
+ Ok(Ok(ok)) => {
+ ProcessResult::Changed(mk_pending(obligation, ok.obligations))
+ }
Ok(Err(err)) => {
let expected_found = ExpectedFound::new(coerce.b, coerce.a);
ProcessResult::Error(FulfillmentErrorCode::Subtype(expected_found, err))
@@ -645,6 +657,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
)
{
return ProcessResult::Changed(mk_pending(
+ obligation,
new_obligations.into_obligations(),
));
}
@@ -659,6 +672,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
.eq(DefineOpaqueTypes::Yes, c1, c2)
{
return ProcessResult::Changed(mk_pending(
+ obligation,
new_obligations.into_obligations(),
));
}
@@ -704,9 +718,10 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
c1,
c2,
) {
- Ok(inf_ok) => {
- ProcessResult::Changed(mk_pending(inf_ok.into_obligations()))
- }
+ Ok(inf_ok) => ProcessResult::Changed(mk_pending(
+ obligation,
+ inf_ok.into_obligations(),
+ )),
Err(err) => {
ProcessResult::Error(FulfillmentErrorCode::ConstEquate(
ExpectedFound::new(c1, c2),
@@ -790,7 +805,7 @@ impl<'a, 'tcx> FulfillProcessor<'a, 'tcx> {
match self.selcx.poly_select(&trait_obligation) {
Ok(Some(impl_source)) => {
debug!("selecting trait at depth {} yielded Ok(Some)", obligation.recursion_depth);
- ProcessResult::Changed(mk_pending(impl_source.nested_obligations()))
+ ProcessResult::Changed(mk_pending(obligation, impl_source.nested_obligations()))
}
Ok(None) => {
debug!("selecting trait at depth {} yielded Ok(None)", obligation.recursion_depth);
@@ -854,7 +869,7 @@ impl<'a, 'tcx> FulfillProcessor<'a, 'tcx> {
}
match project::poly_project_and_unify_term(&mut self.selcx, &project_obligation) {
- ProjectAndUnifyResult::Holds(os) => ProcessResult::Changed(mk_pending(os)),
+ ProjectAndUnifyResult::Holds(os) => ProcessResult::Changed(mk_pending(obligation, os)),
ProjectAndUnifyResult::FailedNormalization => {
stalled_on.clear();
stalled_on.extend(args_infer_vars(
@@ -868,7 +883,7 @@ impl<'a, 'tcx> FulfillProcessor<'a, 'tcx> {
let mut obligations = PredicateObligations::with_capacity(1);
obligations.push(project_obligation.with(tcx, project_obligation.predicate));
- ProcessResult::Changed(mk_pending(obligations))
+ ProcessResult::Changed(mk_pending(obligation, obligations))
}
ProjectAndUnifyResult::MismatchedProjectionTypes(e) => {
ProcessResult::Error(FulfillmentErrorCode::Project(e))
@@ -878,11 +893,12 @@ impl<'a, 'tcx> FulfillProcessor<'a, 'tcx> {
fn process_host_obligation(
&mut self,
+ obligation: &PredicateObligation<'tcx>,
host_obligation: HostEffectObligation<'tcx>,
stalled_on: &mut Vec,
) -> ProcessResult, FulfillmentErrorCode<'tcx>> {
match effects::evaluate_host_effect_obligation(&mut self.selcx, &host_obligation) {
- Ok(nested) => ProcessResult::Changed(mk_pending(nested)),
+ Ok(nested) => ProcessResult::Changed(mk_pending(obligation, nested)),
Err(effects::EvaluationFailure::Ambiguous) => {
stalled_on.clear();
stalled_on.extend(args_infer_vars(
diff --git a/compiler/rustc_trait_selection/src/traits/select/confirmation.rs b/compiler/rustc_trait_selection/src/traits/select/confirmation.rs
index 630241725fdb2..2cb7d2d893135 100644
--- a/compiler/rustc_trait_selection/src/traits/select/confirmation.rs
+++ b/compiler/rustc_trait_selection/src/traits/select/confirmation.rs
@@ -39,7 +39,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
obligation: &PolyTraitObligation<'tcx>,
candidate: SelectionCandidate<'tcx>,
) -> Result, SelectionError<'tcx>> {
- let mut impl_src = match candidate {
+ Ok(match candidate {
SizedCandidate { has_nested } => {
let data = self.confirm_builtin_candidate(obligation, has_nested);
ImplSource::Builtin(BuiltinImplSource::Misc, data)
@@ -139,15 +139,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
BikeshedGuaranteedNoDropCandidate => {
self.confirm_bikeshed_guaranteed_no_drop_candidate(obligation)
}
- };
-
- // The obligations returned by confirmation are recursively evaluated
- // so we need to make sure they have the correct depth.
- for subobligation in impl_src.borrow_nested_obligations_mut() {
- subobligation.set_depth_from_parent(obligation.recursion_depth);
- }
-
- Ok(impl_src)
+ })
}
fn confirm_projection_candidate(
diff --git a/library/core/src/slice/iter.rs b/library/core/src/slice/iter.rs
index a687ed7129dc8..d48248749c265 100644
--- a/library/core/src/slice/iter.rs
+++ b/library/core/src/slice/iter.rs
@@ -93,9 +93,9 @@ unsafe impl Send for Iter<'_, T> {}
impl<'a, T> Iter<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a [T]) -> Self {
+ pub(super) const fn new(slice: &'a [T]) -> Self {
let len = slice.len();
- let ptr: NonNull = NonNull::from(slice).cast();
+ let ptr: NonNull = NonNull::from_ref(slice).cast();
// SAFETY: Similar to `IterMut::new`.
unsafe {
let end_or_len =
@@ -218,9 +218,9 @@ unsafe impl Send for IterMut<'_, T> {}
impl<'a, T> IterMut<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a mut [T]) -> Self {
+ pub(super) const fn new(slice: &'a mut [T]) -> Self {
let len = slice.len();
- let ptr: NonNull = NonNull::from(slice).cast();
+ let ptr: NonNull = NonNull::from_mut(slice).cast();
// SAFETY: There are several things here:
//
// `ptr` has been obtained by `slice.as_ptr()` where `slice` is a valid
@@ -1335,7 +1335,7 @@ pub struct Windows<'a, T: 'a> {
impl<'a, T: 'a> Windows<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a [T], size: NonZero) -> Self {
+ pub(super) const fn new(slice: &'a [T], size: NonZero) -> Self {
Self { v: slice, size }
}
}
@@ -1487,7 +1487,7 @@ pub struct Chunks<'a, T: 'a> {
impl<'a, T: 'a> Chunks<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a [T], size: usize) -> Self {
+ pub(super) const fn new(slice: &'a [T], size: usize) -> Self {
Self { v: slice, chunk_size: size }
}
}
@@ -1677,7 +1677,7 @@ pub struct ChunksMut<'a, T: 'a> {
impl<'a, T: 'a> ChunksMut<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a mut [T], size: usize) -> Self {
+ pub(super) const fn new(slice: &'a mut [T], size: usize) -> Self {
Self { v: slice, chunk_size: size, _marker: PhantomData }
}
}
@@ -1863,7 +1863,7 @@ pub struct ChunksExact<'a, T: 'a> {
impl<'a, T> ChunksExact<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a [T], chunk_size: usize) -> Self {
+ pub(super) const fn new(slice: &'a [T], chunk_size: usize) -> Self {
let rem = slice.len() % chunk_size;
let fst_len = slice.len() - rem;
// SAFETY: 0 <= fst_len <= slice.len() by construction above
@@ -2043,7 +2043,7 @@ pub struct ChunksExactMut<'a, T: 'a> {
impl<'a, T> ChunksExactMut<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a mut [T], chunk_size: usize) -> Self {
+ pub(super) const fn new(slice: &'a mut [T], chunk_size: usize) -> Self {
let rem = slice.len() % chunk_size;
let fst_len = slice.len() - rem;
// SAFETY: 0 <= fst_len <= slice.len() by construction above
@@ -2210,7 +2210,7 @@ pub struct ArrayWindows<'a, T: 'a, const N: usize> {
impl<'a, T: 'a, const N: usize> ArrayWindows<'a, T, N> {
#[inline]
- pub(super) fn new(slice: &'a [T]) -> Self {
+ pub(super) const fn new(slice: &'a [T]) -> Self {
let num_windows = slice.len().saturating_sub(N - 1);
Self { slice_head: slice.as_ptr(), num: num_windows, marker: PhantomData }
}
@@ -2334,8 +2334,10 @@ pub struct ArrayChunks<'a, T: 'a, const N: usize> {
}
impl<'a, T, const N: usize> ArrayChunks<'a, T, N> {
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
+ // #[rustc_const_unstable(feature = "slice_as_chunks", issue = "74985")]
#[inline]
- pub(super) fn new(slice: &'a [T]) -> Self {
+ pub(super) const fn new(slice: &'a [T]) -> Self {
let (array_slice, rem) = slice.as_chunks();
Self { iter: array_slice.iter(), rem }
}
@@ -2460,8 +2462,9 @@ pub struct ArrayChunksMut<'a, T: 'a, const N: usize> {
}
impl<'a, T, const N: usize> ArrayChunksMut<'a, T, N> {
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
- pub(super) fn new(slice: &'a mut [T]) -> Self {
+ pub(super) const fn new(slice: &'a mut [T]) -> Self {
let (array_slice, rem) = slice.as_chunks_mut();
Self { iter: array_slice.iter_mut(), rem }
}
@@ -2579,7 +2582,7 @@ pub struct RChunks<'a, T: 'a> {
impl<'a, T: 'a> RChunks<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a [T], size: usize) -> Self {
+ pub(super) const fn new(slice: &'a [T], size: usize) -> Self {
Self { v: slice, chunk_size: size }
}
}
@@ -2759,7 +2762,7 @@ pub struct RChunksMut<'a, T: 'a> {
impl<'a, T: 'a> RChunksMut<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a mut [T], size: usize) -> Self {
+ pub(super) const fn new(slice: &'a mut [T], size: usize) -> Self {
Self { v: slice, chunk_size: size, _marker: PhantomData }
}
}
@@ -2950,7 +2953,7 @@ pub struct RChunksExact<'a, T: 'a> {
impl<'a, T> RChunksExact<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a [T], chunk_size: usize) -> Self {
+ pub(super) const fn new(slice: &'a [T], chunk_size: usize) -> Self {
let rem = slice.len() % chunk_size;
// SAFETY: 0 <= rem <= slice.len() by construction above
let (fst, snd) = unsafe { slice.split_at_unchecked(rem) };
@@ -2976,7 +2979,8 @@ impl<'a, T> RChunksExact<'a, T> {
/// ```
#[must_use]
#[stable(feature = "rchunks", since = "1.31.0")]
- pub fn remainder(&self) -> &'a [T] {
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
+ pub const fn remainder(&self) -> &'a [T] {
self.rem
}
}
@@ -3132,7 +3136,7 @@ pub struct RChunksExactMut<'a, T: 'a> {
impl<'a, T> RChunksExactMut<'a, T> {
#[inline]
- pub(super) fn new(slice: &'a mut [T], chunk_size: usize) -> Self {
+ pub(super) const fn new(slice: &'a mut [T], chunk_size: usize) -> Self {
let rem = slice.len() % chunk_size;
// SAFETY: 0 <= rem <= slice.len() by construction above
let (fst, snd) = unsafe { slice.split_at_mut_unchecked(rem) };
@@ -3144,7 +3148,8 @@ impl<'a, T> RChunksExactMut<'a, T> {
/// elements.
#[must_use = "`self` will be dropped if the result is not used"]
#[stable(feature = "rchunks", since = "1.31.0")]
- pub fn into_remainder(self) -> &'a mut [T] {
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
+ pub const fn into_remainder(self) -> &'a mut [T] {
self.rem
}
}
@@ -3308,7 +3313,7 @@ pub struct ChunkBy<'a, T: 'a, P> {
#[stable(feature = "slice_group_by", since = "1.77.0")]
impl<'a, T: 'a, P> ChunkBy<'a, T, P> {
- pub(super) fn new(slice: &'a [T], predicate: P) -> Self {
+ pub(super) const fn new(slice: &'a [T], predicate: P) -> Self {
ChunkBy { slice, predicate }
}
}
@@ -3395,7 +3400,7 @@ pub struct ChunkByMut<'a, T: 'a, P> {
#[stable(feature = "slice_group_by", since = "1.77.0")]
impl<'a, T: 'a, P> ChunkByMut<'a, T, P> {
- pub(super) fn new(slice: &'a mut [T], predicate: P) -> Self {
+ pub(super) const fn new(slice: &'a mut [T], predicate: P) -> Self {
ChunkByMut { slice, predicate }
}
}
diff --git a/library/core/src/slice/mod.rs b/library/core/src/slice/mod.rs
index 5bb7243c4491b..ef8fb694a326b 100644
--- a/library/core/src/slice/mod.rs
+++ b/library/core/src/slice/mod.rs
@@ -1043,9 +1043,10 @@ impl [T] {
/// assert_eq!(iterator.next(), None);
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[rustc_diagnostic_item = "slice_iter"]
- pub fn iter(&self) -> Iter<'_, T> {
+ pub const fn iter(&self) -> Iter<'_, T> {
Iter::new(self)
}
@@ -1062,9 +1063,10 @@ impl [T] {
/// }
/// assert_eq!(x, &[3, 4, 6]);
/// ```
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[stable(feature = "rust1", since = "1.0.0")]
#[inline]
- pub fn iter_mut(&mut self) -> IterMut<'_, T> {
+ pub const fn iter_mut(&mut self) -> IterMut<'_, T> {
IterMut::new(self)
}
@@ -1116,9 +1118,10 @@ impl [T] {
/// assert_eq!(array, ['s', 't', ' ', '2', '0', '1', '5', 'u', 'R']);
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn windows(&self, size: usize) -> Windows<'_, T> {
+ pub const fn windows(&self, size: usize) -> Windows<'_, T> {
let size = NonZero::new(size).expect("window size must be non-zero");
Windows::new(self, size)
}
@@ -1151,9 +1154,10 @@ impl [T] {
/// [`chunks_exact`]: slice::chunks_exact
/// [`rchunks`]: slice::rchunks
#[stable(feature = "rust1", since = "1.0.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T> {
+ pub const fn chunks(&self, chunk_size: usize) -> Chunks<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
Chunks::new(self, chunk_size)
}
@@ -1190,9 +1194,10 @@ impl [T] {
/// [`chunks_exact_mut`]: slice::chunks_exact_mut
/// [`rchunks_mut`]: slice::rchunks_mut
#[stable(feature = "rust1", since = "1.0.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<'_, T> {
+ pub const fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
ChunksMut::new(self, chunk_size)
}
@@ -1228,9 +1233,10 @@ impl [T] {
/// [`chunks`]: slice::chunks
/// [`rchunks_exact`]: slice::rchunks_exact
#[stable(feature = "chunks_exact", since = "1.31.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> {
+ pub const fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
ChunksExact::new(self, chunk_size)
}
@@ -1271,9 +1277,10 @@ impl [T] {
/// [`chunks_mut`]: slice::chunks_mut
/// [`rchunks_exact_mut`]: slice::rchunks_exact_mut
#[stable(feature = "chunks_exact", since = "1.31.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut<'_, T> {
+ pub const fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
ChunksExactMut::new(self, chunk_size)
}
@@ -1429,9 +1436,10 @@ impl [T] {
///
/// [`chunks_exact`]: slice::chunks_exact
#[unstable(feature = "array_chunks", issue = "74985")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn array_chunks(&self) -> ArrayChunks<'_, T, N> {
+ pub const fn array_chunks(&self) -> ArrayChunks<'_, T, N> {
assert!(N != 0, "chunk size must be non-zero");
ArrayChunks::new(self)
}
@@ -1592,9 +1600,10 @@ impl [T] {
///
/// [`chunks_exact_mut`]: slice::chunks_exact_mut
#[unstable(feature = "array_chunks", issue = "74985")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn array_chunks_mut(&mut self) -> ArrayChunksMut<'_, T, N> {
+ pub const fn array_chunks_mut(&mut self) -> ArrayChunksMut<'_, T, N> {
assert!(N != 0, "chunk size must be non-zero");
ArrayChunksMut::new(self)
}
@@ -1625,9 +1634,10 @@ impl [T] {
///
/// [`windows`]: slice::windows
#[unstable(feature = "array_windows", issue = "75027")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn array_windows(&self) -> ArrayWindows<'_, T, N> {
+ pub const fn array_windows(&self) -> ArrayWindows<'_, T, N> {
assert!(N != 0, "window size must be non-zero");
ArrayWindows::new(self)
}
@@ -1660,9 +1670,10 @@ impl [T] {
/// [`rchunks_exact`]: slice::rchunks_exact
/// [`chunks`]: slice::chunks
#[stable(feature = "rchunks", since = "1.31.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T> {
+ pub const fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
RChunks::new(self, chunk_size)
}
@@ -1699,9 +1710,10 @@ impl [T] {
/// [`rchunks_exact_mut`]: slice::rchunks_exact_mut
/// [`chunks_mut`]: slice::chunks_mut
#[stable(feature = "rchunks", since = "1.31.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<'_, T> {
+ pub const fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
RChunksMut::new(self, chunk_size)
}
@@ -1739,9 +1751,10 @@ impl [T] {
/// [`rchunks`]: slice::rchunks
/// [`chunks_exact`]: slice::chunks_exact
#[stable(feature = "rchunks", since = "1.31.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T> {
+ pub const fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
RChunksExact::new(self, chunk_size)
}
@@ -1783,9 +1796,10 @@ impl [T] {
/// [`rchunks_mut`]: slice::rchunks_mut
/// [`chunks_exact_mut`]: slice::chunks_exact_mut
#[stable(feature = "rchunks", since = "1.31.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
#[track_caller]
- pub fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<'_, T> {
+ pub const fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<'_, T> {
assert!(chunk_size != 0, "chunk size must be non-zero");
RChunksExactMut::new(self, chunk_size)
}
@@ -1823,8 +1837,9 @@ impl [T] {
/// assert_eq!(iter.next(), None);
/// ```
#[stable(feature = "slice_group_by", since = "1.77.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
- pub fn chunk_by(&self, pred: F) -> ChunkBy<'_, T, F>
+ pub const fn chunk_by(&self, pred: F) -> ChunkBy<'_, T, F>
where
F: FnMut(&T, &T) -> bool,
{
@@ -1864,8 +1879,9 @@ impl [T] {
/// assert_eq!(iter.next(), None);
/// ```
#[stable(feature = "slice_group_by", since = "1.77.0")]
+ #[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
#[inline]
- pub fn chunk_by_mut(&mut self, pred: F) -> ChunkByMut<'_, T, F>
+ pub const fn chunk_by_mut(&mut self, pred: F) -> ChunkByMut<'_, T, F>
where
F: FnMut(&T, &T) -> bool,
{
diff --git a/library/coretests/tests/lib.rs b/library/coretests/tests/lib.rs
index 79022fec8a20c..7ad154796f649 100644
--- a/library/coretests/tests/lib.rs
+++ b/library/coretests/tests/lib.rs
@@ -39,7 +39,6 @@
#![feature(generic_assert_internals)]
#![feature(hasher_prefixfree_extras)]
#![feature(hashmap_internals)]
-#![feature(inline_const_pat)]
#![feature(int_roundings)]
#![feature(ip)]
#![feature(ip_from)]
@@ -95,16 +94,17 @@
/// Version of `assert_matches` that ignores fancy runtime printing in const context and uses structural equality.
macro_rules! assert_eq_const_safe {
- ($left:expr, $right:expr) => {
- assert_eq_const_safe!($left, $right, concat!(stringify!($left), " == ", stringify!($right)));
+ ($t:ty: $left:expr, $right:expr) => {
+ assert_eq_const_safe!($t: $left, $right, concat!(stringify!($left), " == ", stringify!($right)));
};
- ($left:expr, $right:expr$(, $($arg:tt)+)?) => {
+ ($t:ty: $left:expr, $right:expr$(, $($arg:tt)+)?) => {
{
fn runtime() {
assert_eq!($left, $right, $($($arg)*),*);
}
const fn compiletime() {
- assert!(matches!($left, const { $right }));
+ const PAT: $t = $right;
+ assert!(matches!($left, PAT), $($($arg)*),*);
}
core::intrinsics::const_eval_select((), compiletime, runtime)
}
diff --git a/library/coretests/tests/num/int_macros.rs b/library/coretests/tests/num/int_macros.rs
index bbf19d2b444f9..0d9fb9e797e1f 100644
--- a/library/coretests/tests/num/int_macros.rs
+++ b/library/coretests/tests/num/int_macros.rs
@@ -1,5 +1,6 @@
macro_rules! int_module {
($T:ident, $U:ident) => {
+ use core::num::ParseIntError;
use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr};
use core::$T::*;
@@ -32,20 +33,20 @@ macro_rules! int_module {
test_runtime_and_compiletime! {
fn test_rem_euclid() {
- assert_eq_const_safe!((-1 as $T).rem_euclid(MIN), MAX);
+ assert_eq_const_safe!($T: (-1 as $T).rem_euclid(MIN), MAX);
}
fn test_abs() {
- assert_eq_const_safe!((1 as $T).abs(), 1 as $T);
- assert_eq_const_safe!((0 as $T).abs(), 0 as $T);
- assert_eq_const_safe!((-1 as $T).abs(), 1 as $T);
+ assert_eq_const_safe!($T: (1 as $T).abs(), 1 as $T);
+ assert_eq_const_safe!($T: (0 as $T).abs(), 0 as $T);
+ assert_eq_const_safe!($T: (-1 as $T).abs(), 1 as $T);
}
fn test_signum() {
- assert_eq_const_safe!((1 as $T).signum(), 1 as $T);
- assert_eq_const_safe!((0 as $T).signum(), 0 as $T);
- assert_eq_const_safe!((-0 as $T).signum(), 0 as $T);
- assert_eq_const_safe!((-1 as $T).signum(), -1 as $T);
+ assert_eq_const_safe!($T: (1 as $T).signum(), 1 as $T);
+ assert_eq_const_safe!($T: (0 as $T).signum(), 0 as $T);
+ assert_eq_const_safe!($T: (-0 as $T).signum(), 0 as $T);
+ assert_eq_const_safe!($T: (-1 as $T).signum(), -1 as $T);
}
fn test_is_positive() {
@@ -72,123 +73,123 @@ macro_rules! int_module {
test_runtime_and_compiletime! {
fn test_count_ones() {
- assert_eq_const_safe!(A.count_ones(), 3);
- assert_eq_const_safe!(B.count_ones(), 2);
- assert_eq_const_safe!(C.count_ones(), 5);
+ assert_eq_const_safe!(u32: A.count_ones(), 3);
+ assert_eq_const_safe!(u32: B.count_ones(), 2);
+ assert_eq_const_safe!(u32: C.count_ones(), 5);
}
fn test_count_zeros() {
- assert_eq_const_safe!(A.count_zeros(), $T::BITS - 3);
- assert_eq_const_safe!(B.count_zeros(), $T::BITS - 2);
- assert_eq_const_safe!(C.count_zeros(), $T::BITS - 5);
+ assert_eq_const_safe!(u32: A.count_zeros(), $T::BITS - 3);
+ assert_eq_const_safe!(u32: B.count_zeros(), $T::BITS - 2);
+ assert_eq_const_safe!(u32: C.count_zeros(), $T::BITS - 5);
}
fn test_leading_trailing_ones() {
const A: $T = 0b0101_1111;
- assert_eq_const_safe!(A.trailing_ones(), 5);
- assert_eq_const_safe!((!A).leading_ones(), $T::BITS - 7);
+ assert_eq_const_safe!(u32: A.trailing_ones(), 5);
+ assert_eq_const_safe!(u32: (!A).leading_ones(), $T::BITS - 7);
- assert_eq_const_safe!(A.reverse_bits().leading_ones(), 5);
+ assert_eq_const_safe!(u32: A.reverse_bits().leading_ones(), 5);
- assert_eq_const_safe!(_1.leading_ones(), $T::BITS);
- assert_eq_const_safe!(_1.trailing_ones(), $T::BITS);
+ assert_eq_const_safe!(u32: _1.leading_ones(), $T::BITS);
+ assert_eq_const_safe!(u32: _1.trailing_ones(), $T::BITS);
- assert_eq_const_safe!((_1 << 1).trailing_ones(), 0);
- assert_eq_const_safe!(MAX.leading_ones(), 0);
+ assert_eq_const_safe!(u32: (_1 << 1).trailing_ones(), 0);
+ assert_eq_const_safe!(u32: MAX.leading_ones(), 0);
- assert_eq_const_safe!((_1 << 1).leading_ones(), $T::BITS - 1);
- assert_eq_const_safe!(MAX.trailing_ones(), $T::BITS - 1);
+ assert_eq_const_safe!(u32: (_1 << 1).leading_ones(), $T::BITS - 1);
+ assert_eq_const_safe!(u32: MAX.trailing_ones(), $T::BITS - 1);
- assert_eq_const_safe!(_0.leading_ones(), 0);
- assert_eq_const_safe!(_0.trailing_ones(), 0);
+ assert_eq_const_safe!(u32: _0.leading_ones(), 0);
+ assert_eq_const_safe!(u32: _0.trailing_ones(), 0);
const X: $T = 0b0010_1100;
- assert_eq_const_safe!(X.leading_ones(), 0);
- assert_eq_const_safe!(X.trailing_ones(), 0);
+ assert_eq_const_safe!(u32: X.leading_ones(), 0);
+ assert_eq_const_safe!(u32: X.trailing_ones(), 0);
}
fn test_rotate() {
- assert_eq_const_safe!(A.rotate_left(6).rotate_right(2).rotate_right(4), A);
- assert_eq_const_safe!(B.rotate_left(3).rotate_left(2).rotate_right(5), B);
- assert_eq_const_safe!(C.rotate_left(6).rotate_right(2).rotate_right(4), C);
+ assert_eq_const_safe!($T: A.rotate_left(6).rotate_right(2).rotate_right(4), A);
+ assert_eq_const_safe!($T: B.rotate_left(3).rotate_left(2).rotate_right(5), B);
+ assert_eq_const_safe!($T: C.rotate_left(6).rotate_right(2).rotate_right(4), C);
// Rotating these should make no difference
//
// We test using 124 bits because to ensure that overlong bit shifts do
// not cause undefined behavior. See #10183.
- assert_eq_const_safe!(_0.rotate_left(124), _0);
- assert_eq_const_safe!(_1.rotate_left(124), _1);
- assert_eq_const_safe!(_0.rotate_right(124), _0);
- assert_eq_const_safe!(_1.rotate_right(124), _1);
+ assert_eq_const_safe!($T: _0.rotate_left(124), _0);
+ assert_eq_const_safe!($T: _1.rotate_left(124), _1);
+ assert_eq_const_safe!($T: _0.rotate_right(124), _0);
+ assert_eq_const_safe!($T: _1.rotate_right(124), _1);
// Rotating by 0 should have no effect
- assert_eq_const_safe!(A.rotate_left(0), A);
- assert_eq_const_safe!(B.rotate_left(0), B);
- assert_eq_const_safe!(C.rotate_left(0), C);
+ assert_eq_const_safe!($T: A.rotate_left(0), A);
+ assert_eq_const_safe!($T: B.rotate_left(0), B);
+ assert_eq_const_safe!($T: C.rotate_left(0), C);
// Rotating by a multiple of word size should also have no effect
- assert_eq_const_safe!(A.rotate_left(128), A);
- assert_eq_const_safe!(B.rotate_left(128), B);
- assert_eq_const_safe!(C.rotate_left(128), C);
+ assert_eq_const_safe!($T: A.rotate_left(128), A);
+ assert_eq_const_safe!($T: B.rotate_left(128), B);
+ assert_eq_const_safe!($T: C.rotate_left(128), C);
}
fn test_swap_bytes() {
- assert_eq_const_safe!(A.swap_bytes().swap_bytes(), A);
- assert_eq_const_safe!(B.swap_bytes().swap_bytes(), B);
- assert_eq_const_safe!(C.swap_bytes().swap_bytes(), C);
+ assert_eq_const_safe!($T: A.swap_bytes().swap_bytes(), A);
+ assert_eq_const_safe!($T: B.swap_bytes().swap_bytes(), B);
+ assert_eq_const_safe!($T: C.swap_bytes().swap_bytes(), C);
// Swapping these should make no difference
- assert_eq_const_safe!(_0.swap_bytes(), _0);
- assert_eq_const_safe!(_1.swap_bytes(), _1);
+ assert_eq_const_safe!($T: _0.swap_bytes(), _0);
+ assert_eq_const_safe!($T: _1.swap_bytes(), _1);
}
fn test_le() {
- assert_eq_const_safe!($T::from_le(A.to_le()), A);
- assert_eq_const_safe!($T::from_le(B.to_le()), B);
- assert_eq_const_safe!($T::from_le(C.to_le()), C);
- assert_eq_const_safe!($T::from_le(_0), _0);
- assert_eq_const_safe!($T::from_le(_1), _1);
- assert_eq_const_safe!(_0.to_le(), _0);
- assert_eq_const_safe!(_1.to_le(), _1);
+ assert_eq_const_safe!($T: $T::from_le(A.to_le()), A);
+ assert_eq_const_safe!($T: $T::from_le(B.to_le()), B);
+ assert_eq_const_safe!($T: $T::from_le(C.to_le()), C);
+ assert_eq_const_safe!($T: $T::from_le(_0), _0);
+ assert_eq_const_safe!($T: $T::from_le(_1), _1);
+ assert_eq_const_safe!($T: _0.to_le(), _0);
+ assert_eq_const_safe!($T: _1.to_le(), _1);
}
fn test_be() {
- assert_eq_const_safe!($T::from_be(A.to_be()), A);
- assert_eq_const_safe!($T::from_be(B.to_be()), B);
- assert_eq_const_safe!($T::from_be(C.to_be()), C);
- assert_eq_const_safe!($T::from_be(_0), _0);
- assert_eq_const_safe!($T::from_be(_1), _1);
- assert_eq_const_safe!(_0.to_be(), _0);
- assert_eq_const_safe!(_1.to_be(), _1);
+ assert_eq_const_safe!($T: $T::from_be(A.to_be()), A);
+ assert_eq_const_safe!($T: $T::from_be(B.to_be()), B);
+ assert_eq_const_safe!($T: $T::from_be(C.to_be()), C);
+ assert_eq_const_safe!($T: $T::from_be(_0), _0);
+ assert_eq_const_safe!($T: $T::from_be(_1), _1);
+ assert_eq_const_safe!($T: _0.to_be(), _0);
+ assert_eq_const_safe!($T: _1.to_be(), _1);
}
fn test_signed_checked_div() {
- assert_eq_const_safe!((10 as $T).checked_div(2), Some(5));
- assert_eq_const_safe!((5 as $T).checked_div(0), None);
- assert_eq_const_safe!(isize::MIN.checked_div(-1), None);
+ assert_eq_const_safe!(Option<$T>: (10 as $T).checked_div(2), Some(5));
+ assert_eq_const_safe!(Option<$T>: (5 as $T).checked_div(0), None);
+ assert_eq_const_safe!(Option<$T>: $T::MIN.checked_div(-1), None);
}
fn test_saturating_abs() {
- assert_eq_const_safe!((0 as $T).saturating_abs(), 0);
- assert_eq_const_safe!((123 as $T).saturating_abs(), 123);
- assert_eq_const_safe!((-123 as $T).saturating_abs(), 123);
- assert_eq_const_safe!((MAX - 2).saturating_abs(), MAX - 2);
- assert_eq_const_safe!((MAX - 1).saturating_abs(), MAX - 1);
- assert_eq_const_safe!(MAX.saturating_abs(), MAX);
- assert_eq_const_safe!((MIN + 2).saturating_abs(), MAX - 1);
- assert_eq_const_safe!((MIN + 1).saturating_abs(), MAX);
- assert_eq_const_safe!(MIN.saturating_abs(), MAX);
+ assert_eq_const_safe!($T: (0 as $T).saturating_abs(), 0);
+ assert_eq_const_safe!($T: (123 as $T).saturating_abs(), 123);
+ assert_eq_const_safe!($T: (-123 as $T).saturating_abs(), 123);
+ assert_eq_const_safe!($T: (MAX - 2).saturating_abs(), MAX - 2);
+ assert_eq_const_safe!($T: (MAX - 1).saturating_abs(), MAX - 1);
+ assert_eq_const_safe!($T: MAX.saturating_abs(), MAX);
+ assert_eq_const_safe!($T: (MIN + 2).saturating_abs(), MAX - 1);
+ assert_eq_const_safe!($T: (MIN + 1).saturating_abs(), MAX);
+ assert_eq_const_safe!($T: MIN.saturating_abs(), MAX);
}
fn test_saturating_neg() {
- assert_eq_const_safe!((0 as $T).saturating_neg(), 0);
- assert_eq_const_safe!((123 as $T).saturating_neg(), -123);
- assert_eq_const_safe!((-123 as $T).saturating_neg(), 123);
- assert_eq_const_safe!((MAX - 2).saturating_neg(), MIN + 3);
- assert_eq_const_safe!((MAX - 1).saturating_neg(), MIN + 2);
- assert_eq_const_safe!(MAX.saturating_neg(), MIN + 1);
- assert_eq_const_safe!((MIN + 2).saturating_neg(), MAX - 1);
- assert_eq_const_safe!((MIN + 1).saturating_neg(), MAX);
- assert_eq_const_safe!(MIN.saturating_neg(), MAX);
+ assert_eq_const_safe!($T: (0 as $T).saturating_neg(), 0);
+ assert_eq_const_safe!($T: (123 as $T).saturating_neg(), -123);
+ assert_eq_const_safe!($T: (-123 as $T).saturating_neg(), 123);
+ assert_eq_const_safe!($T: (MAX - 2).saturating_neg(), MIN + 3);
+ assert_eq_const_safe!($T: (MAX - 1).saturating_neg(), MIN + 2);
+ assert_eq_const_safe!($T: MAX.saturating_neg(), MIN + 1);
+ assert_eq_const_safe!($T: (MIN + 2).saturating_neg(), MAX - 1);
+ assert_eq_const_safe!($T: (MIN + 1).saturating_neg(), MAX);
+ assert_eq_const_safe!($T: MIN.saturating_neg(), MAX);
}
}
@@ -250,23 +251,23 @@ macro_rules! int_module {
test_runtime_and_compiletime! {
fn test_from_str_radix() {
- assert_eq_const_safe!($T::from_str_radix("123", 10), Ok(123 as $T));
- assert_eq_const_safe!($T::from_str_radix("1001", 2), Ok(9 as $T));
- assert_eq_const_safe!($T::from_str_radix("123", 8), Ok(83 as $T));
- assert_eq_const_safe!(i32::from_str_radix("123", 16), Ok(291 as i32));
- assert_eq_const_safe!(i32::from_str_radix("ffff", 16), Ok(65535 as i32));
- assert_eq_const_safe!(i32::from_str_radix("FFFF", 16), Ok(65535 as i32));
- assert_eq_const_safe!($T::from_str_radix("z", 36), Ok(35 as $T));
- assert_eq_const_safe!($T::from_str_radix("Z", 36), Ok(35 as $T));
-
- assert_eq_const_safe!($T::from_str_radix("-123", 10), Ok(-123 as $T));
- assert_eq_const_safe!($T::from_str_radix("-1001", 2), Ok(-9 as $T));
- assert_eq_const_safe!($T::from_str_radix("-123", 8), Ok(-83 as $T));
- assert_eq_const_safe!(i32::from_str_radix("-123", 16), Ok(-291 as i32));
- assert_eq_const_safe!(i32::from_str_radix("-ffff", 16), Ok(-65535 as i32));
- assert_eq_const_safe!(i32::from_str_radix("-FFFF", 16), Ok(-65535 as i32));
- assert_eq_const_safe!($T::from_str_radix("-z", 36), Ok(-35 as $T));
- assert_eq_const_safe!($T::from_str_radix("-Z", 36), Ok(-35 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("123", 10), Ok(123 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("1001", 2), Ok(9 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("123", 8), Ok(83 as $T));
+ assert_eq_const_safe!(Result: i32::from_str_radix("123", 16), Ok(291 as i32));
+ assert_eq_const_safe!(Result: i32::from_str_radix("ffff", 16), Ok(65535 as i32));
+ assert_eq_const_safe!(Result: i32::from_str_radix("FFFF", 16), Ok(65535 as i32));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("z", 36), Ok(35 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("Z", 36), Ok(35 as $T));
+
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("-123", 10), Ok(-123 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("-1001", 2), Ok(-9 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("-123", 8), Ok(-83 as $T));
+ assert_eq_const_safe!(Result: i32::from_str_radix("-123", 16), Ok(-291 as i32));
+ assert_eq_const_safe!(Result: i32::from_str_radix("-ffff", 16), Ok(-65535 as i32));
+ assert_eq_const_safe!(Result: i32::from_str_radix("-FFFF", 16), Ok(-65535 as i32));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("-z", 36), Ok(-35 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("-Z", 36), Ok(-35 as $T));
assert!($T::from_str_radix("Z", 35).is_err());
assert!($T::from_str_radix("-9", 2).is_err());
@@ -277,16 +278,16 @@ macro_rules! int_module {
fn test_pow() {
{
const R: $T = 2;
- assert_eq_const_safe!(R.pow(2), 4 as $T);
- assert_eq_const_safe!(R.pow(0), 1 as $T);
- assert_eq_const_safe!(R.wrapping_pow(2), 4 as $T);
- assert_eq_const_safe!(R.wrapping_pow(0), 1 as $T);
- assert_eq_const_safe!(R.checked_pow(2), Some(4 as $T));
- assert_eq_const_safe!(R.checked_pow(0), Some(1 as $T));
- assert_eq_const_safe!(R.overflowing_pow(2), (4 as $T, false));
- assert_eq_const_safe!(R.overflowing_pow(0), (1 as $T, false));
- assert_eq_const_safe!(R.saturating_pow(2), 4 as $T);
- assert_eq_const_safe!(R.saturating_pow(0), 1 as $T);
+ assert_eq_const_safe!($T: R.pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.pow(0), 1 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(0), 1 as $T);
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(2), Some(4 as $T));
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(0), Some(1 as $T));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(2), (4 as $T, false));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(0), (1 as $T, false));
+ assert_eq_const_safe!($T: R.saturating_pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.saturating_pow(0), 1 as $T);
}
{
@@ -295,221 +296,227 @@ macro_rules! int_module {
// if itest::MAX == 2^j-1, then itest is a `j` bit int,
// so that `itest::MAX*itest::MAX == 2^(2*j)-2^(j+1)+1`,
// thussaturating_pow the overflowing result is exactly 1.
- assert_eq_const_safe!(R.wrapping_pow(2), 1 as $T);
- assert_eq_const_safe!(R.checked_pow(2), None);
- assert_eq_const_safe!(R.overflowing_pow(2), (1 as $T, true));
- assert_eq_const_safe!(R.saturating_pow(2), MAX);
+ assert_eq_const_safe!($T: R.wrapping_pow(2), 1 as $T);
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(2), None);
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(2), (1 as $T, true));
+ assert_eq_const_safe!($T: R.saturating_pow(2), MAX);
}
{
// test for negative exponent.
const R: $T = -2;
- assert_eq_const_safe!(R.pow(2), 4 as $T);
- assert_eq_const_safe!(R.pow(3), -8 as $T);
- assert_eq_const_safe!(R.pow(0), 1 as $T);
- assert_eq_const_safe!(R.wrapping_pow(2), 4 as $T);
- assert_eq_const_safe!(R.wrapping_pow(3), -8 as $T);
- assert_eq_const_safe!(R.wrapping_pow(0), 1 as $T);
- assert_eq_const_safe!(R.checked_pow(2), Some(4 as $T));
- assert_eq_const_safe!(R.checked_pow(3), Some(-8 as $T));
- assert_eq_const_safe!(R.checked_pow(0), Some(1 as $T));
- assert_eq_const_safe!(R.overflowing_pow(2), (4 as $T, false));
- assert_eq_const_safe!(R.overflowing_pow(3), (-8 as $T, false));
- assert_eq_const_safe!(R.overflowing_pow(0), (1 as $T, false));
- assert_eq_const_safe!(R.saturating_pow(2), 4 as $T);
- assert_eq_const_safe!(R.saturating_pow(3), -8 as $T);
- assert_eq_const_safe!(R.saturating_pow(0), 1 as $T);
+ assert_eq_const_safe!($T: R.pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.pow(3), -8 as $T);
+ assert_eq_const_safe!($T: R.pow(0), 1 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(3), -8 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(0), 1 as $T);
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(2), Some(4 as $T));
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(3), Some(-8 as $T));
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(0), Some(1 as $T));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(2), (4 as $T, false));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(3), (-8 as $T, false));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(0), (1 as $T, false));
+ assert_eq_const_safe!($T: R.saturating_pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.saturating_pow(3), -8 as $T);
+ assert_eq_const_safe!($T: R.saturating_pow(0), 1 as $T);
}
}
fn test_div_floor() {
const A: $T = 8;
const B: $T = 3;
- assert_eq_const_safe!(A.div_floor(B), 2);
- assert_eq_const_safe!(A.div_floor(-B), -3);
- assert_eq_const_safe!((-A).div_floor(B), -3);
- assert_eq_const_safe!((-A).div_floor(-B), 2);
+ assert_eq_const_safe!($T: A.div_floor(B), 2);
+ assert_eq_const_safe!($T: A.div_floor(-B), -3);
+ assert_eq_const_safe!($T: (-A).div_floor(B), -3);
+ assert_eq_const_safe!($T: (-A).div_floor(-B), 2);
}
fn test_div_ceil() {
const A: $T = 8;
const B: $T = 3;
- assert_eq_const_safe!(A.div_ceil(B), 3);
- assert_eq_const_safe!(A.div_ceil(-B), -2);
- assert_eq_const_safe!((-A).div_ceil(B), -2);
- assert_eq_const_safe!((-A).div_ceil(-B), 3);
+ assert_eq_const_safe!($T: A.div_ceil(B), 3);
+ assert_eq_const_safe!($T: A.div_ceil(-B), -2);
+ assert_eq_const_safe!($T: (-A).div_ceil(B), -2);
+ assert_eq_const_safe!($T: (-A).div_ceil(-B), 3);
}
fn test_next_multiple_of() {
- assert_eq_const_safe!((16 as $T).next_multiple_of(8), 16);
- assert_eq_const_safe!((23 as $T).next_multiple_of(8), 24);
- assert_eq_const_safe!((16 as $T).next_multiple_of(-8), 16);
- assert_eq_const_safe!((23 as $T).next_multiple_of(-8), 16);
- assert_eq_const_safe!((-16 as $T).next_multiple_of(8), -16);
- assert_eq_const_safe!((-23 as $T).next_multiple_of(8), -16);
- assert_eq_const_safe!((-16 as $T).next_multiple_of(-8), -16);
- assert_eq_const_safe!((-23 as $T).next_multiple_of(-8), -24);
- assert_eq_const_safe!(MIN.next_multiple_of(-1), MIN);
+ assert_eq_const_safe!($T: (16 as $T).next_multiple_of(8), 16);
+ assert_eq_const_safe!($T: (23 as $T).next_multiple_of(8), 24);
+ assert_eq_const_safe!($T: (16 as $T).next_multiple_of(-8), 16);
+ assert_eq_const_safe!($T: (23 as $T).next_multiple_of(-8), 16);
+ assert_eq_const_safe!($T: (-16 as $T).next_multiple_of(8), -16);
+ assert_eq_const_safe!($T: (-23 as $T).next_multiple_of(8), -16);
+ assert_eq_const_safe!($T: (-16 as $T).next_multiple_of(-8), -16);
+ assert_eq_const_safe!($T: (-23 as $T).next_multiple_of(-8), -24);
+ assert_eq_const_safe!($T: MIN.next_multiple_of(-1), MIN);
}
fn test_checked_next_multiple_of() {
- assert_eq_const_safe!((16 as $T).checked_next_multiple_of(8), Some(16));
- assert_eq_const_safe!((23 as $T).checked_next_multiple_of(8), Some(24));
- assert_eq_const_safe!((16 as $T).checked_next_multiple_of(-8), Some(16));
- assert_eq_const_safe!((23 as $T).checked_next_multiple_of(-8), Some(16));
- assert_eq_const_safe!((-16 as $T).checked_next_multiple_of(8), Some(-16));
- assert_eq_const_safe!((-23 as $T).checked_next_multiple_of(8), Some(-16));
- assert_eq_const_safe!((-16 as $T).checked_next_multiple_of(-8), Some(-16));
- assert_eq_const_safe!((-23 as $T).checked_next_multiple_of(-8), Some(-24));
- assert_eq_const_safe!((1 as $T).checked_next_multiple_of(0), None);
- assert_eq_const_safe!(MAX.checked_next_multiple_of(2), None);
- assert_eq_const_safe!(MIN.checked_next_multiple_of(-3), None);
- assert_eq_const_safe!(MIN.checked_next_multiple_of(-1), Some(MIN));
+ assert_eq_const_safe!(Option<$T>: (16 as $T).checked_next_multiple_of(8), Some(16));
+ assert_eq_const_safe!(Option<$T>: (23 as $T).checked_next_multiple_of(8), Some(24));
+ assert_eq_const_safe!(Option<$T>: (16 as $T).checked_next_multiple_of(-8), Some(16));
+ assert_eq_const_safe!(Option<$T>: (23 as $T).checked_next_multiple_of(-8), Some(16));
+ assert_eq_const_safe!(Option<$T>: (-16 as $T).checked_next_multiple_of(8), Some(-16));
+ assert_eq_const_safe!(Option<$T>: (-23 as $T).checked_next_multiple_of(8), Some(-16));
+ assert_eq_const_safe!(Option<$T>: (-16 as $T).checked_next_multiple_of(-8), Some(-16));
+ assert_eq_const_safe!(Option<$T>: (-23 as $T).checked_next_multiple_of(-8), Some(-24));
+ assert_eq_const_safe!(Option<$T>: (1 as $T).checked_next_multiple_of(0), None);
+ assert_eq_const_safe!(Option<$T>: MAX.checked_next_multiple_of(2), None);
+ assert_eq_const_safe!(Option<$T>: MIN.checked_next_multiple_of(-3), None);
+ assert_eq_const_safe!(Option<$T>: MIN.checked_next_multiple_of(-1), Some(MIN));
}
fn test_carrying_add() {
- assert_eq_const_safe!(MAX.carrying_add(1, false), (MIN, true));
- assert_eq_const_safe!(MAX.carrying_add(0, true), (MIN, true));
- assert_eq_const_safe!(MAX.carrying_add(1, true), (MIN + 1, true));
- assert_eq_const_safe!(MAX.carrying_add(-1, false), (MAX - 1, false));
- assert_eq_const_safe!(MAX.carrying_add(-1, true), (MAX, false)); // no intermediate overflow
- assert_eq_const_safe!(MIN.carrying_add(-1, false), (MAX, true));
- assert_eq_const_safe!(MIN.carrying_add(-1, true), (MIN, false)); // no intermediate overflow
- assert_eq_const_safe!((0 as $T).carrying_add(MAX, true), (MIN, true));
- assert_eq_const_safe!((0 as $T).carrying_add(MIN, true), (MIN + 1, false));
+ assert_eq_const_safe!(($T, bool): MAX.carrying_add(1, false), (MIN, true));
+ assert_eq_const_safe!(($T, bool): MAX.carrying_add(0, true), (MIN, true));
+ assert_eq_const_safe!(($T, bool): MAX.carrying_add(1, true), (MIN + 1, true));
+ assert_eq_const_safe!(($T, bool): MAX.carrying_add(-1, false), (MAX - 1, false));
+ assert_eq_const_safe!(($T, bool): MAX.carrying_add(-1, true), (MAX, false)); // no intermediate overflow
+ assert_eq_const_safe!(($T, bool): MIN.carrying_add(-1, false), (MAX, true));
+ assert_eq_const_safe!(($T, bool): MIN.carrying_add(-1, true), (MIN, false)); // no intermediate overflow
+ assert_eq_const_safe!(($T, bool): (0 as $T).carrying_add(MAX, true), (MIN, true));
+ assert_eq_const_safe!(($T, bool): (0 as $T).carrying_add(MIN, true), (MIN + 1, false));
}
fn test_borrowing_sub() {
- assert_eq_const_safe!(MIN.borrowing_sub(1, false), (MAX, true));
- assert_eq_const_safe!(MIN.borrowing_sub(0, true), (MAX, true));
- assert_eq_const_safe!(MIN.borrowing_sub(1, true), (MAX - 1, true));
- assert_eq_const_safe!(MIN.borrowing_sub(-1, false), (MIN + 1, false));
- assert_eq_const_safe!(MIN.borrowing_sub(-1, true), (MIN, false)); // no intermediate overflow
- assert_eq_const_safe!(MAX.borrowing_sub(-1, false), (MIN, true));
- assert_eq_const_safe!(MAX.borrowing_sub(-1, true), (MAX, false)); // no intermediate overflow
- assert_eq_const_safe!((0 as $T).borrowing_sub(MIN, false), (MIN, true));
- assert_eq_const_safe!((0 as $T).borrowing_sub(MIN, true), (MAX, false));
+ assert_eq_const_safe!(($T, bool): MIN.borrowing_sub(1, false), (MAX, true));
+ assert_eq_const_safe!(($T, bool): MIN.borrowing_sub(0, true), (MAX, true));
+ assert_eq_const_safe!(($T, bool): MIN.borrowing_sub(1, true), (MAX - 1, true));
+ assert_eq_const_safe!(($T, bool): MIN.borrowing_sub(-1, false), (MIN + 1, false));
+ assert_eq_const_safe!(($T, bool): MIN.borrowing_sub(-1, true), (MIN, false)); // no intermediate overflow
+ assert_eq_const_safe!(($T, bool): MAX.borrowing_sub(-1, false), (MIN, true));
+ assert_eq_const_safe!(($T, bool): MAX.borrowing_sub(-1, true), (MAX, false)); // no intermediate overflow
+ assert_eq_const_safe!(($T, bool): (0 as $T).borrowing_sub(MIN, false), (MIN, true));
+ assert_eq_const_safe!(($T, bool): (0 as $T).borrowing_sub(MIN, true), (MAX, false));
}
fn test_widening_mul() {
- assert_eq_const_safe!(MAX.widening_mul(MAX), (1, MAX / 2));
- assert_eq_const_safe!(MIN.widening_mul(MAX), (MIN as $U, MIN / 2));
- assert_eq_const_safe!(MIN.widening_mul(MIN), (0, MAX / 2 + 1));
+ assert_eq_const_safe!(($U, $T): MAX.widening_mul(MAX), (1, MAX / 2));
+ assert_eq_const_safe!(($U, $T): MIN.widening_mul(MAX), (MIN as $U, MIN / 2));
+ assert_eq_const_safe!(($U, $T): MIN.widening_mul(MIN), (0, MAX / 2 + 1));
}
fn test_carrying_mul() {
- assert_eq_const_safe!(MAX.carrying_mul(MAX, 0), (1, MAX / 2));
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T): MAX.carrying_mul(MAX, 0), (1, MAX / 2));
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul(MAX, MAX),
(UMAX / 2 + 1, MAX / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul(MAX, MIN),
(UMAX / 2 + 2, MAX / 2 - 1)
);
- assert_eq_const_safe!(MIN.carrying_mul(MAX, 0), (MIN as $U, MIN / 2));
- assert_eq_const_safe!(MIN.carrying_mul(MAX, MAX), (UMAX, MIN / 2));
- assert_eq_const_safe!(MIN.carrying_mul(MAX, MIN), (0, MIN / 2));
- assert_eq_const_safe!(MIN.carrying_mul(MIN, 0), (0, MAX / 2 + 1));
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T): MIN.carrying_mul(MAX, 0), (MIN as $U, MIN / 2));
+ assert_eq_const_safe!(($U, $T): MIN.carrying_mul(MAX, MAX), (UMAX, MIN / 2));
+ assert_eq_const_safe!(($U, $T): MIN.carrying_mul(MAX, MIN), (0, MIN / 2));
+ assert_eq_const_safe!(($U, $T): MIN.carrying_mul(MIN, 0), (0, MAX / 2 + 1));
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul(MIN, MAX),
(UMAX / 2, MAX / 2 + 1)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul(MIN, MIN),
(UMAX / 2 + 1, MAX / 2)
);
}
fn test_carrying_mul_add() {
- assert_eq_const_safe!(MAX.carrying_mul_add(MAX, 0, 0), (1, MAX / 2));
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T): MAX.carrying_mul_add(MAX, 0, 0), (1, MAX / 2));
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul_add(MAX, MAX, 0),
(UMAX / 2 + 1, MAX / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul_add(MAX, MIN, 0),
(UMAX / 2 + 2, MAX / 2 - 1)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul_add(MAX, MAX, MAX),
(UMAX, MAX / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul_add(MAX, MAX, MIN),
(0, MAX / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MAX.carrying_mul_add(MAX, MIN, MIN),
(1, MAX / 2 - 1)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MAX, 0, 0),
(MIN as $U, MIN / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MAX, MAX, 0),
(UMAX, MIN / 2)
);
- assert_eq_const_safe!(MIN.carrying_mul_add(MAX, MIN, 0), (0, MIN / 2));
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
+ MIN.carrying_mul_add(MAX, MIN, 0),
+ (0, MIN / 2)
+ );
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MAX, MAX, MAX),
(UMAX / 2 - 1, MIN / 2 + 1)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MAX, MAX, MIN),
(UMAX / 2, MIN / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MAX, MIN, MIN),
(UMAX / 2 + 1, MIN / 2 - 1)
);
- assert_eq_const_safe!(MIN.carrying_mul_add(MIN, 0, 0), (0, MAX / 2 + 1));
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
+ MIN.carrying_mul_add(MIN, 0, 0),
+ (0, MAX / 2 + 1)
+ );
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MIN, MAX, 0),
(UMAX / 2, MAX / 2 + 1)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MIN, MIN, 0),
(UMAX / 2 + 1, MAX / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MIN, MAX, MAX),
(UMAX - 1, MAX / 2 + 1)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MIN, MAX, MIN),
(UMAX, MAX / 2)
);
- assert_eq_const_safe!(
+ assert_eq_const_safe!(($U, $T):
MIN.carrying_mul_add(MIN, MIN, MIN),
(0, MAX / 2)
);
}
fn test_midpoint() {
- assert_eq_const_safe!(<$T>::midpoint(1, 3), 2);
- assert_eq_const_safe!(<$T>::midpoint(3, 1), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(1, 3), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(3, 1), 2);
- assert_eq_const_safe!(<$T>::midpoint(0, 0), 0);
- assert_eq_const_safe!(<$T>::midpoint(0, 2), 1);
- assert_eq_const_safe!(<$T>::midpoint(2, 0), 1);
- assert_eq_const_safe!(<$T>::midpoint(2, 2), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(0, 0), 0);
+ assert_eq_const_safe!($T: <$T>::midpoint(0, 2), 1);
+ assert_eq_const_safe!($T: <$T>::midpoint(2, 0), 1);
+ assert_eq_const_safe!($T: <$T>::midpoint(2, 2), 2);
- assert_eq_const_safe!(<$T>::midpoint(1, 4), 2);
- assert_eq_const_safe!(<$T>::midpoint(4, 1), 2);
- assert_eq_const_safe!(<$T>::midpoint(3, 4), 3);
- assert_eq_const_safe!(<$T>::midpoint(4, 3), 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(1, 4), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(4, 1), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(3, 4), 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(4, 3), 3);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MIN, <$T>::MAX), 0);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MAX, <$T>::MIN), 0);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MIN, <$T>::MIN), <$T>::MIN);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MAX, <$T>::MAX), <$T>::MAX);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MIN, <$T>::MAX), 0);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MAX, <$T>::MIN), 0);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MIN, <$T>::MIN), <$T>::MIN);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MAX, <$T>::MAX), <$T>::MAX);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MIN, 6), <$T>::MIN / 2 + 3);
- assert_eq_const_safe!(<$T>::midpoint(6, <$T>::MIN), <$T>::MIN / 2 + 3);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MAX, 6), <$T>::MAX / 2 + 3);
- assert_eq_const_safe!(<$T>::midpoint(6, <$T>::MAX), <$T>::MAX / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MIN, 6), <$T>::MIN / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(6, <$T>::MIN), <$T>::MIN / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MAX, 6), <$T>::MAX / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(6, <$T>::MAX), <$T>::MAX / 2 + 3);
}
}
@@ -526,154 +533,154 @@ macro_rules! int_module {
test_runtime_and_compiletime! {
fn test_unbounded_shl() {
// <$T>::MIN
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, 1), (<$T>::MIN << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, 3), (<$T>::MIN << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, 5), (<$T>::MIN << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, 1), (<$T>::MIN << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, 3), (<$T>::MIN << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, 5), (<$T>::MIN << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), 0);
// <$T>::MAX
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, 1), (<$T>::MAX << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, 3), (<$T>::MAX << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, 5), (<$T>::MAX << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, 1), (<$T>::MAX << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, 3), (<$T>::MAX << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, 5), (<$T>::MAX << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
// 1
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_ONE), (1 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_TWO), (1 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_THREE), (1 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_FOUR), (1 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, 1), (1 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, 3), (1 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, 5), (1 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_ONE), (1 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_TWO), (1 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_THREE), (1 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_FOUR), (1 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, 1), (1 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, 3), (1 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, 5), (1 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW3), 0);
// -1
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_ONE), (-1 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_TWO), (-1 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_THREE), (-1 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_FOUR), (-1 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, 1), (-1 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, 3), (-1 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, 5), (-1 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_ONE), (-1 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_TWO), (-1 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_THREE), (-1 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_TEST_FOUR), (-1 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, 1), (-1 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, 3), (-1 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, 5), (-1 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(-1, SHIFT_AMOUNT_OVERFLOW3), 0);
// 8
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_ONE), (8 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_TWO), (8 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_THREE), (8 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_FOUR), (8 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, 1), (8 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, 3), (8 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, 5), (8 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_ONE), (8 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_TWO), (8 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_THREE), (8 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_FOUR), (8 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, 1), (8 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, 3), (8 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, 5), (8 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW3), 0);
// 17
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_ONE), (17 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_TWO), (17 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_THREE), (17 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_FOUR), (17 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, 1), (17 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, 3), (17 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, 5), (17 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_ONE), (17 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_TWO), (17 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_THREE), (17 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_FOUR), (17 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, 1), (17 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, 3), (17 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, 5), (17 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW3), 0);
}
fn test_unbounded_shr() {
// <$T>::MIN
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, 1), (<$T>::MIN >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, 3), (<$T>::MIN >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, 5), (<$T>::MIN >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), -1);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), -1);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, 1), (<$T>::MIN >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, 3), (<$T>::MIN >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, 5), (<$T>::MIN >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), -1);
// <$T>::MAX
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, 1), (<$T>::MAX >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, 3), (<$T>::MAX >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, 5), (<$T>::MAX >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, 1), (<$T>::MAX >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, 3), (<$T>::MAX >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, 5), (<$T>::MAX >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
// 1
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_ONE), (1 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_TWO), (1 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_THREE), (1 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_FOUR), (1 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, 1), (1 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, 3), (1 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, 5), (1 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_ONE), (1 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_TWO), (1 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_THREE), (1 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_FOUR), (1 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, 1), (1 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, 3), (1 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, 5), (1 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW3), 0);
// -1
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_ONE), (-1 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_TWO), (-1 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_THREE), (-1 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_FOUR), (-1 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, 1), (-1 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, 3), (-1 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, 5), (-1 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW), -1);
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW), -1);
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW2), -1);
- assert_eq_const_safe!(<$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW3), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_ONE), (-1 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_TWO), (-1 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_THREE), (-1 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_TEST_FOUR), (-1 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, 1), (-1 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, 3), (-1 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, 5), (-1 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW2), -1);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(-1, SHIFT_AMOUNT_OVERFLOW3), -1);
// 8
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_ONE), (8 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_TWO), (8 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_THREE), (8 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_FOUR), (8 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, 1), (8 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, 3), (8 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, 5), (8 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_ONE), (8 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_TWO), (8 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_THREE), (8 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_FOUR), (8 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, 1), (8 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, 3), (8 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, 5), (8 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW3), 0);
// 17
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_ONE), (17 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_TWO), (17 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_THREE), (17 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_FOUR), (17 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, 1), (17 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, 3), (17 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, 5), (17 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_ONE), (17 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_TWO), (17 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_THREE), (17 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_FOUR), (17 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, 1), (17 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, 3), (17 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, 5), (17 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW3), 0);
}
}
};
diff --git a/library/coretests/tests/num/uint_macros.rs b/library/coretests/tests/num/uint_macros.rs
index d09eb97b17e06..2e35e8bf5342a 100644
--- a/library/coretests/tests/num/uint_macros.rs
+++ b/library/coretests/tests/num/uint_macros.rs
@@ -1,5 +1,6 @@
macro_rules! uint_module {
($T:ident) => {
+ use core::num::ParseIntError;
use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr};
use core::$T::*;
@@ -49,95 +50,95 @@ macro_rules! uint_module {
fn test_leading_trailing_ones() {
const A: $T = 0b0101_1111;
- assert_eq_const_safe!(A.trailing_ones(), 5);
- assert_eq_const_safe!((!A).leading_ones(), $T::BITS - 7);
+ assert_eq_const_safe!(u32: A.trailing_ones(), 5);
+ assert_eq_const_safe!(u32: (!A).leading_ones(), $T::BITS - 7);
- assert_eq_const_safe!(A.reverse_bits().leading_ones(), 5);
+ assert_eq_const_safe!(u32: A.reverse_bits().leading_ones(), 5);
- assert_eq_const_safe!(_1.leading_ones(), $T::BITS);
- assert_eq_const_safe!(_1.trailing_ones(), $T::BITS);
+ assert_eq_const_safe!(u32: _1.leading_ones(), $T::BITS);
+ assert_eq_const_safe!(u32: _1.trailing_ones(), $T::BITS);
- assert_eq_const_safe!((_1 << 1).trailing_ones(), 0);
- assert_eq_const_safe!((_1 >> 1).leading_ones(), 0);
+ assert_eq_const_safe!(u32: (_1 << 1).trailing_ones(), 0);
+ assert_eq_const_safe!(u32: (_1 >> 1).leading_ones(), 0);
- assert_eq_const_safe!((_1 << 1).leading_ones(), $T::BITS - 1);
- assert_eq_const_safe!((_1 >> 1).trailing_ones(), $T::BITS - 1);
+ assert_eq_const_safe!(u32: (_1 << 1).leading_ones(), $T::BITS - 1);
+ assert_eq_const_safe!(u32: (_1 >> 1).trailing_ones(), $T::BITS - 1);
- assert_eq_const_safe!(_0.leading_ones(), 0);
- assert_eq_const_safe!(_0.trailing_ones(), 0);
+ assert_eq_const_safe!(u32: _0.leading_ones(), 0);
+ assert_eq_const_safe!(u32: _0.trailing_ones(), 0);
const X: $T = 0b0010_1100;
- assert_eq_const_safe!(X.leading_ones(), 0);
- assert_eq_const_safe!(X.trailing_ones(), 0);
+ assert_eq_const_safe!(u32: X.leading_ones(), 0);
+ assert_eq_const_safe!(u32: X.trailing_ones(), 0);
}
fn test_rotate() {
- assert_eq_const_safe!(A.rotate_left(6).rotate_right(2).rotate_right(4), A);
- assert_eq_const_safe!(B.rotate_left(3).rotate_left(2).rotate_right(5), B);
- assert_eq_const_safe!(C.rotate_left(6).rotate_right(2).rotate_right(4), C);
+ assert_eq_const_safe!($T: A.rotate_left(6).rotate_right(2).rotate_right(4), A);
+ assert_eq_const_safe!($T: B.rotate_left(3).rotate_left(2).rotate_right(5), B);
+ assert_eq_const_safe!($T: C.rotate_left(6).rotate_right(2).rotate_right(4), C);
// Rotating these should make no difference
//
// We test using 124 bits because to ensure that overlong bit shifts do
// not cause undefined behavior. See #10183.
- assert_eq_const_safe!(_0.rotate_left(124), _0);
- assert_eq_const_safe!(_1.rotate_left(124), _1);
- assert_eq_const_safe!(_0.rotate_right(124), _0);
- assert_eq_const_safe!(_1.rotate_right(124), _1);
+ assert_eq_const_safe!($T: _0.rotate_left(124), _0);
+ assert_eq_const_safe!($T: _1.rotate_left(124), _1);
+ assert_eq_const_safe!($T: _0.rotate_right(124), _0);
+ assert_eq_const_safe!($T: _1.rotate_right(124), _1);
// Rotating by 0 should have no effect
- assert_eq_const_safe!(A.rotate_left(0), A);
- assert_eq_const_safe!(B.rotate_left(0), B);
- assert_eq_const_safe!(C.rotate_left(0), C);
+ assert_eq_const_safe!($T: A.rotate_left(0), A);
+ assert_eq_const_safe!($T: B.rotate_left(0), B);
+ assert_eq_const_safe!($T: C.rotate_left(0), C);
// Rotating by a multiple of word size should also have no effect
- assert_eq_const_safe!(A.rotate_left(128), A);
- assert_eq_const_safe!(B.rotate_left(128), B);
- assert_eq_const_safe!(C.rotate_left(128), C);
+ assert_eq_const_safe!($T: A.rotate_left(128), A);
+ assert_eq_const_safe!($T: B.rotate_left(128), B);
+ assert_eq_const_safe!($T: C.rotate_left(128), C);
}
fn test_swap_bytes() {
- assert_eq_const_safe!(A.swap_bytes().swap_bytes(), A);
- assert_eq_const_safe!(B.swap_bytes().swap_bytes(), B);
- assert_eq_const_safe!(C.swap_bytes().swap_bytes(), C);
+ assert_eq_const_safe!($T: A.swap_bytes().swap_bytes(), A);
+ assert_eq_const_safe!($T: B.swap_bytes().swap_bytes(), B);
+ assert_eq_const_safe!($T: C.swap_bytes().swap_bytes(), C);
// Swapping these should make no difference
- assert_eq_const_safe!(_0.swap_bytes(), _0);
- assert_eq_const_safe!(_1.swap_bytes(), _1);
+ assert_eq_const_safe!($T: _0.swap_bytes(), _0);
+ assert_eq_const_safe!($T: _1.swap_bytes(), _1);
}
fn test_reverse_bits() {
- assert_eq_const_safe!(A.reverse_bits().reverse_bits(), A);
- assert_eq_const_safe!(B.reverse_bits().reverse_bits(), B);
- assert_eq_const_safe!(C.reverse_bits().reverse_bits(), C);
+ assert_eq_const_safe!($T: A.reverse_bits().reverse_bits(), A);
+ assert_eq_const_safe!($T: B.reverse_bits().reverse_bits(), B);
+ assert_eq_const_safe!($T: C.reverse_bits().reverse_bits(), C);
// Swapping these should make no difference
- assert_eq_const_safe!(_0.reverse_bits(), _0);
- assert_eq_const_safe!(_1.reverse_bits(), _1);
+ assert_eq_const_safe!($T: _0.reverse_bits(), _0);
+ assert_eq_const_safe!($T: _1.reverse_bits(), _1);
}
fn test_le() {
- assert_eq_const_safe!($T::from_le(A.to_le()), A);
- assert_eq_const_safe!($T::from_le(B.to_le()), B);
- assert_eq_const_safe!($T::from_le(C.to_le()), C);
- assert_eq_const_safe!($T::from_le(_0), _0);
- assert_eq_const_safe!($T::from_le(_1), _1);
- assert_eq_const_safe!(_0.to_le(), _0);
- assert_eq_const_safe!(_1.to_le(), _1);
+ assert_eq_const_safe!($T: $T::from_le(A.to_le()), A);
+ assert_eq_const_safe!($T: $T::from_le(B.to_le()), B);
+ assert_eq_const_safe!($T: $T::from_le(C.to_le()), C);
+ assert_eq_const_safe!($T: $T::from_le(_0), _0);
+ assert_eq_const_safe!($T: $T::from_le(_1), _1);
+ assert_eq_const_safe!($T: _0.to_le(), _0);
+ assert_eq_const_safe!($T: _1.to_le(), _1);
}
fn test_be() {
- assert_eq_const_safe!($T::from_be(A.to_be()), A);
- assert_eq_const_safe!($T::from_be(B.to_be()), B);
- assert_eq_const_safe!($T::from_be(C.to_be()), C);
- assert_eq_const_safe!($T::from_be(_0), _0);
- assert_eq_const_safe!($T::from_be(_1), _1);
- assert_eq_const_safe!(_0.to_be(), _0);
- assert_eq_const_safe!(_1.to_be(), _1);
+ assert_eq_const_safe!($T: $T::from_be(A.to_be()), A);
+ assert_eq_const_safe!($T: $T::from_be(B.to_be()), B);
+ assert_eq_const_safe!($T: $T::from_be(C.to_be()), C);
+ assert_eq_const_safe!($T: $T::from_be(_0), _0);
+ assert_eq_const_safe!($T: $T::from_be(_1), _1);
+ assert_eq_const_safe!($T: _0.to_be(), _0);
+ assert_eq_const_safe!($T: _1.to_be(), _1);
}
fn test_unsigned_checked_div() {
- assert_eq_const_safe!((10 as $T).checked_div(2), Some(5));
- assert_eq_const_safe!((5 as $T).checked_div(0), None);
+ assert_eq_const_safe!(Option<$T>: (10 as $T).checked_div(2), Some(5));
+ assert_eq_const_safe!(Option<$T>: (5 as $T).checked_div(0), None);
}
}
@@ -194,12 +195,12 @@ macro_rules! uint_module {
test_runtime_and_compiletime! {
fn test_parse_bytes() {
- assert_eq_const_safe!($T::from_str_radix("123", 10), Ok(123 as $T));
- assert_eq_const_safe!($T::from_str_radix("1001", 2), Ok(9 as $T));
- assert_eq_const_safe!($T::from_str_radix("123", 8), Ok(83 as $T));
- assert_eq_const_safe!(u16::from_str_radix("123", 16), Ok(291 as u16));
- assert_eq_const_safe!(u16::from_str_radix("ffff", 16), Ok(65535 as u16));
- assert_eq_const_safe!($T::from_str_radix("z", 36), Ok(35 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("123", 10), Ok(123 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("1001", 2), Ok(9 as $T));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("123", 8), Ok(83 as $T));
+ assert_eq_const_safe!(Result: u16::from_str_radix("123", 16), Ok(291 as u16));
+ assert_eq_const_safe!(Result: u16::from_str_radix("ffff", 16), Ok(65535 as u16));
+ assert_eq_const_safe!(Result<$T, ParseIntError>: $T::from_str_radix("z", 36), Ok(35 as $T));
assert!($T::from_str_radix("Z", 10).is_err());
assert!($T::from_str_radix("_", 2).is_err());
@@ -208,16 +209,16 @@ macro_rules! uint_module {
fn test_pow() {
{
const R: $T = 2;
- assert_eq_const_safe!(R.pow(2), 4 as $T);
- assert_eq_const_safe!(R.pow(0), 1 as $T);
- assert_eq_const_safe!(R.wrapping_pow(2), 4 as $T);
- assert_eq_const_safe!(R.wrapping_pow(0), 1 as $T);
- assert_eq_const_safe!(R.checked_pow(2), Some(4 as $T));
- assert_eq_const_safe!(R.checked_pow(0), Some(1 as $T));
- assert_eq_const_safe!(R.overflowing_pow(2), (4 as $T, false));
- assert_eq_const_safe!(R.overflowing_pow(0), (1 as $T, false));
- assert_eq_const_safe!(R.saturating_pow(2), 4 as $T);
- assert_eq_const_safe!(R.saturating_pow(0), 1 as $T);
+ assert_eq_const_safe!($T: R.pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.pow(0), 1 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.wrapping_pow(0), 1 as $T);
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(2), Some(4 as $T));
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(0), Some(1 as $T));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(2), (4 as $T, false));
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(0), (1 as $T, false));
+ assert_eq_const_safe!($T: R.saturating_pow(2), 4 as $T);
+ assert_eq_const_safe!($T: R.saturating_pow(0), 1 as $T);
}
{
@@ -226,20 +227,20 @@ macro_rules! uint_module {
// if itest::MAX == 2^j-1, then itest is a `j` bit int,
// so that `itest::MAX*itest::MAX == 2^(2*j)-2^(j+1)+1`,
// thussaturating_pow the overflowing result is exactly 1.
- assert_eq_const_safe!(R.wrapping_pow(2), 1 as $T);
- assert_eq_const_safe!(R.checked_pow(2), None);
- assert_eq_const_safe!(R.overflowing_pow(2), (1 as $T, true));
- assert_eq_const_safe!(R.saturating_pow(2), MAX);
+ assert_eq_const_safe!($T: R.wrapping_pow(2), 1 as $T);
+ assert_eq_const_safe!(Option<$T>: R.checked_pow(2), None);
+ assert_eq_const_safe!(($T, bool): R.overflowing_pow(2), (1 as $T, true));
+ assert_eq_const_safe!($T: R.saturating_pow(2), MAX);
}
}
fn test_isqrt() {
- assert_eq_const_safe!((0 as $T).isqrt(), 0 as $T);
- assert_eq_const_safe!((1 as $T).isqrt(), 1 as $T);
- assert_eq_const_safe!((2 as $T).isqrt(), 1 as $T);
- assert_eq_const_safe!((99 as $T).isqrt(), 9 as $T);
- assert_eq_const_safe!((100 as $T).isqrt(), 10 as $T);
- assert_eq_const_safe!($T::MAX.isqrt(), (1 << ($T::BITS / 2)) - 1);
+ assert_eq_const_safe!($T: (0 as $T).isqrt(), 0 as $T);
+ assert_eq_const_safe!($T: (1 as $T).isqrt(), 1 as $T);
+ assert_eq_const_safe!($T: (2 as $T).isqrt(), 1 as $T);
+ assert_eq_const_safe!($T: (99 as $T).isqrt(), 9 as $T);
+ assert_eq_const_safe!($T: (100 as $T).isqrt(), 10 as $T);
+ assert_eq_const_safe!($T: $T::MAX.isqrt(), (1 << ($T::BITS / 2)) - 1);
}
}
@@ -264,24 +265,24 @@ macro_rules! uint_module {
test_runtime_and_compiletime! {
fn test_div_floor() {
- assert_eq_const_safe!((8 as $T).div_floor(3), 2);
+ assert_eq_const_safe!($T: (8 as $T).div_floor(3), 2);
}
fn test_div_ceil() {
- assert_eq_const_safe!((8 as $T).div_ceil(3), 3);
+ assert_eq_const_safe!($T: (8 as $T).div_ceil(3), 3);
}
fn test_next_multiple_of() {
- assert_eq_const_safe!((16 as $T).next_multiple_of(8), 16);
- assert_eq_const_safe!((23 as $T).next_multiple_of(8), 24);
- assert_eq_const_safe!(MAX.next_multiple_of(1), MAX);
+ assert_eq_const_safe!($T: (16 as $T).next_multiple_of(8), 16);
+ assert_eq_const_safe!($T: (23 as $T).next_multiple_of(8), 24);
+ assert_eq_const_safe!($T: MAX.next_multiple_of(1), MAX);
}
fn test_checked_next_multiple_of() {
- assert_eq_const_safe!((16 as $T).checked_next_multiple_of(8), Some(16));
- assert_eq_const_safe!((23 as $T).checked_next_multiple_of(8), Some(24));
- assert_eq_const_safe!((1 as $T).checked_next_multiple_of(0), None);
- assert_eq_const_safe!(MAX.checked_next_multiple_of(2), None);
+ assert_eq_const_safe!(Option<$T>: (16 as $T).checked_next_multiple_of(8), Some(16));
+ assert_eq_const_safe!(Option<$T>: (23 as $T).checked_next_multiple_of(8), Some(24));
+ assert_eq_const_safe!(Option<$T>: (1 as $T).checked_next_multiple_of(0), None);
+ assert_eq_const_safe!(Option<$T>: MAX.checked_next_multiple_of(2), None);
}
fn test_is_next_multiple_of() {
@@ -292,63 +293,63 @@ macro_rules! uint_module {
}
fn test_carrying_add() {
- assert_eq_const_safe!($T::MAX.carrying_add(1, false), (0, true));
- assert_eq_const_safe!($T::MAX.carrying_add(0, true), (0, true));
- assert_eq_const_safe!($T::MAX.carrying_add(1, true), (1, true));
+ assert_eq_const_safe!(($T, bool): $T::MAX.carrying_add(1, false), (0, true));
+ assert_eq_const_safe!(($T, bool): $T::MAX.carrying_add(0, true), (0, true));
+ assert_eq_const_safe!(($T, bool): $T::MAX.carrying_add(1, true), (1, true));
- assert_eq_const_safe!($T::MIN.carrying_add($T::MAX, false), ($T::MAX, false));
- assert_eq_const_safe!($T::MIN.carrying_add(0, true), (1, false));
- assert_eq_const_safe!($T::MIN.carrying_add($T::MAX, true), (0, true));
+ assert_eq_const_safe!(($T, bool): $T::MIN.carrying_add($T::MAX, false), ($T::MAX, false));
+ assert_eq_const_safe!(($T, bool): $T::MIN.carrying_add(0, true), (1, false));
+ assert_eq_const_safe!(($T, bool): $T::MIN.carrying_add($T::MAX, true), (0, true));
}
fn test_borrowing_sub() {
- assert_eq_const_safe!($T::MIN.borrowing_sub(1, false), ($T::MAX, true));
- assert_eq_const_safe!($T::MIN.borrowing_sub(0, true), ($T::MAX, true));
- assert_eq_const_safe!($T::MIN.borrowing_sub(1, true), ($T::MAX - 1, true));
+ assert_eq_const_safe!(($T, bool): $T::MIN.borrowing_sub(1, false), ($T::MAX, true));
+ assert_eq_const_safe!(($T, bool): $T::MIN.borrowing_sub(0, true), ($T::MAX, true));
+ assert_eq_const_safe!(($T, bool): $T::MIN.borrowing_sub(1, true), ($T::MAX - 1, true));
- assert_eq_const_safe!($T::MAX.borrowing_sub($T::MAX, false), (0, false));
- assert_eq_const_safe!($T::MAX.borrowing_sub(0, true), ($T::MAX - 1, false));
- assert_eq_const_safe!($T::MAX.borrowing_sub($T::MAX, true), ($T::MAX, true));
+ assert_eq_const_safe!(($T, bool): $T::MAX.borrowing_sub($T::MAX, false), (0, false));
+ assert_eq_const_safe!(($T, bool): $T::MAX.borrowing_sub(0, true), ($T::MAX - 1, false));
+ assert_eq_const_safe!(($T, bool): $T::MAX.borrowing_sub($T::MAX, true), ($T::MAX, true));
}
fn test_widening_mul() {
- assert_eq_const_safe!($T::MAX.widening_mul($T::MAX), (1, $T::MAX - 1));
+ assert_eq_const_safe!(($T, $T): $T::MAX.widening_mul($T::MAX), (1, $T::MAX - 1));
}
fn test_carrying_mul() {
- assert_eq_const_safe!($T::MAX.carrying_mul($T::MAX, 0), (1, $T::MAX - 1));
- assert_eq_const_safe!($T::MAX.carrying_mul($T::MAX, $T::MAX), (0, $T::MAX));
+ assert_eq_const_safe!(($T, $T): $T::MAX.carrying_mul($T::MAX, 0), (1, $T::MAX - 1));
+ assert_eq_const_safe!(($T, $T): $T::MAX.carrying_mul($T::MAX, $T::MAX), (0, $T::MAX));
}
fn test_carrying_mul_add() {
- assert_eq_const_safe!($T::MAX.carrying_mul_add($T::MAX, 0, 0), (1, $T::MAX - 1));
- assert_eq_const_safe!($T::MAX.carrying_mul_add($T::MAX, $T::MAX, 0), (0, $T::MAX));
- assert_eq_const_safe!($T::MAX.carrying_mul_add($T::MAX, $T::MAX, $T::MAX), ($T::MAX, $T::MAX));
+ assert_eq_const_safe!(($T, $T): $T::MAX.carrying_mul_add($T::MAX, 0, 0), (1, $T::MAX - 1));
+ assert_eq_const_safe!(($T, $T): $T::MAX.carrying_mul_add($T::MAX, $T::MAX, 0), (0, $T::MAX));
+ assert_eq_const_safe!(($T, $T): $T::MAX.carrying_mul_add($T::MAX, $T::MAX, $T::MAX), ($T::MAX, $T::MAX));
}
fn test_midpoint() {
- assert_eq_const_safe!(<$T>::midpoint(1, 3), 2);
- assert_eq_const_safe!(<$T>::midpoint(3, 1), 2);
-
- assert_eq_const_safe!(<$T>::midpoint(0, 0), 0);
- assert_eq_const_safe!(<$T>::midpoint(0, 2), 1);
- assert_eq_const_safe!(<$T>::midpoint(2, 0), 1);
- assert_eq_const_safe!(<$T>::midpoint(2, 2), 2);
-
- assert_eq_const_safe!(<$T>::midpoint(1, 4), 2);
- assert_eq_const_safe!(<$T>::midpoint(4, 1), 2);
- assert_eq_const_safe!(<$T>::midpoint(3, 4), 3);
- assert_eq_const_safe!(<$T>::midpoint(4, 3), 3);
-
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MIN, <$T>::MAX), (<$T>::MAX - <$T>::MIN) / 2);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MAX, <$T>::MIN), (<$T>::MAX - <$T>::MIN) / 2);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MIN, <$T>::MIN), <$T>::MIN);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MAX, <$T>::MAX), <$T>::MAX);
-
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MIN, 6), <$T>::MIN / 2 + 3);
- assert_eq_const_safe!(<$T>::midpoint(6, <$T>::MIN), <$T>::MIN / 2 + 3);
- assert_eq_const_safe!(<$T>::midpoint(<$T>::MAX, 6), (<$T>::MAX - <$T>::MIN) / 2 + 3);
- assert_eq_const_safe!(<$T>::midpoint(6, <$T>::MAX), (<$T>::MAX - <$T>::MIN) / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(1, 3), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(3, 1), 2);
+
+ assert_eq_const_safe!($T: <$T>::midpoint(0, 0), 0);
+ assert_eq_const_safe!($T: <$T>::midpoint(0, 2), 1);
+ assert_eq_const_safe!($T: <$T>::midpoint(2, 0), 1);
+ assert_eq_const_safe!($T: <$T>::midpoint(2, 2), 2);
+
+ assert_eq_const_safe!($T: <$T>::midpoint(1, 4), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(4, 1), 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(3, 4), 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(4, 3), 3);
+
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MIN, <$T>::MAX), (<$T>::MAX - <$T>::MIN) / 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MAX, <$T>::MIN), (<$T>::MAX - <$T>::MIN) / 2);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MIN, <$T>::MIN), <$T>::MIN);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MAX, <$T>::MAX), <$T>::MAX);
+
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MIN, 6), <$T>::MIN / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(6, <$T>::MIN), <$T>::MIN / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(<$T>::MAX, 6), (<$T>::MAX - <$T>::MIN) / 2 + 3);
+ assert_eq_const_safe!($T: <$T>::midpoint(6, <$T>::MAX), (<$T>::MAX - <$T>::MIN) / 2 + 3);
}
}
@@ -365,154 +366,154 @@ macro_rules! uint_module {
test_runtime_and_compiletime! {
fn test_unbounded_shl() {
// <$T>::MIN
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, 1), (<$T>::MIN << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, 3), (<$T>::MIN << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, 5), (<$T>::MIN << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, 1), (<$T>::MIN << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, 3), (<$T>::MIN << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, 5), (<$T>::MIN << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), 0);
// <$T>::MAX
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, 1), (<$T>::MAX << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, 3), (<$T>::MAX << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, 5), (<$T>::MAX << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, 1), (<$T>::MAX << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, 3), (<$T>::MAX << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, 5), (<$T>::MAX << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
// 1
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_ONE), (1 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_TWO), (1 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_THREE), (1 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_FOUR), (1 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, 1), (1 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, 3), (1 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, 5), (1 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_ONE), (1 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_TWO), (1 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_THREE), (1 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_TEST_FOUR), (1 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, 1), (1 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, 3), (1 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, 5), (1 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(1, SHIFT_AMOUNT_OVERFLOW3), 0);
// !0
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_ONE), (!0 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_TWO), (!0 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_THREE), (!0 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_FOUR), (!0 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, 1), (!0 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, 3), (!0 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, 5), (!0 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_ONE), (!0 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_TWO), (!0 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_THREE), (!0 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_TEST_FOUR), (!0 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, 1), (!0 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, 3), (!0 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, 5), (!0 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(!0, SHIFT_AMOUNT_OVERFLOW3), 0);
// 8
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_ONE), (8 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_TWO), (8 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_THREE), (8 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_FOUR), (8 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, 1), (8 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, 3), (8 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, 5), (8 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_ONE), (8 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_TWO), (8 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_THREE), (8 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_TEST_FOUR), (8 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, 1), (8 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, 3), (8 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, 5), (8 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(8, SHIFT_AMOUNT_OVERFLOW3), 0);
// 17
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_ONE), (17 << SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_TWO), (17 << SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_THREE), (17 << SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_FOUR), (17 << SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, 1), (17 << 1));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, 3), (17 << 3));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, 5), (17 << 5));
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_ONE), (17 << SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_TWO), (17 << SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_THREE), (17 << SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_TEST_FOUR), (17 << SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, 1), (17 << 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, 3), (17 << 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, 5), (17 << 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shl(17, SHIFT_AMOUNT_OVERFLOW3), 0);
}
fn test_unbounded_shr() {
// <$T>::MIN
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, 1), (<$T>::MIN >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, 3), (<$T>::MIN >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, 5), (<$T>::MIN >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_ONE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_TWO), (<$T>::MIN >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_THREE), (<$T>::MIN >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MIN >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, 1), (<$T>::MIN >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, 3), (<$T>::MIN >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, 5), (<$T>::MIN >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MIN, SHIFT_AMOUNT_OVERFLOW3), 0);
// <$T>::MAX
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, 1), (<$T>::MAX >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, 3), (<$T>::MAX >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, 5), (<$T>::MAX >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_ONE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_TWO), (<$T>::MAX >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_THREE), (<$T>::MAX >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_TEST_FOUR), (<$T>::MAX >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, 1), (<$T>::MAX >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, 3), (<$T>::MAX >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, 5), (<$T>::MAX >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(<$T>::MAX, SHIFT_AMOUNT_OVERFLOW3), 0);
// 1
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_ONE), (1 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_TWO), (1 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_THREE), (1 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_FOUR), (1 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, 1), (1 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, 3), (1 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, 5), (1 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_ONE), (1 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_TWO), (1 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_THREE), (1 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_TEST_FOUR), (1 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, 1), (1 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, 3), (1 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, 5), (1 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(1, SHIFT_AMOUNT_OVERFLOW3), 0);
// !0
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_ONE), (!0 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_TWO), (!0 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_THREE), (!0 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_FOUR), (!0 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, 1), (!0 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, 3), (!0 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, 5), (!0 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_ONE), (!0 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_TWO), (!0 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_THREE), (!0 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_TEST_FOUR), (!0 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, 1), (!0 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, 3), (!0 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, 5), (!0 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(!0, SHIFT_AMOUNT_OVERFLOW3), 0);
// 8
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_ONE), (8 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_TWO), (8 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_THREE), (8 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_FOUR), (8 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, 1), (8 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, 3), (8 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, 5), (8 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_ONE), (8 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_TWO), (8 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_THREE), (8 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_TEST_FOUR), (8 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, 1), (8 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, 3), (8 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, 5), (8 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(8, SHIFT_AMOUNT_OVERFLOW3), 0);
// 17
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_ONE), (17 >> SHIFT_AMOUNT_TEST_ONE));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_TWO), (17 >> SHIFT_AMOUNT_TEST_TWO));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_THREE), (17 >> SHIFT_AMOUNT_TEST_THREE));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_FOUR), (17 >> SHIFT_AMOUNT_TEST_FOUR));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, 1), (17 >> 1));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, 3), (17 >> 3));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, 5), (17 >> 5));
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW2), 0);
- assert_eq_const_safe!(<$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW3), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_ONE), (17 >> SHIFT_AMOUNT_TEST_ONE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_TWO), (17 >> SHIFT_AMOUNT_TEST_TWO));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_THREE), (17 >> SHIFT_AMOUNT_TEST_THREE));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_TEST_FOUR), (17 >> SHIFT_AMOUNT_TEST_FOUR));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, 1), (17 >> 1));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, 3), (17 >> 3));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, 5), (17 >> 5));
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW2), 0);
+ assert_eq_const_safe!($T: <$T>::unbounded_shr(17, SHIFT_AMOUNT_OVERFLOW3), 0);
}
}
};
diff --git a/library/std/src/sys/fs/windows.rs b/library/std/src/sys/fs/windows.rs
index 06bba019393a5..15727c996837b 100644
--- a/library/std/src/sys/fs/windows.rs
+++ b/library/std/src/sys/fs/windows.rs
@@ -547,7 +547,7 @@ impl File {
))?;
attr.file_size = info.AllocationSize as u64;
attr.number_of_links = Some(info.NumberOfLinks);
- if attr.file_type().is_reparse_point() {
+ if attr.attributes & c::FILE_ATTRIBUTE_REPARSE_POINT != 0 {
let mut attr_tag: c::FILE_ATTRIBUTE_TAG_INFO = mem::zeroed();
cvt(c::GetFileInformationByHandleEx(
self.handle.as_raw_handle(),
diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
index 68400ba0ea029..b03eab66e99bf 100644
--- a/src/bootstrap/bootstrap.py
+++ b/src/bootstrap/bootstrap.py
@@ -1162,6 +1162,30 @@ def build_triple(self):
config = self.get_toml("build")
return config or default_build_triple(self.verbose)
+ def is_git_repository(self, repo_path):
+ return os.path.isdir(os.path.join(repo_path, ".git"))
+
+ def get_latest_commit(self):
+ repo_path = self.rust_root
+ author_email = self.stage0_data.get("git_merge_commit_email")
+ if not self.is_git_repository(repo_path):
+ return ""
+ cmd = [
+ "git",
+ "-C",
+ repo_path,
+ "rev-list",
+ "--author",
+ author_email,
+ "-n1",
+ "HEAD",
+ ]
+ try:
+ commit = subprocess.check_output(cmd, text=True).strip()
+ return commit or ""
+ except subprocess.CalledProcessError:
+ return ""
+
def check_vendored_status(self):
"""Check that vendoring is configured properly"""
# keep this consistent with the equivalent check in bootstrap:
@@ -1174,7 +1198,8 @@ def check_vendored_status(self):
eprint(" use vendored sources by default.")
cargo_dir = os.path.join(self.rust_root, ".cargo")
- url = "https://ci-artifacts.rust-lang.org/rustc-builds//rustc-nightly-src.tar.xz"
+ commit = self.get_latest_commit()
+ url = f"https://ci-artifacts.rust-lang.org/rustc-builds/{commit}/rustc-nightly-src.tar.xz"
if self.use_vendored_sources:
vendor_dir = os.path.join(self.rust_root, "vendor")
if not os.path.exists(vendor_dir):
diff --git a/src/doc/unstable-book/src/language-features/inline-const-pat.md b/src/doc/unstable-book/src/language-features/inline-const-pat.md
deleted file mode 100644
index c6f54d79cfce8..0000000000000
--- a/src/doc/unstable-book/src/language-features/inline-const-pat.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# `inline_const_pat`
-
-The tracking issue for this feature is: [#76001]
-
-------
-
-This feature allows you to use inline constant expressions in pattern position:
-
-```rust
-#![feature(inline_const_pat)]
-
-const fn one() -> i32 { 1 }
-
-let some_int = 3;
-match some_int {
- const { 1 + 2 } => println!("Matched 1 + 2"),
- const { one() } => println!("Matched const fn returning 1"),
- _ => println!("Didn't match anything :("),
-}
-```
-
-[#76001]: https://github.com/rust-lang/rust/issues/76001
diff --git a/src/tools/clippy/clippy_lints/src/matches/redundant_guards.rs b/src/tools/clippy/clippy_lints/src/matches/redundant_guards.rs
index ab53ad98572e4..9bbef8da0a466 100644
--- a/src/tools/clippy/clippy_lints/src/matches/redundant_guards.rs
+++ b/src/tools/clippy/clippy_lints/src/matches/redundant_guards.rs
@@ -246,7 +246,6 @@ fn emit_redundant_guards<'tcx>(
fn expr_can_be_pat(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
for_each_expr_without_closures(expr, |expr| {
if match expr.kind {
- ExprKind::ConstBlock(..) => cx.tcx.features().inline_const_pat(),
ExprKind::Call(c, ..) if let ExprKind::Path(qpath) = c.kind => {
// Allow ctors
matches!(cx.qpath_res(&qpath, c.hir_id), Res::Def(DefKind::Ctor(..), ..))
diff --git a/src/tools/rustfmt/tests/source/pattern.rs b/src/tools/rustfmt/tests/source/pattern.rs
index ed6ad690fa98d..0e5abb52394dd 100644
--- a/src/tools/rustfmt/tests/source/pattern.rs
+++ b/src/tools/rustfmt/tests/source/pattern.rs
@@ -91,7 +91,7 @@ fn issue3728() {
fn literals() {
match 42 {
- const { 1 + 2 } | 4
+ 1 | 2 | 4
| 6 => {}
10 | 11 | 12
| 13 | 14 => {}
diff --git a/src/tools/rustfmt/tests/target/pattern.rs b/src/tools/rustfmt/tests/target/pattern.rs
index e867f65929dd9..483725f95c48a 100644
--- a/src/tools/rustfmt/tests/target/pattern.rs
+++ b/src/tools/rustfmt/tests/target/pattern.rs
@@ -99,7 +99,7 @@ fn issue3728() {
fn literals() {
match 42 {
- const { 1 + 2 } | 4 | 6 => {}
+ 1 | 2 | 4 | 6 => {}
10 | 11 | 12 | 13 | 14 => {}
_ => {}
}
diff --git a/src/tools/tidy/src/issues.txt b/src/tools/tidy/src/issues.txt
index a33e03d5861ed..d2ae9b1f6ef89 100644
--- a/src/tools/tidy/src/issues.txt
+++ b/src/tools/tidy/src/issues.txt
@@ -2873,7 +2873,6 @@ ui/macros/rfc-3086-metavar-expr/issue-111904.rs
ui/malformed/issue-107423-unused-delim-only-one-no-pair.rs
ui/malformed/issue-69341-malformed-derive-inert.rs
ui/marker_trait_attr/issue-61651-type-mismatch.rs
-ui/match/issue-112438.rs
ui/match/issue-113012.rs
ui/match/issue-11319.rs
ui/match/issue-114691.rs
diff --git a/tests/codegen/cast-target-abi.rs b/tests/codegen/cast-target-abi.rs
index 186198bc631eb..e1a7ad718a067 100644
--- a/tests/codegen/cast-target-abi.rs
+++ b/tests/codegen/cast-target-abi.rs
@@ -2,7 +2,7 @@
//@ add-core-stubs
//@ revisions:aarch64 loongarch64 powerpc64 sparc64 x86_64
//@ min-llvm-version: 19
-//@ compile-flags: -Copt-level=3 -Cno-prepopulate-passes -Zlint-llvm-ir -Cllvm-args=-lint-abort-on-error
+//@ compile-flags: -Copt-level=3 -Cno-prepopulate-passes -Zlint-llvm-ir
//@[aarch64] compile-flags: --target aarch64-unknown-linux-gnu
//@[aarch64] needs-llvm-components: arm
diff --git a/tests/codegen/cffi/ffi-out-of-bounds-loads.rs b/tests/codegen/cffi/ffi-out-of-bounds-loads.rs
index 404f6237849e6..73bc7ef6b77d6 100644
--- a/tests/codegen/cffi/ffi-out-of-bounds-loads.rs
+++ b/tests/codegen/cffi/ffi-out-of-bounds-loads.rs
@@ -1,7 +1,7 @@
//@ add-core-stubs
//@ revisions: linux apple
//@ min-llvm-version: 19
-//@ compile-flags: -Copt-level=0 -Cno-prepopulate-passes -Zlint-llvm-ir -Cllvm-args=-lint-abort-on-error
+//@ compile-flags: -Copt-level=0 -Cno-prepopulate-passes -Zlint-llvm-ir
//@[linux] compile-flags: --target x86_64-unknown-linux-gnu
//@[linux] needs-llvm-components: x86
diff --git a/tests/codegen/slice-last-elements-optimization.rs b/tests/codegen/slice-last-elements-optimization.rs
new file mode 100644
index 0000000000000..b90f91d7b17b9
--- /dev/null
+++ b/tests/codegen/slice-last-elements-optimization.rs
@@ -0,0 +1,37 @@
+//@ compile-flags: -Copt-level=3
+//@ only-x86_64
+//@ min-llvm-version: 20
+#![crate_type = "lib"]
+
+// This test verifies that LLVM 20 properly optimizes the bounds check
+// when accessing the last few elements of a slice with proper conditions.
+// Previously, this would generate an unreachable branch to
+// slice_start_index_len_fail even when the bounds check was provably safe.
+
+// CHECK-LABEL: @last_four_initial(
+#[no_mangle]
+pub fn last_four_initial(s: &[u8]) -> &[u8] {
+ // Previously this would generate a branch to slice_start_index_len_fail
+ // that is unreachable. The LLVM 20 fix should eliminate this branch.
+ // CHECK-NOT: slice_start_index_len_fail
+ // CHECK-NOT: unreachable
+ let start = if s.len() <= 4 { 0 } else { s.len() - 4 };
+ &s[start..]
+}
+
+// CHECK-LABEL: @last_four_optimized(
+#[no_mangle]
+pub fn last_four_optimized(s: &[u8]) -> &[u8] {
+ // This version was already correctly optimized before the fix in LLVM 20.
+ // CHECK-NOT: slice_start_index_len_fail
+ // CHECK-NOT: unreachable
+ if s.len() <= 4 { &s[0..] } else { &s[s.len() - 4..] }
+}
+
+// Just to verify we're correctly checking for the right thing
+// CHECK-LABEL: @test_bounds_check_happens(
+#[no_mangle]
+pub fn test_bounds_check_happens(s: &[u8], i: usize) -> &[u8] {
+ // CHECK: slice_start_index_len_fail
+ &s[i..]
+}
diff --git a/tests/coverage/abort.cov-map b/tests/coverage/abort.cov-map
index 84fae4a595a71..26536caeba52c 100644
--- a/tests/coverage/abort.cov-map
+++ b/tests/coverage/abort.cov-map
@@ -34,14 +34,14 @@ Number of file 0 mappings: 13
Highest counter ID seen: c4
Function name: abort::might_abort
-Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 03, 01, 01, 14, 05, 02, 09, 01, 24, 02, 02, 0c, 03, 02]
+Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 03, 01, 01, 14, 05, 02, 09, 01, 0f, 02, 02, 0c, 03, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 3, 1) to (start + 1, 20)
-- Code(Counter(1)) at (prev + 2, 9) to (start + 1, 36)
+- Code(Counter(1)) at (prev + 2, 9) to (start + 1, 15)
- Code(Expression(0, Sub)) at (prev + 2, 12) to (start + 3, 2)
= (c0 - c1)
Highest counter ID seen: c1
diff --git a/tests/coverage/assert-ne.cov-map b/tests/coverage/assert-ne.cov-map
index b432e63c168ce..27d4b0382dec7 100644
--- a/tests/coverage/assert-ne.cov-map
+++ b/tests/coverage/assert-ne.cov-map
@@ -1,12 +1,12 @@
Function name: assert_ne::main
-Raw bytes (28): 0x[01, 01, 02, 01, 05, 01, 09, 04, 01, 08, 01, 03, 1c, 05, 04, 0d, 00, 13, 02, 02, 0d, 00, 13, 06, 03, 05, 01, 02]
+Raw bytes (28): 0x[01, 01, 02, 01, 05, 01, 09, 04, 01, 08, 01, 03, 15, 05, 04, 0d, 00, 13, 02, 02, 0d, 00, 13, 06, 03, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 2
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
- expression 1 operands: lhs = Counter(0), rhs = Counter(2)
Number of file 0 mappings: 4
-- Code(Counter(0)) at (prev + 8, 1) to (start + 3, 28)
+- Code(Counter(0)) at (prev + 8, 1) to (start + 3, 21)
- Code(Counter(1)) at (prev + 4, 13) to (start + 0, 19)
- Code(Expression(0, Sub)) at (prev + 2, 13) to (start + 0, 19)
= (c0 - c1)
diff --git a/tests/coverage/assert-ne.coverage b/tests/coverage/assert-ne.coverage
index 236a8fd138588..fc43d4a8e06a0 100644
--- a/tests/coverage/assert-ne.coverage
+++ b/tests/coverage/assert-ne.coverage
@@ -7,7 +7,7 @@
LL| |
LL| 1|fn main() {
LL| 1| assert_ne!(
- LL| 1| Foo(5), // Make sure this expression's span isn't lost.
+ LL| 1| black_box(Foo(5)), // Make sure this expression's span isn't lost.
LL| 1| if black_box(false) {
LL| 0| Foo(0) //
LL| | } else {
diff --git a/tests/coverage/assert-ne.rs b/tests/coverage/assert-ne.rs
index 8a8fe0898048d..9d9fcb71ba7f9 100644
--- a/tests/coverage/assert-ne.rs
+++ b/tests/coverage/assert-ne.rs
@@ -7,7 +7,7 @@ struct Foo(u32);
fn main() {
assert_ne!(
- Foo(5), // Make sure this expression's span isn't lost.
+ black_box(Foo(5)), // Make sure this expression's span isn't lost.
if black_box(false) {
Foo(0) //
} else {
diff --git a/tests/coverage/assert_not.cov-map b/tests/coverage/assert_not.cov-map
index 526110ebbb764..3aef4274edc34 100644
--- a/tests/coverage/assert_not.cov-map
+++ b/tests/coverage/assert_not.cov-map
@@ -1,13 +1,13 @@
Function name: assert_not::main
-Raw bytes (29): 0x[01, 01, 00, 05, 01, 06, 01, 01, 12, 01, 02, 05, 00, 14, 01, 01, 05, 00, 14, 01, 01, 05, 00, 16, 01, 01, 01, 00, 02]
+Raw bytes (29): 0x[01, 01, 00, 05, 01, 06, 01, 01, 11, 01, 02, 05, 00, 13, 01, 01, 05, 00, 13, 01, 01, 05, 00, 15, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 5
-- Code(Counter(0)) at (prev + 6, 1) to (start + 1, 18)
-- Code(Counter(0)) at (prev + 2, 5) to (start + 0, 20)
-- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 20)
-- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 22)
+- Code(Counter(0)) at (prev + 6, 1) to (start + 1, 17)
+- Code(Counter(0)) at (prev + 2, 5) to (start + 0, 19)
+- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 19)
+- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 21)
- Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c0
diff --git a/tests/coverage/async_block.cov-map b/tests/coverage/async_block.cov-map
index 5eb69e668ca5d..d9196f446f137 100644
--- a/tests/coverage/async_block.cov-map
+++ b/tests/coverage/async_block.cov-map
@@ -1,5 +1,5 @@
Function name: async_block::main
-Raw bytes (36): 0x[01, 01, 01, 05, 01, 06, 01, 07, 01, 00, 0b, 02, 01, 09, 00, 0a, 05, 00, 0e, 00, 13, 02, 00, 14, 01, 16, 02, 07, 0a, 02, 06, 01, 03, 01, 00, 02]
+Raw bytes (36): 0x[01, 01, 01, 05, 01, 06, 01, 07, 01, 00, 0b, 02, 01, 09, 00, 0a, 05, 00, 0e, 00, 13, 02, 01, 0d, 00, 13, 02, 07, 09, 00, 22, 01, 02, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
@@ -9,11 +9,11 @@ Number of file 0 mappings: 6
- Code(Expression(0, Sub)) at (prev + 1, 9) to (start + 0, 10)
= (c1 - c0)
- Code(Counter(1)) at (prev + 0, 14) to (start + 0, 19)
-- Code(Expression(0, Sub)) at (prev + 0, 20) to (start + 1, 22)
+- Code(Expression(0, Sub)) at (prev + 1, 13) to (start + 0, 19)
= (c1 - c0)
-- Code(Expression(0, Sub)) at (prev + 7, 10) to (start + 2, 6)
+- Code(Expression(0, Sub)) at (prev + 7, 9) to (start + 0, 34)
= (c1 - c0)
-- Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
+- Code(Counter(0)) at (prev + 2, 1) to (start + 0, 2)
Highest counter ID seen: c1
Function name: async_block::main::{closure#0}
diff --git a/tests/coverage/async_block.coverage b/tests/coverage/async_block.coverage
index 9e3294492cd03..4e00024aebd2e 100644
--- a/tests/coverage/async_block.coverage
+++ b/tests/coverage/async_block.coverage
@@ -15,6 +15,6 @@
LL| 12| }
LL| 16| };
LL| 16| executor::block_on(future);
- LL| 16| }
+ LL| | }
LL| 1|}
diff --git a/tests/coverage/async_closure.cov-map b/tests/coverage/async_closure.cov-map
index 0e1d987783075..a4ef0ceeb6df6 100644
--- a/tests/coverage/async_closure.cov-map
+++ b/tests/coverage/async_closure.cov-map
@@ -30,21 +30,23 @@ Number of file 0 mappings: 2
Highest counter ID seen: c0
Function name: async_closure::main::{closure#0}
-Raw bytes (9): 0x[01, 01, 00, 01, 01, 0b, 23, 00, 24]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 0b, 22, 00, 23, 01, 00, 23, 00, 24]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
-Number of file 0 mappings: 1
-- Code(Counter(0)) at (prev + 11, 35) to (start + 0, 36)
+Number of file 0 mappings: 2
+- Code(Counter(0)) at (prev + 11, 34) to (start + 0, 35)
+- Code(Counter(0)) at (prev + 0, 35) to (start + 0, 36)
Highest counter ID seen: c0
Function name: async_closure::main::{closure#0}
-Raw bytes (9): 0x[01, 01, 00, 01, 01, 0b, 23, 00, 24]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 0b, 22, 00, 23, 01, 00, 23, 00, 24]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
-Number of file 0 mappings: 1
-- Code(Counter(0)) at (prev + 11, 35) to (start + 0, 36)
+Number of file 0 mappings: 2
+- Code(Counter(0)) at (prev + 11, 34) to (start + 0, 35)
+- Code(Counter(0)) at (prev + 0, 35) to (start + 0, 36)
Highest counter ID seen: c0
Function name: async_closure::main::{closure#0}::{closure#0}::
diff --git a/tests/coverage/async_closure.coverage b/tests/coverage/async_closure.coverage
index 10a8ea14504b3..5aed131de2e5e 100644
--- a/tests/coverage/async_closure.coverage
+++ b/tests/coverage/async_closure.coverage
@@ -9,13 +9,15 @@
LL| |
LL| 1|pub fn main() {
LL| 2| let async_closure = async || {};
- ^1
------------------
| async_closure::main::{closure#0}:
| LL| 1| let async_closure = async || {};
------------------
| async_closure::main::{closure#0}:
| LL| 1| let async_closure = async || {};
+ ------------------
+ | async_closure::main::{closure#0}::{closure#0}:::
+ | LL| 1| let async_closure = async || {};
------------------
LL| 1| executor::block_on(async_closure());
LL| 1| executor::block_on(call_once(async_closure));
diff --git a/tests/coverage/attr/off-on-sandwich.cov-map b/tests/coverage/attr/off-on-sandwich.cov-map
index ef6f5a9dc4285..c55c5897d8bab 100644
--- a/tests/coverage/attr/off-on-sandwich.cov-map
+++ b/tests/coverage/attr/off-on-sandwich.cov-map
@@ -1,30 +1,30 @@
Function name: off_on_sandwich::dense_a::dense_b
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 05, 02, 12, 01, 07, 05, 00, 06]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 05, 02, 10, 01, 07, 05, 00, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 16, 5) to (start + 2, 18)
+- Code(Counter(0)) at (prev + 16, 5) to (start + 2, 16)
- Code(Counter(0)) at (prev + 7, 5) to (start + 0, 6)
Highest counter ID seen: c0
Function name: off_on_sandwich::sparse_a::sparse_b::sparse_c
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 22, 09, 02, 17, 01, 0b, 09, 00, 0a]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 22, 09, 02, 15, 01, 0b, 09, 00, 0a]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 34, 9) to (start + 2, 23)
+- Code(Counter(0)) at (prev + 34, 9) to (start + 2, 21)
- Code(Counter(0)) at (prev + 11, 9) to (start + 0, 10)
Highest counter ID seen: c0
Function name: off_on_sandwich::sparse_a::sparse_b::sparse_c::sparse_d
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 25, 0d, 02, 1b, 01, 07, 0d, 00, 0e]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 25, 0d, 02, 19, 01, 07, 0d, 00, 0e]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 37, 13) to (start + 2, 27)
+- Code(Counter(0)) at (prev + 37, 13) to (start + 2, 25)
- Code(Counter(0)) at (prev + 7, 13) to (start + 0, 14)
Highest counter ID seen: c0
diff --git a/tests/coverage/bad_counter_ids.cov-map b/tests/coverage/bad_counter_ids.cov-map
index baac0073fcbec..f08a70a899d09 100644
--- a/tests/coverage/bad_counter_ids.cov-map
+++ b/tests/coverage/bad_counter_ids.cov-map
@@ -1,10 +1,10 @@
Function name: bad_counter_ids::eq_bad
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 24, 01, 02, 1f, 00, 03, 01, 00, 02]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 24, 01, 02, 0f, 00, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 36, 1) to (start + 2, 31)
+- Code(Counter(0)) at (prev + 36, 1) to (start + 2, 15)
- Code(Zero) at (prev + 3, 1) to (start + 0, 2)
Highest counter ID seen: c0
@@ -20,12 +20,12 @@ Number of file 0 mappings: 3
Highest counter ID seen: c0
Function name: bad_counter_ids::eq_good
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 01, 02, 1f, 01, 03, 01, 00, 02]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 01, 02, 0f, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 16, 1) to (start + 2, 31)
+- Code(Counter(0)) at (prev + 16, 1) to (start + 2, 15)
- Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
Highest counter ID seen: c0
@@ -41,12 +41,12 @@ Number of file 0 mappings: 3
Highest counter ID seen: c0
Function name: bad_counter_ids::ne_bad
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 2e, 01, 02, 1f, 00, 03, 01, 00, 02]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 2e, 01, 02, 0f, 00, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 46, 1) to (start + 2, 31)
+- Code(Counter(0)) at (prev + 46, 1) to (start + 2, 15)
- Code(Zero) at (prev + 3, 1) to (start + 0, 2)
Highest counter ID seen: c0
@@ -62,12 +62,12 @@ Number of file 0 mappings: 3
Highest counter ID seen: c0
Function name: bad_counter_ids::ne_good
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 1a, 01, 02, 1f, 01, 03, 01, 00, 02]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 1a, 01, 02, 0f, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 26, 1) to (start + 2, 31)
+- Code(Counter(0)) at (prev + 26, 1) to (start + 2, 15)
- Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
Highest counter ID seen: c0
diff --git a/tests/coverage/branch/guard.cov-map b/tests/coverage/branch/guard.cov-map
index 55f45daa9c93d..46533df00f715 100644
--- a/tests/coverage/branch/guard.cov-map
+++ b/tests/coverage/branch/guard.cov-map
@@ -1,5 +1,5 @@
Function name: guard::branch_match_guard
-Raw bytes (89): 0x[01, 01, 08, 05, 0d, 09, 05, 05, 0f, 0d, 11, 17, 1b, 01, 05, 1f, 11, 09, 0d, 0d, 01, 0c, 01, 01, 10, 02, 03, 0b, 00, 0c, 06, 01, 14, 02, 0a, 0d, 03, 0e, 00, 0f, 05, 00, 14, 00, 19, 20, 0d, 02, 00, 14, 00, 1e, 0d, 00, 1d, 02, 0a, 11, 03, 0e, 00, 0f, 02, 00, 14, 00, 19, 20, 11, 0a, 00, 14, 00, 1e, 11, 00, 1d, 02, 0a, 12, 03, 0e, 02, 0a, 01, 04, 01, 00, 02]
+Raw bytes (89): 0x[01, 01, 08, 05, 0d, 09, 05, 05, 0f, 0d, 11, 17, 1b, 01, 05, 1f, 11, 09, 0d, 0d, 01, 0c, 01, 01, 0e, 02, 03, 0b, 00, 0c, 06, 01, 14, 02, 0a, 0d, 03, 0e, 00, 0f, 05, 00, 14, 00, 19, 20, 0d, 02, 00, 14, 00, 1e, 0d, 00, 1d, 02, 0a, 11, 03, 0e, 00, 0f, 02, 00, 14, 00, 19, 20, 11, 0a, 00, 14, 00, 1e, 11, 00, 1d, 02, 0a, 12, 03, 0e, 02, 0a, 01, 04, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 8
@@ -12,7 +12,7 @@ Number of expressions: 8
- expression 6 operands: lhs = Expression(7, Add), rhs = Counter(4)
- expression 7 operands: lhs = Counter(2), rhs = Counter(3)
Number of file 0 mappings: 13
-- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 14)
- Code(Expression(0, Sub)) at (prev + 3, 11) to (start + 0, 12)
= (c1 - c3)
- Code(Expression(1, Sub)) at (prev + 1, 20) to (start + 2, 10)
diff --git a/tests/coverage/branch/if-let.cov-map b/tests/coverage/branch/if-let.cov-map
index db45df2a5cd00..7f6b174615a9b 100644
--- a/tests/coverage/branch/if-let.cov-map
+++ b/tests/coverage/branch/if-let.cov-map
@@ -1,11 +1,11 @@
Function name: if_let::if_let
-Raw bytes (43): 0x[01, 01, 01, 01, 05, 07, 01, 0c, 01, 01, 10, 20, 02, 05, 03, 0c, 00, 13, 02, 00, 11, 00, 12, 01, 00, 16, 00, 1b, 02, 00, 1c, 02, 06, 05, 02, 0c, 02, 06, 01, 03, 05, 01, 02]
+Raw bytes (43): 0x[01, 01, 01, 01, 05, 07, 01, 0c, 01, 01, 0e, 20, 02, 05, 03, 0c, 00, 13, 02, 00, 11, 00, 12, 01, 00, 16, 00, 1b, 02, 00, 1c, 02, 06, 05, 02, 0c, 02, 06, 01, 03, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 7
-- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 14)
- Branch { true: Expression(0, Sub), false: Counter(1) } at (prev + 3, 12) to (start + 0, 19)
true = (c0 - c1)
false = c1
diff --git a/tests/coverage/branch/if.cov-map b/tests/coverage/branch/if.cov-map
index a6b865318c662..1d40f032aa87c 100644
--- a/tests/coverage/branch/if.cov-map
+++ b/tests/coverage/branch/if.cov-map
@@ -1,5 +1,5 @@
Function name: if::branch_and
-Raw bytes (54): 0x[01, 01, 03, 01, 05, 05, 09, 01, 09, 08, 01, 2b, 01, 01, 10, 01, 03, 08, 00, 09, 20, 05, 02, 00, 08, 00, 09, 05, 00, 0d, 00, 0e, 20, 09, 06, 00, 0d, 00, 0e, 09, 00, 0f, 02, 06, 0a, 02, 0c, 02, 06, 01, 03, 01, 00, 02]
+Raw bytes (54): 0x[01, 01, 03, 01, 05, 05, 09, 01, 09, 08, 01, 2b, 01, 01, 0e, 01, 03, 08, 00, 09, 20, 05, 02, 00, 08, 00, 09, 05, 00, 0d, 00, 0e, 20, 09, 06, 00, 0d, 00, 0e, 09, 00, 0f, 02, 06, 0a, 02, 0c, 02, 06, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 3
@@ -7,7 +7,7 @@ Number of expressions: 3
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
- expression 2 operands: lhs = Counter(0), rhs = Counter(2)
Number of file 0 mappings: 8
-- Code(Counter(0)) at (prev + 43, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 43, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 8) to (start + 0, 9)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 8) to (start + 0, 9)
true = c1
@@ -23,7 +23,7 @@ Number of file 0 mappings: 8
Highest counter ID seen: c2
Function name: if::branch_not
-Raw bytes (116): 0x[01, 01, 07, 01, 05, 01, 09, 01, 09, 01, 0d, 01, 0d, 01, 11, 01, 11, 12, 01, 0c, 01, 01, 10, 01, 03, 08, 00, 09, 20, 05, 02, 00, 08, 00, 09, 05, 01, 09, 00, 11, 02, 01, 05, 00, 06, 01, 01, 08, 00, 0a, 20, 0a, 09, 00, 08, 00, 0a, 0a, 00, 0b, 02, 06, 09, 02, 05, 00, 06, 01, 01, 08, 00, 0b, 20, 0d, 12, 00, 08, 00, 0b, 0d, 00, 0c, 02, 06, 12, 02, 05, 00, 06, 01, 01, 08, 00, 0c, 20, 1a, 11, 00, 08, 00, 0c, 1a, 00, 0d, 02, 06, 11, 02, 05, 00, 06, 01, 01, 01, 00, 02]
+Raw bytes (116): 0x[01, 01, 07, 01, 05, 01, 09, 01, 09, 01, 0d, 01, 0d, 01, 11, 01, 11, 12, 01, 0c, 01, 01, 0e, 01, 03, 08, 00, 09, 20, 05, 02, 00, 08, 00, 09, 05, 01, 09, 00, 10, 02, 01, 05, 00, 06, 01, 01, 08, 00, 0a, 20, 0a, 09, 00, 08, 00, 0a, 0a, 00, 0b, 02, 06, 09, 02, 05, 00, 06, 01, 01, 08, 00, 0b, 20, 0d, 12, 00, 08, 00, 0b, 0d, 00, 0c, 02, 06, 12, 02, 05, 00, 06, 01, 01, 08, 00, 0c, 20, 1a, 11, 00, 08, 00, 0c, 1a, 00, 0d, 02, 06, 11, 02, 05, 00, 06, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 7
@@ -35,12 +35,12 @@ Number of expressions: 7
- expression 5 operands: lhs = Counter(0), rhs = Counter(4)
- expression 6 operands: lhs = Counter(0), rhs = Counter(4)
Number of file 0 mappings: 18
-- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 8) to (start + 0, 9)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 8) to (start + 0, 9)
true = c1
false = (c0 - c1)
-- Code(Counter(1)) at (prev + 1, 9) to (start + 0, 17)
+- Code(Counter(1)) at (prev + 1, 9) to (start + 0, 16)
- Code(Expression(0, Sub)) at (prev + 1, 5) to (start + 0, 6)
= (c0 - c1)
- Code(Counter(0)) at (prev + 1, 8) to (start + 0, 10)
@@ -68,7 +68,7 @@ Number of file 0 mappings: 18
Highest counter ID seen: c4
Function name: if::branch_not_as
-Raw bytes (90): 0x[01, 01, 05, 01, 05, 01, 09, 01, 09, 01, 0d, 01, 0d, 0e, 01, 1d, 01, 01, 10, 01, 03, 08, 00, 14, 20, 02, 05, 00, 08, 00, 14, 02, 00, 15, 02, 06, 05, 02, 05, 00, 06, 01, 01, 08, 00, 15, 20, 09, 0a, 00, 08, 00, 15, 09, 00, 16, 02, 06, 0a, 02, 05, 00, 06, 01, 01, 08, 00, 16, 20, 12, 0d, 00, 08, 00, 16, 12, 00, 17, 02, 06, 0d, 02, 05, 00, 06, 01, 01, 01, 00, 02]
+Raw bytes (90): 0x[01, 01, 05, 01, 05, 01, 09, 01, 09, 01, 0d, 01, 0d, 0e, 01, 1d, 01, 01, 0e, 01, 03, 08, 00, 14, 20, 02, 05, 00, 08, 00, 14, 02, 00, 15, 02, 06, 05, 02, 05, 00, 06, 01, 01, 08, 00, 15, 20, 09, 0a, 00, 08, 00, 15, 09, 00, 16, 02, 06, 0a, 02, 05, 00, 06, 01, 01, 08, 00, 16, 20, 12, 0d, 00, 08, 00, 16, 12, 00, 17, 02, 06, 0d, 02, 05, 00, 06, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 5
@@ -78,7 +78,7 @@ Number of expressions: 5
- expression 3 operands: lhs = Counter(0), rhs = Counter(3)
- expression 4 operands: lhs = Counter(0), rhs = Counter(3)
Number of file 0 mappings: 14
-- Code(Counter(0)) at (prev + 29, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 29, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 8) to (start + 0, 20)
- Branch { true: Expression(0, Sub), false: Counter(1) } at (prev + 0, 8) to (start + 0, 20)
true = (c0 - c1)
@@ -104,7 +104,7 @@ Number of file 0 mappings: 14
Highest counter ID seen: c3
Function name: if::branch_or
-Raw bytes (60): 0x[01, 01, 06, 01, 05, 01, 17, 05, 09, 05, 09, 01, 17, 05, 09, 08, 01, 35, 01, 01, 10, 01, 03, 08, 00, 09, 20, 05, 02, 00, 08, 00, 09, 02, 00, 0d, 00, 0e, 20, 09, 12, 00, 0d, 00, 0e, 17, 00, 0f, 02, 06, 12, 02, 0c, 02, 06, 01, 03, 01, 00, 02]
+Raw bytes (60): 0x[01, 01, 06, 01, 05, 01, 17, 05, 09, 05, 09, 01, 17, 05, 09, 08, 01, 35, 01, 01, 0e, 01, 03, 08, 00, 09, 20, 05, 02, 00, 08, 00, 09, 02, 00, 0d, 00, 0e, 20, 09, 12, 00, 0d, 00, 0e, 17, 00, 0f, 02, 06, 12, 02, 0c, 02, 06, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 6
@@ -115,7 +115,7 @@ Number of expressions: 6
- expression 4 operands: lhs = Counter(0), rhs = Expression(5, Add)
- expression 5 operands: lhs = Counter(1), rhs = Counter(2)
Number of file 0 mappings: 8
-- Code(Counter(0)) at (prev + 53, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 53, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 8) to (start + 0, 9)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 8) to (start + 0, 9)
true = c1
diff --git a/tests/coverage/branch/lazy-boolean.cov-map b/tests/coverage/branch/lazy-boolean.cov-map
index 622f30e2b56f6..5d4fc57eb8f75 100644
--- a/tests/coverage/branch/lazy-boolean.cov-map
+++ b/tests/coverage/branch/lazy-boolean.cov-map
@@ -1,11 +1,11 @@
Function name: lazy_boolean::branch_and
-Raw bytes (38): 0x[01, 01, 01, 01, 05, 06, 01, 13, 01, 01, 10, 01, 04, 09, 00, 0a, 01, 00, 0d, 00, 0e, 20, 05, 02, 00, 0d, 00, 0e, 05, 00, 12, 00, 13, 01, 01, 05, 01, 02]
+Raw bytes (38): 0x[01, 01, 01, 01, 05, 06, 01, 13, 01, 01, 0e, 01, 04, 09, 00, 0a, 01, 00, 0d, 00, 0e, 20, 05, 02, 00, 0d, 00, 0e, 05, 00, 12, 00, 13, 01, 01, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 19, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 19, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 4, 9) to (start + 0, 10)
- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 13) to (start + 0, 14)
@@ -16,13 +16,13 @@ Number of file 0 mappings: 6
Highest counter ID seen: c1
Function name: lazy_boolean::branch_or
-Raw bytes (38): 0x[01, 01, 01, 01, 05, 06, 01, 1b, 01, 01, 10, 01, 04, 09, 00, 0a, 01, 00, 0d, 00, 0e, 20, 05, 02, 00, 0d, 00, 0e, 02, 00, 12, 00, 13, 01, 01, 05, 01, 02]
+Raw bytes (38): 0x[01, 01, 01, 01, 05, 06, 01, 1b, 01, 01, 0e, 01, 04, 09, 00, 0a, 01, 00, 0d, 00, 0e, 20, 05, 02, 00, 0d, 00, 0e, 02, 00, 12, 00, 13, 01, 01, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 27, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 27, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 4, 9) to (start + 0, 10)
- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 13) to (start + 0, 14)
@@ -34,7 +34,7 @@ Number of file 0 mappings: 6
Highest counter ID seen: c1
Function name: lazy_boolean::chain
-Raw bytes (141): 0x[01, 01, 0f, 01, 05, 05, 09, 09, 0d, 01, 11, 01, 11, 01, 3b, 11, 15, 01, 3b, 11, 15, 01, 37, 3b, 19, 11, 15, 01, 37, 3b, 19, 11, 15, 13, 01, 24, 01, 01, 10, 01, 04, 09, 00, 0a, 01, 00, 0d, 00, 12, 20, 05, 02, 00, 0d, 00, 12, 05, 00, 16, 00, 1b, 20, 09, 06, 00, 16, 00, 1b, 09, 00, 1f, 00, 24, 20, 0d, 0a, 00, 1f, 00, 24, 0d, 00, 28, 00, 2d, 01, 01, 05, 00, 11, 01, 03, 09, 00, 0a, 01, 00, 0d, 00, 12, 20, 11, 12, 00, 0d, 00, 12, 12, 00, 16, 00, 1b, 20, 15, 1e, 00, 16, 00, 1b, 1e, 00, 1f, 00, 24, 20, 19, 32, 00, 1f, 00, 24, 32, 00, 28, 00, 2d, 01, 01, 05, 01, 02]
+Raw bytes (141): 0x[01, 01, 0f, 01, 05, 05, 09, 09, 0d, 01, 11, 01, 11, 01, 3b, 11, 15, 01, 3b, 11, 15, 01, 37, 3b, 19, 11, 15, 01, 37, 3b, 19, 11, 15, 13, 01, 24, 01, 01, 0e, 01, 04, 09, 00, 0a, 01, 00, 0d, 00, 12, 20, 05, 02, 00, 0d, 00, 12, 05, 00, 16, 00, 1b, 20, 09, 06, 00, 16, 00, 1b, 09, 00, 1f, 00, 24, 20, 0d, 0a, 00, 1f, 00, 24, 0d, 00, 28, 00, 2d, 01, 01, 05, 00, 10, 01, 03, 09, 00, 0a, 01, 00, 0d, 00, 12, 20, 11, 12, 00, 0d, 00, 12, 12, 00, 16, 00, 1b, 20, 15, 1e, 00, 16, 00, 1b, 1e, 00, 1f, 00, 24, 20, 19, 32, 00, 1f, 00, 24, 32, 00, 28, 00, 2d, 01, 01, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 15
@@ -54,7 +54,7 @@ Number of expressions: 15
- expression 13 operands: lhs = Expression(14, Add), rhs = Counter(6)
- expression 14 operands: lhs = Counter(4), rhs = Counter(5)
Number of file 0 mappings: 19
-- Code(Counter(0)) at (prev + 36, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 36, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 4, 9) to (start + 0, 10)
- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 18)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 13) to (start + 0, 18)
@@ -69,7 +69,7 @@ Number of file 0 mappings: 19
true = c3
false = (c2 - c3)
- Code(Counter(3)) at (prev + 0, 40) to (start + 0, 45)
-- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 16)
- Code(Counter(0)) at (prev + 3, 9) to (start + 0, 10)
- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 18)
- Branch { true: Counter(4), false: Expression(4, Sub) } at (prev + 0, 13) to (start + 0, 18)
@@ -91,7 +91,7 @@ Number of file 0 mappings: 19
Highest counter ID seen: c6
Function name: lazy_boolean::nested_mixed
-Raw bytes (137): 0x[01, 01, 0d, 01, 05, 01, 1f, 05, 09, 05, 09, 1f, 0d, 05, 09, 1f, 0d, 05, 09, 01, 11, 11, 15, 01, 15, 01, 33, 15, 19, 13, 01, 31, 01, 01, 10, 01, 04, 09, 00, 0a, 01, 00, 0e, 00, 13, 20, 05, 02, 00, 0e, 00, 13, 02, 00, 17, 00, 1d, 20, 09, 06, 00, 17, 00, 1d, 1f, 00, 23, 00, 28, 20, 0d, 1a, 00, 23, 00, 28, 1a, 00, 2c, 00, 33, 01, 01, 05, 00, 11, 01, 03, 09, 00, 0a, 01, 00, 0e, 00, 13, 20, 11, 22, 00, 0e, 00, 13, 11, 00, 17, 00, 1c, 20, 15, 26, 00, 17, 00, 1c, 2a, 00, 22, 00, 28, 20, 19, 2e, 00, 22, 00, 28, 19, 00, 2c, 00, 33, 01, 01, 05, 01, 02]
+Raw bytes (137): 0x[01, 01, 0d, 01, 05, 01, 1f, 05, 09, 05, 09, 1f, 0d, 05, 09, 1f, 0d, 05, 09, 01, 11, 11, 15, 01, 15, 01, 33, 15, 19, 13, 01, 31, 01, 01, 0e, 01, 04, 09, 00, 0a, 01, 00, 0e, 00, 13, 20, 05, 02, 00, 0e, 00, 13, 02, 00, 17, 00, 1d, 20, 09, 06, 00, 17, 00, 1d, 1f, 00, 23, 00, 28, 20, 0d, 1a, 00, 23, 00, 28, 1a, 00, 2c, 00, 33, 01, 01, 05, 00, 10, 01, 03, 09, 00, 0a, 01, 00, 0e, 00, 13, 20, 11, 22, 00, 0e, 00, 13, 11, 00, 17, 00, 1c, 20, 15, 26, 00, 17, 00, 1c, 2a, 00, 22, 00, 28, 20, 19, 2e, 00, 22, 00, 28, 19, 00, 2c, 00, 33, 01, 01, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 13
@@ -109,7 +109,7 @@ Number of expressions: 13
- expression 11 operands: lhs = Counter(0), rhs = Expression(12, Add)
- expression 12 operands: lhs = Counter(5), rhs = Counter(6)
Number of file 0 mappings: 19
-- Code(Counter(0)) at (prev + 49, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 49, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 4, 9) to (start + 0, 10)
- Code(Counter(0)) at (prev + 0, 14) to (start + 0, 19)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 14) to (start + 0, 19)
@@ -127,7 +127,7 @@ Number of file 0 mappings: 19
false = ((c1 + c2) - c3)
- Code(Expression(6, Sub)) at (prev + 0, 44) to (start + 0, 51)
= ((c1 + c2) - c3)
-- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 16)
- Code(Counter(0)) at (prev + 3, 9) to (start + 0, 10)
- Code(Counter(0)) at (prev + 0, 14) to (start + 0, 19)
- Branch { true: Counter(4), false: Expression(8, Sub) } at (prev + 0, 14) to (start + 0, 19)
diff --git a/tests/coverage/branch/let-else.cov-map b/tests/coverage/branch/let-else.cov-map
index 215d71599e4c0..78507a326388a 100644
--- a/tests/coverage/branch/let-else.cov-map
+++ b/tests/coverage/branch/let-else.cov-map
@@ -1,11 +1,11 @@
Function name: let_else::let_else
-Raw bytes (43): 0x[01, 01, 01, 01, 05, 07, 01, 0c, 01, 01, 10, 20, 02, 05, 03, 09, 00, 10, 02, 00, 0e, 00, 0f, 01, 00, 13, 00, 18, 05, 01, 09, 01, 0f, 02, 04, 05, 00, 0b, 01, 01, 01, 00, 02]
+Raw bytes (43): 0x[01, 01, 01, 01, 05, 07, 01, 0c, 01, 01, 0e, 20, 02, 05, 03, 09, 00, 10, 02, 00, 0e, 00, 0f, 01, 00, 13, 00, 18, 05, 01, 09, 01, 0f, 02, 04, 05, 00, 0a, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 7
-- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 14)
- Branch { true: Expression(0, Sub), false: Counter(1) } at (prev + 3, 9) to (start + 0, 16)
true = (c0 - c1)
false = c1
@@ -13,7 +13,7 @@ Number of file 0 mappings: 7
= (c0 - c1)
- Code(Counter(0)) at (prev + 0, 19) to (start + 0, 24)
- Code(Counter(1)) at (prev + 1, 9) to (start + 1, 15)
-- Code(Expression(0, Sub)) at (prev + 4, 5) to (start + 0, 11)
+- Code(Expression(0, Sub)) at (prev + 4, 5) to (start + 0, 10)
= (c0 - c1)
- Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c1
diff --git a/tests/coverage/branch/match-arms.cov-map b/tests/coverage/branch/match-arms.cov-map
index d5b4d04d40192..ef71d12c8af1a 100644
--- a/tests/coverage/branch/match-arms.cov-map
+++ b/tests/coverage/branch/match-arms.cov-map
@@ -1,5 +1,5 @@
Function name: match_arms::guards
-Raw bytes (88): 0x[01, 01, 08, 15, 05, 19, 09, 1d, 0d, 21, 11, 01, 17, 1b, 11, 1f, 0d, 05, 09, 0c, 01, 30, 01, 01, 10, 21, 03, 0b, 00, 10, 05, 01, 11, 00, 29, 20, 05, 02, 00, 17, 00, 1b, 09, 01, 11, 00, 29, 20, 09, 06, 00, 17, 00, 1b, 0d, 01, 11, 00, 29, 20, 0d, 0a, 00, 17, 00, 1b, 11, 01, 11, 00, 29, 20, 11, 0e, 00, 17, 00, 1b, 12, 01, 0e, 00, 18, 01, 03, 05, 01, 02]
+Raw bytes (88): 0x[01, 01, 08, 15, 05, 19, 09, 1d, 0d, 21, 11, 01, 17, 1b, 11, 1f, 0d, 05, 09, 0c, 01, 30, 01, 01, 0e, 21, 03, 0b, 00, 10, 05, 01, 11, 00, 28, 20, 05, 02, 00, 17, 00, 1b, 09, 01, 11, 00, 28, 20, 09, 06, 00, 17, 00, 1b, 0d, 01, 11, 00, 28, 20, 0d, 0a, 00, 17, 00, 1b, 11, 01, 11, 00, 28, 20, 11, 0e, 00, 17, 00, 1b, 12, 01, 0e, 00, 15, 01, 03, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 8
@@ -12,31 +12,31 @@ Number of expressions: 8
- expression 6 operands: lhs = Expression(7, Add), rhs = Counter(3)
- expression 7 operands: lhs = Counter(1), rhs = Counter(2)
Number of file 0 mappings: 12
-- Code(Counter(0)) at (prev + 48, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 48, 1) to (start + 1, 14)
- Code(Counter(8)) at (prev + 3, 11) to (start + 0, 16)
-- Code(Counter(1)) at (prev + 1, 17) to (start + 0, 41)
+- Code(Counter(1)) at (prev + 1, 17) to (start + 0, 40)
- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 23) to (start + 0, 27)
true = c1
false = (c5 - c1)
-- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 41)
+- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 40)
- Branch { true: Counter(2), false: Expression(1, Sub) } at (prev + 0, 23) to (start + 0, 27)
true = c2
false = (c6 - c2)
-- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 41)
+- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 40)
- Branch { true: Counter(3), false: Expression(2, Sub) } at (prev + 0, 23) to (start + 0, 27)
true = c3
false = (c7 - c3)
-- Code(Counter(4)) at (prev + 1, 17) to (start + 0, 41)
+- Code(Counter(4)) at (prev + 1, 17) to (start + 0, 40)
- Branch { true: Counter(4), false: Expression(3, Sub) } at (prev + 0, 23) to (start + 0, 27)
true = c4
false = (c8 - c4)
-- Code(Expression(4, Sub)) at (prev + 1, 14) to (start + 0, 24)
+- Code(Expression(4, Sub)) at (prev + 1, 14) to (start + 0, 21)
= (c0 - (((c1 + c2) + c3) + c4))
- Code(Counter(0)) at (prev + 3, 5) to (start + 1, 2)
Highest counter ID seen: c8
Function name: match_arms::match_arms
-Raw bytes (45): 0x[01, 01, 03, 01, 07, 0b, 0d, 05, 09, 07, 01, 18, 01, 01, 10, 01, 03, 0b, 00, 10, 05, 01, 11, 00, 21, 09, 01, 11, 00, 21, 0d, 01, 11, 00, 21, 02, 01, 11, 00, 21, 01, 03, 05, 01, 02]
+Raw bytes (45): 0x[01, 01, 03, 01, 07, 0b, 0d, 05, 09, 07, 01, 18, 01, 01, 0e, 01, 03, 0b, 00, 10, 05, 01, 11, 00, 20, 09, 01, 11, 00, 20, 0d, 01, 11, 00, 20, 02, 01, 11, 00, 20, 01, 03, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 3
@@ -44,18 +44,18 @@ Number of expressions: 3
- expression 1 operands: lhs = Expression(2, Add), rhs = Counter(3)
- expression 2 operands: lhs = Counter(1), rhs = Counter(2)
Number of file 0 mappings: 7
-- Code(Counter(0)) at (prev + 24, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 24, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 11) to (start + 0, 16)
-- Code(Counter(1)) at (prev + 1, 17) to (start + 0, 33)
-- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 33)
-- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 33)
-- Code(Expression(0, Sub)) at (prev + 1, 17) to (start + 0, 33)
+- Code(Counter(1)) at (prev + 1, 17) to (start + 0, 32)
+- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 32)
+- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 32)
+- Code(Expression(0, Sub)) at (prev + 1, 17) to (start + 0, 32)
= (c0 - ((c1 + c2) + c3))
- Code(Counter(0)) at (prev + 3, 5) to (start + 1, 2)
Highest counter ID seen: c3
Function name: match_arms::or_patterns
-Raw bytes (57): 0x[01, 01, 04, 05, 09, 01, 0b, 03, 0d, 01, 03, 09, 01, 25, 01, 01, 10, 01, 03, 0b, 00, 10, 05, 01, 11, 00, 12, 09, 00, 1e, 00, 1f, 03, 00, 24, 00, 2e, 0d, 01, 11, 00, 12, 06, 00, 1e, 00, 1f, 0e, 00, 24, 00, 2e, 01, 03, 05, 01, 02]
+Raw bytes (57): 0x[01, 01, 04, 05, 09, 01, 0b, 03, 0d, 01, 03, 09, 01, 25, 01, 01, 0e, 01, 03, 0b, 00, 10, 05, 01, 11, 00, 12, 09, 00, 1e, 00, 1f, 03, 00, 24, 00, 2d, 0d, 01, 11, 00, 12, 06, 00, 1e, 00, 1f, 0e, 00, 24, 00, 2d, 01, 03, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 4
@@ -64,16 +64,16 @@ Number of expressions: 4
- expression 2 operands: lhs = Expression(0, Add), rhs = Counter(3)
- expression 3 operands: lhs = Counter(0), rhs = Expression(0, Add)
Number of file 0 mappings: 9
-- Code(Counter(0)) at (prev + 37, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 37, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 11) to (start + 0, 16)
- Code(Counter(1)) at (prev + 1, 17) to (start + 0, 18)
- Code(Counter(2)) at (prev + 0, 30) to (start + 0, 31)
-- Code(Expression(0, Add)) at (prev + 0, 36) to (start + 0, 46)
+- Code(Expression(0, Add)) at (prev + 0, 36) to (start + 0, 45)
= (c1 + c2)
- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 18)
- Code(Expression(1, Sub)) at (prev + 0, 30) to (start + 0, 31)
= (c0 - ((c1 + c2) + c3))
-- Code(Expression(3, Sub)) at (prev + 0, 36) to (start + 0, 46)
+- Code(Expression(3, Sub)) at (prev + 0, 36) to (start + 0, 45)
= (c0 - (c1 + c2))
- Code(Counter(0)) at (prev + 3, 5) to (start + 1, 2)
Highest counter ID seen: c3
diff --git a/tests/coverage/branch/match-trivial.cov-map b/tests/coverage/branch/match-trivial.cov-map
index 31322f127af78..1b0c6d12e3dc1 100644
--- a/tests/coverage/branch/match-trivial.cov-map
+++ b/tests/coverage/branch/match-trivial.cov-map
@@ -1,19 +1,19 @@
Function name: match_trivial::_uninhabited (unused)
-Raw bytes (9): 0x[01, 01, 00, 01, 00, 16, 01, 01, 10]
+Raw bytes (9): 0x[01, 01, 00, 01, 00, 16, 01, 01, 0e]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
-- Code(Zero) at (prev + 22, 1) to (start + 1, 16)
+- Code(Zero) at (prev + 22, 1) to (start + 1, 14)
Highest counter ID seen: (none)
Function name: match_trivial::trivial
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 1e, 01, 01, 10, 01, 03, 0b, 05, 02]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 1e, 01, 01, 0e, 01, 03, 0b, 05, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 30, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 30, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 11) to (start + 5, 2)
Highest counter ID seen: c0
diff --git a/tests/coverage/branch/while.cov-map b/tests/coverage/branch/while.cov-map
index 5ce92c72b5120..67746af051b68 100644
--- a/tests/coverage/branch/while.cov-map
+++ b/tests/coverage/branch/while.cov-map
@@ -1,11 +1,11 @@
Function name: while::while_cond
-Raw bytes (38): 0x[01, 01, 01, 05, 01, 06, 01, 0c, 01, 01, 10, 01, 03, 09, 00, 12, 05, 01, 0b, 00, 10, 20, 02, 01, 00, 0b, 00, 10, 02, 00, 11, 02, 06, 01, 03, 01, 00, 02]
+Raw bytes (38): 0x[01, 01, 01, 05, 01, 06, 01, 0c, 01, 01, 0e, 01, 03, 09, 00, 12, 05, 01, 0b, 00, 10, 20, 02, 01, 00, 0b, 00, 10, 02, 00, 11, 02, 06, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(1), rhs = Counter(0)
Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 9) to (start + 0, 18)
- Code(Counter(1)) at (prev + 1, 11) to (start + 0, 16)
- Branch { true: Expression(0, Sub), false: Counter(0) } at (prev + 0, 11) to (start + 0, 16)
@@ -17,13 +17,13 @@ Number of file 0 mappings: 6
Highest counter ID seen: c1
Function name: while::while_cond_not
-Raw bytes (38): 0x[01, 01, 01, 05, 01, 06, 01, 15, 01, 01, 10, 01, 03, 09, 00, 12, 05, 01, 0b, 00, 14, 20, 02, 01, 00, 0b, 00, 14, 02, 00, 15, 02, 06, 01, 03, 01, 00, 02]
+Raw bytes (38): 0x[01, 01, 01, 05, 01, 06, 01, 15, 01, 01, 0e, 01, 03, 09, 00, 12, 05, 01, 0b, 00, 14, 20, 02, 01, 00, 0b, 00, 14, 02, 00, 15, 02, 06, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(1), rhs = Counter(0)
Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 21, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 21, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 9) to (start + 0, 18)
- Code(Counter(1)) at (prev + 1, 11) to (start + 0, 20)
- Branch { true: Expression(0, Sub), false: Counter(0) } at (prev + 0, 11) to (start + 0, 20)
@@ -35,7 +35,7 @@ Number of file 0 mappings: 6
Highest counter ID seen: c1
Function name: while::while_op_and
-Raw bytes (58): 0x[01, 01, 05, 05, 09, 05, 01, 0f, 05, 01, 09, 05, 01, 08, 01, 1e, 01, 01, 10, 01, 03, 09, 01, 12, 05, 02, 0b, 00, 10, 20, 09, 02, 00, 0b, 00, 10, 09, 00, 14, 00, 19, 20, 12, 0a, 00, 14, 00, 19, 12, 00, 1a, 03, 06, 01, 04, 01, 00, 02]
+Raw bytes (58): 0x[01, 01, 05, 05, 09, 05, 01, 0f, 05, 01, 09, 05, 01, 08, 01, 1e, 01, 01, 0e, 01, 03, 09, 01, 12, 05, 02, 0b, 00, 10, 20, 09, 02, 00, 0b, 00, 10, 09, 00, 14, 00, 19, 20, 12, 0a, 00, 14, 00, 19, 12, 00, 1a, 03, 06, 01, 04, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 5
@@ -45,7 +45,7 @@ Number of expressions: 5
- expression 3 operands: lhs = Counter(0), rhs = Counter(2)
- expression 4 operands: lhs = Counter(1), rhs = Counter(0)
Number of file 0 mappings: 8
-- Code(Counter(0)) at (prev + 30, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 30, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 9) to (start + 1, 18)
- Code(Counter(1)) at (prev + 2, 11) to (start + 0, 16)
- Branch { true: Counter(2), false: Expression(0, Sub) } at (prev + 0, 11) to (start + 0, 16)
@@ -61,7 +61,7 @@ Number of file 0 mappings: 8
Highest counter ID seen: c2
Function name: while::while_op_or
-Raw bytes (56): 0x[01, 01, 04, 05, 09, 05, 0b, 01, 09, 05, 01, 08, 01, 29, 01, 01, 10, 01, 03, 09, 01, 12, 05, 02, 0b, 00, 10, 20, 09, 02, 00, 0b, 00, 10, 02, 00, 14, 00, 19, 20, 06, 01, 00, 14, 00, 19, 0e, 00, 1a, 03, 06, 01, 04, 01, 00, 02]
+Raw bytes (56): 0x[01, 01, 04, 05, 09, 05, 0b, 01, 09, 05, 01, 08, 01, 29, 01, 01, 0e, 01, 03, 09, 01, 12, 05, 02, 0b, 00, 10, 20, 09, 02, 00, 0b, 00, 10, 02, 00, 14, 00, 19, 20, 06, 01, 00, 14, 00, 19, 0e, 00, 1a, 03, 06, 01, 04, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 4
@@ -70,7 +70,7 @@ Number of expressions: 4
- expression 2 operands: lhs = Counter(0), rhs = Counter(2)
- expression 3 operands: lhs = Counter(1), rhs = Counter(0)
Number of file 0 mappings: 8
-- Code(Counter(0)) at (prev + 41, 1) to (start + 1, 16)
+- Code(Counter(0)) at (prev + 41, 1) to (start + 1, 14)
- Code(Counter(0)) at (prev + 3, 9) to (start + 1, 18)
- Code(Counter(1)) at (prev + 2, 11) to (start + 0, 16)
- Branch { true: Counter(2), false: Expression(0, Sub) } at (prev + 0, 11) to (start + 0, 16)
diff --git a/tests/coverage/closure.cov-map b/tests/coverage/closure.cov-map
index fa20c8cf6d789..2d784ba09b60a 100644
--- a/tests/coverage/closure.cov-map
+++ b/tests/coverage/closure.cov-map
@@ -1,15 +1,15 @@
Function name: closure::main
-Raw bytes (126): 0x[01, 01, 01, 01, 05, 18, 01, 09, 01, 0f, 0d, 01, 16, 0e, 06, 0a, 01, 10, 05, 13, 0d, 01, 1a, 0e, 06, 0a, 01, 10, 05, 0c, 16, 01, 16, 05, 0d, 18, 01, 19, 09, 01, 1e, 01, 04, 09, 00, 29, 01, 01, 09, 00, 2d, 01, 01, 09, 00, 24, 01, 05, 09, 00, 24, 01, 02, 09, 00, 21, 01, 04, 09, 00, 21, 01, 04, 09, 00, 28, 01, 09, 09, 00, 32, 01, 04, 09, 00, 33, 01, 07, 09, 00, 4b, 01, 08, 09, 00, 48, 01, 0a, 09, 00, 47, 01, 08, 09, 00, 44, 01, 0a, 08, 00, 10, 05, 00, 11, 04, 06, 02, 04, 05, 00, 06, 01, 01, 05, 03, 02]
+Raw bytes (126): 0x[01, 01, 01, 01, 05, 18, 01, 09, 01, 0d, 1b, 01, 1a, 05, 02, 0a, 01, 0c, 05, 11, 1b, 01, 1e, 05, 02, 0a, 01, 0c, 05, 0c, 16, 01, 16, 05, 0d, 18, 01, 19, 09, 01, 1e, 01, 04, 09, 00, 29, 01, 01, 09, 00, 2d, 01, 01, 09, 00, 24, 01, 05, 09, 00, 24, 01, 02, 09, 00, 21, 01, 04, 09, 00, 21, 01, 04, 09, 00, 28, 01, 09, 09, 00, 32, 01, 04, 09, 00, 33, 01, 07, 09, 00, 4b, 01, 08, 09, 00, 48, 01, 0a, 09, 00, 47, 01, 08, 09, 00, 44, 01, 0a, 08, 00, 10, 05, 00, 11, 04, 06, 02, 04, 05, 00, 06, 01, 01, 05, 03, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 24
-- Code(Counter(0)) at (prev + 9, 1) to (start + 15, 13)
-- Code(Counter(0)) at (prev + 22, 14) to (start + 6, 10)
-- Code(Counter(0)) at (prev + 16, 5) to (start + 19, 13)
-- Code(Counter(0)) at (prev + 26, 14) to (start + 6, 10)
-- Code(Counter(0)) at (prev + 16, 5) to (start + 12, 22)
+- Code(Counter(0)) at (prev + 9, 1) to (start + 13, 27)
+- Code(Counter(0)) at (prev + 26, 5) to (start + 2, 10)
+- Code(Counter(0)) at (prev + 12, 5) to (start + 17, 27)
+- Code(Counter(0)) at (prev + 30, 5) to (start + 2, 10)
+- Code(Counter(0)) at (prev + 12, 5) to (start + 12, 22)
- Code(Counter(0)) at (prev + 22, 5) to (start + 13, 24)
- Code(Counter(0)) at (prev + 25, 9) to (start + 1, 30)
- Code(Counter(0)) at (prev + 4, 9) to (start + 0, 41)
diff --git a/tests/coverage/closure.coverage b/tests/coverage/closure.coverage
index 3eac52eb72363..2deeb9806c4d4 100644
--- a/tests/coverage/closure.coverage
+++ b/tests/coverage/closure.coverage
@@ -20,18 +20,18 @@
LL| 1| some_string
LL| 1| .
LL| 1| unwrap_or_else
- LL| 1| (
- LL| 1| ||
+ LL| | (
+ LL| | ||
LL| 0| {
LL| 0| let mut countdown = 0;
LL| 0| if is_false {
LL| 0| countdown = 10;
LL| 0| }
LL| 0| "alt string 1".to_owned()
- LL| 1| }
- LL| 1| )
- LL| 1| );
- LL| 1|
+ LL| 0| }
+ LL| | )
+ LL| | );
+ LL| |
LL| 1| some_string = Some(String::from("the string content"));
LL| 1| let
LL| 1| a
@@ -62,8 +62,8 @@
LL| 1| some_string
LL| 1| .
LL| 1| unwrap_or_else
- LL| 1| (
- LL| 1| ||
+ LL| | (
+ LL| | ||
LL| 1| {
LL| 1| let mut countdown = 0;
LL| 1| if is_false {
@@ -71,9 +71,9 @@
LL| 1| }
LL| 1| "alt string 3".to_owned()
LL| 1| }
- LL| 1| )
- LL| 1| );
- LL| 1|
+ LL| | )
+ LL| | );
+ LL| |
LL| 1| some_string = None;
LL| 1| let
LL| 1| a
diff --git a/tests/coverage/closure_macro.cov-map b/tests/coverage/closure_macro.cov-map
index 653848dd6ffc7..9dd99c8fab3f0 100644
--- a/tests/coverage/closure_macro.cov-map
+++ b/tests/coverage/closure_macro.cov-map
@@ -8,16 +8,16 @@ Number of file 0 mappings: 1
Highest counter ID seen: c0
Function name: closure_macro::main
-Raw bytes (36): 0x[01, 01, 01, 01, 05, 06, 01, 21, 01, 01, 21, 02, 02, 09, 00, 0f, 01, 00, 12, 00, 54, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 01, 03, 01, 00, 02]
+Raw bytes (36): 0x[01, 01, 01, 01, 05, 06, 01, 21, 01, 01, 20, 02, 02, 09, 00, 0f, 01, 00, 12, 00, 34, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 33, 1) to (start + 1, 33)
+- Code(Counter(0)) at (prev + 33, 1) to (start + 1, 32)
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 15)
= (c0 - c1)
-- Code(Counter(0)) at (prev + 0, 18) to (start + 0, 84)
+- Code(Counter(0)) at (prev + 0, 18) to (start + 0, 52)
- Code(Counter(1)) at (prev + 0, 84) to (start + 0, 85)
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 2, 11)
= (c0 - c1)
diff --git a/tests/coverage/closure_macro_async.cov-map b/tests/coverage/closure_macro_async.cov-map
index 1bd1460a147a2..2548754d754c0 100644
--- a/tests/coverage/closure_macro_async.cov-map
+++ b/tests/coverage/closure_macro_async.cov-map
@@ -17,16 +17,16 @@ Number of file 0 mappings: 1
Highest counter ID seen: c0
Function name: closure_macro_async::test::{closure#0}
-Raw bytes (36): 0x[01, 01, 01, 01, 05, 06, 01, 25, 2b, 01, 21, 02, 02, 09, 00, 0f, 01, 00, 12, 00, 54, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 01, 03, 01, 00, 02]
+Raw bytes (36): 0x[01, 01, 01, 01, 05, 06, 01, 25, 2b, 01, 20, 02, 02, 09, 00, 0f, 01, 00, 12, 00, 34, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 01, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 37, 43) to (start + 1, 33)
+- Code(Counter(0)) at (prev + 37, 43) to (start + 1, 32)
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 15)
= (c0 - c1)
-- Code(Counter(0)) at (prev + 0, 18) to (start + 0, 84)
+- Code(Counter(0)) at (prev + 0, 18) to (start + 0, 52)
- Code(Counter(1)) at (prev + 0, 84) to (start + 0, 85)
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 2, 11)
= (c0 - c1)
diff --git a/tests/coverage/condition/conditions.cov-map b/tests/coverage/condition/conditions.cov-map
index 417637f2d2e37..c34075a0bcfca 100644
--- a/tests/coverage/condition/conditions.cov-map
+++ b/tests/coverage/condition/conditions.cov-map
@@ -109,15 +109,17 @@ Number of file 0 mappings: 1
Highest counter ID seen: c0
Function name: conditions::func_call
-Raw bytes (37): 0x[01, 01, 02, 01, 05, 05, 09, 05, 01, 25, 01, 01, 0a, 20, 05, 02, 01, 09, 00, 0a, 05, 00, 0e, 00, 0f, 20, 09, 06, 00, 0e, 00, 0f, 01, 01, 01, 00, 02]
+Raw bytes (47): 0x[01, 01, 02, 01, 05, 05, 09, 07, 01, 25, 01, 00, 20, 01, 01, 05, 00, 08, 01, 00, 09, 00, 0a, 20, 05, 02, 00, 09, 00, 0a, 05, 00, 0e, 00, 0f, 20, 09, 06, 00, 0e, 00, 0f, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 2
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
-Number of file 0 mappings: 5
-- Code(Counter(0)) at (prev + 37, 1) to (start + 1, 10)
-- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 1, 9) to (start + 0, 10)
+Number of file 0 mappings: 7
+- Code(Counter(0)) at (prev + 37, 1) to (start + 0, 32)
+- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 8)
+- Code(Counter(0)) at (prev + 0, 9) to (start + 0, 10)
+- Branch { true: Counter(1), false: Expression(0, Sub) } at (prev + 0, 9) to (start + 0, 10)
true = c1
false = (c0 - c1)
- Code(Counter(1)) at (prev + 0, 14) to (start + 0, 15)
diff --git a/tests/coverage/coroutine.cov-map b/tests/coverage/coroutine.cov-map
index c6f2d415056d9..fee32376d8317 100644
--- a/tests/coverage/coroutine.cov-map
+++ b/tests/coverage/coroutine.cov-map
@@ -13,7 +13,7 @@ Number of file 0 mappings: 4
Highest counter ID seen: c1
Function name: coroutine::main
-Raw bytes (53): 0x[01, 01, 02, 01, 05, 05, 09, 09, 01, 13, 01, 02, 16, 01, 08, 0b, 00, 2e, 05, 01, 2b, 00, 2d, 02, 01, 0e, 00, 35, 05, 02, 0b, 00, 2e, 0d, 01, 22, 00, 27, 09, 00, 2c, 00, 2e, 06, 01, 0e, 00, 35, 09, 02, 01, 00, 02]
+Raw bytes (53): 0x[01, 01, 02, 01, 05, 05, 09, 09, 01, 13, 01, 02, 16, 01, 08, 0b, 00, 2d, 05, 01, 2b, 00, 2d, 02, 01, 0e, 00, 14, 05, 02, 0b, 00, 2e, 0d, 01, 22, 00, 27, 09, 00, 2c, 00, 2e, 06, 01, 0e, 00, 14, 09, 02, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 2
@@ -21,14 +21,14 @@ Number of expressions: 2
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
Number of file 0 mappings: 9
- Code(Counter(0)) at (prev + 19, 1) to (start + 2, 22)
-- Code(Counter(0)) at (prev + 8, 11) to (start + 0, 46)
+- Code(Counter(0)) at (prev + 8, 11) to (start + 0, 45)
- Code(Counter(1)) at (prev + 1, 43) to (start + 0, 45)
-- Code(Expression(0, Sub)) at (prev + 1, 14) to (start + 0, 53)
+- Code(Expression(0, Sub)) at (prev + 1, 14) to (start + 0, 20)
= (c0 - c1)
- Code(Counter(1)) at (prev + 2, 11) to (start + 0, 46)
- Code(Counter(3)) at (prev + 1, 34) to (start + 0, 39)
- Code(Counter(2)) at (prev + 0, 44) to (start + 0, 46)
-- Code(Expression(1, Sub)) at (prev + 1, 14) to (start + 0, 53)
+- Code(Expression(1, Sub)) at (prev + 1, 14) to (start + 0, 20)
= (c1 - c2)
- Code(Counter(2)) at (prev + 2, 1) to (start + 0, 2)
Highest counter ID seen: c3
diff --git a/tests/coverage/holes.cov-map b/tests/coverage/holes.cov-map
index 3deacbc8e1287..6e2d243e8dd23 100644
--- a/tests/coverage/holes.cov-map
+++ b/tests/coverage/holes.cov-map
@@ -8,24 +8,24 @@ Number of file 0 mappings: 1
Highest counter ID seen: (none)
Function name: holes::main
-Raw bytes (69): 0x[01, 01, 00, 0d, 01, 08, 01, 01, 12, 01, 05, 05, 00, 12, 01, 07, 09, 00, 11, 01, 09, 05, 00, 12, 01, 04, 05, 00, 12, 01, 07, 05, 00, 12, 01, 06, 05, 00, 12, 01, 04, 05, 00, 12, 01, 04, 05, 00, 12, 01, 06, 05, 03, 0f, 01, 0a, 05, 03, 0f, 01, 0a, 05, 0c, 0d, 01, 0f, 0e, 05, 02]
+Raw bytes (69): 0x[01, 01, 00, 0d, 01, 08, 01, 01, 11, 01, 05, 05, 00, 11, 01, 07, 09, 00, 11, 01, 09, 05, 00, 11, 01, 04, 05, 00, 11, 01, 07, 05, 00, 11, 01, 06, 05, 00, 11, 01, 04, 05, 00, 11, 01, 04, 05, 00, 11, 01, 06, 05, 03, 0f, 01, 0a, 05, 03, 0f, 01, 0a, 05, 06, 27, 01, 13, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 13
-- Code(Counter(0)) at (prev + 8, 1) to (start + 1, 18)
-- Code(Counter(0)) at (prev + 5, 5) to (start + 0, 18)
+- Code(Counter(0)) at (prev + 8, 1) to (start + 1, 17)
+- Code(Counter(0)) at (prev + 5, 5) to (start + 0, 17)
- Code(Counter(0)) at (prev + 7, 9) to (start + 0, 17)
-- Code(Counter(0)) at (prev + 9, 5) to (start + 0, 18)
-- Code(Counter(0)) at (prev + 4, 5) to (start + 0, 18)
-- Code(Counter(0)) at (prev + 7, 5) to (start + 0, 18)
-- Code(Counter(0)) at (prev + 6, 5) to (start + 0, 18)
-- Code(Counter(0)) at (prev + 4, 5) to (start + 0, 18)
-- Code(Counter(0)) at (prev + 4, 5) to (start + 0, 18)
+- Code(Counter(0)) at (prev + 9, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 4, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 7, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 6, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 4, 5) to (start + 0, 17)
+- Code(Counter(0)) at (prev + 4, 5) to (start + 0, 17)
- Code(Counter(0)) at (prev + 6, 5) to (start + 3, 15)
- Code(Counter(0)) at (prev + 10, 5) to (start + 3, 15)
-- Code(Counter(0)) at (prev + 10, 5) to (start + 12, 13)
-- Code(Counter(0)) at (prev + 15, 14) to (start + 5, 2)
+- Code(Counter(0)) at (prev + 10, 5) to (start + 6, 39)
+- Code(Counter(0)) at (prev + 19, 5) to (start + 1, 2)
Highest counter ID seen: c0
Function name: holes::main::_unused_fn (unused)
diff --git a/tests/coverage/holes.coverage b/tests/coverage/holes.coverage
index 1b45c12156ae7..a6a02f1b9d081 100644
--- a/tests/coverage/holes.coverage
+++ b/tests/coverage/holes.coverage
@@ -84,18 +84,18 @@
LL| 1| // `nested_filter::OnlyBodies` or equivalent.
LL| 1| #[rustfmt::skip]
LL| 1| let _const_block_inside_anon_const =
- LL| 1| [
- LL| 1| 0
- LL| 1| ;
- LL| 1| 7
- LL| 1| +
- LL| 1| const
+ LL| | [
+ LL| | 0
+ LL| | ;
+ LL| | 7
+ LL| | +
+ LL| | const
LL| | {
LL| | 3
- LL| 1| }
- LL| 1| ]
- LL| 1| ;
- LL| 1|
+ LL| | }
+ LL| | ]
+ LL| | ;
+ LL| |
LL| 1| black_box(());
LL| 1|}
diff --git a/tests/coverage/inline-dead.cov-map b/tests/coverage/inline-dead.cov-map
index 49cdc514fedbb..65cefe76c29aa 100644
--- a/tests/coverage/inline-dead.cov-map
+++ b/tests/coverage/inline-dead.cov-map
@@ -8,14 +8,14 @@ Number of file 0 mappings: 1
Highest counter ID seen: (none)
Function name: inline_dead::live::
-Raw bytes (26): 0x[01, 01, 01, 01, 05, 04, 01, 0e, 01, 01, 09, 05, 02, 09, 00, 0f, 02, 02, 09, 00, 0a, 01, 02, 01, 00, 02]
+Raw bytes (26): 0x[01, 01, 01, 01, 05, 04, 01, 0e, 01, 01, 09, 05, 02, 09, 00, 0d, 02, 02, 09, 00, 0a, 01, 02, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 14, 1) to (start + 1, 9)
-- Code(Counter(1)) at (prev + 2, 9) to (start + 0, 15)
+- Code(Counter(1)) at (prev + 2, 9) to (start + 0, 13)
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 10)
= (c0 - c1)
- Code(Counter(0)) at (prev + 2, 1) to (start + 0, 2)
diff --git a/tests/coverage/inline.cov-map b/tests/coverage/inline.cov-map
index a569ad53cbc24..7264391baaf7b 100644
--- a/tests/coverage/inline.cov-map
+++ b/tests/coverage/inline.cov-map
@@ -15,12 +15,12 @@ Number of file 0 mappings: 5
Highest counter ID seen: c1
Function name: inline::error
-Raw bytes (9): 0x[01, 01, 00, 01, 01, 31, 01, 01, 14]
+Raw bytes (9): 0x[01, 01, 00, 01, 01, 31, 01, 01, 0b]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
-- Code(Counter(0)) at (prev + 49, 1) to (start + 1, 20)
+- Code(Counter(0)) at (prev + 49, 1) to (start + 1, 11)
Highest counter ID seen: c0
Function name: inline::length::
diff --git a/tests/coverage/issue-83601.cov-map b/tests/coverage/issue-83601.cov-map
index c188cca1b517a..f102310900894 100644
--- a/tests/coverage/issue-83601.cov-map
+++ b/tests/coverage/issue-83601.cov-map
@@ -1,12 +1,12 @@
Function name: issue_83601::main
-Raw bytes (21): 0x[01, 01, 01, 05, 09, 03, 01, 06, 01, 02, 1c, 05, 03, 09, 01, 1c, 02, 02, 05, 03, 02]
+Raw bytes (21): 0x[01, 01, 01, 05, 09, 03, 01, 06, 01, 02, 0f, 05, 03, 09, 01, 0f, 02, 02, 05, 03, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(1), rhs = Counter(2)
Number of file 0 mappings: 3
-- Code(Counter(0)) at (prev + 6, 1) to (start + 2, 28)
-- Code(Counter(1)) at (prev + 3, 9) to (start + 1, 28)
+- Code(Counter(0)) at (prev + 6, 1) to (start + 2, 15)
+- Code(Counter(1)) at (prev + 3, 9) to (start + 1, 15)
- Code(Expression(0, Sub)) at (prev + 2, 5) to (start + 3, 2)
= (c1 - c2)
Highest counter ID seen: c1
diff --git a/tests/coverage/issue-84561.cov-map b/tests/coverage/issue-84561.cov-map
index c8f75cddcb5b9..3bd4e7d2a3666 100644
--- a/tests/coverage/issue-84561.cov-map
+++ b/tests/coverage/issue-84561.cov-map
@@ -1,11 +1,11 @@
Function name: ::fmt
-Raw bytes (27): 0x[01, 01, 01, 01, 05, 04, 01, 8a, 01, 05, 01, 25, 05, 01, 25, 00, 26, 02, 01, 09, 00, 0f, 01, 01, 05, 00, 06]
+Raw bytes (27): 0x[01, 01, 01, 01, 05, 04, 01, 8a, 01, 05, 01, 24, 05, 01, 25, 00, 26, 02, 01, 09, 00, 0f, 01, 01, 05, 00, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 4
-- Code(Counter(0)) at (prev + 138, 5) to (start + 1, 37)
+- Code(Counter(0)) at (prev + 138, 5) to (start + 1, 36)
- Code(Counter(1)) at (prev + 1, 37) to (start + 0, 38)
- Code(Expression(0, Sub)) at (prev + 1, 9) to (start + 0, 15)
= (c0 - c1)
@@ -59,7 +59,7 @@ Number of file 0 mappings: 1
Highest counter ID seen: c0
Function name: issue_84561::test3
-Raw bytes (315): 0x[01, 01, 1b, 1d, 21, 25, 29, 21, 25, 2d, 31, 21, 17, 25, 2d, 41, 45, 49, 4d, 51, 55, 33, 51, 49, 4d, 33, 37, 49, 4d, 51, 59, 55, 59, 55, 59, 47, 5d, 55, 59, 61, 65, 71, 75, 69, 6d, 69, 6d, 69, 6d, 63, 79, 71, 75, 79, 7d, 7d, 81, 01, 33, 01, 08, 01, 03, 1c, 05, 04, 09, 01, 1c, 09, 02, 05, 04, 1f, 0d, 05, 05, 00, 1f, 11, 01, 05, 00, 1f, 15, 01, 09, 01, 1c, 19, 02, 05, 00, 1f, 1d, 01, 05, 00, 0f, 02, 00, 20, 00, 30, 21, 01, 05, 03, 0f, 25, 03, 20, 00, 30, 29, 00, 33, 00, 41, 06, 00, 4b, 00, 5a, 0a, 01, 05, 00, 0f, 2d, 05, 09, 03, 10, 31, 05, 0d, 00, 1b, 0e, 02, 0d, 00, 1c, 12, 04, 09, 05, 06, 35, 06, 05, 03, 06, 39, 04, 05, 03, 06, 3d, 04, 09, 04, 06, 41, 05, 08, 00, 0f, 45, 01, 09, 03, 0a, 1a, 05, 09, 03, 0a, 33, 05, 08, 00, 0f, 51, 01, 09, 00, 13, 22, 03, 0d, 00, 1d, 26, 03, 09, 00, 13, 2e, 03, 0d, 00, 1d, 47, 03, 05, 00, 0f, 47, 01, 0c, 00, 13, 5d, 01, 0d, 00, 13, 42, 02, 0d, 00, 13, 61, 04, 05, 02, 13, 65, 03, 0d, 00, 13, 4a, 02, 0d, 00, 13, 63, 03, 05, 00, 0f, 69, 01, 0c, 00, 13, 6d, 01, 0d, 03, 0e, 71, 04, 0d, 00, 13, 5a, 02, 0d, 00, 17, 5a, 01, 14, 00, 1b, 00, 01, 15, 00, 1b, 5a, 02, 15, 00, 1b, 75, 04, 0d, 00, 13, 5e, 03, 09, 00, 19, 79, 02, 05, 00, 0f, 66, 03, 09, 00, 22, 7d, 02, 05, 00, 0f, 6a, 03, 09, 00, 2c, 81, 01, 02, 01, 00, 02]
+Raw bytes (315): 0x[01, 01, 1b, 1d, 21, 25, 29, 21, 25, 2d, 31, 21, 17, 25, 2d, 41, 45, 49, 4d, 51, 55, 33, 51, 49, 4d, 33, 37, 49, 4d, 51, 59, 55, 59, 55, 59, 47, 5d, 55, 59, 61, 65, 71, 75, 69, 6d, 69, 6d, 69, 6d, 63, 79, 71, 75, 79, 7d, 7d, 81, 01, 33, 01, 08, 01, 03, 0f, 05, 04, 09, 01, 0f, 09, 02, 05, 04, 0f, 0d, 05, 05, 00, 0f, 11, 01, 05, 00, 0f, 15, 01, 09, 01, 0f, 19, 02, 05, 00, 0f, 1d, 01, 05, 00, 0f, 02, 00, 20, 00, 30, 21, 01, 05, 03, 0f, 25, 03, 20, 00, 30, 29, 00, 33, 00, 41, 06, 00, 4b, 00, 5a, 0a, 01, 05, 00, 0f, 2d, 05, 09, 03, 10, 31, 05, 0d, 00, 1b, 0e, 02, 0d, 00, 1c, 12, 04, 09, 02, 0f, 35, 06, 05, 00, 0f, 39, 04, 05, 00, 0f, 3d, 04, 09, 01, 0f, 41, 05, 08, 00, 0f, 45, 01, 09, 00, 13, 1a, 05, 09, 00, 13, 33, 05, 08, 00, 0f, 51, 01, 09, 00, 13, 22, 03, 0d, 00, 1d, 26, 03, 09, 00, 13, 2e, 03, 0d, 00, 1d, 47, 03, 05, 00, 0f, 47, 01, 0c, 00, 13, 5d, 01, 0d, 00, 13, 42, 02, 0d, 00, 13, 61, 04, 05, 02, 13, 65, 03, 0d, 00, 13, 4a, 02, 0d, 00, 13, 63, 03, 05, 00, 0f, 69, 01, 0c, 00, 13, 6d, 01, 0d, 00, 17, 71, 04, 0d, 00, 13, 5a, 02, 0d, 00, 17, 5a, 01, 14, 00, 1b, 00, 01, 15, 00, 1b, 5a, 02, 15, 00, 1b, 75, 04, 0d, 00, 13, 5e, 03, 09, 00, 19, 79, 02, 05, 00, 0f, 66, 03, 09, 00, 22, 7d, 02, 05, 00, 0f, 6a, 03, 09, 00, 2c, 81, 01, 02, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 27
@@ -91,13 +91,13 @@ Number of expressions: 27
- expression 25 operands: lhs = Counter(30), rhs = Counter(31)
- expression 26 operands: lhs = Counter(31), rhs = Counter(32)
Number of file 0 mappings: 51
-- Code(Counter(0)) at (prev + 8, 1) to (start + 3, 28)
-- Code(Counter(1)) at (prev + 4, 9) to (start + 1, 28)
-- Code(Counter(2)) at (prev + 2, 5) to (start + 4, 31)
-- Code(Counter(3)) at (prev + 5, 5) to (start + 0, 31)
-- Code(Counter(4)) at (prev + 1, 5) to (start + 0, 31)
-- Code(Counter(5)) at (prev + 1, 9) to (start + 1, 28)
-- Code(Counter(6)) at (prev + 2, 5) to (start + 0, 31)
+- Code(Counter(0)) at (prev + 8, 1) to (start + 3, 15)
+- Code(Counter(1)) at (prev + 4, 9) to (start + 1, 15)
+- Code(Counter(2)) at (prev + 2, 5) to (start + 4, 15)
+- Code(Counter(3)) at (prev + 5, 5) to (start + 0, 15)
+- Code(Counter(4)) at (prev + 1, 5) to (start + 0, 15)
+- Code(Counter(5)) at (prev + 1, 9) to (start + 1, 15)
+- Code(Counter(6)) at (prev + 2, 5) to (start + 0, 15)
- Code(Counter(7)) at (prev + 1, 5) to (start + 0, 15)
- Code(Expression(0, Sub)) at (prev + 0, 32) to (start + 0, 48)
= (c7 - c8)
@@ -112,14 +112,14 @@ Number of file 0 mappings: 51
- Code(Counter(12)) at (prev + 5, 13) to (start + 0, 27)
- Code(Expression(3, Sub)) at (prev + 2, 13) to (start + 0, 28)
= (c11 - c12)
-- Code(Expression(4, Sub)) at (prev + 4, 9) to (start + 5, 6)
+- Code(Expression(4, Sub)) at (prev + 4, 9) to (start + 2, 15)
= (c8 - (c9 + c11))
-- Code(Counter(13)) at (prev + 6, 5) to (start + 3, 6)
-- Code(Counter(14)) at (prev + 4, 5) to (start + 3, 6)
-- Code(Counter(15)) at (prev + 4, 9) to (start + 4, 6)
+- Code(Counter(13)) at (prev + 6, 5) to (start + 0, 15)
+- Code(Counter(14)) at (prev + 4, 5) to (start + 0, 15)
+- Code(Counter(15)) at (prev + 4, 9) to (start + 1, 15)
- Code(Counter(16)) at (prev + 5, 8) to (start + 0, 15)
-- Code(Counter(17)) at (prev + 1, 9) to (start + 3, 10)
-- Code(Expression(6, Sub)) at (prev + 5, 9) to (start + 3, 10)
+- Code(Counter(17)) at (prev + 1, 9) to (start + 0, 19)
+- Code(Expression(6, Sub)) at (prev + 5, 9) to (start + 0, 19)
= (c16 - c17)
- Code(Expression(12, Add)) at (prev + 5, 8) to (start + 0, 15)
= (c18 + c19)
@@ -144,7 +144,7 @@ Number of file 0 mappings: 51
- Code(Expression(24, Add)) at (prev + 3, 5) to (start + 0, 15)
= (c28 + c29)
- Code(Counter(26)) at (prev + 1, 12) to (start + 0, 19)
-- Code(Counter(27)) at (prev + 1, 13) to (start + 3, 14)
+- Code(Counter(27)) at (prev + 1, 13) to (start + 0, 23)
- Code(Counter(28)) at (prev + 4, 13) to (start + 0, 19)
- Code(Expression(22, Sub)) at (prev + 2, 13) to (start + 0, 23)
= (c26 - c27)
diff --git a/tests/coverage/issue-84561.coverage b/tests/coverage/issue-84561.coverage
index 2a642e2427b90..a55f42a696e69 100644
--- a/tests/coverage/issue-84561.coverage
+++ b/tests/coverage/issue-84561.coverage
@@ -47,32 +47,32 @@
LL| 1| let is_true = std::env::args().len() == 1;
LL| 1|
LL| 1| assert_eq!(
- LL| 1| Foo(1),
- LL| 1| Foo(1)
- LL| 1| );
+ LL| | Foo(1),
+ LL| | Foo(1)
+ LL| | );
LL| 1| assert_ne!(
- LL| 1| Foo(0),
- LL| 1| Foo(1)
- LL| 1| );
+ LL| | Foo(0),
+ LL| | Foo(1)
+ LL| | );
LL| 1| assert_eq!(
- LL| 1| Foo(2),
- LL| 1| Foo(2)
- LL| 1| );
+ LL| | Foo(2),
+ LL| | Foo(2)
+ LL| | );
LL| 1| let bar = Foo(1);
LL| 1| assert_ne!(
- LL| 1| bar,
- LL| 1| Foo(3)
- LL| 1| );
+ LL| | bar,
+ LL| | Foo(3)
+ LL| | );
LL| 1| if is_true {
LL| 1| assert_ne!(
- LL| 1| Foo(0),
- LL| 1| Foo(4)
- LL| 1| );
+ LL| | Foo(0),
+ LL| | Foo(4)
+ LL| | );
LL| | } else {
LL| 0| assert_eq!(
- LL| 0| Foo(3),
- LL| 0| Foo(3)
- LL| 0| );
+ LL| | Foo(3),
+ LL| | Foo(3)
+ LL| | );
LL| | }
LL| 1| if is_true {
LL| 1| assert_ne!(
@@ -106,9 +106,9 @@
LL| 1| assert_ne!(
LL| 1| if is_true {
LL| 1| assert_eq!(
- LL| 1| Foo(3),
- LL| 1| Foo(3)
- LL| 1| );
+ LL| | Foo(3),
+ LL| | Foo(3)
+ LL| | );
LL| 1| Foo(0)
LL| | } else {
LL| 0| assert_ne!(
diff --git a/tests/coverage/loop-break.cov-map b/tests/coverage/loop-break.cov-map
index f13e82da15143..fccc4d64395b6 100644
--- a/tests/coverage/loop-break.cov-map
+++ b/tests/coverage/loop-break.cov-map
@@ -1,12 +1,12 @@
Function name: loop_break::main
-Raw bytes (31): 0x[01, 01, 01, 05, 01, 05, 01, 03, 01, 00, 0b, 05, 02, 0c, 00, 27, 01, 01, 0d, 00, 12, 02, 01, 09, 00, 0a, 01, 02, 01, 00, 02]
+Raw bytes (31): 0x[01, 01, 01, 05, 01, 05, 01, 03, 01, 00, 0b, 05, 02, 0c, 00, 21, 01, 01, 0d, 00, 12, 02, 01, 09, 00, 0a, 01, 02, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(1), rhs = Counter(0)
Number of file 0 mappings: 5
- Code(Counter(0)) at (prev + 3, 1) to (start + 0, 11)
-- Code(Counter(1)) at (prev + 2, 12) to (start + 0, 39)
+- Code(Counter(1)) at (prev + 2, 12) to (start + 0, 33)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 18)
- Code(Expression(0, Sub)) at (prev + 1, 9) to (start + 0, 10)
= (c1 - c0)
diff --git a/tests/coverage/loops_branches.cov-map b/tests/coverage/loops_branches.cov-map
index 2cb0f948b3e1d..2157cd6ee3f8e 100644
--- a/tests/coverage/loops_branches.cov-map
+++ b/tests/coverage/loops_branches.cov-map
@@ -1,5 +1,5 @@
Function name: ::fmt
-Raw bytes (112): 0x[01, 01, 04, 07, 0b, 01, 0d, 05, 09, 09, 0d, 14, 01, 09, 05, 01, 10, 01, 02, 10, 00, 15, 00, 01, 17, 00, 1b, 00, 00, 1c, 00, 1e, 01, 01, 0d, 00, 0e, 01, 01, 0d, 00, 1e, 05, 00, 1e, 00, 1f, 00, 01, 10, 01, 0a, 0d, 03, 0d, 00, 0e, 09, 00, 12, 00, 17, 0d, 01, 10, 00, 14, 0d, 01, 14, 00, 19, 00, 01, 1b, 00, 1f, 00, 00, 20, 00, 22, 0d, 01, 11, 00, 12, 0d, 01, 11, 00, 22, 02, 00, 22, 00, 23, 00, 01, 14, 01, 0e, 0e, 03, 09, 00, 0f, 01, 01, 05, 00, 06]
+Raw bytes (112): 0x[01, 01, 04, 07, 0b, 01, 0d, 05, 09, 09, 0d, 14, 01, 09, 05, 01, 10, 01, 02, 10, 00, 15, 00, 01, 17, 00, 1b, 00, 00, 1c, 00, 1e, 01, 01, 0d, 00, 0e, 01, 01, 0d, 00, 1d, 05, 00, 1e, 00, 1f, 00, 01, 10, 01, 0a, 0d, 03, 0d, 00, 0e, 09, 00, 12, 00, 17, 0d, 01, 10, 00, 14, 0d, 01, 14, 00, 19, 00, 01, 1b, 00, 1f, 00, 00, 20, 00, 22, 0d, 01, 11, 00, 12, 0d, 01, 11, 00, 21, 02, 00, 22, 00, 23, 00, 01, 14, 01, 0e, 0e, 03, 09, 00, 0f, 01, 01, 05, 00, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 4
@@ -13,7 +13,7 @@ Number of file 0 mappings: 20
- Code(Zero) at (prev + 1, 23) to (start + 0, 27)
- Code(Zero) at (prev + 0, 28) to (start + 0, 30)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 14)
-- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 30)
+- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 29)
- Code(Counter(1)) at (prev + 0, 30) to (start + 0, 31)
- Code(Zero) at (prev + 1, 16) to (start + 1, 10)
- Code(Counter(3)) at (prev + 3, 13) to (start + 0, 14)
@@ -23,7 +23,7 @@ Number of file 0 mappings: 20
- Code(Zero) at (prev + 1, 27) to (start + 0, 31)
- Code(Zero) at (prev + 0, 32) to (start + 0, 34)
- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 18)
-- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 34)
+- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 33)
- Code(Expression(0, Sub)) at (prev + 0, 34) to (start + 0, 35)
= ((c0 + c3) - (c1 + c2))
- Code(Zero) at (prev + 1, 20) to (start + 1, 14)
@@ -33,7 +33,7 @@ Number of file 0 mappings: 20
Highest counter ID seen: c3
Function name: ::fmt
-Raw bytes (112): 0x[01, 01, 04, 07, 0b, 01, 09, 05, 0d, 05, 09, 14, 01, 22, 05, 01, 11, 00, 01, 12, 01, 0a, 01, 02, 10, 00, 15, 00, 01, 17, 00, 1b, 00, 00, 1c, 00, 1e, 01, 01, 0d, 00, 0e, 01, 01, 0d, 00, 1e, 0d, 00, 1e, 00, 1f, 09, 02, 0d, 00, 0e, 05, 00, 12, 00, 17, 09, 01, 10, 00, 15, 00, 00, 16, 01, 0e, 09, 02, 14, 00, 19, 00, 01, 1b, 00, 1f, 00, 00, 20, 00, 22, 09, 01, 11, 00, 12, 09, 01, 11, 00, 22, 02, 00, 22, 00, 23, 0e, 03, 09, 00, 0f, 01, 01, 05, 00, 06]
+Raw bytes (112): 0x[01, 01, 04, 07, 0b, 01, 09, 05, 0d, 05, 09, 14, 01, 22, 05, 01, 11, 00, 01, 12, 01, 0a, 01, 02, 10, 00, 15, 00, 01, 17, 00, 1b, 00, 00, 1c, 00, 1e, 01, 01, 0d, 00, 0e, 01, 01, 0d, 00, 1d, 0d, 00, 1e, 00, 1f, 09, 02, 0d, 00, 0e, 05, 00, 12, 00, 17, 09, 01, 10, 00, 15, 00, 00, 16, 01, 0e, 09, 02, 14, 00, 19, 00, 01, 1b, 00, 1f, 00, 00, 20, 00, 22, 09, 01, 11, 00, 12, 09, 01, 11, 00, 21, 02, 00, 22, 00, 23, 0e, 03, 09, 00, 0f, 01, 01, 05, 00, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 4
@@ -48,7 +48,7 @@ Number of file 0 mappings: 20
- Code(Zero) at (prev + 1, 23) to (start + 0, 27)
- Code(Zero) at (prev + 0, 28) to (start + 0, 30)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 14)
-- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 30)
+- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 29)
- Code(Counter(3)) at (prev + 0, 30) to (start + 0, 31)
- Code(Counter(2)) at (prev + 2, 13) to (start + 0, 14)
- Code(Counter(1)) at (prev + 0, 18) to (start + 0, 23)
@@ -58,7 +58,7 @@ Number of file 0 mappings: 20
- Code(Zero) at (prev + 1, 27) to (start + 0, 31)
- Code(Zero) at (prev + 0, 32) to (start + 0, 34)
- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 18)
-- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 34)
+- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 33)
- Code(Expression(0, Sub)) at (prev + 0, 34) to (start + 0, 35)
= ((c0 + c2) - (c1 + c3))
- Code(Expression(3, Sub)) at (prev + 3, 9) to (start + 0, 15)
diff --git a/tests/coverage/macro_name_span.cov-map b/tests/coverage/macro_name_span.cov-map
index 58620452b2ba6..bd033faa5510f 100644
--- a/tests/coverage/macro_name_span.cov-map
+++ b/tests/coverage/macro_name_span.cov-map
@@ -1,10 +1,10 @@
Function name: macro_name_span::affected_function
-Raw bytes (9): 0x[01, 01, 00, 01, 01, 16, 1c, 01, 40]
+Raw bytes (9): 0x[01, 01, 00, 01, 01, 16, 1c, 01, 3e]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
-- Code(Counter(0)) at (prev + 22, 28) to (start + 1, 64)
+- Code(Counter(0)) at (prev + 22, 28) to (start + 1, 62)
Highest counter ID seen: c0
Function name: macro_name_span::main
diff --git a/tests/coverage/mcdc/non_control_flow.cov-map b/tests/coverage/mcdc/non_control_flow.cov-map
index c282d53c5ac25..959d21901de8e 100644
--- a/tests/coverage/mcdc/non_control_flow.cov-map
+++ b/tests/coverage/mcdc/non_control_flow.cov-map
@@ -113,15 +113,17 @@ Number of file 0 mappings: 1
Highest counter ID seen: c0
Function name: non_control_flow::func_call
-Raw bytes (50): 0x[01, 01, 02, 01, 05, 05, 09, 06, 01, 29, 01, 01, 0a, 28, 03, 02, 01, 09, 00, 0f, 30, 05, 02, 01, 02, 00, 00, 09, 00, 0a, 05, 00, 0e, 00, 0f, 30, 09, 06, 02, 00, 00, 00, 0e, 00, 0f, 01, 01, 01, 00, 02]
+Raw bytes (60): 0x[01, 01, 02, 01, 05, 05, 09, 08, 01, 29, 01, 00, 20, 01, 01, 05, 00, 08, 01, 00, 09, 00, 0a, 28, 03, 02, 00, 09, 00, 0f, 30, 05, 02, 01, 02, 00, 00, 09, 00, 0a, 05, 00, 0e, 00, 0f, 30, 09, 06, 02, 00, 00, 00, 0e, 00, 0f, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 2
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
-Number of file 0 mappings: 6
-- Code(Counter(0)) at (prev + 41, 1) to (start + 1, 10)
-- MCDCDecision { bitmap_idx: 3, conditions_num: 2 } at (prev + 1, 9) to (start + 0, 15)
+Number of file 0 mappings: 8
+- Code(Counter(0)) at (prev + 41, 1) to (start + 0, 32)
+- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 8)
+- Code(Counter(0)) at (prev + 0, 9) to (start + 0, 10)
+- MCDCDecision { bitmap_idx: 3, conditions_num: 2 } at (prev + 0, 9) to (start + 0, 15)
- MCDCBranch { true: Counter(1), false: Expression(0, Sub), condition_id: 1, true_next_id: 2, false_next_id: 0 } at (prev + 0, 9) to (start + 0, 10)
true = c1
false = (c0 - c1)
diff --git a/tests/coverage/no_cov_crate.cov-map b/tests/coverage/no_cov_crate.cov-map
index 04171fdb79b6b..244b0099544b5 100644
--- a/tests/coverage/no_cov_crate.cov-map
+++ b/tests/coverage/no_cov_crate.cov-map
@@ -35,22 +35,22 @@ Number of file 0 mappings: 1
Highest counter ID seen: c0
Function name: no_cov_crate::nested_fns::outer
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 33, 05, 02, 23, 01, 0c, 05, 00, 06]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 33, 05, 02, 22, 01, 0c, 05, 00, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 51, 5) to (start + 2, 35)
+- Code(Counter(0)) at (prev + 51, 5) to (start + 2, 34)
- Code(Counter(0)) at (prev + 12, 5) to (start + 0, 6)
Highest counter ID seen: c0
Function name: no_cov_crate::nested_fns::outer_both_covered
-Raw bytes (14): 0x[01, 01, 00, 02, 01, 41, 05, 02, 17, 01, 0b, 05, 00, 06]
+Raw bytes (14): 0x[01, 01, 00, 02, 01, 41, 05, 02, 16, 01, 0b, 05, 00, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
-- Code(Counter(0)) at (prev + 65, 5) to (start + 2, 23)
+- Code(Counter(0)) at (prev + 65, 5) to (start + 2, 22)
- Code(Counter(0)) at (prev + 11, 5) to (start + 0, 6)
Highest counter ID seen: c0
diff --git a/tests/coverage/panic_unwind.cov-map b/tests/coverage/panic_unwind.cov-map
index 4628a24689e7a..18b13919fe5e4 100644
--- a/tests/coverage/panic_unwind.cov-map
+++ b/tests/coverage/panic_unwind.cov-map
@@ -26,14 +26,14 @@ Number of file 0 mappings: 9
Highest counter ID seen: c3
Function name: panic_unwind::might_panic
-Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 04, 01, 01, 14, 05, 02, 09, 01, 19, 02, 02, 0c, 03, 02]
+Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 04, 01, 01, 14, 05, 02, 09, 01, 0f, 02, 02, 0c, 03, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 4, 1) to (start + 1, 20)
-- Code(Counter(1)) at (prev + 2, 9) to (start + 1, 25)
+- Code(Counter(1)) at (prev + 2, 9) to (start + 1, 15)
- Code(Expression(0, Sub)) at (prev + 2, 12) to (start + 3, 2)
= (c0 - c1)
Highest counter ID seen: c1
diff --git a/tests/coverage/sort_groups.cov-map b/tests/coverage/sort_groups.cov-map
index 69e1342229609..898d68171c500 100644
--- a/tests/coverage/sort_groups.cov-map
+++ b/tests/coverage/sort_groups.cov-map
@@ -55,13 +55,13 @@ Number of file 0 mappings: 4
Highest counter ID seen: c1
Function name: sort_groups::main
-Raw bytes (26): 0x[01, 01, 01, 01, 05, 04, 01, 06, 01, 04, 23, 05, 04, 24, 02, 06, 02, 02, 05, 00, 06, 01, 01, 05, 02, 02]
+Raw bytes (26): 0x[01, 01, 01, 01, 05, 04, 01, 06, 01, 04, 1c, 05, 04, 24, 02, 06, 02, 02, 05, 00, 06, 01, 01, 05, 02, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 4
-- Code(Counter(0)) at (prev + 6, 1) to (start + 4, 35)
+- Code(Counter(0)) at (prev + 6, 1) to (start + 4, 28)
- Code(Counter(1)) at (prev + 4, 36) to (start + 2, 6)
- Code(Expression(0, Sub)) at (prev + 2, 5) to (start + 0, 6)
= (c0 - c1)
diff --git a/tests/coverage/try_error_result.cov-map b/tests/coverage/try_error_result.cov-map
index 35b2c36a57519..e45f3de10815e 100644
--- a/tests/coverage/try_error_result.cov-map
+++ b/tests/coverage/try_error_result.cov-map
@@ -41,13 +41,13 @@ Number of file 0 mappings: 4
Highest counter ID seen: c1
Function name: try_error_result::main
-Raw bytes (26): 0x[01, 01, 01, 01, 05, 04, 01, 71, 01, 02, 0c, 05, 03, 05, 00, 06, 02, 02, 05, 00, 0b, 01, 01, 01, 00, 02]
+Raw bytes (26): 0x[01, 01, 01, 01, 05, 04, 01, 71, 01, 02, 0a, 05, 03, 05, 00, 06, 02, 02, 05, 00, 0b, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 4
-- Code(Counter(0)) at (prev + 113, 1) to (start + 2, 12)
+- Code(Counter(0)) at (prev + 113, 1) to (start + 2, 10)
- Code(Counter(1)) at (prev + 3, 5) to (start + 0, 6)
- Code(Expression(0, Sub)) at (prev + 2, 5) to (start + 0, 11)
= (c0 - c1)
@@ -55,7 +55,7 @@ Number of file 0 mappings: 4
Highest counter ID seen: c1
Function name: try_error_result::test1
-Raw bytes (67): 0x[01, 01, 04, 07, 05, 01, 09, 05, 01, 05, 09, 0b, 01, 0d, 01, 02, 17, 05, 07, 09, 00, 0e, 09, 02, 09, 04, 1a, 02, 06, 0d, 00, 29, 02, 00, 29, 00, 2a, 00, 01, 0d, 00, 2a, 00, 00, 2a, 00, 2b, 0a, 04, 0d, 00, 2a, 00, 00, 2a, 00, 2b, 0e, 03, 05, 00, 0b, 01, 01, 01, 00, 02]
+Raw bytes (67): 0x[01, 01, 04, 07, 05, 01, 09, 05, 01, 05, 09, 0b, 01, 0d, 01, 02, 17, 05, 07, 09, 00, 0e, 09, 02, 09, 04, 1a, 02, 06, 0d, 00, 11, 02, 00, 29, 00, 2a, 00, 01, 0d, 00, 11, 00, 00, 2a, 00, 2b, 0a, 04, 0d, 00, 11, 00, 00, 2a, 00, 2b, 0e, 03, 05, 00, 0b, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 4
@@ -67,13 +67,13 @@ Number of file 0 mappings: 11
- Code(Counter(0)) at (prev + 13, 1) to (start + 2, 23)
- Code(Counter(1)) at (prev + 7, 9) to (start + 0, 14)
- Code(Counter(2)) at (prev + 2, 9) to (start + 4, 26)
-- Code(Expression(0, Sub)) at (prev + 6, 13) to (start + 0, 41)
+- Code(Expression(0, Sub)) at (prev + 6, 13) to (start + 0, 17)
= ((c0 + c2) - c1)
- Code(Expression(0, Sub)) at (prev + 0, 41) to (start + 0, 42)
= ((c0 + c2) - c1)
-- Code(Zero) at (prev + 1, 13) to (start + 0, 42)
+- Code(Zero) at (prev + 1, 13) to (start + 0, 17)
- Code(Zero) at (prev + 0, 42) to (start + 0, 43)
-- Code(Expression(2, Sub)) at (prev + 4, 13) to (start + 0, 42)
+- Code(Expression(2, Sub)) at (prev + 4, 13) to (start + 0, 17)
= (c1 - c0)
- Code(Zero) at (prev + 0, 42) to (start + 0, 43)
- Code(Expression(3, Sub)) at (prev + 3, 5) to (start + 0, 11)
@@ -82,7 +82,7 @@ Number of file 0 mappings: 11
Highest counter ID seen: c2
Function name: try_error_result::test2
-Raw bytes (336): 0x[01, 01, 36, 0d, 11, 0d, 3f, 11, 15, 0d, 37, 3b, 1d, 3f, 19, 11, 15, 0d, 3f, 11, 15, 0d, 3b, 3f, 19, 11, 15, 0d, 37, 3b, 1d, 3f, 19, 11, 15, 41, 53, 21, 25, 41, 21, 41, 53, 21, 25, 09, 73, 77, 2d, 0d, 29, 09, 0d, 09, 77, 0d, 29, 09, 73, 77, 2d, 0d, 29, 45, 8b, 01, 31, 35, 45, 31, 45, 8b, 01, 31, 35, 49, 9f, 01, 39, 3d, 49, 39, 49, 9f, 01, 39, 3d, 05, 09, ab, 01, 09, af, 01, 3d, b3, 01, 39, b7, 01, 35, bb, 01, 31, bf, 01, 2d, c3, 01, 29, c7, 01, 25, cb, 01, 21, cf, 01, 1d, d3, 01, 19, d7, 01, 15, 05, 11, 28, 01, 3d, 01, 03, 17, 05, 08, 09, 00, 0e, 09, 02, 09, 04, 1a, 0d, 06, 0d, 00, 2f, 11, 00, 2f, 00, 30, 02, 00, 31, 03, 35, 15, 04, 11, 00, 12, 1e, 02, 11, 04, 12, 32, 05, 11, 00, 14, 1e, 00, 17, 00, 41, 19, 00, 41, 00, 42, 26, 00, 43, 00, 5f, 1d, 00, 5f, 00, 60, 32, 01, 0d, 00, 20, 4e, 01, 11, 00, 14, 41, 00, 17, 00, 41, 21, 00, 41, 00, 42, 4a, 00, 43, 00, 60, 25, 00, 60, 00, 61, 4e, 01, 0d, 00, 20, 6e, 04, 11, 00, 14, 62, 00, 17, 00, 42, 29, 00, 42, 00, 43, 66, 00, 44, 00, 61, 2d, 00, 61, 00, 62, 6e, 01, 0d, 00, 20, 86, 01, 01, 11, 00, 14, 45, 00, 17, 01, 36, 31, 01, 36, 00, 37, 82, 01, 01, 12, 00, 2f, 35, 00, 2f, 00, 30, 86, 01, 01, 0d, 00, 20, 9a, 01, 01, 11, 00, 14, 49, 00, 17, 01, 36, 39, 02, 11, 00, 12, 96, 01, 01, 12, 00, 2f, 3d, 01, 11, 00, 12, 9a, 01, 02, 0d, 00, 20, a2, 01, 03, 05, 00, 0b, a6, 01, 01, 01, 00, 02]
+Raw bytes (336): 0x[01, 01, 36, 0d, 11, 0d, 3f, 11, 15, 0d, 37, 3b, 1d, 3f, 19, 11, 15, 0d, 3f, 11, 15, 0d, 3b, 3f, 19, 11, 15, 0d, 37, 3b, 1d, 3f, 19, 11, 15, 41, 53, 21, 25, 41, 21, 41, 53, 21, 25, 09, 73, 77, 2d, 0d, 29, 09, 0d, 09, 77, 0d, 29, 09, 73, 77, 2d, 0d, 29, 45, 8b, 01, 31, 35, 45, 31, 45, 8b, 01, 31, 35, 49, 9f, 01, 39, 3d, 49, 39, 49, 9f, 01, 39, 3d, 05, 09, ab, 01, 09, af, 01, 3d, b3, 01, 39, b7, 01, 35, bb, 01, 31, bf, 01, 2d, c3, 01, 29, c7, 01, 25, cb, 01, 21, cf, 01, 1d, d3, 01, 19, d7, 01, 15, 05, 11, 28, 01, 3d, 01, 03, 17, 05, 08, 09, 00, 0e, 09, 02, 09, 04, 1a, 0d, 06, 0d, 00, 1f, 11, 00, 2f, 00, 30, 02, 00, 31, 03, 1c, 15, 04, 11, 00, 12, 1e, 02, 11, 03, 27, 32, 05, 11, 00, 14, 1e, 00, 17, 00, 29, 19, 00, 41, 00, 42, 26, 00, 43, 00, 47, 1d, 00, 5f, 00, 60, 32, 01, 0d, 00, 17, 4e, 01, 11, 00, 14, 41, 00, 17, 00, 29, 21, 00, 41, 00, 42, 4a, 00, 43, 00, 47, 25, 00, 60, 00, 61, 4e, 01, 0d, 00, 17, 6e, 04, 11, 00, 14, 62, 00, 17, 00, 29, 29, 00, 42, 00, 43, 66, 00, 44, 00, 48, 2d, 00, 61, 00, 62, 6e, 01, 0d, 00, 17, 86, 01, 01, 11, 00, 14, 45, 00, 17, 01, 1d, 31, 01, 36, 00, 37, 82, 01, 01, 12, 00, 16, 35, 00, 2f, 00, 30, 86, 01, 01, 0d, 00, 17, 9a, 01, 01, 11, 00, 14, 49, 00, 17, 01, 1d, 39, 02, 11, 00, 12, 96, 01, 01, 12, 00, 16, 3d, 01, 11, 00, 12, 9a, 01, 02, 0d, 00, 17, a2, 01, 03, 05, 00, 0b, a6, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 54
@@ -144,59 +144,59 @@ Number of file 0 mappings: 40
- Code(Counter(0)) at (prev + 61, 1) to (start + 3, 23)
- Code(Counter(1)) at (prev + 8, 9) to (start + 0, 14)
- Code(Counter(2)) at (prev + 2, 9) to (start + 4, 26)
-- Code(Counter(3)) at (prev + 6, 13) to (start + 0, 47)
+- Code(Counter(3)) at (prev + 6, 13) to (start + 0, 31)
- Code(Counter(4)) at (prev + 0, 47) to (start + 0, 48)
-- Code(Expression(0, Sub)) at (prev + 0, 49) to (start + 3, 53)
+- Code(Expression(0, Sub)) at (prev + 0, 49) to (start + 3, 28)
= (c3 - c4)
- Code(Counter(5)) at (prev + 4, 17) to (start + 0, 18)
-- Code(Expression(7, Sub)) at (prev + 2, 17) to (start + 4, 18)
+- Code(Expression(7, Sub)) at (prev + 2, 17) to (start + 3, 39)
= (c3 - (c4 + c5))
- Code(Expression(12, Sub)) at (prev + 5, 17) to (start + 0, 20)
= (c3 - (((c4 + c5) + c6) + c7))
-- Code(Expression(7, Sub)) at (prev + 0, 23) to (start + 0, 65)
+- Code(Expression(7, Sub)) at (prev + 0, 23) to (start + 0, 41)
= (c3 - (c4 + c5))
- Code(Counter(6)) at (prev + 0, 65) to (start + 0, 66)
-- Code(Expression(9, Sub)) at (prev + 0, 67) to (start + 0, 95)
+- Code(Expression(9, Sub)) at (prev + 0, 67) to (start + 0, 71)
= (c3 - ((c4 + c5) + c6))
- Code(Counter(7)) at (prev + 0, 95) to (start + 0, 96)
-- Code(Expression(12, Sub)) at (prev + 1, 13) to (start + 0, 32)
+- Code(Expression(12, Sub)) at (prev + 1, 13) to (start + 0, 23)
= (c3 - (((c4 + c5) + c6) + c7))
- Code(Expression(19, Sub)) at (prev + 1, 17) to (start + 0, 20)
= (c16 - (c8 + c9))
-- Code(Counter(16)) at (prev + 0, 23) to (start + 0, 65)
+- Code(Counter(16)) at (prev + 0, 23) to (start + 0, 41)
- Code(Counter(8)) at (prev + 0, 65) to (start + 0, 66)
-- Code(Expression(18, Sub)) at (prev + 0, 67) to (start + 0, 96)
+- Code(Expression(18, Sub)) at (prev + 0, 67) to (start + 0, 71)
= (c16 - c8)
- Code(Counter(9)) at (prev + 0, 96) to (start + 0, 97)
-- Code(Expression(19, Sub)) at (prev + 1, 13) to (start + 0, 32)
+- Code(Expression(19, Sub)) at (prev + 1, 13) to (start + 0, 23)
= (c16 - (c8 + c9))
- Code(Expression(27, Sub)) at (prev + 4, 17) to (start + 0, 20)
= (c2 - ((c3 + c10) + c11))
-- Code(Expression(24, Sub)) at (prev + 0, 23) to (start + 0, 66)
+- Code(Expression(24, Sub)) at (prev + 0, 23) to (start + 0, 41)
= (c2 - c3)
- Code(Counter(10)) at (prev + 0, 66) to (start + 0, 67)
-- Code(Expression(25, Sub)) at (prev + 0, 68) to (start + 0, 97)
+- Code(Expression(25, Sub)) at (prev + 0, 68) to (start + 0, 72)
= (c2 - (c3 + c10))
- Code(Counter(11)) at (prev + 0, 97) to (start + 0, 98)
-- Code(Expression(27, Sub)) at (prev + 1, 13) to (start + 0, 32)
+- Code(Expression(27, Sub)) at (prev + 1, 13) to (start + 0, 23)
= (c2 - ((c3 + c10) + c11))
- Code(Expression(33, Sub)) at (prev + 1, 17) to (start + 0, 20)
= (c17 - (c12 + c13))
-- Code(Counter(17)) at (prev + 0, 23) to (start + 1, 54)
+- Code(Counter(17)) at (prev + 0, 23) to (start + 1, 29)
- Code(Counter(12)) at (prev + 1, 54) to (start + 0, 55)
-- Code(Expression(32, Sub)) at (prev + 1, 18) to (start + 0, 47)
+- Code(Expression(32, Sub)) at (prev + 1, 18) to (start + 0, 22)
= (c17 - c12)
- Code(Counter(13)) at (prev + 0, 47) to (start + 0, 48)
-- Code(Expression(33, Sub)) at (prev + 1, 13) to (start + 0, 32)
+- Code(Expression(33, Sub)) at (prev + 1, 13) to (start + 0, 23)
= (c17 - (c12 + c13))
- Code(Expression(38, Sub)) at (prev + 1, 17) to (start + 0, 20)
= (c18 - (c14 + c15))
-- Code(Counter(18)) at (prev + 0, 23) to (start + 1, 54)
+- Code(Counter(18)) at (prev + 0, 23) to (start + 1, 29)
- Code(Counter(14)) at (prev + 2, 17) to (start + 0, 18)
-- Code(Expression(37, Sub)) at (prev + 1, 18) to (start + 0, 47)
+- Code(Expression(37, Sub)) at (prev + 1, 18) to (start + 0, 22)
= (c18 - c14)
- Code(Counter(15)) at (prev + 1, 17) to (start + 0, 18)
-- Code(Expression(38, Sub)) at (prev + 2, 13) to (start + 0, 32)
+- Code(Expression(38, Sub)) at (prev + 2, 13) to (start + 0, 23)
= (c18 - (c14 + c15))
- Code(Expression(40, Sub)) at (prev + 3, 5) to (start + 0, 11)
= (c1 - c2)
diff --git a/tests/coverage/try_error_result.coverage b/tests/coverage/try_error_result.coverage
index 7100248f7df85..7a89c0452ac4f 100644
--- a/tests/coverage/try_error_result.coverage
+++ b/tests/coverage/try_error_result.coverage
@@ -86,7 +86,7 @@
LL| 1| .
LL| 1| expect_err(
LL| 1| "call should fail"
- LL| 1| );
+ LL| | );
LL| 1| let val = thing1.get_thing_2(/*return_error=*/ true)?.call(/*return_error=*/ true)?;
^0 ^0 ^0
LL| 0| assert_eq!(val, 57);
diff --git a/tests/coverage/unicode.cov-map b/tests/coverage/unicode.cov-map
index 7b9dc0b9bc887..29d40a055130e 100644
--- a/tests/coverage/unicode.cov-map
+++ b/tests/coverage/unicode.cov-map
@@ -1,5 +1,5 @@
Function name: unicode::main
-Raw bytes (53): 0x[01, 01, 02, 05, 01, 01, 0d, 09, 01, 0e, 01, 00, 0b, 02, 01, 09, 00, 0c, 05, 00, 10, 00, 1b, 02, 00, 1c, 00, 28, 01, 02, 08, 00, 25, 09, 00, 29, 00, 46, 0d, 00, 47, 02, 06, 06, 02, 05, 00, 06, 01, 02, 05, 01, 02]
+Raw bytes (53): 0x[01, 01, 02, 05, 01, 01, 0d, 09, 01, 0e, 01, 00, 0b, 02, 01, 09, 00, 0c, 05, 00, 10, 00, 1b, 02, 00, 1c, 00, 28, 01, 02, 08, 00, 23, 09, 00, 29, 00, 44, 0d, 00, 47, 02, 06, 06, 02, 05, 00, 06, 01, 02, 05, 01, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 2
@@ -12,8 +12,8 @@ Number of file 0 mappings: 9
- Code(Counter(1)) at (prev + 0, 16) to (start + 0, 27)
- Code(Expression(0, Sub)) at (prev + 0, 28) to (start + 0, 40)
= (c1 - c0)
-- Code(Counter(0)) at (prev + 2, 8) to (start + 0, 37)
-- Code(Counter(2)) at (prev + 0, 41) to (start + 0, 70)
+- Code(Counter(0)) at (prev + 2, 8) to (start + 0, 35)
+- Code(Counter(2)) at (prev + 0, 41) to (start + 0, 68)
- Code(Counter(3)) at (prev + 0, 71) to (start + 2, 6)
- Code(Expression(1, Sub)) at (prev + 2, 5) to (start + 0, 6)
= (c0 - c3)
diff --git a/tests/coverage/unicode.coverage b/tests/coverage/unicode.coverage
index 84c5f05a8c4e2..443499545500e 100644
--- a/tests/coverage/unicode.coverage
+++ b/tests/coverage/unicode.coverage
@@ -15,7 +15,7 @@
LL| [0;35m33[0m| for _İ in 'А'..='Я' { /* Я */ }
^32 ^32
LL| |
- LL| [0;35m1[0m| if 申し訳ございません() && [0;41m申し訳ございません()[0m [0;41m{[0m
+ LL| [0;35m1[0m| if 申し訳ございません() && [0;41m申し訳ございません[0m() [0;41m{[0m
^0
LL| 0|[0;41m println!("true");[0m
LL| 1|[0;41m [0m}
diff --git a/tests/coverage/unreachable.cov-map b/tests/coverage/unreachable.cov-map
index 97961bc741452..0bc18bfcbd315 100644
--- a/tests/coverage/unreachable.cov-map
+++ b/tests/coverage/unreachable.cov-map
@@ -1,27 +1,27 @@
Function name: unreachable::UNREACHABLE_CLOSURE::{closure#0} (unused)
-Raw bytes (9): 0x[01, 01, 00, 01, 00, 0e, 27, 00, 47]
+Raw bytes (9): 0x[01, 01, 00, 01, 00, 0e, 27, 00, 45]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
-- Code(Zero) at (prev + 14, 39) to (start + 0, 71)
+- Code(Zero) at (prev + 14, 39) to (start + 0, 69)
Highest counter ID seen: (none)
Function name: unreachable::unreachable_function (unused)
-Raw bytes (9): 0x[01, 01, 00, 01, 00, 10, 01, 01, 25]
+Raw bytes (9): 0x[01, 01, 00, 01, 00, 10, 01, 01, 23]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
-- Code(Zero) at (prev + 16, 1) to (start + 1, 37)
+- Code(Zero) at (prev + 16, 1) to (start + 1, 35)
Highest counter ID seen: (none)
Function name: unreachable::unreachable_intrinsic (unused)
-Raw bytes (9): 0x[01, 01, 00, 01, 00, 15, 01, 01, 2c]
+Raw bytes (9): 0x[01, 01, 00, 01, 00, 15, 01, 01, 2a]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
-- Code(Zero) at (prev + 21, 1) to (start + 1, 44)
+- Code(Zero) at (prev + 21, 1) to (start + 1, 42)
Highest counter ID seen: (none)
diff --git a/tests/coverage/yield.cov-map b/tests/coverage/yield.cov-map
index d296f9bd778a2..bf0916e5503a9 100644
--- a/tests/coverage/yield.cov-map
+++ b/tests/coverage/yield.cov-map
@@ -1,5 +1,5 @@
Function name: yield::main
-Raw bytes (94): 0x[01, 01, 05, 01, 05, 05, 09, 09, 11, 11, 15, 11, 15, 10, 01, 07, 01, 01, 16, 01, 07, 0b, 00, 2e, 05, 01, 27, 00, 29, 02, 01, 0e, 00, 34, 05, 02, 0b, 00, 2e, 0d, 01, 22, 00, 27, 09, 00, 2c, 00, 2e, 06, 01, 0e, 00, 34, 09, 03, 09, 00, 16, 09, 08, 0b, 00, 2e, 11, 01, 27, 00, 29, 0a, 01, 0e, 00, 34, 11, 02, 0b, 00, 2e, 12, 01, 27, 00, 29, 15, 01, 0e, 00, 34, 12, 02, 01, 00, 02]
+Raw bytes (94): 0x[01, 01, 05, 01, 05, 05, 09, 09, 11, 11, 15, 11, 15, 10, 01, 07, 01, 01, 16, 01, 07, 0b, 00, 2e, 05, 01, 27, 00, 29, 02, 01, 0e, 00, 14, 05, 02, 0b, 00, 2e, 0d, 01, 22, 00, 27, 09, 00, 2c, 00, 2e, 06, 01, 0e, 00, 14, 09, 03, 09, 00, 16, 09, 08, 0b, 00, 2e, 11, 01, 27, 00, 29, 0a, 01, 0e, 00, 14, 11, 02, 0b, 00, 2e, 12, 01, 27, 00, 29, 15, 01, 0e, 00, 14, 12, 02, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 5
@@ -12,22 +12,22 @@ Number of file 0 mappings: 16
- Code(Counter(0)) at (prev + 7, 1) to (start + 1, 22)
- Code(Counter(0)) at (prev + 7, 11) to (start + 0, 46)
- Code(Counter(1)) at (prev + 1, 39) to (start + 0, 41)
-- Code(Expression(0, Sub)) at (prev + 1, 14) to (start + 0, 52)
+- Code(Expression(0, Sub)) at (prev + 1, 14) to (start + 0, 20)
= (c0 - c1)
- Code(Counter(1)) at (prev + 2, 11) to (start + 0, 46)
- Code(Counter(3)) at (prev + 1, 34) to (start + 0, 39)
- Code(Counter(2)) at (prev + 0, 44) to (start + 0, 46)
-- Code(Expression(1, Sub)) at (prev + 1, 14) to (start + 0, 52)
+- Code(Expression(1, Sub)) at (prev + 1, 14) to (start + 0, 20)
= (c1 - c2)
- Code(Counter(2)) at (prev + 3, 9) to (start + 0, 22)
- Code(Counter(2)) at (prev + 8, 11) to (start + 0, 46)
- Code(Counter(4)) at (prev + 1, 39) to (start + 0, 41)
-- Code(Expression(2, Sub)) at (prev + 1, 14) to (start + 0, 52)
+- Code(Expression(2, Sub)) at (prev + 1, 14) to (start + 0, 20)
= (c2 - c4)
- Code(Counter(4)) at (prev + 2, 11) to (start + 0, 46)
- Code(Expression(4, Sub)) at (prev + 1, 39) to (start + 0, 41)
= (c4 - c5)
-- Code(Counter(5)) at (prev + 1, 14) to (start + 0, 52)
+- Code(Counter(5)) at (prev + 1, 14) to (start + 0, 20)
- Code(Expression(4, Sub)) at (prev + 2, 1) to (start + 0, 2)
= (c4 - c5)
Highest counter ID seen: c5
diff --git a/tests/crashes/134335.rs b/tests/crashes/134335.rs
deleted file mode 100644
index bee6686ff3fa8..0000000000000
--- a/tests/crashes/134335.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-//@ known-bug: #134335
-//@compile-flags: -Zunstable-options --edition=2024 --crate-type=lib
-pub async fn async_closure(x: &mut i32) {
- let c = async move || {
- *x += 1;
- };
- call_once(c).await;
-}
-
-fn call_once(f: impl FnOnce() -> T) -> T {
- f()
-}
diff --git a/tests/mir-opt/coverage/branch_match_arms.main.InstrumentCoverage.diff b/tests/mir-opt/coverage/branch_match_arms.main.InstrumentCoverage.diff
index 8e1cdb7182b10..542b70bcee966 100644
--- a/tests/mir-opt/coverage/branch_match_arms.main.InstrumentCoverage.diff
+++ b/tests/mir-opt/coverage/branch_match_arms.main.InstrumentCoverage.diff
@@ -27,10 +27,10 @@
}
+ coverage Code { bcb: bcb0 } => $DIR/branch_match_arms.rs:14:1: 15:21 (#0);
-+ coverage Code { bcb: bcb1 } => $DIR/branch_match_arms.rs:16:17: 16:33 (#0);
-+ coverage Code { bcb: bcb3 } => $DIR/branch_match_arms.rs:17:17: 17:33 (#0);
-+ coverage Code { bcb: bcb4 } => $DIR/branch_match_arms.rs:18:17: 18:33 (#0);
-+ coverage Code { bcb: bcb5 } => $DIR/branch_match_arms.rs:19:17: 19:33 (#0);
++ coverage Code { bcb: bcb1 } => $DIR/branch_match_arms.rs:16:17: 16:32 (#0);
++ coverage Code { bcb: bcb3 } => $DIR/branch_match_arms.rs:17:17: 17:32 (#0);
++ coverage Code { bcb: bcb4 } => $DIR/branch_match_arms.rs:18:17: 18:32 (#0);
++ coverage Code { bcb: bcb5 } => $DIR/branch_match_arms.rs:19:17: 19:32 (#0);
+ coverage Code { bcb: bcb2 } => $DIR/branch_match_arms.rs:21:2: 21:2 (#0);
+
bb0: {
diff --git a/tests/mir-opt/coverage/instrument_coverage.main.InstrumentCoverage.diff b/tests/mir-opt/coverage/instrument_coverage.main.InstrumentCoverage.diff
index 1a71cb8dea7f1..30de92f3b8683 100644
--- a/tests/mir-opt/coverage/instrument_coverage.main.InstrumentCoverage.diff
+++ b/tests/mir-opt/coverage/instrument_coverage.main.InstrumentCoverage.diff
@@ -8,7 +8,7 @@
let mut _3: !;
+ coverage Code { bcb: bcb0 } => $DIR/instrument_coverage.rs:13:1: 13:11 (#0);
-+ coverage Code { bcb: bcb1 } => $DIR/instrument_coverage.rs:15:12: 15:17 (#0);
++ coverage Code { bcb: bcb1 } => $DIR/instrument_coverage.rs:15:12: 15:15 (#0);
+ coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:16:13: 16:18 (#0);
+ coverage Code { bcb: bcb3 } => $DIR/instrument_coverage.rs:17:10: 17:10 (#0);
+ coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:19:2: 19:2 (#0);
diff --git a/tests/pretty/stmt_expr_attributes.rs b/tests/pretty/stmt_expr_attributes.rs
index 01a503ce7eeaf..90d2b2f5e1e6b 100644
--- a/tests/pretty/stmt_expr_attributes.rs
+++ b/tests/pretty/stmt_expr_attributes.rs
@@ -1,6 +1,5 @@
//@ pp-exact
-#![feature(inline_const_pat)]
#![feature(rustc_attrs)]
#![feature(stmt_expr_attributes)]
@@ -206,9 +205,7 @@ fn _11() {
let _ = ();
()
};
- let const {
- #![rustc_dummy]
- } =
+ let _ =
#[rustc_dummy] const {
#![rustc_dummy]
};
diff --git a/tests/rustdoc-json/attrs/automatically_derived.rs b/tests/rustdoc-json/attrs/automatically_derived.rs
new file mode 100644
index 0000000000000..4e1ab3d145e5d
--- /dev/null
+++ b/tests/rustdoc-json/attrs/automatically_derived.rs
@@ -0,0 +1,13 @@
+#[derive(Default)]
+pub struct Derive;
+
+pub struct Manual;
+
+impl Default for Manual {
+ fn default() -> Self {
+ Self
+ }
+}
+
+//@ is '$.index[?(@.inner.impl.for.resolved_path.path == "Derive" && @.inner.impl.trait.path == "Default")].attrs' '["#[automatically_derived]"]'
+//@ is '$.index[?(@.inner.impl.for.resolved_path.path == "Manual" && @.inner.impl.trait.path == "Default")].attrs' '[]'
diff --git a/tests/ui/async-await/async-closures/by-move-body-inlined-attrs.rs b/tests/ui/async-await/async-closures/by-move-body-inlined-attrs.rs
new file mode 100644
index 0000000000000..ecfc06d2bad0c
--- /dev/null
+++ b/tests/ui/async-await/async-closures/by-move-body-inlined-attrs.rs
@@ -0,0 +1,28 @@
+//@ check-pass
+//@ compile-flags: -Zinline-mir -Zvalidate-mir
+//@ edition: 2024
+
+// See comment below.
+
+use std::future::Future;
+use std::pin::pin;
+use std::task::{Context, Waker};
+
+fn call_once(f: impl FnOnce() -> T) -> T { f() }
+
+fn main() {
+ let x = async || {};
+ // We first inline `call_once<{async closure}>`.
+ //
+ // This gives us a future whose type is the "FnOnce" flavor of the async closure's
+ // child coroutine. The body of this coroutine is synthetic, which we synthesize in
+ // the by-move body query.
+ let fut = pin!(call_once(x));
+ // We then try to inline that body in this poll call.
+ //
+ // The inliner does some inlinability checks; one of these checks involves checking
+ // the body for the `#[rustc_no_mir_inline]` attribute. Since the synthetic body had
+ // no HIR synthesized, but it's still a local def id, we end up ICEing in the
+ // `local_def_id_to_hir_id` call when trying to read its attrs.
+ fut.poll(&mut Context::from_waker(Waker::noop()));
+}
diff --git a/tests/ui/consts/invalid-inline-const-in-match-arm.rs b/tests/ui/consts/invalid-inline-const-in-match-arm.rs
deleted file mode 100644
index 4fe4b0d33c886..0000000000000
--- a/tests/ui/consts/invalid-inline-const-in-match-arm.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-#![feature(inline_const_pat)]
-
-fn main() {
- match () {
- const { (|| {})() } => {}
- //~^ ERROR cannot call non-const closure in constants
- //~| ERROR could not evaluate constant pattern
- }
-}
diff --git a/tests/ui/consts/invalid-inline-const-in-match-arm.stderr b/tests/ui/consts/invalid-inline-const-in-match-arm.stderr
deleted file mode 100644
index b22f99f40d351..0000000000000
--- a/tests/ui/consts/invalid-inline-const-in-match-arm.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0015]: cannot call non-const closure in constants
- --> $DIR/invalid-inline-const-in-match-arm.rs:5:17
- |
-LL | const { (|| {})() } => {}
- | ^^^^^^^^^
- |
- = note: closures need an RFC before allowed to be called in constants
- = note: calls in constants are limited to constant functions, tuple structs and tuple variants
-
-error: could not evaluate constant pattern
- --> $DIR/invalid-inline-const-in-match-arm.rs:5:9
- |
-LL | const { (|| {})() } => {}
- | ^^^^^^^^^^^^^^^^^^^ could not evaluate constant
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0015`.
diff --git a/tests/ui/feature-gates/feature-gate-inline_const_pat.rs b/tests/ui/feature-gates/feature-gate-inline_const_pat.rs
deleted file mode 100644
index 3d0df289fb74a..0000000000000
--- a/tests/ui/feature-gates/feature-gate-inline_const_pat.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-fn main() {
- let const { () } = ();
- //~^ ERROR inline-const in pattern position is experimental [E0658]
-}
diff --git a/tests/ui/feature-gates/feature-gate-inline_const_pat.stderr b/tests/ui/feature-gates/feature-gate-inline_const_pat.stderr
deleted file mode 100644
index 7d7376fa818bb..0000000000000
--- a/tests/ui/feature-gates/feature-gate-inline_const_pat.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0658]: inline-const in pattern position is experimental
- --> $DIR/feature-gate-inline_const_pat.rs:2:9
- |
-LL | let const { () } = ();
- | ^^^^^
- |
- = note: see issue #76001 for more information
- = help: add `#![feature(inline_const_pat)]` to the crate attributes to enable
- = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
-
-error: aborting due to 1 previous error
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions0.rs b/tests/ui/half-open-range-patterns/range_pat_interactions0.rs
index f943ea0271da2..f79001ff1f171 100644
--- a/tests/ui/half-open-range-patterns/range_pat_interactions0.rs
+++ b/tests/ui/half-open-range-patterns/range_pat_interactions0.rs
@@ -1,7 +1,5 @@
//@ run-pass
#![allow(non_contiguous_range_endpoints)]
-#![feature(inline_const_pat)]
-
fn main() {
let mut if_lettable = vec![];
let mut first_or = vec![];
@@ -16,7 +14,6 @@ fn main() {
match x {
1 | -3..0 => first_or.push(x),
y @ (0..5 | 6) => or_two.push(y),
- y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
y @ -5.. => range_from.push(y),
y @ ..-7 => assert_eq!(y, -8),
y => bottom.push(y),
@@ -25,6 +22,6 @@ fn main() {
assert_eq!(if_lettable, [-1, 0, 2, 4]);
assert_eq!(first_or, [-3, -2, -1, 1]);
assert_eq!(or_two, [0, 2, 3, 4, 6]);
- assert_eq!(range_from, [-5, -4, 7]);
+ assert_eq!(range_from, [-5, -4, 5, 7]);
assert_eq!(bottom, [-7, -6]);
}
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions1.rs b/tests/ui/half-open-range-patterns/range_pat_interactions1.rs
index 4d7c9f10261f2..c5705d5db60f8 100644
--- a/tests/ui/half-open-range-patterns/range_pat_interactions1.rs
+++ b/tests/ui/half-open-range-patterns/range_pat_interactions1.rs
@@ -18,8 +18,6 @@ fn main() {
//~^ error: expected a pattern range bound, found an expression
1 | -3..0 => first_or.push(x),
y @ (0..5 | 6) => or_two.push(y),
- y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
- //~^ error: inline-const in pattern position is experimental [E0658]
y @ -5.. => range_from.push(y),
y @ ..-7 => assert_eq!(y, -8),
y => bottom.push(y),
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions1.stderr b/tests/ui/half-open-range-patterns/range_pat_interactions1.stderr
index 62be2ef7a4d83..5cd98faa8abb2 100644
--- a/tests/ui/half-open-range-patterns/range_pat_interactions1.stderr
+++ b/tests/ui/half-open-range-patterns/range_pat_interactions1.stderr
@@ -11,10 +11,6 @@ LL + const VAL: /* Type */ = 5+1;
LL ~ match x as i32 {
LL ~ 0..VAL => errors_only.push(x),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | 0..const { 5+1 } => errors_only.push(x),
- | +++++++ +
error[E0408]: variable `n` is not bound in all patterns
--> $DIR/range_pat_interactions1.rs:10:25
@@ -24,17 +20,6 @@ LL | if let n @ 2..3|4 = x {
| |
| variable not in all patterns
-error[E0658]: inline-const in pattern position is experimental
- --> $DIR/range_pat_interactions1.rs:21:20
- |
-LL | y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
- | ^^^^^
- |
- = note: see issue #76001 for more information
- = help: add `#![feature(inline_const_pat)]` to the crate attributes to enable
- = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
-
-error: aborting due to 3 previous errors
+error: aborting due to 2 previous errors
-Some errors have detailed explanations: E0408, E0658.
-For more information about an error, try `rustc --explain E0408`.
+For more information about this error, try `rustc --explain E0408`.
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions2.rs b/tests/ui/half-open-range-patterns/range_pat_interactions2.rs
deleted file mode 100644
index 0dbdb8fe7b6ef..0000000000000
--- a/tests/ui/half-open-range-patterns/range_pat_interactions2.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-fn main() {
- let mut first_or = Vec::::new();
- let mut or_two = Vec::::new();
- let mut range_from = Vec::::new();
- let mut bottom = Vec::::new();
- let mut errors_only = Vec::::new();
-
- for x in -9 + 1..=(9 - 2) {
- match x as i32 {
- 0..=(5+1) => errors_only.push(x),
- //~^ error: expected a pattern range bound, found an expression
- //~| error: range pattern bounds cannot have parentheses
- 1 | -3..0 => first_or.push(x),
- y @ (0..5 | 6) => or_two.push(y),
- y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
- //~^ error: inline-const in pattern position is experimental
- y @ -5.. => range_from.push(y),
- y @ ..-7 => assert_eq!(y, -8),
- y => bottom.push(y),
- }
- }
-}
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions2.stderr b/tests/ui/half-open-range-patterns/range_pat_interactions2.stderr
deleted file mode 100644
index dbe7f4482eed4..0000000000000
--- a/tests/ui/half-open-range-patterns/range_pat_interactions2.stderr
+++ /dev/null
@@ -1,43 +0,0 @@
-error: range pattern bounds cannot have parentheses
- --> $DIR/range_pat_interactions2.rs:10:17
- |
-LL | 0..=(5+1) => errors_only.push(x),
- | ^ ^
- |
-help: remove these parentheses
- |
-LL - 0..=(5+1) => errors_only.push(x),
-LL + 0..=5+1 => errors_only.push(x),
- |
-
-error: expected a pattern range bound, found an expression
- --> $DIR/range_pat_interactions2.rs:10:18
- |
-LL | 0..=(5+1) => errors_only.push(x),
- | ^^^ not a pattern
- |
- = note: arbitrary expressions are not allowed in patterns:
-help: consider extracting the expression into a `const`
- |
-LL + const VAL: /* Type */ = 5+1;
-LL ~ match x as i32 {
-LL ~ 0..=(VAL) => errors_only.push(x),
- |
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | 0..=(const { 5+1 }) => errors_only.push(x),
- | +++++++ +
-
-error[E0658]: inline-const in pattern position is experimental
- --> $DIR/range_pat_interactions2.rs:15:20
- |
-LL | y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
- | ^^^^^
- |
- = note: see issue #76001 for more information
- = help: add `#![feature(inline_const_pat)]` to the crate attributes to enable
- = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions3.rs b/tests/ui/half-open-range-patterns/range_pat_interactions3.rs
deleted file mode 100644
index 2f2778095cf49..0000000000000
--- a/tests/ui/half-open-range-patterns/range_pat_interactions3.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-fn main() {
- let mut first_or = Vec::::new();
- let mut or_two = Vec::::new();
- let mut range_from = Vec::::new();
- let mut bottom = Vec::::new();
-
- for x in -9 + 1..=(9 - 2) {
- match x as i32 {
- 8.. => bottom.push(x),
- 1 | -3..0 => first_or.push(x),
- y @ (0..5 | 6) => or_two.push(y),
- y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
- //~^ inline-const in pattern position is experimental
- y @ -5.. => range_from.push(y),
- y @ ..-7 => assert_eq!(y, -8),
- y => bottom.push(y),
- }
- }
-}
diff --git a/tests/ui/half-open-range-patterns/range_pat_interactions3.stderr b/tests/ui/half-open-range-patterns/range_pat_interactions3.stderr
deleted file mode 100644
index dc7dc0efa7a28..0000000000000
--- a/tests/ui/half-open-range-patterns/range_pat_interactions3.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0658]: inline-const in pattern position is experimental
- --> $DIR/range_pat_interactions3.rs:12:20
- |
-LL | y @ 0..const { 5 + 1 } => assert_eq!(y, 5),
- | ^^^^^
- |
- = note: see issue #76001 for more information
- = help: add `#![feature(inline_const_pat)]` to the crate attributes to enable
- = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
-
-error: aborting due to 1 previous error
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/infinite/infinite-autoderef.stderr b/tests/ui/infinite/infinite-autoderef.stderr
index 7d09af9a7d4af..7770cc8a72047 100644
--- a/tests/ui/infinite/infinite-autoderef.stderr
+++ b/tests/ui/infinite/infinite-autoderef.stderr
@@ -1,8 +1,8 @@
error[E0275]: overflow assigning `Box<_>` to `_`
- --> $DIR/infinite-autoderef.rs:16:13
+ --> $DIR/infinite-autoderef.rs:16:22
|
LL | x = Box::new(x);
- | ^^^^^^^^^^^
+ | ^
error: aborting due to 1 previous error
diff --git a/tests/ui/inline-const/collect-scopes-in-pat.rs b/tests/ui/inline-const/collect-scopes-in-pat.rs
deleted file mode 100644
index 16baf920f584e..0000000000000
--- a/tests/ui/inline-const/collect-scopes-in-pat.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-//@ compile-flags: -Zlint-mir
-//@ check-pass
-
-#![feature(inline_const_pat)]
-
-fn main() {
- match 1 {
- const {
- || match 0 {
- x => 0,
- };
- 0
- } => (),
- _ => (),
- }
-}
diff --git a/tests/ui/inline-const/const-block-pat-liveness.rs b/tests/ui/inline-const/const-block-pat-liveness.rs
deleted file mode 100644
index 26393a4f65b84..0000000000000
--- a/tests/ui/inline-const/const-block-pat-liveness.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-//! This test used to ICE because const blocks didn't have a body
-//! anymore, making a lot of logic very fragile around handling the
-//! HIR of a const block.
-//! https://github.com/rust-lang/rust/issues/125846
-
-//@ check-pass
-
-#![feature(inline_const_pat)]
-
-fn main() {
- match 0 {
- const {
- let a = 10_usize;
- *&a
- }
- | _ => {}
- }
-}
diff --git a/tests/ui/inline-const/const-match-pat-generic.rs b/tests/ui/inline-const/const-match-pat-generic.rs
deleted file mode 100644
index 889c015e9acb3..0000000000000
--- a/tests/ui/inline-const/const-match-pat-generic.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-#![feature(inline_const_pat)]
-
-// rust-lang/rust#82518: ICE with inline-const in match referencing const-generic parameter
-
-fn foo() {
- match 0 {
- const { V } => {},
- //~^ ERROR constant pattern cannot depend on generic parameters
- _ => {},
- }
-}
-
-const fn f(x: usize) -> usize {
- x + 1
-}
-
-fn bar() {
- match 0 {
- const { f(V) } => {},
- //~^ ERROR constant pattern cannot depend on generic parameters
- _ => {},
- }
-}
-
-fn main() {
- foo::<1>();
- bar::<1>();
-}
diff --git a/tests/ui/inline-const/const-match-pat-generic.stderr b/tests/ui/inline-const/const-match-pat-generic.stderr
deleted file mode 100644
index 7d9e1d9e407e1..0000000000000
--- a/tests/ui/inline-const/const-match-pat-generic.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0158]: constant pattern cannot depend on generic parameters
- --> $DIR/const-match-pat-generic.rs:7:9
- |
-LL | const { V } => {},
- | ^^^^^^^^^^^ `const` depends on a generic parameter
-
-error[E0158]: constant pattern cannot depend on generic parameters
- --> $DIR/const-match-pat-generic.rs:19:9
- |
-LL | const { f(V) } => {},
- | ^^^^^^^^^^^^^^ `const` depends on a generic parameter
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0158`.
diff --git a/tests/ui/inline-const/const-match-pat-inference.rs b/tests/ui/inline-const/const-match-pat-inference.rs
deleted file mode 100644
index 3d3533839bc79..0000000000000
--- a/tests/ui/inline-const/const-match-pat-inference.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-//@ check-pass
-
-#![feature(inline_const_pat)]
-
-fn main() {
- match 1u64 {
- 0 => (),
- const { 0 + 1 } => (),
- const { 2 - 1 } ..= const { u64::MAX } => (),
- }
-}
diff --git a/tests/ui/inline-const/const-match-pat-lifetime-err.rs b/tests/ui/inline-const/const-match-pat-lifetime-err.rs
deleted file mode 100644
index 7f450ebe6fccf..0000000000000
--- a/tests/ui/inline-const/const-match-pat-lifetime-err.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-#![feature(inline_const_pat)]
-
-use std::marker::PhantomData;
-
-#[derive(PartialEq, Eq)]
-pub struct InvariantRef<'a, T: ?Sized>(&'a T, PhantomData<&'a mut &'a T>);
-
-#[derive(PartialEq, Eq)]
-pub struct CovariantRef<'a, T: ?Sized>(&'a T);
-
-impl<'a, T: ?Sized> InvariantRef<'a, T> {
- pub const fn new(r: &'a T) -> Self {
- InvariantRef(r, PhantomData)
- }
-}
-
-impl<'a> InvariantRef<'a, ()> {
- pub const NEW: Self = InvariantRef::new(&());
-}
-
-impl<'a> CovariantRef<'a, ()> {
- pub const NEW: Self = CovariantRef(&());
-}
-
-fn match_invariant_ref<'a>() {
- let y = ();
- match InvariantRef::new(&y) {
- //~^ ERROR `y` does not live long enough [E0597]
- const { InvariantRef::<'a>::NEW } => (),
- }
-}
-
-fn match_covariant_ref<'a>() {
- // Unclear if we should error here (should we be able to subtype the type of
- // `y.0`), but using the associated const directly in the pattern also
- // errors.
- let y: (CovariantRef<'static, _>,) = (CovariantRef(&()),);
- //~^ ERROR lifetime may not live long enough
- match y.0 {
- const { CovariantRef::<'a>::NEW } => (),
- }
-}
-
-fn main() {
- match_invariant_ref();
- match_covariant_ref();
-}
diff --git a/tests/ui/inline-const/const-match-pat-lifetime-err.stderr b/tests/ui/inline-const/const-match-pat-lifetime-err.stderr
deleted file mode 100644
index 7eea1846057af..0000000000000
--- a/tests/ui/inline-const/const-match-pat-lifetime-err.stderr
+++ /dev/null
@@ -1,28 +0,0 @@
-error[E0597]: `y` does not live long enough
- --> $DIR/const-match-pat-lifetime-err.rs:27:29
- |
-LL | fn match_invariant_ref<'a>() {
- | -- lifetime `'a` defined here
-LL | let y = ();
- | - binding `y` declared here
-LL | match InvariantRef::new(&y) {
- | ^^ borrowed value does not live long enough
-LL |
-LL | const { InvariantRef::<'a>::NEW } => (),
- | ----------------------- using this value as a constant requires that `y` is borrowed for `'a`
-LL | }
-LL | }
- | - `y` dropped here while still borrowed
-
-error: lifetime may not live long enough
- --> $DIR/const-match-pat-lifetime-err.rs:37:12
- |
-LL | fn match_covariant_ref<'a>() {
- | -- lifetime `'a` defined here
-...
-LL | let y: (CovariantRef<'static, _>,) = (CovariantRef(&()),);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/tests/ui/inline-const/const-match-pat-lifetime.rs b/tests/ui/inline-const/const-match-pat-lifetime.rs
deleted file mode 100644
index 7f1011ea2400d..0000000000000
--- a/tests/ui/inline-const/const-match-pat-lifetime.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-//@ run-pass
-
-#![feature(inline_const_pat)]
-
-use std::marker::PhantomData;
-
-// rust-lang/rust#78174: ICE: "cannot convert ReErased to a region vid"
-fn issue_78174() {
- match "foo" {
- const { concat!("fo", "o") } => (),
- _ => unreachable!(),
- }
-}
-
-#[derive(PartialEq, Eq)]
-pub struct InvariantRef<'a, T: ?Sized>(&'a T, PhantomData<&'a mut &'a T>);
-
-impl<'a, T: ?Sized> InvariantRef<'a, T> {
- pub const fn new(r: &'a T) -> Self {
- InvariantRef(r, PhantomData)
- }
-}
-
-fn match_invariant_ref<'a>() {
- match const { InvariantRef::<'a, _>::new(&()) } {
- const { InvariantRef::<'a, ()>::new(&()) } => {
- }
- }
-}
-
-fn main() {
- issue_78174();
- match_invariant_ref();
-}
diff --git a/tests/ui/inline-const/const-match-pat-range.rs b/tests/ui/inline-const/const-match-pat-range.rs
deleted file mode 100644
index 7202c0c04521e..0000000000000
--- a/tests/ui/inline-const/const-match-pat-range.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-//@ build-pass
-
-#![feature(inline_const_pat)]
-
-fn main() {
- const N: u32 = 10;
- let x: u32 = 3;
-
- match x {
- 1 ..= const { N + 1 } => {},
- _ => {},
- }
-
- match x {
- const { N - 1 } ..= 10 => {},
- _ => {},
- }
-
- match x {
- const { N - 1 } ..= const { N + 1 } => {},
- _ => {},
- }
-
- match x {
- .. const { N + 1 } => {},
- _ => {},
- }
-
- match x {
- const { N - 1 } .. => {},
- _ => {},
- }
-
- match x {
- ..= const { N + 1 } => {},
- _ => {}
- }
-}
diff --git a/tests/ui/inline-const/const-match-pat.rs b/tests/ui/inline-const/const-match-pat.rs
deleted file mode 100644
index 1580ef258129e..0000000000000
--- a/tests/ui/inline-const/const-match-pat.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-//@ run-pass
-
-#![feature(inline_const_pat)]
-const MMIO_BIT1: u8 = 4;
-const MMIO_BIT2: u8 = 5;
-
-fn main() {
- let s = match read_mmio() {
- 0 => "FOO",
- const { 1 << MMIO_BIT1 } => "BAR",
- const { 1 << MMIO_BIT2 } => "BAZ",
- _ => unreachable!(),
- };
-
- assert_eq!("BAZ", s);
-}
-
-fn read_mmio() -> i32 {
- 1 << 5
-}
diff --git a/tests/ui/inline-const/in-pat-recovery.rs b/tests/ui/inline-const/in-pat-recovery.rs
new file mode 100644
index 0000000000000..0d912af09811c
--- /dev/null
+++ b/tests/ui/inline-const/in-pat-recovery.rs
@@ -0,0 +1,11 @@
+// While `feature(inline_const_pat)` has been removed from the
+// compiler, we should still make sure that the resulting error
+// message is acceptable.
+fn main() {
+ match 1 {
+ const { 1 + 7 } => {}
+ //~^ `inline_const_pat` has been removed
+ 2 => {}
+ _ => {}
+ }
+}
diff --git a/tests/ui/inline-const/in-pat-recovery.stderr b/tests/ui/inline-const/in-pat-recovery.stderr
new file mode 100644
index 0000000000000..e1f2e681e77f4
--- /dev/null
+++ b/tests/ui/inline-const/in-pat-recovery.stderr
@@ -0,0 +1,10 @@
+error: `inline_const_pat` has been removed
+ --> $DIR/in-pat-recovery.rs:6:15
+ |
+LL | const { 1 + 7 } => {}
+ | ^^^^^^^^^
+ |
+ = help: use a named `const`-item or an `if`-guard instead
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/inline-const/pat-match-fndef.rs b/tests/ui/inline-const/pat-match-fndef.rs
deleted file mode 100644
index 013a4a6756102..0000000000000
--- a/tests/ui/inline-const/pat-match-fndef.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-#![feature(inline_const_pat)]
-
-fn uwu() {}
-
-fn main() {
- let x = [];
- match x[123] {
- const { uwu } => {}
- //~^ ERROR `fn() {uwu}` cannot be used in patterns
- _ => {}
- }
-}
diff --git a/tests/ui/inline-const/pat-match-fndef.stderr b/tests/ui/inline-const/pat-match-fndef.stderr
deleted file mode 100644
index 220437a0491af..0000000000000
--- a/tests/ui/inline-const/pat-match-fndef.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-error: fn item `fn() {uwu}` cannot be used in patterns
- --> $DIR/pat-match-fndef.rs:8:9
- |
-LL | const { uwu } => {}
- | ^^^^^^^^^^^^^ fn item can't be used in patterns
-
-error: aborting due to 1 previous error
-
diff --git a/tests/ui/inline-const/pat-unsafe-err.rs b/tests/ui/inline-const/pat-unsafe-err.rs
deleted file mode 100644
index b906def702950..0000000000000
--- a/tests/ui/inline-const/pat-unsafe-err.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-#![feature(inline_const_pat)]
-
-const unsafe fn require_unsafe() -> usize {
- 1
-}
-
-fn main() {
- match () {
- const {
- require_unsafe();
- //~^ ERROR [E0133]
- } => (),
- }
-
- match 1 {
- const {
- require_unsafe()
- //~^ ERROR [E0133]
- }..=4 => (),
- _ => (),
- }
-}
diff --git a/tests/ui/inline-const/pat-unsafe-err.stderr b/tests/ui/inline-const/pat-unsafe-err.stderr
deleted file mode 100644
index 786c7f31ccce1..0000000000000
--- a/tests/ui/inline-const/pat-unsafe-err.stderr
+++ /dev/null
@@ -1,19 +0,0 @@
-error[E0133]: call to unsafe function `require_unsafe` is unsafe and requires unsafe function or block
- --> $DIR/pat-unsafe-err.rs:10:13
- |
-LL | require_unsafe();
- | ^^^^^^^^^^^^^^^^ call to unsafe function
- |
- = note: consult the function's documentation for information on how to avoid undefined behavior
-
-error[E0133]: call to unsafe function `require_unsafe` is unsafe and requires unsafe function or block
- --> $DIR/pat-unsafe-err.rs:17:13
- |
-LL | require_unsafe()
- | ^^^^^^^^^^^^^^^^ call to unsafe function
- |
- = note: consult the function's documentation for information on how to avoid undefined behavior
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0133`.
diff --git a/tests/ui/inline-const/pat-unsafe.rs b/tests/ui/inline-const/pat-unsafe.rs
deleted file mode 100644
index 4b05f3a1cddd8..0000000000000
--- a/tests/ui/inline-const/pat-unsafe.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-//@ check-pass
-
-#![warn(unused_unsafe)]
-#![feature(inline_const_pat)]
-
-const unsafe fn require_unsafe() -> usize {
- 1
-}
-
-fn main() {
- unsafe {
- match () {
- const {
- require_unsafe();
- unsafe {}
- //~^ WARNING unnecessary `unsafe` block
- } => (),
- }
-
- match 1 {
- const {
- unsafe {}
- //~^ WARNING unnecessary `unsafe` block
- require_unsafe()
- }..=4 => (),
- _ => (),
- }
- }
-}
diff --git a/tests/ui/inline-const/pat-unsafe.stderr b/tests/ui/inline-const/pat-unsafe.stderr
deleted file mode 100644
index 59460271ac010..0000000000000
--- a/tests/ui/inline-const/pat-unsafe.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-warning: unnecessary `unsafe` block
- --> $DIR/pat-unsafe.rs:15:17
- |
-LL | unsafe {}
- | ^^^^^^ unnecessary `unsafe` block
- |
-note: the lint level is defined here
- --> $DIR/pat-unsafe.rs:3:9
- |
-LL | #![warn(unused_unsafe)]
- | ^^^^^^^^^^^^^
-
-warning: unnecessary `unsafe` block
- --> $DIR/pat-unsafe.rs:22:17
- |
-LL | unsafe {}
- | ^^^^^^ unnecessary `unsafe` block
-
-warning: 2 warnings emitted
-
diff --git a/tests/ui/lint/dead-code/anon-const-in-pat.rs b/tests/ui/lint/dead-code/anon-const-in-pat.rs
deleted file mode 100644
index e2d8c90edcca2..0000000000000
--- a/tests/ui/lint/dead-code/anon-const-in-pat.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-//@ check-pass
-#![feature(inline_const_pat)]
-#![deny(dead_code)]
-
-const fn one() -> i32 {
- 1
-}
-
-const fn two() -> i32 {
- 2
-}
-
-const fn three() -> i32 {
- 3
-}
-
-fn inline_const() {
- // rust-lang/rust#78171: dead_code lint triggers even though function is used in const pattern
- match 1 {
- const { one() } => {}
- _ => {}
- }
-}
-
-fn inline_const_range() {
- match 1 {
- 1 ..= const { two() } => {}
- _ => {}
- }
-}
-
-struct S;
-
-fn const_generic_arg() {
- match S::<3> {
- S::<{three()}> => {}
- }
-}
-
-fn main() {
- inline_const();
- inline_const_range();
- const_generic_arg();
-}
diff --git a/tests/ui/match/issue-112438.rs b/tests/ui/match/issue-112438.rs
deleted file mode 100644
index b2febe2921054..0000000000000
--- a/tests/ui/match/issue-112438.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-//@ run-pass
-#![feature(inline_const_pat)]
-#![allow(dead_code)]
-fn foo() {
- match 0 {
- const { 1 << 5 } | _ => {}
- }
-}
-
-fn main() {}
diff --git a/tests/ui/match/validate-range-endpoints.rs b/tests/ui/match/validate-range-endpoints.rs
index 46d4239886d3c..678cedf016b9e 100644
--- a/tests/ui/match/validate-range-endpoints.rs
+++ b/tests/ui/match/validate-range-endpoints.rs
@@ -1,4 +1,3 @@
-#![feature(inline_const_pat)]
#![allow(overlapping_range_endpoints)]
fn main() {
@@ -17,8 +16,6 @@ fn main() {
// There isn't really a way to detect these
1..=TOO_BIG => {}
//~^ ERROR lower range bound must be less than or equal to upper
- 1..=const { 256 } => {}
- //~^ ERROR lower range bound must be less than or equal to upper
_ => {}
}
diff --git a/tests/ui/match/validate-range-endpoints.stderr b/tests/ui/match/validate-range-endpoints.stderr
index 2d0538804a378..6a8a81a1cc645 100644
--- a/tests/ui/match/validate-range-endpoints.stderr
+++ b/tests/ui/match/validate-range-endpoints.stderr
@@ -1,59 +1,53 @@
error: literal out of range for `u8`
- --> $DIR/validate-range-endpoints.rs:7:12
+ --> $DIR/validate-range-endpoints.rs:6:12
|
LL | 1..257 => {}
| ^^^ this value does not fit into the type `u8` whose range is `0..=255`
error: literal out of range for `u8`
- --> $DIR/validate-range-endpoints.rs:9:13
+ --> $DIR/validate-range-endpoints.rs:8:13
|
LL | 1..=256 => {}
| ^^^ this value does not fit into the type `u8` whose range is `0..=255`
error[E0030]: lower range bound must be less than or equal to upper
- --> $DIR/validate-range-endpoints.rs:18:9
+ --> $DIR/validate-range-endpoints.rs:17:9
|
LL | 1..=TOO_BIG => {}
| ^^^^^^^^^^^ lower bound larger than upper bound
-error[E0030]: lower range bound must be less than or equal to upper
- --> $DIR/validate-range-endpoints.rs:20:9
- |
-LL | 1..=const { 256 } => {}
- | ^^^^^^^^^^^^^^^^^ lower bound larger than upper bound
-
error: literal out of range for `u64`
- --> $DIR/validate-range-endpoints.rs:26:32
+ --> $DIR/validate-range-endpoints.rs:23:32
|
LL | 10000000000000000000..=99999999999999999999 => {}
| ^^^^^^^^^^^^^^^^^^^^ this value does not fit into the type `u64` whose range is `0..=18446744073709551615`
error: literal out of range for `i8`
- --> $DIR/validate-range-endpoints.rs:32:12
+ --> $DIR/validate-range-endpoints.rs:29:12
|
LL | 0..129 => {}
| ^^^ this value does not fit into the type `i8` whose range is `-128..=127`
error: literal out of range for `i8`
- --> $DIR/validate-range-endpoints.rs:34:13
+ --> $DIR/validate-range-endpoints.rs:31:13
|
LL | 0..=128 => {}
| ^^^ this value does not fit into the type `i8` whose range is `-128..=127`
error: literal out of range for `i8`
- --> $DIR/validate-range-endpoints.rs:36:9
+ --> $DIR/validate-range-endpoints.rs:33:9
|
LL | -129..0 => {}
| ^^^^ this value does not fit into the type `i8` whose range is `-128..=127`
error: literal out of range for `i8`
- --> $DIR/validate-range-endpoints.rs:38:9
+ --> $DIR/validate-range-endpoints.rs:35:9
|
LL | -10000..=-20 => {}
| ^^^^^^ this value does not fit into the type `i8` whose range is `-128..=127`
error[E0004]: non-exhaustive patterns: `i8::MIN..=-17_i8` and `1_i8..=i8::MAX` not covered
- --> $DIR/validate-range-endpoints.rs:49:11
+ --> $DIR/validate-range-endpoints.rs:46:11
|
LL | match 0i8 {
| ^^^ patterns `i8::MIN..=-17_i8` and `1_i8..=i8::MAX` not covered
@@ -66,7 +60,7 @@ LL + i8::MIN..=-17_i8 | 1_i8..=i8::MAX => todo!()
|
error[E0004]: non-exhaustive patterns: `i8::MIN..=-17_i8` not covered
- --> $DIR/validate-range-endpoints.rs:53:11
+ --> $DIR/validate-range-endpoints.rs:50:11
|
LL | match 0i8 {
| ^^^ pattern `i8::MIN..=-17_i8` not covered
@@ -78,7 +72,7 @@ LL ~ -10000.. => {},
LL + i8::MIN..=-17_i8 => todo!()
|
-error: aborting due to 11 previous errors
+error: aborting due to 10 previous errors
Some errors have detailed explanations: E0004, E0030.
For more information about an error, try `rustc --explain E0004`.
diff --git a/tests/ui/occurs-check-2.rs b/tests/ui/occurs-check-2.rs
index 1ec460a873527..9289a8e870a18 100644
--- a/tests/ui/occurs-check-2.rs
+++ b/tests/ui/occurs-check-2.rs
@@ -4,6 +4,6 @@ fn main() {
let g;
g = f;
- f = Box::new(g);
//~^ ERROR overflow assigning `Box<_>` to `_`
+ f = Box::new(g);
}
diff --git a/tests/ui/occurs-check-2.stderr b/tests/ui/occurs-check-2.stderr
index 54307a6c5474f..5f296967f30d8 100644
--- a/tests/ui/occurs-check-2.stderr
+++ b/tests/ui/occurs-check-2.stderr
@@ -1,8 +1,8 @@
error[E0275]: overflow assigning `Box<_>` to `_`
- --> $DIR/occurs-check-2.rs:7:9
+ --> $DIR/occurs-check-2.rs:6:9
|
-LL | f = Box::new(g);
- | ^^^^^^^^^^^
+LL | g = f;
+ | ^
error: aborting due to 1 previous error
diff --git a/tests/ui/occurs-check-3.stderr b/tests/ui/occurs-check-3.stderr
index 77b67ec1a62c6..eb05c94957c98 100644
--- a/tests/ui/occurs-check-3.stderr
+++ b/tests/ui/occurs-check-3.stderr
@@ -1,8 +1,8 @@
error[E0275]: overflow assigning `Clam<_>` to `_`
- --> $DIR/occurs-check-3.rs:6:9
+ --> $DIR/occurs-check-3.rs:6:17
|
LL | c = Clam::A(c);
- | ^^^^^^^^^^
+ | ^
error: aborting due to 1 previous error
diff --git a/tests/ui/occurs-check.stderr b/tests/ui/occurs-check.stderr
index 30468d68cbd05..ea7c541abc135 100644
--- a/tests/ui/occurs-check.stderr
+++ b/tests/ui/occurs-check.stderr
@@ -1,8 +1,8 @@
error[E0275]: overflow assigning `Box<_>` to `_`
- --> $DIR/occurs-check.rs:3:9
+ --> $DIR/occurs-check.rs:3:18
|
LL | f = Box::new(f);
- | ^^^^^^^^^^^
+ | ^
error: aborting due to 1 previous error
diff --git a/tests/ui/parser/issues/issue-24375.stderr b/tests/ui/parser/issues/issue-24375.stderr
index 2af57a52035c3..e96c004fb3516 100644
--- a/tests/ui/parser/issues/issue-24375.stderr
+++ b/tests/ui/parser/issues/issue-24375.stderr
@@ -16,10 +16,6 @@ LL + const VAL: /* Type */ = tmp[0];
LL ~ match z {
LL ~ VAL => {}
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { tmp[0] } => {}
- | +++++++ +
error: aborting due to 1 previous error
diff --git a/tests/ui/parser/recover/recover-pat-exprs.stderr b/tests/ui/parser/recover/recover-pat-exprs.stderr
index dcc1945d569c0..69bc5107ccafe 100644
--- a/tests/ui/parser/recover/recover-pat-exprs.stderr
+++ b/tests/ui/parser/recover/recover-pat-exprs.stderr
@@ -17,10 +17,6 @@ LL ~ match 0 {
LL | x => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.y } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:6:9
@@ -42,10 +38,6 @@ LL | x => (),
LL | x.y => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.0 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:7:9
@@ -68,10 +60,6 @@ LL | x.y => (),
LL | x.0 => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x._0 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:8:9
@@ -94,10 +82,6 @@ LL | x => (),
LL | x._0 => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.0.1 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:9:9
@@ -120,10 +104,6 @@ LL | x => (),
LL | x.0.1 => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.4.y.17.__z } => (),
- | +++++++ +
error: expected one of `:`, `;`, `=`, `@`, or `|`, found `.`
--> $DIR/recover-pat-exprs.rs:12:12
@@ -173,10 +153,6 @@ LL + const VAL: /* Type */ = x[0];
LL ~ match 0 {
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x[0] } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:24:9
@@ -197,10 +173,6 @@ LL ~ match 0 {
LL | x[0] => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x[..] } => (),
- | +++++++ +
error: expected one of `:`, `;`, `=`, `@`, or `|`, found `[`
--> $DIR/recover-pat-exprs.rs:27:12
@@ -247,10 +219,6 @@ LL + const VAL: /* Type */ = x.f();
LL ~ match 0 {
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.f() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:38:9
@@ -271,10 +239,6 @@ LL ~ match 0 {
LL | x.f() => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x._f() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:39:9
@@ -296,10 +260,6 @@ LL | x.f() => (),
LL | x._f() => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x? } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:40:9
@@ -322,10 +282,6 @@ LL | x._f() => (),
LL | x? => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { ().f() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:41:9
@@ -348,10 +304,6 @@ LL | x.f() => (),
LL | ().f() => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { (0, x)?.f() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:42:9
@@ -374,10 +326,6 @@ LL | x.f() => (),
LL | (0, x)?.f() => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.f().g() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:43:9
@@ -400,10 +348,6 @@ LL | x.f() => (),
LL | x.f().g() => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { 0.f()?.g()?? } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:50:9
@@ -423,10 +367,6 @@ LL + const VAL: /* Type */ = x as usize;
LL ~ match 0 {
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x as usize } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:51:9
@@ -447,10 +387,6 @@ LL ~ match 0 {
LL | x as usize => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { 0 as usize } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:52:9
@@ -472,10 +408,6 @@ LL | x as usize => (),
LL | 0 as usize => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.f().0.4 as f32 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:59:9
@@ -495,10 +427,6 @@ LL + const VAL: /* Type */ = 1 + 1;
LL ~ match 0 {
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { 1 + 1 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:60:9
@@ -519,10 +447,6 @@ LL ~ match 0 {
LL | 1 + 1 => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { (1 + 2) * 3 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:63:9
@@ -545,10 +469,6 @@ LL | 1 + 1 => (),
LL |
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.0 > 2 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:64:9
@@ -571,10 +491,6 @@ LL | 1 + 1 => (),
LL | x.0 > 2 => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { x.0 == 2 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:69:13
@@ -594,10 +510,6 @@ LL + const VAL: /* Type */ = y.0 > 2;
LL ~ match (0, 0) {
LL ~ (x, VAL) if x != 0 => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | (x, const { y.0 > 2 }) if x != 0 => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:70:13
@@ -618,10 +530,6 @@ LL ~ match (0, 0) {
LL | (x, y.0 > 2) if x != 0 => (),
LL ~ (x, VAL) if x != 0 || x != 1 => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | (x, const { y.0 > 2 }) if x != 0 || x != 1 => (),
- | +++++++ +
error: left-hand side of `@` must be a binding
--> $DIR/recover-pat-exprs.rs:83:9
@@ -658,10 +566,6 @@ LL + const VAL: /* Type */ = u8::MAX.abs();
LL ~ match u8::MAX {
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { u8::MAX.abs() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:86:17
@@ -684,10 +588,6 @@ LL | u8::MAX.abs() => (),
LL |
LL ~ z @ w @ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | z @ w @ const { v.u() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:88:9
@@ -710,10 +610,6 @@ LL | u8::MAX.abs() => (),
LL |
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { y.ilog(3) } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:90:9
@@ -736,10 +632,6 @@ LL | u8::MAX.abs() => (),
LL |
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { n + 1 } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:92:10
@@ -762,10 +654,6 @@ LL | u8::MAX.abs() => (),
LL |
LL ~ (VAL) => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | (const { "".f() + 14 * 8 }) => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:95:9
@@ -788,10 +676,6 @@ LL | u8::MAX.abs() => (),
LL | 0 | ((1) | 2) | 3 => (),
LL ~ VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { f?() } => (),
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-exprs.rs:101:9
diff --git a/tests/ui/parser/recover/recover-pat-issues.stderr b/tests/ui/parser/recover/recover-pat-issues.stderr
index 0c65b16dd951f..ec7fcda3497f4 100644
--- a/tests/ui/parser/recover/recover-pat-issues.stderr
+++ b/tests/ui/parser/recover/recover-pat-issues.stderr
@@ -16,10 +16,6 @@ LL + const VAL: /* Type */ = "hi".to_owned();
LL ~ match foo {
LL ~ Foo(VAL) => true,
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | Foo(const { "hi".to_owned() }) => true,
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-issues.rs:14:20
@@ -39,10 +35,6 @@ LL + const BAZ: /* Type */ = "hi".to_owned();
LL ~ match bar {
LL ~ Bar { baz: BAZ } => true,
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | Bar { baz: const { "hi".to_owned() } } => true,
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-issues.rs:25:11
@@ -62,10 +54,6 @@ LL + const VAL: /* Type */ = "foo".to_string();
LL ~ match foo.as_slice() {
LL ~ &[VAL] => {}
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | &[const { "foo".to_string() }] => {}
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-issues.rs:36:17
@@ -79,10 +67,6 @@ help: consider extracting the expression into a `const`
LL + const VAL: /* Type */ = MAGIC.0 as usize;
LL ~ if let Some(VAL) = None:: {}
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | if let Some(const { MAGIC.0 as usize }) = None:: {}
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-issues.rs:41:13
@@ -96,10 +80,6 @@ help: consider extracting the expression into a `const`
LL + const VAL: /* Type */ = -1.some(4);
LL ~ if let (VAL) = (0, Some(4)) {}
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | if let (const { -1.some(4) }) = (0, Some(4)) {}
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-issues.rs:44:13
@@ -113,10 +93,6 @@ help: consider extracting the expression into a `const`
LL + const VAL: /* Type */ = -1.Some(4);
LL ~ if let (VAL) = (0, Some(4)) {}
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | if let (const { -1.Some(4) }) = (0, Some(4)) {}
- | +++++++ +
error: aborting due to 6 previous errors
diff --git a/tests/ui/parser/recover/recover-pat-lets.stderr b/tests/ui/parser/recover/recover-pat-lets.stderr
index 55252729d7baa..ab79e4ebcaebe 100644
--- a/tests/ui/parser/recover/recover-pat-lets.stderr
+++ b/tests/ui/parser/recover/recover-pat-lets.stderr
@@ -34,10 +34,6 @@ help: consider extracting the expression into a `const`
LL + const VAL: /* Type */ = 1 + 1;
LL ~ let Some(VAL) = x else {
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | let Some(const { 1 + 1 }) = x else {
- | +++++++ +
error: expected a pattern, found an expression
--> $DIR/recover-pat-lets.rs:17:17
@@ -51,10 +47,6 @@ help: consider extracting the expression into a `const`
LL + const VAL: /* Type */ = 1 + 1;
LL ~ if let Some(VAL) = x {
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | if let Some(const { 1 + 1 }) = x {
- | +++++++ +
error: aborting due to 5 previous errors
diff --git a/tests/ui/parser/recover/recover-pat-ranges.stderr b/tests/ui/parser/recover/recover-pat-ranges.stderr
index e8f323596d0fa..6c17182618b5e 100644
--- a/tests/ui/parser/recover/recover-pat-ranges.stderr
+++ b/tests/ui/parser/recover/recover-pat-ranges.stderr
@@ -98,10 +98,6 @@ LL | 0..=1 => (),
LL |
LL ~ ..=VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | ..=const { 1 + 2 } => (),
- | +++++++ +
error: expected a pattern range bound, found an expression
--> $DIR/recover-pat-ranges.rs:15:10
@@ -119,10 +115,6 @@ LL | 0..=1 => (),
LL |
LL ~ (VAL).. => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | (const { -4 + 0 }).. => (),
- | +++++++ +
error: expected a pattern range bound, found an expression
--> $DIR/recover-pat-ranges.rs:18:10
@@ -140,10 +132,6 @@ LL | 0..=1 => (),
LL |
LL ~ (VAL)...1 * 2 => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | (const { 1 + 4 })...1 * 2 => (),
- | +++++++ +
error: expected a pattern range bound, found an expression
--> $DIR/recover-pat-ranges.rs:18:19
@@ -161,10 +149,6 @@ LL | 0..=1 => (),
LL |
LL ~ (1 + 4)...VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | (1 + 4)...const { 1 * 2 } => (),
- | +++++++ +
error: expected a pattern range bound, found an expression
--> $DIR/recover-pat-ranges.rs:24:9
@@ -182,10 +166,6 @@ LL | 0..=1 => (),
LL |
LL ~ VAL..="y".z() => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | const { 0.x() }..="y".z() => (),
- | +++++++ +
error: expected a pattern range bound, found an expression
--> $DIR/recover-pat-ranges.rs:24:17
@@ -203,10 +183,6 @@ LL | 0..=1 => (),
LL |
LL ~ 0.x()..=VAL => (),
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | 0.x()..=const { "y".z() } => (),
- | +++++++ +
warning: `...` range patterns are deprecated
--> $DIR/recover-pat-ranges.rs:18:16
diff --git a/tests/ui/parser/recover/recover-pat-wildcards.stderr b/tests/ui/parser/recover/recover-pat-wildcards.stderr
index f939e5133700f..ebc1cbf7d591e 100644
--- a/tests/ui/parser/recover/recover-pat-wildcards.stderr
+++ b/tests/ui/parser/recover/recover-pat-wildcards.stderr
@@ -84,10 +84,6 @@ LL + const VAL: /* Type */ = 2 + _;
LL ~ match 9 {
LL ~ 4..=(VAL) => ()
|
-help: consider wrapping the expression in an inline `const` (requires `#![feature(inline_const_pat)]`)
- |
-LL | 4..=(const { 2 + _ }) => ()
- | +++++++ +
error: aborting due to 11 previous errors
diff --git a/tests/ui/pattern/non-structural-match-types.rs b/tests/ui/pattern/non-structural-match-types.rs
index dde44dfee9c3d..5869767c936ba 100644
--- a/tests/ui/pattern/non-structural-match-types.rs
+++ b/tests/ui/pattern/non-structural-match-types.rs
@@ -1,14 +1,29 @@
//@ edition:2021
-
-#![allow(unreachable_code)]
#![feature(const_async_blocks)]
-#![feature(inline_const_pat)]
-fn main() {
- match loop {} {
- const { || {} } => {} //~ ERROR cannot be used in patterns
+struct AnyOption(T);
+impl AnyOption {
+ const NONE: Option = None;
+}
+
+fn uwu() {}
+fn defines() {
+ match Some(uwu) {
+ AnyOption::<_>::NONE => {}
+ //~^ ERROR constant of non-structural type
+ _ => {}
}
- match loop {} {
- const { async {} } => {} //~ ERROR cannot be used in patterns
+
+ match Some(|| {}) {
+ AnyOption::<_>::NONE => {}
+ //~^ ERROR constant of non-structural type
+ _ => {}
+ }
+
+ match Some(async {}) {
+ AnyOption::<_>::NONE => {}
+ //~^ ERROR constant of non-structural type
+ _ => {}
}
}
+fn main() {}
diff --git a/tests/ui/pattern/non-structural-match-types.stderr b/tests/ui/pattern/non-structural-match-types.stderr
index 3588751bf6687..da675a9f3ff5a 100644
--- a/tests/ui/pattern/non-structural-match-types.stderr
+++ b/tests/ui/pattern/non-structural-match-types.stderr
@@ -1,14 +1,42 @@
-error: closure `{closure@$DIR/non-structural-match-types.rs:9:17: 9:19}` cannot be used in patterns
- --> $DIR/non-structural-match-types.rs:9:9
+error: constant of non-structural type `Option` in a pattern
+ --> $DIR/non-structural-match-types.rs:12:9
+ |
+LL | impl AnyOption {
+ | --------------------
+LL | const NONE: Option = None;
+ | --------------------- constant defined here
+...
+LL | AnyOption::<_>::NONE => {}
+ | ^^^^^^^^^^^^^^^^^^^^ constant of non-structural type
|
-LL | const { || {} } => {}
- | ^^^^^^^^^^^^^^^ closure can't be used in patterns
+ = note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
-error: `async` block `{async block@$DIR/non-structural-match-types.rs:12:17: 12:22}` cannot be used in patterns
- --> $DIR/non-structural-match-types.rs:12:9
+error: constant of non-structural type `Option<{closure@$DIR/non-structural-match-types.rs:17:16: 17:18}>` in a pattern
+ --> $DIR/non-structural-match-types.rs:18:9
+ |
+LL | impl AnyOption {
+ | --------------------
+LL | const NONE: Option = None;
+ | --------------------- constant defined here
+...
+LL | AnyOption::<_>::NONE => {}
+ | ^^^^^^^^^^^^^^^^^^^^ constant of non-structural type
+ |
+ = note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
+
+error: constant of non-structural type `Option<{async block@$DIR/non-structural-match-types.rs:23:16: 23:21}>` in a pattern
+ --> $DIR/non-structural-match-types.rs:24:9
+ |
+LL | impl AnyOption {
+ | --------------------
+LL | const NONE: Option = None;
+ | --------------------- constant defined here
+...
+LL | AnyOption::<_>::NONE => {}
+ | ^^^^^^^^^^^^^^^^^^^^ constant of non-structural type
|
-LL | const { async {} } => {}
- | ^^^^^^^^^^^^^^^^^^ `async` block can't be used in patterns
+ = note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
+ = note: `ResumeTy` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
diff --git a/tests/ui/traits/mutual-recursion-issue-75860.stderr b/tests/ui/traits/mutual-recursion-issue-75860.stderr
index 272c56301bc84..9e8eb1adb1111 100644
--- a/tests/ui/traits/mutual-recursion-issue-75860.stderr
+++ b/tests/ui/traits/mutual-recursion-issue-75860.stderr
@@ -2,7 +2,7 @@ error[E0275]: overflow assigning `_` to `Option<_>`
--> $DIR/mutual-recursion-issue-75860.rs:9:33
|
LL | let left = |o_a: Option<_>| o_a.unwrap();
- | ^^^
+ | ^^^^^^^^^^^^
error: aborting due to 1 previous error
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.rs b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.rs
index 19986247d40df..53b7667aa9f1d 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.rs
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.rs
@@ -1,9 +1,10 @@
#![feature(type_alias_impl_trait)]
-//@ known-bug: #109268
type Foo = impl Fn() -> Foo;
+#[define_opaque(Foo)]
fn crash(x: Foo) -> Foo {
+ //~^ ERROR overflow evaluating the requirement `>::Output == Foo`
x
}
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.stderr b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.stderr
index ad96a0eeb87de..ee8922b673e2f 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.stderr
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-1.stderr
@@ -1,10 +1,9 @@
-error: unconstrained opaque type
- --> $DIR/type-alias-impl-trait-with-cycle-error-1.rs:4:12
+error[E0275]: overflow evaluating the requirement `>::Output == Foo`
+ --> $DIR/type-alias-impl-trait-with-cycle-error-1.rs:6:21
|
-LL | type Foo = impl Fn() -> Foo;
- | ^^^^^^^^^^^^^^^^
- |
- = note: `Foo` must be used in combination with a concrete type within the same crate
+LL | fn crash(x: Foo) -> Foo {
+ | ^^^
error: aborting due to 1 previous error
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.rs b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.rs
index 761cc83af5106..d0c62d290698e 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.rs
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.rs
@@ -1,13 +1,13 @@
#![feature(type_alias_impl_trait)]
-//@ known-bug: #109268
pub trait Bar {
type Item;
}
type Foo = impl Bar;
-
+#[define_opaque(Foo)]
fn crash(x: Foo) -> Foo {
+ //~^ ERROR overflow evaluating the requirement `>::Item == Foo`
x
}
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.stderr b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.stderr
index e5bb8163a8113..40bd6517c06d8 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.stderr
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-2.stderr
@@ -1,10 +1,9 @@
-error: unconstrained opaque type
- --> $DIR/type-alias-impl-trait-with-cycle-error-2.rs:8:12
+error[E0275]: overflow evaluating the requirement `>::Item == Foo`
+ --> $DIR/type-alias-impl-trait-with-cycle-error-2.rs:9:21
|
-LL | type Foo = impl Bar;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: `Foo` must be used in combination with a concrete type within the same crate
+LL | fn crash(x: Foo) -> Foo {
+ | ^^^
error: aborting due to 1 previous error
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.rs b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.rs
index 52942afd63922..de3d23b83a293 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.rs
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.rs
@@ -1,9 +1,9 @@
#![feature(type_alias_impl_trait)]
-//@ known-bug: #109268
type Foo<'a> = impl Fn() -> Foo<'a>;
-
+#[define_opaque(Foo)]
fn crash<'a>(_: &'a (), x: Foo<'a>) -> Foo<'a> {
+ //~^ ERROR overflow evaluating the requirement ` as FnOnce<()>>::Output == Foo<'a>`
x
}
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.stderr b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.stderr
index 157310bf62366..f9e26fde1bda8 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.stderr
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error-3.stderr
@@ -1,10 +1,9 @@
-error: unconstrained opaque type
- --> $DIR/type-alias-impl-trait-with-cycle-error-3.rs:4:16
+error[E0275]: overflow evaluating the requirement ` as FnOnce<()>>::Output == Foo<'a>`
+ --> $DIR/type-alias-impl-trait-with-cycle-error-3.rs:5:40
|
-LL | type Foo<'a> = impl Fn() -> Foo<'a>;
- | ^^^^^^^^^^^^^^^^^^^^
- |
- = note: `Foo` must be used in combination with a concrete type within the same crate
+LL | fn crash<'a>(_: &'a (), x: Foo<'a>) -> Foo<'a> {
+ | ^^^^^^^
error: aborting due to 1 previous error
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/type/pattern_types/const_block.rs b/tests/ui/type/pattern_types/const_block.rs
deleted file mode 100644
index ed19b10671af0..0000000000000
--- a/tests/ui/type/pattern_types/const_block.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-#![feature(pattern_types)]
-#![feature(pattern_type_macro)]
-#![feature(inline_const_pat)]
-//@ check-pass
-
-use std::pat::pattern_type;
-
-fn bar(x: pattern_type!(u32 is 0..=const{ 5 + 5 })) {}
-
-fn main() {}
diff --git a/tests/ui/unsafe/const_pat_in_layout_restricted.rs b/tests/ui/unsafe/const_pat_in_layout_restricted.rs
deleted file mode 100644
index 2ba173ee49962..0000000000000
--- a/tests/ui/unsafe/const_pat_in_layout_restricted.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Check that ref mut patterns within a const pattern don't get considered
-// unsafe because they're within a pattern for a layout constrained stuct.
-//@ check-pass
-
-#![feature(rustc_attrs)]
-#![feature(inline_const_pat)]
-
-#[rustc_layout_scalar_valid_range_start(3)]
-struct Gt2(i32);
-
-fn main() {
- match unsafe { Gt2(5) } {
- Gt2(
- const {
- || match () {
- ref mut y => (),
- };
- 4
- },
- ) => (),
- _ => (),
- }
-}