From e67e1655854b8f2c94dff80f4da2e595bd1ceaa8 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 27 Jun 2022 10:05:55 -0700 Subject: [PATCH 01/19] Make `ThinBox` covariant in `T` Just like `Box`, we want `ThinBox` to be covariant in `T`, but the projection in `WithHeader<::Metadata>` was making it invariant. This is now hidden as `WithOpaqueHeader`, which we type-cast whenever the real `WithHeader` type is needed. --- library/alloc/src/boxed/thin.rs | 33 +++++++++++++++++++++++++++------ library/alloc/tests/thin_box.rs | 7 +++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/library/alloc/src/boxed/thin.rs b/library/alloc/src/boxed/thin.rs index 807c035fdbd..627b52be052 100644 --- a/library/alloc/src/boxed/thin.rs +++ b/library/alloc/src/boxed/thin.rs @@ -29,7 +29,9 @@ use core::ptr::{self, NonNull}; /// ``` #[unstable(feature = "thin_box", issue = "92791")] pub struct ThinBox { - ptr: WithHeader<::Metadata>, + // This is essentially `WithHeader<::Metadata>`, + // but that would be invariant in `T`, and we want covariance. + ptr: WithOpaqueHeader, _marker: PhantomData, } @@ -49,7 +51,7 @@ impl ThinBox { #[cfg(not(no_global_oom_handling))] pub fn new(value: T) -> Self { let meta = ptr::metadata(&value); - let ptr = WithHeader::new(meta, value); + let ptr = WithOpaqueHeader::new(meta, value); ThinBox { ptr, _marker: PhantomData } } } @@ -73,7 +75,7 @@ impl ThinBox { T: Unsize, { let meta = ptr::metadata(&value as &Dyn); - let ptr = WithHeader::new(meta, value); + let ptr = WithOpaqueHeader::new(meta, value); ThinBox { ptr, _marker: PhantomData } } } @@ -120,7 +122,7 @@ impl Drop for ThinBox { unsafe { let value = self.deref_mut(); let value = value as *mut T; - self.ptr.drop::(value); + self.with_header().drop::(value); } } } @@ -130,11 +132,16 @@ impl ThinBox { fn meta(&self) -> ::Metadata { // Safety: // - NonNull and valid. - unsafe { *self.ptr.header() } + unsafe { *self.with_header().header() } } fn data(&self) -> *mut u8 { - self.ptr.value() + self.with_header().value() + } + + fn with_header(&self) -> &WithHeader<::Metadata> { + // SAFETY: both types are transparent to `NonNull` + unsafe { &*((&self.ptr) as *const WithOpaqueHeader as *const WithHeader<_>) } } } @@ -143,8 +150,22 @@ impl ThinBox { /// metadata (`H`) are ZSTs. /// 2. A pointer to a valid `T` that has a header `H` directly before the /// pointed-to location. +#[repr(transparent)] struct WithHeader(NonNull, PhantomData); +/// An opaque representation of `WithHeader` to avoid the +/// projection invariance of `::Metadata`. +#[repr(transparent)] +struct WithOpaqueHeader(NonNull); + +impl WithOpaqueHeader { + #[cfg(not(no_global_oom_handling))] + fn new(header: H, value: T) -> Self { + let ptr = WithHeader::new(header, value); + Self(ptr.0) + } +} + impl WithHeader { #[cfg(not(no_global_oom_handling))] fn new(header: H, value: T) -> WithHeader { diff --git a/library/alloc/tests/thin_box.rs b/library/alloc/tests/thin_box.rs index 70d1db8b457..368aa564f94 100644 --- a/library/alloc/tests/thin_box.rs +++ b/library/alloc/tests/thin_box.rs @@ -26,6 +26,13 @@ fn want_thin() { assert!(is_thin::()); } +#[allow(dead_code)] +fn assert_covariance() { + fn thin_box<'new>(b: ThinBox<[&'static str]>) -> ThinBox<[&'new str]> { + b + } +} + #[track_caller] fn verify_aligned(ptr: *const T) { // Use `black_box` to attempt to obscure the fact that we're calling this From 7dc04899651140002926d41116091e61509554d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Kr=C3=BCger?= Date: Tue, 28 Jun 2022 22:46:15 +0200 Subject: [PATCH 02/19] fix ICE with -Wrust-2021-incompatible-closure-captures Fixes #93117 Fixes #96258 --- compiler/rustc_typeck/src/check/upvar.rs | 6 +- ...021-incompatible-closure-captures-93117.rs | 18 ++++ ...incompatible-closure-captures-93117.stderr | 93 +++++++++++++++++++ ...021-incompatible-closure-captures-96258.rs | 15 +++ ...incompatible-closure-captures-96258.stderr | 24 +++++ 5 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs create mode 100644 src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.stderr create mode 100644 src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs create mode 100644 src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr diff --git a/compiler/rustc_typeck/src/check/upvar.rs b/compiler/rustc_typeck/src/check/upvar.rs index 0837d9c4a20..87f85a9842f 100644 --- a/compiler/rustc_typeck/src/check/upvar.rs +++ b/compiler/rustc_typeck/src/check/upvar.rs @@ -1707,12 +1707,14 @@ fn drop_location_span<'tcx>(tcx: TyCtxt<'tcx>, hir_id: hir::HirId) -> Span { hir::Node::Item(item) => match item.kind { hir::ItemKind::Fn(_, _, owner_id) => tcx.hir().span(owner_id.hir_id), _ => { - bug!("Drop location span error: need to handle more ItemKind {:?}", item.kind); + bug!("Drop location span error: need to handle more ItemKind '{:?}'", item.kind); } }, hir::Node::Block(block) => tcx.hir().span(block.hir_id), + hir::Node::TraitItem(item) => tcx.hir().span(item.hir_id()), + hir::Node::ImplItem(item) => tcx.hir().span(item.hir_id()), _ => { - bug!("Drop location span error: need to handle more Node {:?}", owner_node); + bug!("Drop location span error: need to handle more Node '{:?}'", owner_node); } }; tcx.sess.source_map().end_point(owner_span) diff --git a/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs new file mode 100644 index 00000000000..b280c8ab6e2 --- /dev/null +++ b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs @@ -0,0 +1,18 @@ +// compile-flags: -Wrust-2021-incompatible-closure-captures + +pub struct A {} + +impl A { + async fn create(path: impl AsRef) { //~ ERROR `async fn` is not permitted in Rust 2015 + //~^ WARN changes to closure capture in Rust 2021 will affect drop order [rust_2021_incompatible_closure_captures] + ; + crate(move || {} ).await //~ ERROR expected function, found module `crate` + } +} + +trait C{async fn new(val: T) {} //~ ERROR `async fn` is not permitted in Rust 2015 +//~^ ERROR functions in traits cannot be declared `async` +//~^^ ERROR cannot find type `T` in this scope +//~^^^ WARN changes to closure capture in Rust 2021 will affect drop order [rust_2021_incompatible_closure_captures] + +//~ ERROR this file contains an unclosed delimiter diff --git a/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.stderr b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.stderr new file mode 100644 index 00000000000..50de2322907 --- /dev/null +++ b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.stderr @@ -0,0 +1,93 @@ +error: this file contains an unclosed delimiter + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:18:53 + | +LL | trait C{async fn new(val: T) {} + | - unclosed delimiter +... +LL | + | ^ + +error[E0670]: `async fn` is not permitted in Rust 2015 + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:6:5 + | +LL | async fn create(path: impl AsRef) { + | ^^^^^ to use `async fn`, switch to Rust 2018 or later + | + = help: pass `--edition 2021` to `rustc` + = note: for more on editions, read https://doc.rust-lang.org/edition-guide + +error[E0670]: `async fn` is not permitted in Rust 2015 + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:13:9 + | +LL | trait C{async fn new(val: T) {} + | ^^^^^ to use `async fn`, switch to Rust 2018 or later + | + = help: pass `--edition 2021` to `rustc` + = note: for more on editions, read https://doc.rust-lang.org/edition-guide + +error[E0706]: functions in traits cannot be declared `async` + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:13:9 + | +LL | trait C{async fn new(val: T) {} + | -----^^^^^^^^^^^^^^^^^^ + | | + | `async` because of this + | + = note: `async` trait functions are not currently supported + = note: consider using the `async-trait` crate: https://crates.io/crates/async-trait + +error[E0423]: expected function, found module `crate` + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:9:5 + | +LL | crate(move || {} ).await + | ^^^^^ not a function + +error[E0412]: cannot find type `T` in this scope + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:13:27 + | +LL | pub struct A {} + | ------------ similarly named struct `A` defined here +... +LL | trait C{async fn new(val: T) {} + | ^ help: a struct with a similar name exists: `A` + +warning: changes to closure capture in Rust 2021 will affect drop order + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:6:57 + | +LL | async fn create(path: impl AsRef) { + | _____________________----_____________________________-__^ + | | | | + | | | in Rust 2018, `path` is dropped here along with the closure, but in Rust 2021 `path` is not part of the closure + | | in Rust 2018, this causes the closure to capture `path`, but in Rust 2021, it has no effect +LL | | +LL | | ; +LL | | crate(move || {} ).await +LL | | } + | |_____^ + | + = note: requested on the command line with `-W rust-2021-incompatible-closure-captures` + = note: for more information, see +help: add a dummy let to cause `path` to be fully captured + | +LL | async fn create(path: impl AsRef) { let _ = &path; + | ++++++++++++++ + +warning: changes to closure capture in Rust 2021 will affect drop order + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:13:30 + | +LL | trait C{async fn new(val: T) {} + | --- - ^^ + | | | + | | in Rust 2018, `val` is dropped here along with the closure, but in Rust 2021 `val` is not part of the closure + | in Rust 2018, this causes the closure to capture `val`, but in Rust 2021, it has no effect + | + = note: for more information, see +help: add a dummy let to cause `val` to be fully captured + | +LL | trait C{async fn new(val: T) { let _ = &val;} + | +++++++++++++ + +error: aborting due to 6 previous errors; 2 warnings emitted + +Some errors have detailed explanations: E0412, E0423, E0670, E0706. +For more information about an error, try `rustc --explain E0412`. diff --git a/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs new file mode 100644 index 00000000000..a776e508907 --- /dev/null +++ b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs @@ -0,0 +1,15 @@ +// compile-flags -Wrust-2021-incompatible-closure-captures + +fn main() {} + +pub(crate) struct Numberer {} + +impl Numberer { + pub(crate) async fn new( + //~^ ERROR `async fn` is not permitted in Rust 2015 + interval: Duration, + //~^ ERROR cannot find type `Duration` in this scope + ) -> Numberer { + Numberer {} + } +} diff --git a/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr new file mode 100644 index 00000000000..37b2f413860 --- /dev/null +++ b/src/test/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr @@ -0,0 +1,24 @@ +error[E0670]: `async fn` is not permitted in Rust 2015 + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs:8:16 + | +LL | pub(crate) async fn new( + | ^^^^^ to use `async fn`, switch to Rust 2018 or later + | + = help: pass `--edition 2021` to `rustc` + = note: for more on editions, read https://doc.rust-lang.org/edition-guide + +error[E0412]: cannot find type `Duration` in this scope + --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs:10:19 + | +LL | interval: Duration, + | ^^^^^^^^ not found in this scope + | +help: consider importing this struct + | +LL | use std::time::Duration; + | + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0412, E0670. +For more information about an error, try `rustc --explain E0412`. From 81abfe3913fa3aac1d052b93d26f6a8f642d0ac0 Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Sun, 15 May 2022 01:28:10 +0200 Subject: [PATCH 03/19] add blanket impl suggestion to the local traits Signed-off-by: Vincenzo Palazzo --- compiler/rustc_typeck/src/astconv/mod.rs | 68 ++++++++++++++++++++---- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index eec3b24aec2..6ef4122a644 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -2986,6 +2986,51 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { Some(r) } + /// make sure that we are in the condition to suggest the blanket implementation, if we are in the + /// case of suggest it, use the function `err_reporter` to report the error or suggestion. + fn maybe_lint_blanket_trait_impl( + &self, + self_ty: &hir::Ty<'_>, + diagnostic: &mut DiagnosticBuilder<'_, T>, + ) { + let tcx = self.tcx(); + let parent_id = tcx.hir().get_parent_item(self_ty.hir_id); + if let hir::Node::Item(hir::Item { + kind: + hir::ItemKind::Impl(hir::Impl { + self_ty: impl_self_typ, of_trait: Some(trait_ref), generics, .. + }), + .. + }) = tcx.hir().get_by_def_id(parent_id) && self_ty.hir_id == impl_self_typ.hir_id + { + let trait_span = trait_ref.path.span; + let target_span = if let Some(span) = generics.span_for_param_suggestion() { + span + } else { + trait_span + }; + let is_local = trait_ref.trait_def_id().map_or(false, |def_id| def_id.is_local()); + if is_local { + let trait_name = tcx.sess.source_map().span_to_snippet(trait_span).unwrap(); + let self_name = tcx.sess.source_map().span_to_snippet(self_ty.span).unwrap(); + let blanket_msg = format!( + "use a blanket implementation to implement {} for all types that also implement {}", + trait_name, self_name + ); + let blanket_sugg = vec![ + (target_span, "", self_name)), + (self_ty.span, "T".to_owned()), + ]; + diagnostic.multipart_suggestion( + blanket_msg, + blanket_sugg, + Applicability::Unspecified, + ); + } + } + } + fn maybe_lint_bare_trait(&self, self_ty: &hir::Ty<'_>, in_path: bool) { let tcx = self.tcx(); if let hir::TyKind::TraitObject([poly_trait_ref, ..], _, TraitObjectSyntax::None) = @@ -3021,9 +3066,11 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { if self_ty.span.edition() >= Edition::Edition2021 { let msg = "trait objects must include the `dyn` keyword"; let label = "add `dyn` keyword before this trait"; - rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg) - .multipart_suggestion_verbose(label, sugg, Applicability::MachineApplicable) - .emit(); + let mut diag = + rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg); + diag.multipart_suggestion_verbose(label, sugg, Applicability::MachineApplicable); + self.maybe_lint_blanket_trait_impl(&self_ty, &mut diag); + diag.emit(); } else { let msg = "trait objects without an explicit `dyn` are deprecated"; tcx.struct_span_lint_hir( @@ -3031,13 +3078,14 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { self_ty.hir_id, self_ty.span, |lint| { - lint.build(msg) - .multipart_suggestion_verbose( - "use `dyn`", - sugg, - Applicability::MachineApplicable, - ) - .emit(); + let mut diag = lint.build(msg); + diag.multipart_suggestion_verbose( + "use `dyn`", + sugg, + Applicability::MachineApplicable, + ); + self.maybe_lint_blanket_trait_impl::<()>(&self_ty, &mut diag); + diag.emit(); }, ); } From 86c1a734f5b915685560baeebac9b773d7108ccf Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Wed, 22 Jun 2022 23:06:34 +0100 Subject: [PATCH 04/19] ui test: add test of blanklet implementation Signed-off-by: Vincenzo Palazzo --- compiler/rustc_typeck/src/astconv/mod.rs | 77 +++++++++------ .../suggest-blanket-impl-local-trait.rs | 44 +++++++++ .../suggest-blanket-impl-local-trait.stderr | 99 +++++++++++++++++++ 3 files changed, 188 insertions(+), 32 deletions(-) create mode 100644 src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs create mode 100644 src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index 6ef4122a644..0347e7fc416 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -38,7 +38,9 @@ use rustc_span::{Span, DUMMY_SP}; use rustc_target::spec::abi; use rustc_trait_selection::traits; use rustc_trait_selection::traits::astconv_object_safety_violations; -use rustc_trait_selection::traits::error_reporting::report_object_safety_error; +use rustc_trait_selection::traits::error_reporting::{ + report_object_safety_error, suggestions::NextTypeParamName, +}; use rustc_trait_selection::traits::wf::object_region_bounds; use smallvec::SmallVec; @@ -2986,48 +2988,48 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { Some(r) } - /// make sure that we are in the condition to suggest the blanket implementation, if we are in the - /// case of suggest it, use the function `err_reporter` to report the error or suggestion. + /// Make sure that we are in the condition to suggest the blanket implementation. fn maybe_lint_blanket_trait_impl( &self, self_ty: &hir::Ty<'_>, - diagnostic: &mut DiagnosticBuilder<'_, T>, + diag: &mut DiagnosticBuilder<'_, T>, ) { let tcx = self.tcx(); let parent_id = tcx.hir().get_parent_item(self_ty.hir_id); if let hir::Node::Item(hir::Item { kind: hir::ItemKind::Impl(hir::Impl { - self_ty: impl_self_typ, of_trait: Some(trait_ref), generics, .. + self_ty: impl_self_ty, of_trait: Some(of_trait_ref), generics, .. }), .. - }) = tcx.hir().get_by_def_id(parent_id) && self_ty.hir_id == impl_self_typ.hir_id + }) = tcx.hir().get_by_def_id(parent_id) && self_ty.hir_id == impl_self_ty.hir_id { - let trait_span = trait_ref.path.span; - let target_span = if let Some(span) = generics.span_for_param_suggestion() { - span - } else { - trait_span - }; - let is_local = trait_ref.trait_def_id().map_or(false, |def_id| def_id.is_local()); - if is_local { - let trait_name = tcx.sess.source_map().span_to_snippet(trait_span).unwrap(); - let self_name = tcx.sess.source_map().span_to_snippet(self_ty.span).unwrap(); - let blanket_msg = format!( - "use a blanket implementation to implement {} for all types that also implement {}", - trait_name, self_name - ); - let blanket_sugg = vec![ - (target_span, "", self_name)), - (self_ty.span, "T".to_owned()), - ]; - diagnostic.multipart_suggestion( - blanket_msg, - blanket_sugg, - Applicability::Unspecified, - ); + if !of_trait_ref.trait_def_id().map_or(false, |def_id| def_id.is_local()) { + return; } + let of_trait_span = of_trait_ref.path.span; + // make sure that we are not calling unwrap to abort during the compilation + let Ok(impl_trait_name) = tcx.sess.source_map().span_to_snippet(self_ty.span) else { return; }; + let Ok(of_trait_name) = tcx.sess.source_map().span_to_snippet(of_trait_span) else { return; }; + // check if the trait has generics, to make a correct suggestion + let param_name = generics.params.next_type_param_name(None); + + let add_generic_sugg = if let Some(span) = generics.span_for_param_suggestion() { + let param_name = generics.params.next_type_param_name(Some(&impl_trait_name)); + (span, format!(", {}: {}", param_name, impl_trait_name)) + } else { + (generics.span, format!("<{}: {}>", param_name, impl_trait_name)) + }; + diag.multipart_suggestion( + format!("alternatively use a blanket \ + implementation to implement `{of_trait_name}` for \ + all types that also implement `{impl_trait_name}`"), + vec![ + (self_ty.span, param_name), + add_generic_sugg, + ], + Applicability::MaybeIncorrect, + ); } } @@ -3045,6 +3047,11 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { .map_or(false, |s| s.trim_end().ends_with('<')); let is_global = poly_trait_ref.trait_ref.path.is_global(); + let is_local = if let Some(def_id) = poly_trait_ref.trait_ref.trait_def_id() { + def_id.is_local() + } else { + false + }; let sugg = Vec::from_iter([ ( self_ty.span.shrink_to_lo(), @@ -3069,7 +3076,10 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { let mut diag = rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg); diag.multipart_suggestion_verbose(label, sugg, Applicability::MachineApplicable); - self.maybe_lint_blanket_trait_impl(&self_ty, &mut diag); + // check if the impl trait that we are considering is a impl of a local trait + if is_local { + self.maybe_lint_blanket_trait_impl(&self_ty, &mut diag); + } diag.emit(); } else { let msg = "trait objects without an explicit `dyn` are deprecated"; @@ -3084,7 +3094,10 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { sugg, Applicability::MachineApplicable, ); - self.maybe_lint_blanket_trait_impl::<()>(&self_ty, &mut diag); + // check if the impl trait that we are considering is a impl of a local trait + if is_local { + self.maybe_lint_blanket_trait_impl::<()>(&self_ty, &mut diag); + } diag.emit(); }, ); diff --git a/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs new file mode 100644 index 00000000000..61798c61cd0 --- /dev/null +++ b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs @@ -0,0 +1,44 @@ +// Ensure that the compiler include the blanklet implementation suggestion +// when inside a `impl` statment are used two local traits. +// +// edition:2021 +use std::fmt; + +trait LocalTraitOne { } + +trait LocalTraitTwo { } + +trait GenericTrait {} + +impl LocalTraitTwo for LocalTraitOne {} +//~^ ERROR trait objects must include the `dyn` keyword + +impl fmt::Display for LocalTraitOne { +//~^ ERROR trait objects must include the `dyn` keyword + fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result { + todo!(); + } +} + +impl fmt::Display for LocalTraitTwo + Send { +//~^ ERROR trait objects must include the `dyn` keyword + fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result { + todo!(); + } +} + +impl LocalTraitOne for fmt::Display {} +//~^ ERROR trait objects must include the `dyn` keyword + +impl LocalTraitOne for fmt::Display + Send {} +//~^ ERROR trait objects must include the `dyn` keyword + +impl GenericTrait for LocalTraitOne {} +//~^ ERROR trait objects must include the `dyn` keyword + +trait GenericTraitTwo {} + +impl GenericTraitTwo for GenericTrait {} +//~^ ERROR trait objects must include the `dyn` keyword + +fn main() {} diff --git a/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr new file mode 100644 index 00000000000..014d9dd2232 --- /dev/null +++ b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr @@ -0,0 +1,99 @@ +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:13:24 + | +LL | impl LocalTraitTwo for LocalTraitOne {} + | ^^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl LocalTraitTwo for LocalTraitOne {} +LL + impl LocalTraitTwo for dyn LocalTraitOne {} + | +help: alternatively use a blanket implementation to implement `LocalTraitTwo` for all types that also implement `LocalTraitOne` + | +LL | impl LocalTraitTwo for T {} + | ++++++++++++++++++ ~ + +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:16:23 + | +LL | impl fmt::Display for LocalTraitOne { + | ^^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl fmt::Display for LocalTraitOne { +LL + impl fmt::Display for dyn LocalTraitOne { + | + +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:23:23 + | +LL | impl fmt::Display for LocalTraitTwo + Send { + | ^^^^^^^^^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl fmt::Display for LocalTraitTwo + Send { +LL + impl fmt::Display for dyn LocalTraitTwo + Send { + | + +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:30:24 + | +LL | impl LocalTraitOne for fmt::Display {} + | ^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl LocalTraitOne for fmt::Display {} +LL + impl LocalTraitOne for dyn fmt::Display {} + | + +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:33:24 + | +LL | impl LocalTraitOne for fmt::Display + Send {} + | ^^^^^^^^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl LocalTraitOne for fmt::Display + Send {} +LL + impl LocalTraitOne for dyn fmt::Display + Send {} + | + +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:36:29 + | +LL | impl GenericTrait for LocalTraitOne {} + | ^^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl GenericTrait for LocalTraitOne {} +LL + impl GenericTrait for dyn LocalTraitOne {} + | +help: alternatively use a blanket implementation to implement `GenericTrait` for all types that also implement `LocalTraitOne` + | +LL | impl GenericTrait for T {} + | ++++++++++++++++++ ~ + +error[E0782]: trait objects must include the `dyn` keyword + --> $DIR/suggest-blanket-impl-local-trait.rs:41:35 + | +LL | impl GenericTraitTwo for GenericTrait {} + | ^^^^^^^^^^^^^^^ + | +help: add `dyn` keyword before this trait + | +LL - impl GenericTraitTwo for GenericTrait {} +LL + impl GenericTraitTwo for dyn GenericTrait {} + | +help: alternatively use a blanket implementation to implement `GenericTraitTwo` for all types that also implement `GenericTrait` + | +LL | impl> GenericTraitTwo for U {} + | ++++++++++++++++++++ ~ + +error: aborting due to 7 previous errors + +For more information about this error, try `rustc --explain E0782`. From 835b7a523a41cc89f0839f40652477af097db390 Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Wed, 29 Jun 2022 23:31:10 +0000 Subject: [PATCH 05/19] ui: improve suggestion test by addig the help message Signed-off-by: Vincenzo Palazzo --- compiler/rustc_typeck/src/astconv/mod.rs | 15 +------ .../suggest-blanket-impl-local-trait.rs | 14 +++++++ .../suggest-blanket-impl-local-trait.stderr | 38 +++++++++++------- suggest-blanket-impl-local-trait | Bin 0 -> 479160 bytes 4 files changed, 39 insertions(+), 28 deletions(-) create mode 100755 suggest-blanket-impl-local-trait diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index 0347e7fc416..37958cc0f40 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -3015,7 +3015,6 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { let param_name = generics.params.next_type_param_name(None); let add_generic_sugg = if let Some(span) = generics.span_for_param_suggestion() { - let param_name = generics.params.next_type_param_name(Some(&impl_trait_name)); (span, format!(", {}: {}", param_name, impl_trait_name)) } else { (generics.span, format!("<{}: {}>", param_name, impl_trait_name)) @@ -3047,11 +3046,6 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { .map_or(false, |s| s.trim_end().ends_with('<')); let is_global = poly_trait_ref.trait_ref.path.is_global(); - let is_local = if let Some(def_id) = poly_trait_ref.trait_ref.trait_def_id() { - def_id.is_local() - } else { - false - }; let sugg = Vec::from_iter([ ( self_ty.span.shrink_to_lo(), @@ -3077,9 +3071,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg); diag.multipart_suggestion_verbose(label, sugg, Applicability::MachineApplicable); // check if the impl trait that we are considering is a impl of a local trait - if is_local { - self.maybe_lint_blanket_trait_impl(&self_ty, &mut diag); - } + self.maybe_lint_blanket_trait_impl(&self_ty, &mut diag); diag.emit(); } else { let msg = "trait objects without an explicit `dyn` are deprecated"; @@ -3094,10 +3086,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { sugg, Applicability::MachineApplicable, ); - // check if the impl trait that we are considering is a impl of a local trait - if is_local { - self.maybe_lint_blanket_trait_impl::<()>(&self_ty, &mut diag); - } + self.maybe_lint_blanket_trait_impl::<()>(&self_ty, &mut diag); diag.emit(); }, ); diff --git a/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs index 61798c61cd0..7cf536f7966 100644 --- a/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs +++ b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.rs @@ -12,9 +12,12 @@ trait GenericTrait {} impl LocalTraitTwo for LocalTraitOne {} //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait +//~| HELP alternatively use a blanket implementation to implement `LocalTraitTwo` for all types that also implement `LocalTraitOne` impl fmt::Display for LocalTraitOne { //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result { todo!(); } @@ -22,6 +25,7 @@ impl fmt::Display for LocalTraitOne { impl fmt::Display for LocalTraitTwo + Send { //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result { todo!(); } @@ -29,16 +33,26 @@ impl fmt::Display for LocalTraitTwo + Send { impl LocalTraitOne for fmt::Display {} //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait +//~| HELP alternatively use a blanket implementation to implement `LocalTraitOne` for all types that also implement `fmt::Display` + impl LocalTraitOne for fmt::Display + Send {} //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait +//~| HELP alternatively use a blanket implementation to implement `LocalTraitOne` for all types that also implement `fmt::Display + Send` + impl GenericTrait for LocalTraitOne {} //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait +//~| HELP alternatively use a blanket implementation to implement `GenericTrait` for all types that also implement `LocalTraitOne` trait GenericTraitTwo {} impl GenericTraitTwo for GenericTrait {} //~^ ERROR trait objects must include the `dyn` keyword +//~| HELP add `dyn` keyword before this trait +//~| HELP alternatively use a blanket implementation to implement `GenericTraitTwo` for all types that also implement `GenericTrait` fn main() {} diff --git a/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr index 014d9dd2232..d739a8272f1 100644 --- a/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr +++ b/src/test/ui/suggestions/suggest-blanket-impl-local-trait.stderr @@ -8,14 +8,14 @@ help: add `dyn` keyword before this trait | LL - impl LocalTraitTwo for LocalTraitOne {} LL + impl LocalTraitTwo for dyn LocalTraitOne {} - | + | help: alternatively use a blanket implementation to implement `LocalTraitTwo` for all types that also implement `LocalTraitOne` | LL | impl LocalTraitTwo for T {} | ++++++++++++++++++ ~ error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/suggest-blanket-impl-local-trait.rs:16:23 + --> $DIR/suggest-blanket-impl-local-trait.rs:18:23 | LL | impl fmt::Display for LocalTraitOne { | ^^^^^^^^^^^^^ @@ -24,10 +24,10 @@ help: add `dyn` keyword before this trait | LL - impl fmt::Display for LocalTraitOne { LL + impl fmt::Display for dyn LocalTraitOne { - | + | error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/suggest-blanket-impl-local-trait.rs:23:23 + --> $DIR/suggest-blanket-impl-local-trait.rs:26:23 | LL | impl fmt::Display for LocalTraitTwo + Send { | ^^^^^^^^^^^^^^^^^^^^ @@ -36,10 +36,10 @@ help: add `dyn` keyword before this trait | LL - impl fmt::Display for LocalTraitTwo + Send { LL + impl fmt::Display for dyn LocalTraitTwo + Send { - | + | error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/suggest-blanket-impl-local-trait.rs:30:24 + --> $DIR/suggest-blanket-impl-local-trait.rs:34:24 | LL | impl LocalTraitOne for fmt::Display {} | ^^^^^^^^^^^^ @@ -48,10 +48,14 @@ help: add `dyn` keyword before this trait | LL - impl LocalTraitOne for fmt::Display {} LL + impl LocalTraitOne for dyn fmt::Display {} - | + | +help: alternatively use a blanket implementation to implement `LocalTraitOne` for all types that also implement `fmt::Display` + | +LL | impl LocalTraitOne for T {} + | +++++++++++++++++ ~ error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/suggest-blanket-impl-local-trait.rs:33:24 + --> $DIR/suggest-blanket-impl-local-trait.rs:40:24 | LL | impl LocalTraitOne for fmt::Display + Send {} | ^^^^^^^^^^^^^^^^^^^ @@ -60,10 +64,14 @@ help: add `dyn` keyword before this trait | LL - impl LocalTraitOne for fmt::Display + Send {} LL + impl LocalTraitOne for dyn fmt::Display + Send {} - | + | +help: alternatively use a blanket implementation to implement `LocalTraitOne` for all types that also implement `fmt::Display + Send` + | +LL | impl LocalTraitOne for T {} + | ++++++++++++++++++++++++ ~ error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/suggest-blanket-impl-local-trait.rs:36:29 + --> $DIR/suggest-blanket-impl-local-trait.rs:46:29 | LL | impl GenericTrait for LocalTraitOne {} | ^^^^^^^^^^^^^ @@ -72,14 +80,14 @@ help: add `dyn` keyword before this trait | LL - impl GenericTrait for LocalTraitOne {} LL + impl GenericTrait for dyn LocalTraitOne {} - | + | help: alternatively use a blanket implementation to implement `GenericTrait` for all types that also implement `LocalTraitOne` | -LL | impl GenericTrait for T {} +LL | impl GenericTrait for T {} | ++++++++++++++++++ ~ error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/suggest-blanket-impl-local-trait.rs:41:35 + --> $DIR/suggest-blanket-impl-local-trait.rs:53:35 | LL | impl GenericTraitTwo for GenericTrait {} | ^^^^^^^^^^^^^^^ @@ -88,10 +96,10 @@ help: add `dyn` keyword before this trait | LL - impl GenericTraitTwo for GenericTrait {} LL + impl GenericTraitTwo for dyn GenericTrait {} - | + | help: alternatively use a blanket implementation to implement `GenericTraitTwo` for all types that also implement `GenericTrait` | -LL | impl> GenericTraitTwo for U {} +LL | impl> GenericTraitTwo for U {} | ++++++++++++++++++++ ~ error: aborting due to 7 previous errors diff --git a/suggest-blanket-impl-local-trait b/suggest-blanket-impl-local-trait new file mode 100755 index 0000000000000000000000000000000000000000..0a357e006c3573ed6279ee359d93dd788baec86a GIT binary patch literal 479160 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�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

fCpisARn4 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

KXQ>$N4E39>8VMZNmJ|F2a*8wE<$A?YUK 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âDmpy`?6Cd59N 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%0DX>g5 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 literal 0 HcmV?d00001 From 72a16210613f0b25dc3f5608e491b94c18001f6d Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 12:58:36 +1000 Subject: [PATCH 06/19] Use `split_{first,last}` in `cs_fold1`. It makes the code a little nicer to read. --- .../src/deriving/generic/mod.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index 8347cded2fe..e6b21b3ff94 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -1717,22 +1717,21 @@ where { match *substructure.fields { EnumMatching(.., ref all_fields) | Struct(_, ref all_fields) => { - let (base, all_fields) = match (all_fields.is_empty(), use_foldl) { + let (base, rest) = match (all_fields.is_empty(), use_foldl) { (false, true) => { - let field = &all_fields[0]; - let args = (field.span, field.self_.clone(), &field.other[..]); - (b(cx, Some(args)), &all_fields[1..]) + let (first, rest) = all_fields.split_first().unwrap(); + let args = (first.span, first.self_.clone(), &first.other[..]); + (b(cx, Some(args)), rest) } (false, false) => { - let idx = all_fields.len() - 1; - let field = &all_fields[idx]; - let args = (field.span, field.self_.clone(), &field.other[..]); - (b(cx, Some(args)), &all_fields[..idx]) + let (last, rest) = all_fields.split_last().unwrap(); + let args = (last.span, last.self_.clone(), &last.other[..]); + (b(cx, Some(args)), rest) } (true, _) => (b(cx, None), &all_fields[..]), }; - cs_fold_fields(use_foldl, f, base, cx, all_fields) + cs_fold_fields(use_foldl, f, base, cx, rest) } EnumNonMatchingCollapsed(..) => { cs_fold_enumnonmatch(enum_nonmatch_f, cx, trait_span, substructure) From 7a4fdcbbc50a177a766fceb3bd2b9d35b2b5678e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 08:56:54 +1000 Subject: [PATCH 07/19] Remove unnecessary fields from `EnumNonMatchingCollapsed`. The `&[ast::Variant]` field isn't used. The `Vec` field is only used for its length, but that's always the same as the length of the `&[Ident]` and so isn't necessary. --- .../src/deriving/cmp/ord.rs | 4 +-- .../src/deriving/cmp/partial_eq.rs | 2 +- .../src/deriving/cmp/partial_ord.rs | 4 +-- .../src/deriving/generic/mod.rs | 34 +++++-------------- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs index 2b3ac0a86c1..5823d6fc40b 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs @@ -99,8 +99,8 @@ pub fn cs_cmp(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_>) -> P< cx.expr_match(span, new, vec![eq_arm, neq_arm]) }, cx.expr_path(equals_path.clone()), - Box::new(|cx, span, (self_args, tag_tuple), _non_self_args| { - if self_args.len() != 2 { + Box::new(|cx, span, tag_tuple| { + if tag_tuple.len() != 2 { cx.span_bug(span, "not exactly 2 arguments in `derive(Ord)`") } else { ordering_collapsed(cx, span, tag_tuple) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs index eead8b37024..a5b2e6b114f 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs @@ -48,7 +48,7 @@ pub fn expand_deriving_partial_eq( None => cx.expr_bool(span, base), } }, - Box::new(|cx, span, _, _| cx.expr_bool(span, !base)), + Box::new(|cx, span, _| cx.expr_bool(span, !base)), cx, span, substr, diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs index d28ac822a1e..124e16197f2 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs @@ -102,8 +102,8 @@ pub fn cs_partial_cmp(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_ cx.expr_match(span, new, vec![eq_arm, neq_arm]) }, equals_expr, - Box::new(|cx, span, (self_args, tag_tuple), _non_self_args| { - if self_args.len() != 2 { + Box::new(|cx, span, tag_tuple| { + if tag_tuple.len() != 2 { cx.span_bug(span, "not exactly 2 arguments in `derive(PartialOrd)`") } else { let lft = cx.expr_addr_of(span, cx.expr_ident(span, tag_tuple[0])); diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index e6b21b3ff94..82eb064edb0 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -146,8 +146,6 @@ //! //! ```{.text} //! EnumNonMatchingCollapsed( -//! vec![, ], -//! &[, ], //! &[, ]) //! ``` //! @@ -299,13 +297,10 @@ pub enum SubstructureFields<'a> { /// variant. EnumMatching(usize, usize, &'a ast::Variant, Vec>), - /// Non-matching variants of the enum, but with all state hidden from - /// the consequent code. The first component holds `Ident`s for all of - /// the `Self` arguments; the second component is a slice of all of the - /// variants for the enum itself, and the third component is a list of - /// `Ident`s bound to the variant index values for each of the actual - /// input `Self` arguments. - EnumNonMatchingCollapsed(Vec, &'a [ast::Variant], &'a [Ident]), + /// Non-matching variants of the enum, but with all state hidden from the + /// consequent code. The field is a list of `Ident`s bound to the variant + /// index values for each of the actual input `Self` arguments. + EnumNonMatchingCollapsed(&'a [Ident]), /// A static method where `Self` is a struct. StaticStruct(&'a ast::VariantData, StaticFields), @@ -318,13 +313,10 @@ pub enum SubstructureFields<'a> { pub type CombineSubstructureFunc<'a> = Box, Span, &Substructure<'_>) -> P + 'a>; -/// Deal with non-matching enum variants. The tuple is a list of -/// identifiers (one for each `Self` argument, which could be any of the -/// variants since they have been collapsed together) and the identifiers -/// holding the variant index value for each of the `Self` arguments. The -/// last argument is all the non-`Self` args of the method being derived. +/// Deal with non-matching enum variants. The slice is the identifiers holding +/// the variant index value for each of the `Self` arguments. pub type EnumNonMatchCollapsedFunc<'a> = - Box, Span, (&[Ident], &[Ident]), &[P]) -> P + 'a>; + Box, Span, &[Ident]) -> P + 'a>; pub fn combine_substructure( f: CombineSubstructureFunc<'_>, @@ -1184,11 +1176,6 @@ impl<'a> MethodDef<'a> { ) .collect::>(); - let self_arg_idents = self_arg_names - .iter() - .map(|name| Ident::from_str_and_span(name, span)) - .collect::>(); - // The `vi_idents` will be bound, solely in the catch-all, to // a series of let statements mapping each self_arg to an int // value corresponding to its discriminant. @@ -1203,8 +1190,7 @@ impl<'a> MethodDef<'a> { // Builds, via callback to call_substructure_method, the // delegated expression that handles the catch-all case, // using `__variants_tuple` to drive logic if necessary. - let catch_all_substructure = - EnumNonMatchingCollapsed(self_arg_idents, &variants, &vi_idents); + let catch_all_substructure = EnumNonMatchingCollapsed(&vi_idents); let first_fieldless = variants.iter().find(|v| v.data.fields().is_empty()); @@ -1657,9 +1643,7 @@ pub fn cs_fold_enumnonmatch( substructure: &Substructure<'_>, ) -> P { match *substructure.fields { - EnumNonMatchingCollapsed(ref all_args, _, tuple) => { - enum_nonmatch_f(cx, trait_span, (&all_args[..], tuple), substructure.nonself_args) - } + EnumNonMatchingCollapsed(tuple) => enum_nonmatch_f(cx, trait_span, tuple), _ => cx.span_bug(trait_span, "cs_fold_enumnonmatch expected an EnumNonMatchingCollapsed"), } } From d13fa0d21bd3080ae180e244274bde055d311e1d Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 11:37:44 +1000 Subject: [PATCH 08/19] Remove `Substructure::method_ident`. It's unused. --- .../rustc_builtin_macros/src/deriving/generic/mod.rs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index 82eb064edb0..e84b9fe9997 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -253,8 +253,6 @@ pub struct MethodDef<'a> { pub struct Substructure<'a> { /// ident of self pub type_ident: Ident, - /// ident of the method - pub method_ident: Ident, /// dereferenced access to any [`Self_`] or [`Ptr(Self_, _)`][ptr] arguments /// /// [`Self_`]: ty::Ty::Self_ @@ -845,13 +843,7 @@ impl<'a> MethodDef<'a> { fields: &SubstructureFields<'_>, ) -> P { let span = trait_.span; - let substructure = Substructure { - type_ident, - method_ident: Ident::new(self.name, span), - self_args, - nonself_args, - fields, - }; + let substructure = Substructure { type_ident, self_args, nonself_args, fields }; let mut f = self.combine_substructure.borrow_mut(); let f: &mut CombineSubstructureFunc<'_> = &mut *f; f(cx, span, &substructure) From 625122af9f4825f79bae7cbac55acc8fcbcda3eb Mon Sep 17 00:00:00 2001 From: Andy Russell Date: Thu, 30 Jun 2022 16:17:38 -0400 Subject: [PATCH 09/19] fix grammar in useless doc comment lint --- compiler/rustc_lint/src/builtin.rs | 4 ++-- src/test/ui/lint/unused/unused-doc-comments-edge-cases.stderr | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_lint/src/builtin.rs b/compiler/rustc_lint/src/builtin.rs index 8266f1566c4..c0cf8c6b76b 100644 --- a/compiler/rustc_lint/src/builtin.rs +++ b/compiler/rustc_lint/src/builtin.rs @@ -1098,12 +1098,12 @@ impl EarlyLintPass for UnusedDocComment { } fn check_block(&mut self, cx: &EarlyContext<'_>, block: &ast::Block) { - warn_if_doc(cx, block.span, "block", &block.attrs()); + warn_if_doc(cx, block.span, "blocks", &block.attrs()); } fn check_item(&mut self, cx: &EarlyContext<'_>, item: &ast::Item) { if let ast::ItemKind::ForeignMod(_) = item.kind { - warn_if_doc(cx, item.span, "extern block", &item.attrs); + warn_if_doc(cx, item.span, "extern blocks", &item.attrs); } } } diff --git a/src/test/ui/lint/unused/unused-doc-comments-edge-cases.stderr b/src/test/ui/lint/unused/unused-doc-comments-edge-cases.stderr index 30a96af583a..1a022c30938 100644 --- a/src/test/ui/lint/unused/unused-doc-comments-edge-cases.stderr +++ b/src/test/ui/lint/unused/unused-doc-comments-edge-cases.stderr @@ -71,7 +71,7 @@ LL | LL | / extern "C" { LL | | fn foo(); LL | | } - | |_- rustdoc does not generate documentation for extern block + | |_- rustdoc does not generate documentation for extern blocks | = help: use `//` for a plain comment From 1254fe974dd33199130a1f01647992be986b5dbb Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 11:44:37 +1000 Subject: [PATCH 10/19] Remove `{Method,Trait}Def::is_unsafe`. They are always `false`. --- .../src/deriving/bounds.rs | 1 - .../rustc_builtin_macros/src/deriving/clone.rs | 2 -- .../src/deriving/cmp/eq.rs | 2 -- .../src/deriving/cmp/ord.rs | 2 -- .../src/deriving/cmp/partial_eq.rs | 2 -- .../src/deriving/cmp/partial_ord.rs | 2 -- .../rustc_builtin_macros/src/deriving/debug.rs | 2 -- .../src/deriving/decodable.rs | 2 -- .../src/deriving/default.rs | 2 -- .../src/deriving/encodable.rs | 2 -- .../src/deriving/generic/mod.rs | 18 ++---------------- .../rustc_builtin_macros/src/deriving/hash.rs | 2 -- 12 files changed, 2 insertions(+), 37 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/bounds.rs b/compiler/rustc_builtin_macros/src/deriving/bounds.rs index 12ef166b8b0..5ef68c6aeaa 100644 --- a/compiler/rustc_builtin_macros/src/deriving/bounds.rs +++ b/compiler/rustc_builtin_macros/src/deriving/bounds.rs @@ -19,7 +19,6 @@ pub fn expand_deriving_copy( path: path_std!(marker::Copy), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: true, methods: Vec::new(), associated_types: Vec::new(), diff --git a/compiler/rustc_builtin_macros/src/deriving/clone.rs b/compiler/rustc_builtin_macros/src/deriving/clone.rs index 83317106990..be88ad5e5a9 100644 --- a/compiler/rustc_builtin_macros/src/deriving/clone.rs +++ b/compiler/rustc_builtin_macros/src/deriving/clone.rs @@ -81,7 +81,6 @@ pub fn expand_deriving_clone( path: path_std!(clone::Clone), additional_bounds: bounds, generics: Bounds::empty(), - is_unsafe: false, supports_unions: true, methods: vec![MethodDef { name: sym::clone, @@ -90,7 +89,6 @@ pub fn expand_deriving_clone( args: Vec::new(), ret_ty: Self_, attributes: attrs, - is_unsafe: false, unify_fieldless_variants: false, combine_substructure: substructure, }], diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs index f54ded3c87c..63665165f67 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs @@ -27,7 +27,6 @@ pub fn expand_deriving_eq( path: path_std!(cmp::Eq), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: true, methods: vec![MethodDef { name: sym::assert_receiver_is_total_eq, @@ -36,7 +35,6 @@ pub fn expand_deriving_eq( args: vec![], ret_ty: nil_ty(), attributes: attrs, - is_unsafe: false, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| { cs_total_eq_assert(a, b, c) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs index 5823d6fc40b..b2ca2cc9292 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs @@ -23,7 +23,6 @@ pub fn expand_deriving_ord( path: path_std!(cmp::Ord), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![MethodDef { name: sym::cmp, @@ -32,7 +31,6 @@ pub fn expand_deriving_ord( args: vec![(borrowed_self(), sym::other)], ret_ty: Literal(path_std!(cmp::Ordering)), attributes: attrs, - is_unsafe: false, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| cs_cmp(a, b, c))), }], diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs index a5b2e6b114f..fda25c1ff03 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs @@ -73,7 +73,6 @@ pub fn expand_deriving_partial_eq( args: vec![(borrowed_self(), sym::other)], ret_ty: Literal(path_local!(bool)), attributes: attrs, - is_unsafe: false, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| $f(a, b, c))), } @@ -102,7 +101,6 @@ pub fn expand_deriving_partial_eq( path: path_std!(cmp::PartialEq), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods, associated_types: Vec::new(), diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs index 124e16197f2..fb98218a002 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs @@ -33,7 +33,6 @@ pub fn expand_deriving_partial_ord( args: vec![(borrowed_self(), sym::other)], ret_ty, attributes: attrs, - is_unsafe: false, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|cx, span, substr| { cs_partial_cmp(cx, span, substr) @@ -46,7 +45,6 @@ pub fn expand_deriving_partial_ord( path: path_std!(cmp::PartialOrd), additional_bounds: vec![], generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![partial_cmp_def], associated_types: Vec::new(), diff --git a/compiler/rustc_builtin_macros/src/deriving/debug.rs b/compiler/rustc_builtin_macros/src/deriving/debug.rs index 1fffd6f9727..66676bcf28b 100644 --- a/compiler/rustc_builtin_macros/src/deriving/debug.rs +++ b/compiler/rustc_builtin_macros/src/deriving/debug.rs @@ -25,7 +25,6 @@ pub fn expand_deriving_debug( path: path_std!(fmt::Debug), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![MethodDef { name: sym::fmt, @@ -34,7 +33,6 @@ pub fn expand_deriving_debug( args: vec![(fmtr, sym::f)], ret_ty: Literal(path_std!(fmt::Result)), attributes: Vec::new(), - is_unsafe: false, unify_fieldless_variants: false, combine_substructure: combine_substructure(Box::new(|a, b, c| { show_substructure(a, b, c) diff --git a/compiler/rustc_builtin_macros/src/deriving/decodable.rs b/compiler/rustc_builtin_macros/src/deriving/decodable.rs index b39f35a9d40..d335131a5f1 100644 --- a/compiler/rustc_builtin_macros/src/deriving/decodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/decodable.rs @@ -26,7 +26,6 @@ pub fn expand_deriving_rustc_decodable( path: Path::new_(vec![krate, sym::Decodable], None, vec![], PathKind::Global), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![MethodDef { name: sym::decode, @@ -56,7 +55,6 @@ pub fn expand_deriving_rustc_decodable( PathKind::Std, )), attributes: Vec::new(), - is_unsafe: false, unify_fieldless_variants: false, combine_substructure: combine_substructure(Box::new(|a, b, c| { decodable_substructure(a, b, c, krate) diff --git a/compiler/rustc_builtin_macros/src/deriving/default.rs b/compiler/rustc_builtin_macros/src/deriving/default.rs index b49331e2875..7ff7a5c4050 100644 --- a/compiler/rustc_builtin_macros/src/deriving/default.rs +++ b/compiler/rustc_builtin_macros/src/deriving/default.rs @@ -30,7 +30,6 @@ pub fn expand_deriving_default( path: Path::new(vec![kw::Default, sym::Default]), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![MethodDef { name: kw::Default, @@ -39,7 +38,6 @@ pub fn expand_deriving_default( args: Vec::new(), ret_ty: Self_, attributes: attrs, - is_unsafe: false, unify_fieldless_variants: false, combine_substructure: combine_substructure(Box::new(|cx, trait_span, substr| { match substr.fields { diff --git a/compiler/rustc_builtin_macros/src/deriving/encodable.rs b/compiler/rustc_builtin_macros/src/deriving/encodable.rs index 6151a80a56d..01f4a2c05c5 100644 --- a/compiler/rustc_builtin_macros/src/deriving/encodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/encodable.rs @@ -111,7 +111,6 @@ pub fn expand_deriving_rustc_encodable( path: Path::new_(vec![krate, sym::Encodable], None, vec![], PathKind::Global), additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![MethodDef { name: sym::encode, @@ -141,7 +140,6 @@ pub fn expand_deriving_rustc_encodable( PathKind::Std, )), attributes: Vec::new(), - is_unsafe: false, unify_fieldless_variants: false, combine_substructure: combine_substructure(Box::new(|a, b, c| { encodable_substructure(a, b, c, krate) diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index e84b9fe9997..2a0386b4739 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -210,9 +210,6 @@ pub struct TraitDef<'a> { /// Any extra lifetimes and/or bounds, e.g., `D: serialize::Decoder` pub generics: Bounds, - /// Is it an `unsafe` trait? - pub is_unsafe: bool, - /// Can this trait be derived for unions? pub supports_unions: bool, @@ -240,9 +237,6 @@ pub struct MethodDef<'a> { pub attributes: Vec, - // Is it an `unsafe fn`? - pub is_unsafe: bool, - /// Can we combine fieldless variants for enums into a single match arm? pub unify_fieldless_variants: bool, @@ -717,14 +711,12 @@ impl<'a> TraitDef<'a> { let mut a = vec![attr, unused_qual]; a.extend(self.attributes.iter().cloned()); - let unsafety = if self.is_unsafe { ast::Unsafe::Yes(self.span) } else { ast::Unsafe::No }; - cx.item( self.span, Ident::empty(), a, ast::ItemKind::Impl(Box::new(ast::Impl { - unsafety, + unsafety: ast::Unsafe::No, polarity: ast::ImplPolarity::Positive, defaultness: ast::Defaultness::Final, constness: ast::Const::No, @@ -939,15 +931,9 @@ impl<'a> MethodDef<'a> { let fn_decl = cx.fn_decl(args, ast::FnRetTy::Ty(ret_type)); let body_block = cx.block_expr(body); - let unsafety = if self.is_unsafe { ast::Unsafe::Yes(span) } else { ast::Unsafe::No }; - let trait_lo_sp = span.shrink_to_lo(); - let sig = ast::FnSig { - header: ast::FnHeader { unsafety, ext: ast::Extern::None, ..ast::FnHeader::default() }, - decl: fn_decl, - span, - }; + let sig = ast::FnSig { header: ast::FnHeader::default(), decl: fn_decl, span }; let defaultness = ast::Defaultness::Final; // Create the method. diff --git a/compiler/rustc_builtin_macros/src/deriving/hash.rs b/compiler/rustc_builtin_macros/src/deriving/hash.rs index f1d46f03bad..da88e01a30a 100644 --- a/compiler/rustc_builtin_macros/src/deriving/hash.rs +++ b/compiler/rustc_builtin_macros/src/deriving/hash.rs @@ -26,7 +26,6 @@ pub fn expand_deriving_hash( path, additional_bounds: Vec::new(), generics: Bounds::empty(), - is_unsafe: false, supports_unions: false, methods: vec![MethodDef { name: sym::hash, @@ -35,7 +34,6 @@ pub fn expand_deriving_hash( args: vec![(Ptr(Box::new(Literal(arg)), Borrowed(None, Mutability::Mut)), sym::state)], ret_ty: nil_ty(), attributes: vec![], - is_unsafe: false, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| { hash_substructure(a, b, c) From 89f6917a49df12f16cbbf0479143d6d5bc3e8ae2 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 11:56:03 +1000 Subject: [PATCH 11/19] Remove `Substructure::self_args`. It's unused. --- .../src/deriving/generic/mod.rs | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index 2a0386b4739..0b2f62cacc2 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -247,12 +247,7 @@ pub struct MethodDef<'a> { pub struct Substructure<'a> { /// ident of self pub type_ident: Ident, - /// dereferenced access to any [`Self_`] or [`Ptr(Self_, _)`][ptr] arguments - /// - /// [`Self_`]: ty::Ty::Self_ - /// [ptr]: ty::Ty::Ptr - pub self_args: &'a [P], - /// verbatim access to any other arguments + /// verbatim access to any non-self arguments pub nonself_args: &'a [P], pub fields: &'a SubstructureFields<'a>, } @@ -753,7 +748,6 @@ impl<'a> TraitDef<'a> { self, struct_def, type_ident, - &self_args, &nonself_args, ) } else { @@ -802,7 +796,6 @@ impl<'a> TraitDef<'a> { self, enum_def, type_ident, - &self_args, &nonself_args, ) } else { @@ -830,12 +823,11 @@ impl<'a> MethodDef<'a> { cx: &mut ExtCtxt<'_>, trait_: &TraitDef<'_>, type_ident: Ident, - self_args: &[P], nonself_args: &[P], fields: &SubstructureFields<'_>, ) -> P { let span = trait_.span; - let substructure = Substructure { type_ident, self_args, nonself_args, fields }; + let substructure = Substructure { type_ident, nonself_args, fields }; let mut f = self.combine_substructure.borrow_mut(); let f: &mut CombineSubstructureFunc<'_> = &mut *f; f(cx, span, &substructure) @@ -1053,7 +1045,6 @@ impl<'a> MethodDef<'a> { cx, trait_, type_ident, - self_args, nonself_args, &Struct(struct_def, fields), ); @@ -1074,7 +1065,6 @@ impl<'a> MethodDef<'a> { trait_: &TraitDef<'_>, struct_def: &VariantData, type_ident: Ident, - self_args: &[P], nonself_args: &[P], ) -> P { let summary = trait_.summarise_struct(cx, struct_def); @@ -1083,7 +1073,6 @@ impl<'a> MethodDef<'a> { cx, trait_, type_ident, - self_args, nonself_args, &StaticStruct(struct_def, summary), ) @@ -1267,7 +1256,6 @@ impl<'a> MethodDef<'a> { cx, trait_, type_ident, - &self_args[..], nonself_args, &substructure, ); @@ -1286,7 +1274,6 @@ impl<'a> MethodDef<'a> { cx, trait_, type_ident, - &self_args[..], nonself_args, &substructure, )) @@ -1357,7 +1344,6 @@ impl<'a> MethodDef<'a> { cx, trait_, type_ident, - &self_args[..], nonself_args, &catch_all_substructure, ); @@ -1455,7 +1441,6 @@ impl<'a> MethodDef<'a> { trait_: &TraitDef<'_>, enum_def: &EnumDef, type_ident: Ident, - self_args: &[P], nonself_args: &[P], ) -> P { let summary = enum_def @@ -1471,7 +1456,6 @@ impl<'a> MethodDef<'a> { cx, trait_, type_ident, - self_args, nonself_args, &StaticEnum(enum_def, summary), ) From 57d56891d226836d2fa88e03dcf07a4fd829ebfc Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 12:16:12 +1000 Subject: [PATCH 12/19] Remove some unnecessary `pub`s. --- compiler/rustc_builtin_macros/src/deriving/generic/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index 0b2f62cacc2..3a7295a76a3 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -1576,7 +1576,7 @@ impl<'a> TraitDef<'a> { // helpful premade recipes -pub fn cs_fold_fields<'a, F>( +fn cs_fold_fields<'a, F>( use_foldl: bool, mut f: F, base: P, @@ -1598,7 +1598,7 @@ where } } -pub fn cs_fold_enumnonmatch( +fn cs_fold_enumnonmatch( mut enum_nonmatch_f: EnumNonMatchCollapsedFunc<'_>, cx: &mut ExtCtxt<'_>, trait_span: Span, @@ -1610,7 +1610,7 @@ pub fn cs_fold_enumnonmatch( } } -pub fn cs_fold_static(cx: &mut ExtCtxt<'_>, trait_span: Span) -> P { +fn cs_fold_static(cx: &mut ExtCtxt<'_>, trait_span: Span) -> P { cx.span_bug(trait_span, "static function in `derive`") } From 623ebbe42a72bd9942bb62526a8a0b2981448a53 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 15:09:37 +1000 Subject: [PATCH 13/19] Remove some commented-out code. This was accidentally left behind in a previous commit. --- compiler/rustc_builtin_macros/src/deriving/debug.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/debug.rs b/compiler/rustc_builtin_macros/src/deriving/debug.rs index 66676bcf28b..3a0b8c91179 100644 --- a/compiler/rustc_builtin_macros/src/deriving/debug.rs +++ b/compiler/rustc_builtin_macros/src/deriving/debug.rs @@ -62,8 +62,6 @@ fn show_substructure(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_> let (is_struct, args_per_field) = match vdata { ast::VariantData::Unit(..) => { // Special fast path for unit variants. - //let fn_path_write_str = cx.std_path(&[sym::fmt, sym::Formatter, sym::write_str]); - //return cx.expr_call_global(span, fn_path_write_str, vec![fmt, name]); assert!(fields.is_empty()); (false, 0) } From 78ec19ffe63e793d5241a729e23969623b85d9df Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 28 Jun 2022 15:23:16 +1000 Subject: [PATCH 14/19] `expand_deriving_clone` tweaks. Improve a comment, and panic on an impossible code path. --- .../src/deriving/clone.rs | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/clone.rs b/compiler/rustc_builtin_macros/src/deriving/clone.rs index be88ad5e5a9..d713b7e4a73 100644 --- a/compiler/rustc_builtin_macros/src/deriving/clone.rs +++ b/compiler/rustc_builtin_macros/src/deriving/clone.rs @@ -15,23 +15,22 @@ pub fn expand_deriving_clone( item: &Annotatable, push: &mut dyn FnMut(Annotatable), ) { - // check if we can use a short form + // The simple form is `fn clone(&self) -> Self { *self }`, possibly with + // some additional `AssertParamIsClone` assertions. // - // the short form is `fn clone(&self) -> Self { *self }` - // - // we can use the short form if: - // - the item is Copy (unfortunately, all we can check is whether it's also deriving Copy) - // - there are no generic parameters (after specialization this limitation can be removed) - // if we used the short form with generics, we'd have to bound the generics with - // Clone + Copy, and then there'd be no Clone impl at all if the user fills in something - // that is Clone but not Copy. and until specialization we can't write both impls. - // - the item is a union with Copy fields - // Unions with generic parameters still can derive Clone because they require Copy - // for deriving, Clone alone is not enough. - // Wherever Clone is implemented for fields is irrelevant so we don't assert it. + // We can use the simple form if either of the following are true. + // - The type derives Copy and there are no generic parameters. (If we + // used the simple form with generics, we'd have to bound the generics + // with Clone + Copy, and then there'd be no Clone impl at all if the + // user fills in something that is Clone but not Copy. After + // specialization we can remove this no-generics limitation.) + // - The item is a union. (Unions with generic parameters still can derive + // Clone because they require Copy for deriving, Clone alone is not + // enough. Whether Clone is implemented for fields is irrelevant so we + // don't assert it.) let bounds; let substructure; - let is_shallow; + let is_simple; match *item { Annotatable::Item(ref annitem) => match annitem.kind { ItemKind::Struct(_, Generics { ref params, .. }) @@ -44,30 +43,25 @@ pub fn expand_deriving_clone( .any(|param| matches!(param.kind, ast::GenericParamKind::Type { .. })) { bounds = vec![]; - is_shallow = true; + is_simple = true; substructure = combine_substructure(Box::new(|c, s, sub| { - cs_clone_shallow("Clone", c, s, sub, false) + cs_clone_simple("Clone", c, s, sub, false) })); } else { bounds = vec![]; - is_shallow = false; + is_simple = false; substructure = combine_substructure(Box::new(|c, s, sub| cs_clone("Clone", c, s, sub))); } } ItemKind::Union(..) => { bounds = vec![Literal(path_std!(marker::Copy))]; - is_shallow = true; + is_simple = true; substructure = combine_substructure(Box::new(|c, s, sub| { - cs_clone_shallow("Clone", c, s, sub, true) + cs_clone_simple("Clone", c, s, sub, true) })); } - _ => { - bounds = vec![]; - is_shallow = false; - substructure = - combine_substructure(Box::new(|c, s, sub| cs_clone("Clone", c, s, sub))); - } + _ => cx.span_bug(span, "`#[derive(Clone)]` on wrong item kind"), }, _ => cx.span_bug(span, "`#[derive(Clone)]` on trait item or impl item"), @@ -95,10 +89,10 @@ pub fn expand_deriving_clone( associated_types: Vec::new(), }; - trait_def.expand_ext(cx, mitem, item, push, is_shallow) + trait_def.expand_ext(cx, mitem, item, push, is_simple) } -fn cs_clone_shallow( +fn cs_clone_simple( name: &str, cx: &mut ExtCtxt<'_>, trait_span: Span, @@ -141,7 +135,7 @@ fn cs_clone_shallow( } _ => cx.span_bug( trait_span, - &format!("unexpected substructure in shallow `derive({})`", name), + &format!("unexpected substructure in simple `derive({})`", name), ), } } From b94246693ac3ad95ee942ef77aed8e762474ddf7 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 30 Jun 2022 09:15:07 +1000 Subject: [PATCH 15/19] Simplify pointer handling. The existing derive code allows for various possibilities that aren't needed in practice, which complicates the code. There are only a few auto-derived traits and new ones are unlikely, so this commit simplifies things. - `PtrTy` has been eliminated. The `Raw` variant was never used, and the lifetime for the `Borrowed` variant was always `None`. That left just the mutability field, which has been inlined as necessary. - `MethodDef::explicit_self` was a confusing `Option>`. Indicating either `&self` or nothing. It's now a `bool`. - `borrowed_self` is renamed as `self_ref`. - `Ty::Ptr` is renamed to `Ty::Ref`. --- .../src/deriving/clone.rs | 2 +- .../src/deriving/cmp/eq.rs | 2 +- .../src/deriving/cmp/ord.rs | 4 +- .../src/deriving/cmp/partial_eq.rs | 4 +- .../src/deriving/cmp/partial_ord.rs | 4 +- .../src/deriving/debug.rs | 5 +- .../src/deriving/decodable.rs | 7 +- .../src/deriving/default.rs | 2 +- .../src/deriving/encodable.rs | 7 +- .../src/deriving/generic/mod.rs | 28 +++---- .../src/deriving/generic/ty.rs | 74 ++++--------------- .../rustc_builtin_macros/src/deriving/hash.rs | 4 +- 12 files changed, 43 insertions(+), 100 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/clone.rs b/compiler/rustc_builtin_macros/src/deriving/clone.rs index d713b7e4a73..05d1fdbd513 100644 --- a/compiler/rustc_builtin_macros/src/deriving/clone.rs +++ b/compiler/rustc_builtin_macros/src/deriving/clone.rs @@ -79,7 +79,7 @@ pub fn expand_deriving_clone( methods: vec![MethodDef { name: sym::clone, generics: Bounds::empty(), - explicit_self: borrowed_explicit_self(), + explicit_self: true, args: Vec::new(), ret_ty: Self_, attributes: attrs, diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs index 63665165f67..caf4d3a5f77 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs @@ -31,7 +31,7 @@ pub fn expand_deriving_eq( methods: vec![MethodDef { name: sym::assert_receiver_is_total_eq, generics: Bounds::empty(), - explicit_self: borrowed_explicit_self(), + explicit_self: true, args: vec![], ret_ty: nil_ty(), attributes: attrs, diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs index b2ca2cc9292..ae1bfea20d8 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs @@ -27,8 +27,8 @@ pub fn expand_deriving_ord( methods: vec![MethodDef { name: sym::cmp, generics: Bounds::empty(), - explicit_self: borrowed_explicit_self(), - args: vec![(borrowed_self(), sym::other)], + explicit_self: true, + args: vec![(self_ref(), sym::other)], ret_ty: Literal(path_std!(cmp::Ordering)), attributes: attrs, unify_fieldless_variants: true, diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs index fda25c1ff03..f086e7c16fd 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs @@ -69,8 +69,8 @@ pub fn expand_deriving_partial_eq( MethodDef { name: $name, generics: Bounds::empty(), - explicit_self: borrowed_explicit_self(), - args: vec![(borrowed_self(), sym::other)], + explicit_self: true, + args: vec![(self_ref(), sym::other)], ret_ty: Literal(path_local!(bool)), attributes: attrs, unify_fieldless_variants: true, diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs index fb98218a002..3c674f318af 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs @@ -29,8 +29,8 @@ pub fn expand_deriving_partial_ord( let partial_cmp_def = MethodDef { name: sym::partial_cmp, generics: Bounds::empty(), - explicit_self: borrowed_explicit_self(), - args: vec![(borrowed_self(), sym::other)], + explicit_self: true, + args: vec![(self_ref(), sym::other)], ret_ty, attributes: attrs, unify_fieldless_variants: true, diff --git a/compiler/rustc_builtin_macros/src/deriving/debug.rs b/compiler/rustc_builtin_macros/src/deriving/debug.rs index 3a0b8c91179..8da624c4b82 100644 --- a/compiler/rustc_builtin_macros/src/deriving/debug.rs +++ b/compiler/rustc_builtin_macros/src/deriving/debug.rs @@ -16,8 +16,7 @@ pub fn expand_deriving_debug( push: &mut dyn FnMut(Annotatable), ) { // &mut ::std::fmt::Formatter - let fmtr = - Ptr(Box::new(Literal(path_std!(fmt::Formatter))), Borrowed(None, ast::Mutability::Mut)); + let fmtr = Ref(Box::new(Literal(path_std!(fmt::Formatter))), ast::Mutability::Mut); let trait_def = TraitDef { span, @@ -29,7 +28,7 @@ pub fn expand_deriving_debug( methods: vec![MethodDef { name: sym::fmt, generics: Bounds::empty(), - explicit_self: borrowed_explicit_self(), + explicit_self: true, args: vec![(fmtr, sym::f)], ret_ty: Literal(path_std!(fmt::Result)), attributes: Vec::new(), diff --git a/compiler/rustc_builtin_macros/src/deriving/decodable.rs b/compiler/rustc_builtin_macros/src/deriving/decodable.rs index d335131a5f1..d649ae7c25e 100644 --- a/compiler/rustc_builtin_macros/src/deriving/decodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/decodable.rs @@ -35,11 +35,8 @@ pub fn expand_deriving_rustc_decodable( vec![Path::new_(vec![krate, sym::Decoder], None, vec![], PathKind::Global)], )], }, - explicit_self: None, - args: vec![( - Ptr(Box::new(Literal(Path::new_local(typaram))), Borrowed(None, Mutability::Mut)), - sym::d, - )], + explicit_self: false, + args: vec![(Ref(Box::new(Literal(Path::new_local(typaram))), Mutability::Mut), sym::d)], ret_ty: Literal(Path::new_( pathvec_std!(result::Result), None, diff --git a/compiler/rustc_builtin_macros/src/deriving/default.rs b/compiler/rustc_builtin_macros/src/deriving/default.rs index 7ff7a5c4050..d41b25343b0 100644 --- a/compiler/rustc_builtin_macros/src/deriving/default.rs +++ b/compiler/rustc_builtin_macros/src/deriving/default.rs @@ -34,7 +34,7 @@ pub fn expand_deriving_default( methods: vec![MethodDef { name: kw::Default, generics: Bounds::empty(), - explicit_self: None, + explicit_self: false, args: Vec::new(), ret_ty: Self_, attributes: attrs, diff --git a/compiler/rustc_builtin_macros/src/deriving/encodable.rs b/compiler/rustc_builtin_macros/src/deriving/encodable.rs index 01f4a2c05c5..f8bc2f5bb85 100644 --- a/compiler/rustc_builtin_macros/src/deriving/encodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/encodable.rs @@ -120,11 +120,8 @@ pub fn expand_deriving_rustc_encodable( vec![Path::new_(vec![krate, sym::Encoder], None, vec![], PathKind::Global)], )], }, - explicit_self: borrowed_explicit_self(), - args: vec![( - Ptr(Box::new(Literal(Path::new_local(typaram))), Borrowed(None, Mutability::Mut)), - sym::s, - )], + explicit_self: true, + args: vec![(Ref(Box::new(Literal(Path::new_local(typaram))), Mutability::Mut), sym::s)], ret_ty: Literal(Path::new_( pathvec_std!(result::Result), None, diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs index 3a7295a76a3..ff431c8de5d 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs @@ -188,7 +188,7 @@ use rustc_expand::base::{Annotatable, ExtCtxt}; use rustc_span::symbol::{kw, sym, Ident, Symbol}; use rustc_span::Span; -use ty::{Bounds, Path, Ptr, PtrTy, Self_, Ty}; +use ty::{Bounds, Path, Ref, Self_, Ty}; use crate::deriving; @@ -224,10 +224,8 @@ pub struct MethodDef<'a> { /// List of generics, e.g., `R: rand::Rng` pub generics: Bounds, - /// Whether there is a self argument (outer Option) i.e., whether - /// this is a static function, and whether it is a pointer (inner - /// Option) - pub explicit_self: Option>, + /// Is there is a `&self` argument? If not, it is a static function. + pub explicit_self: bool, /// Arguments other than the self argument pub args: Vec<(Ty, Symbol)>, @@ -844,7 +842,7 @@ impl<'a> MethodDef<'a> { } fn is_static(&self) -> bool { - self.explicit_self.is_none() + !self.explicit_self } fn split_self_nonself_args( @@ -857,17 +855,15 @@ impl<'a> MethodDef<'a> { let mut self_args = Vec::new(); let mut nonself_args = Vec::new(); let mut arg_tys = Vec::new(); - let mut nonstatic = false; let span = trait_.span; - let ast_explicit_self = self.explicit_self.as_ref().map(|self_ptr| { - let (self_expr, explicit_self) = ty::get_explicit_self(cx, span, self_ptr); - + let ast_explicit_self = if self.explicit_self { + let (self_expr, explicit_self) = ty::get_explicit_self(cx, span); self_args.push(self_expr); - nonstatic = true; - - explicit_self - }); + Some(explicit_self) + } else { + None + }; for (ty, name) in self.args.iter() { let ast_ty = ty.to_ty(cx, span, type_ident, generics); @@ -879,10 +875,10 @@ impl<'a> MethodDef<'a> { match *ty { // for static methods, just treat any Self // arguments as a normal arg - Self_ if nonstatic => { + Self_ if !self.is_static() => { self_args.push(arg_expr); } - Ptr(ref ty, _) if matches!(**ty, Self_) && nonstatic => { + Ref(ref ty, _) if matches!(**ty, Self_) && !self.is_static() => { self_args.push(cx.expr_deref(span, arg_expr)) } _ => { diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs index 7a418003250..ed911ff0be9 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs @@ -1,7 +1,6 @@ //! A mini version of ast::Ty, which is easier to use, and features an explicit `Self` type to use //! when specifying impls to be derived. -pub use PtrTy::*; pub use Ty::*; use rustc_ast::ptr::P; @@ -11,16 +10,6 @@ use rustc_span::source_map::{respan, DUMMY_SP}; use rustc_span::symbol::{kw, Ident, Symbol}; use rustc_span::Span; -/// The types of pointers -#[derive(Clone)] -pub enum PtrTy { - /// &'lifetime mut - Borrowed(Option, ast::Mutability), - /// *mut - #[allow(dead_code)] - Raw(ast::Mutability), -} - /// A path, e.g., `::std::option::Option::` (global). Has support /// for type parameters and a lifetime. #[derive(Clone)] @@ -92,8 +81,8 @@ impl Path { #[derive(Clone)] pub enum Ty { Self_, - /// &/Box/ Ty - Ptr(Box, PtrTy), + /// A reference. + Ref(Box, ast::Mutability), /// `mod::mod::Type<[lifetime], [Params...]>`, including a plain type /// parameter, and things like `i32` Literal(Path), @@ -101,19 +90,8 @@ pub enum Ty { Tuple(Vec), } -pub fn borrowed_ptrty() -> PtrTy { - Borrowed(None, ast::Mutability::Not) -} -pub fn borrowed(ty: Box) -> Ty { - Ptr(ty, borrowed_ptrty()) -} - -pub fn borrowed_explicit_self() -> Option> { - Some(Some(borrowed_ptrty())) -} - -pub fn borrowed_self() -> Ty { - borrowed(Box::new(Self_)) +pub fn self_ref() -> Ty { + Ref(Box::new(Self_), ast::Mutability::Not) } pub fn nil_ty() -> Ty { @@ -136,20 +114,14 @@ impl Ty { self_ty: Ident, self_generics: &Generics, ) -> P { - match *self { - Ptr(ref ty, ref ptr) => { + match self { + Ref(ty, mutbl) => { let raw_ty = ty.to_ty(cx, span, self_ty, self_generics); - match *ptr { - Borrowed(ref lt, mutbl) => { - let lt = mk_lifetime(cx, span, lt); - cx.ty_rptr(span, raw_ty, lt, mutbl) - } - Raw(mutbl) => cx.ty_ptr(span, raw_ty, mutbl), - } + cx.ty_rptr(span, raw_ty, None, *mutbl) } - Literal(ref p) => p.to_ty(cx, span, self_ty, self_generics), + Literal(p) => p.to_ty(cx, span, self_ty, self_generics), Self_ => cx.ty_path(self.to_path(cx, span, self_ty, self_generics)), - Tuple(ref fields) => { + Tuple(fields) => { let ty = ast::TyKind::Tup( fields.iter().map(|f| f.to_ty(cx, span, self_ty, self_generics)).collect(), ); @@ -186,7 +158,7 @@ impl Ty { cx.path_all(span, false, vec![self_ty], params) } Literal(ref p) => p.to_path(cx, span, self_ty, generics), - Ptr(..) => cx.span_bug(span, "pointer in a path in generic `derive`"), + Ref(..) => cx.span_bug(span, "ref in a path in generic `derive`"), Tuple(..) => cx.span_bug(span, "tuple in a path in generic `derive`"), } } @@ -245,28 +217,10 @@ impl Bounds { } } -pub fn get_explicit_self( - cx: &ExtCtxt<'_>, - span: Span, - self_ptr: &Option, -) -> (P, ast::ExplicitSelf) { +pub fn get_explicit_self(cx: &ExtCtxt<'_>, span: Span) -> (P, ast::ExplicitSelf) { // this constructs a fresh `self` path let self_path = cx.expr_self(span); - match *self_ptr { - None => (self_path, respan(span, SelfKind::Value(ast::Mutability::Not))), - Some(ref ptr) => { - let self_ty = respan( - span, - match *ptr { - Borrowed(ref lt, mutbl) => { - let lt = lt.map(|s| cx.lifetime(span, s)); - SelfKind::Region(lt, mutbl) - } - Raw(_) => cx.span_bug(span, "attempted to use *self in deriving definition"), - }, - ); - let self_expr = cx.expr_deref(span, self_path); - (self_expr, self_ty) - } - } + let self_ty = respan(span, SelfKind::Region(None, ast::Mutability::Not)); + let self_expr = cx.expr_deref(span, self_path); + (self_expr, self_ty) } diff --git a/compiler/rustc_builtin_macros/src/deriving/hash.rs b/compiler/rustc_builtin_macros/src/deriving/hash.rs index da88e01a30a..c01e68ad358 100644 --- a/compiler/rustc_builtin_macros/src/deriving/hash.rs +++ b/compiler/rustc_builtin_macros/src/deriving/hash.rs @@ -30,8 +30,8 @@ pub fn expand_deriving_hash( methods: vec![MethodDef { name: sym::hash, generics: Bounds { bounds: vec![(typaram, vec![path_std!(hash::Hasher)])] }, - explicit_self: borrowed_explicit_self(), - args: vec![(Ptr(Box::new(Literal(arg)), Borrowed(None, Mutability::Mut)), sym::state)], + explicit_self: true, + args: vec![(Ref(Box::new(Literal(arg)), Mutability::Mut), sym::state)], ret_ty: nil_ty(), attributes: vec![], unify_fieldless_variants: true, From 18fef6bbd73d8d2dc721df458cb3b2a22e6b79c9 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 30 Jun 2022 10:16:34 +1000 Subject: [PATCH 16/19] Remove lifetime support in deriving code. It's unused. --- .../src/deriving/cmp/partial_ord.rs | 1 - .../src/deriving/decodable.rs | 6 ++-- .../src/deriving/encodable.rs | 6 ++-- .../src/deriving/generic/ty.rs | 28 ++++--------------- .../rustc_builtin_macros/src/deriving/hash.rs | 2 +- 5 files changed, 11 insertions(+), 32 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs index 3c674f318af..dfc3e8c6ef2 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs @@ -18,7 +18,6 @@ pub fn expand_deriving_partial_ord( let ordering_ty = Literal(path_std!(cmp::Ordering)); let ret_ty = Literal(Path::new_( pathvec_std!(option::Option), - None, vec![Box::new(ordering_ty)], PathKind::Std, )); diff --git a/compiler/rustc_builtin_macros/src/deriving/decodable.rs b/compiler/rustc_builtin_macros/src/deriving/decodable.rs index d649ae7c25e..4bd8340e099 100644 --- a/compiler/rustc_builtin_macros/src/deriving/decodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/decodable.rs @@ -23,7 +23,7 @@ pub fn expand_deriving_rustc_decodable( let trait_def = TraitDef { span, attributes: Vec::new(), - path: Path::new_(vec![krate, sym::Decodable], None, vec![], PathKind::Global), + path: Path::new_(vec![krate, sym::Decodable], vec![], PathKind::Global), additional_bounds: Vec::new(), generics: Bounds::empty(), supports_unions: false, @@ -32,19 +32,17 @@ pub fn expand_deriving_rustc_decodable( generics: Bounds { bounds: vec![( typaram, - vec![Path::new_(vec![krate, sym::Decoder], None, vec![], PathKind::Global)], + vec![Path::new_(vec![krate, sym::Decoder], vec![], PathKind::Global)], )], }, explicit_self: false, args: vec![(Ref(Box::new(Literal(Path::new_local(typaram))), Mutability::Mut), sym::d)], ret_ty: Literal(Path::new_( pathvec_std!(result::Result), - None, vec![ Box::new(Self_), Box::new(Literal(Path::new_( vec![typaram, sym::Error], - None, vec![], PathKind::Local, ))), diff --git a/compiler/rustc_builtin_macros/src/deriving/encodable.rs b/compiler/rustc_builtin_macros/src/deriving/encodable.rs index f8bc2f5bb85..829e258c36b 100644 --- a/compiler/rustc_builtin_macros/src/deriving/encodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/encodable.rs @@ -108,7 +108,7 @@ pub fn expand_deriving_rustc_encodable( let trait_def = TraitDef { span, attributes: Vec::new(), - path: Path::new_(vec![krate, sym::Encodable], None, vec![], PathKind::Global), + path: Path::new_(vec![krate, sym::Encodable], vec![], PathKind::Global), additional_bounds: Vec::new(), generics: Bounds::empty(), supports_unions: false, @@ -117,19 +117,17 @@ pub fn expand_deriving_rustc_encodable( generics: Bounds { bounds: vec![( typaram, - vec![Path::new_(vec![krate, sym::Encoder], None, vec![], PathKind::Global)], + vec![Path::new_(vec![krate, sym::Encoder], vec![], PathKind::Global)], )], }, explicit_self: true, args: vec![(Ref(Box::new(Literal(Path::new_local(typaram))), Mutability::Mut), sym::s)], ret_ty: Literal(Path::new_( pathvec_std!(result::Result), - None, vec![ Box::new(Tuple(Vec::new())), Box::new(Literal(Path::new_( vec![typaram, sym::Error], - None, vec![], PathKind::Local, ))), diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs index ed911ff0be9..6b2f31c64e1 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs @@ -11,11 +11,10 @@ use rustc_span::symbol::{kw, Ident, Symbol}; use rustc_span::Span; /// A path, e.g., `::std::option::Option::` (global). Has support -/// for type parameters and a lifetime. +/// for type parameters. #[derive(Clone)] pub struct Path { path: Vec, - lifetime: Option, params: Vec>, kind: PathKind, } @@ -29,18 +28,13 @@ pub enum PathKind { impl Path { pub fn new(path: Vec) -> Path { - Path::new_(path, None, Vec::new(), PathKind::Std) + Path::new_(path, Vec::new(), PathKind::Std) } pub fn new_local(path: Symbol) -> Path { - Path::new_(vec![path], None, Vec::new(), PathKind::Local) + Path::new_(vec![path], Vec::new(), PathKind::Local) } - pub fn new_( - path: Vec, - lifetime: Option, - params: Vec>, - kind: PathKind, - ) -> Path { - Path { path, lifetime, params, kind } + pub fn new_(path: Vec, params: Vec>, kind: PathKind) -> Path { + Path { path, params, kind } } pub fn to_ty( @@ -60,10 +54,8 @@ impl Path { self_generics: &Generics, ) -> ast::Path { let mut idents = self.path.iter().map(|s| Ident::new(*s, span)).collect(); - let lt = mk_lifetimes(cx, span, &self.lifetime); let tys = self.params.iter().map(|t| t.to_ty(cx, span, self_ty, self_generics)); - let params = - lt.into_iter().map(GenericArg::Lifetime).chain(tys.map(GenericArg::Type)).collect(); + let params = tys.map(GenericArg::Type).collect(); match self.kind { PathKind::Global => cx.path_all(span, true, idents, params), @@ -98,14 +90,6 @@ pub fn nil_ty() -> Ty { Tuple(Vec::new()) } -fn mk_lifetime(cx: &ExtCtxt<'_>, span: Span, lt: &Option) -> Option { - lt.map(|ident| cx.lifetime(span, ident)) -} - -fn mk_lifetimes(cx: &ExtCtxt<'_>, span: Span, lt: &Option) -> Vec { - mk_lifetime(cx, span, lt).into_iter().collect() -} - impl Ty { pub fn to_ty( &self, diff --git a/compiler/rustc_builtin_macros/src/deriving/hash.rs b/compiler/rustc_builtin_macros/src/deriving/hash.rs index c01e68ad358..906eef32f79 100644 --- a/compiler/rustc_builtin_macros/src/deriving/hash.rs +++ b/compiler/rustc_builtin_macros/src/deriving/hash.rs @@ -15,7 +15,7 @@ pub fn expand_deriving_hash( item: &Annotatable, push: &mut dyn FnMut(Annotatable), ) { - let path = Path::new_(pathvec_std!(hash::Hash), None, vec![], PathKind::Std); + let path = Path::new_(pathvec_std!(hash::Hash), vec![], PathKind::Std); let typaram = sym::__H; From 00307a5b6f1d81fb5d19f1ef7235ff235ce75d50 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 30 Jun 2022 10:20:19 +1000 Subject: [PATCH 17/19] Rename `Ty::Literal` as `Ty::Path`. Because a `Literal` is a type of expression, and is simply the wrong name for this. --- compiler/rustc_builtin_macros/src/deriving/clone.rs | 2 +- compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs | 2 +- .../src/deriving/cmp/partial_eq.rs | 2 +- .../src/deriving/cmp/partial_ord.rs | 9 +++------ compiler/rustc_builtin_macros/src/deriving/debug.rs | 4 ++-- .../rustc_builtin_macros/src/deriving/decodable.rs | 10 +++------- .../rustc_builtin_macros/src/deriving/encodable.rs | 10 +++------- .../rustc_builtin_macros/src/deriving/generic/ty.rs | 6 +++--- compiler/rustc_builtin_macros/src/deriving/hash.rs | 2 +- 9 files changed, 18 insertions(+), 29 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/clone.rs b/compiler/rustc_builtin_macros/src/deriving/clone.rs index 05d1fdbd513..1c507678489 100644 --- a/compiler/rustc_builtin_macros/src/deriving/clone.rs +++ b/compiler/rustc_builtin_macros/src/deriving/clone.rs @@ -55,7 +55,7 @@ pub fn expand_deriving_clone( } } ItemKind::Union(..) => { - bounds = vec![Literal(path_std!(marker::Copy))]; + bounds = vec![Path(path_std!(marker::Copy))]; is_simple = true; substructure = combine_substructure(Box::new(|c, s, sub| { cs_clone_simple("Clone", c, s, sub, true) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs index ae1bfea20d8..c7850cd4b4c 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/ord.rs @@ -29,7 +29,7 @@ pub fn expand_deriving_ord( generics: Bounds::empty(), explicit_self: true, args: vec![(self_ref(), sym::other)], - ret_ty: Literal(path_std!(cmp::Ordering)), + ret_ty: Path(path_std!(cmp::Ordering)), attributes: attrs, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| cs_cmp(a, b, c))), diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs index f086e7c16fd..ca5ca29eb82 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_eq.rs @@ -71,7 +71,7 @@ pub fn expand_deriving_partial_eq( generics: Bounds::empty(), explicit_self: true, args: vec![(self_ref(), sym::other)], - ret_ty: Literal(path_local!(bool)), + ret_ty: Path(path_local!(bool)), attributes: attrs, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| $f(a, b, c))), diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs index dfc3e8c6ef2..07db82fee93 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs @@ -15,12 +15,9 @@ pub fn expand_deriving_partial_ord( item: &Annotatable, push: &mut dyn FnMut(Annotatable), ) { - let ordering_ty = Literal(path_std!(cmp::Ordering)); - let ret_ty = Literal(Path::new_( - pathvec_std!(option::Option), - vec![Box::new(ordering_ty)], - PathKind::Std, - )); + let ordering_ty = Path(path_std!(cmp::Ordering)); + let ret_ty = + Path(Path::new_(pathvec_std!(option::Option), vec![Box::new(ordering_ty)], PathKind::Std)); let inline = cx.meta_word(span, sym::inline); let attrs = vec![cx.attribute(inline)]; diff --git a/compiler/rustc_builtin_macros/src/deriving/debug.rs b/compiler/rustc_builtin_macros/src/deriving/debug.rs index 8da624c4b82..1411c60c0bf 100644 --- a/compiler/rustc_builtin_macros/src/deriving/debug.rs +++ b/compiler/rustc_builtin_macros/src/deriving/debug.rs @@ -16,7 +16,7 @@ pub fn expand_deriving_debug( push: &mut dyn FnMut(Annotatable), ) { // &mut ::std::fmt::Formatter - let fmtr = Ref(Box::new(Literal(path_std!(fmt::Formatter))), ast::Mutability::Mut); + let fmtr = Ref(Box::new(Path(path_std!(fmt::Formatter))), ast::Mutability::Mut); let trait_def = TraitDef { span, @@ -30,7 +30,7 @@ pub fn expand_deriving_debug( generics: Bounds::empty(), explicit_self: true, args: vec![(fmtr, sym::f)], - ret_ty: Literal(path_std!(fmt::Result)), + ret_ty: Path(path_std!(fmt::Result)), attributes: Vec::new(), unify_fieldless_variants: false, combine_substructure: combine_substructure(Box::new(|a, b, c| { diff --git a/compiler/rustc_builtin_macros/src/deriving/decodable.rs b/compiler/rustc_builtin_macros/src/deriving/decodable.rs index 4bd8340e099..16154fb4d03 100644 --- a/compiler/rustc_builtin_macros/src/deriving/decodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/decodable.rs @@ -36,16 +36,12 @@ pub fn expand_deriving_rustc_decodable( )], }, explicit_self: false, - args: vec![(Ref(Box::new(Literal(Path::new_local(typaram))), Mutability::Mut), sym::d)], - ret_ty: Literal(Path::new_( + args: vec![(Ref(Box::new(Path(Path::new_local(typaram))), Mutability::Mut), sym::d)], + ret_ty: Path(Path::new_( pathvec_std!(result::Result), vec![ Box::new(Self_), - Box::new(Literal(Path::new_( - vec![typaram, sym::Error], - vec![], - PathKind::Local, - ))), + Box::new(Path(Path::new_(vec![typaram, sym::Error], vec![], PathKind::Local))), ], PathKind::Std, )), diff --git a/compiler/rustc_builtin_macros/src/deriving/encodable.rs b/compiler/rustc_builtin_macros/src/deriving/encodable.rs index 829e258c36b..7cce1a0c2a2 100644 --- a/compiler/rustc_builtin_macros/src/deriving/encodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/encodable.rs @@ -121,16 +121,12 @@ pub fn expand_deriving_rustc_encodable( )], }, explicit_self: true, - args: vec![(Ref(Box::new(Literal(Path::new_local(typaram))), Mutability::Mut), sym::s)], - ret_ty: Literal(Path::new_( + args: vec![(Ref(Box::new(Path(Path::new_local(typaram))), Mutability::Mut), sym::s)], + ret_ty: Path(Path::new_( pathvec_std!(result::Result), vec![ Box::new(Tuple(Vec::new())), - Box::new(Literal(Path::new_( - vec![typaram, sym::Error], - vec![], - PathKind::Local, - ))), + Box::new(Path(Path::new_(vec![typaram, sym::Error], vec![], PathKind::Local))), ], PathKind::Std, )), diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs index 6b2f31c64e1..c2dcff36c39 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs @@ -77,7 +77,7 @@ pub enum Ty { Ref(Box, ast::Mutability), /// `mod::mod::Type<[lifetime], [Params...]>`, including a plain type /// parameter, and things like `i32` - Literal(Path), + Path(Path), /// includes unit Tuple(Vec), } @@ -103,7 +103,7 @@ impl Ty { let raw_ty = ty.to_ty(cx, span, self_ty, self_generics); cx.ty_rptr(span, raw_ty, None, *mutbl) } - Literal(p) => p.to_ty(cx, span, self_ty, self_generics), + Path(p) => p.to_ty(cx, span, self_ty, self_generics), Self_ => cx.ty_path(self.to_path(cx, span, self_ty, self_generics)), Tuple(fields) => { let ty = ast::TyKind::Tup( @@ -141,7 +141,7 @@ impl Ty { cx.path_all(span, false, vec![self_ty], params) } - Literal(ref p) => p.to_path(cx, span, self_ty, generics), + Path(ref p) => p.to_path(cx, span, self_ty, generics), Ref(..) => cx.span_bug(span, "ref in a path in generic `derive`"), Tuple(..) => cx.span_bug(span, "tuple in a path in generic `derive`"), } diff --git a/compiler/rustc_builtin_macros/src/deriving/hash.rs b/compiler/rustc_builtin_macros/src/deriving/hash.rs index 906eef32f79..641744c47ce 100644 --- a/compiler/rustc_builtin_macros/src/deriving/hash.rs +++ b/compiler/rustc_builtin_macros/src/deriving/hash.rs @@ -31,7 +31,7 @@ pub fn expand_deriving_hash( name: sym::hash, generics: Bounds { bounds: vec![(typaram, vec![path_std!(hash::Hasher)])] }, explicit_self: true, - args: vec![(Ref(Box::new(Literal(arg)), Mutability::Mut), sym::state)], + args: vec![(Ref(Box::new(Path(arg)), Mutability::Mut), sym::state)], ret_ty: nil_ty(), attributes: vec![], unify_fieldless_variants: true, From 85e8d94e05959e3ad57738351ce56f95f15a26a6 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 30 Jun 2022 10:22:41 +1000 Subject: [PATCH 18/19] Change `Ty::Tuple` to `Ty::Unit`. Because that's all that is needed in practice. --- .../rustc_builtin_macros/src/deriving/cmp/eq.rs | 2 +- .../src/deriving/encodable.rs | 2 +- .../src/deriving/generic/ty.rs | 16 +++++----------- .../rustc_builtin_macros/src/deriving/hash.rs | 2 +- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs index caf4d3a5f77..cb2ad283a19 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs @@ -33,7 +33,7 @@ pub fn expand_deriving_eq( generics: Bounds::empty(), explicit_self: true, args: vec![], - ret_ty: nil_ty(), + ret_ty: Unit, attributes: attrs, unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| { diff --git a/compiler/rustc_builtin_macros/src/deriving/encodable.rs b/compiler/rustc_builtin_macros/src/deriving/encodable.rs index 7cce1a0c2a2..7dc0584618d 100644 --- a/compiler/rustc_builtin_macros/src/deriving/encodable.rs +++ b/compiler/rustc_builtin_macros/src/deriving/encodable.rs @@ -125,7 +125,7 @@ pub fn expand_deriving_rustc_encodable( ret_ty: Path(Path::new_( pathvec_std!(result::Result), vec![ - Box::new(Tuple(Vec::new())), + Box::new(Unit), Box::new(Path(Path::new_(vec![typaram, sym::Error], vec![], PathKind::Local))), ], PathKind::Std, diff --git a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs index c2dcff36c39..4b20d87629d 100644 --- a/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs +++ b/compiler/rustc_builtin_macros/src/deriving/generic/ty.rs @@ -78,18 +78,14 @@ pub enum Ty { /// `mod::mod::Type<[lifetime], [Params...]>`, including a plain type /// parameter, and things like `i32` Path(Path), - /// includes unit - Tuple(Vec), + /// For () return types. + Unit, } pub fn self_ref() -> Ty { Ref(Box::new(Self_), ast::Mutability::Not) } -pub fn nil_ty() -> Ty { - Tuple(Vec::new()) -} - impl Ty { pub fn to_ty( &self, @@ -105,10 +101,8 @@ impl Ty { } Path(p) => p.to_ty(cx, span, self_ty, self_generics), Self_ => cx.ty_path(self.to_path(cx, span, self_ty, self_generics)), - Tuple(fields) => { - let ty = ast::TyKind::Tup( - fields.iter().map(|f| f.to_ty(cx, span, self_ty, self_generics)).collect(), - ); + Unit => { + let ty = ast::TyKind::Tup(vec![]); cx.ty(span, ty) } } @@ -143,7 +137,7 @@ impl Ty { } Path(ref p) => p.to_path(cx, span, self_ty, generics), Ref(..) => cx.span_bug(span, "ref in a path in generic `derive`"), - Tuple(..) => cx.span_bug(span, "tuple in a path in generic `derive`"), + Unit => cx.span_bug(span, "unit in a path in generic `derive`"), } } } diff --git a/compiler/rustc_builtin_macros/src/deriving/hash.rs b/compiler/rustc_builtin_macros/src/deriving/hash.rs index 641744c47ce..9790449c4b3 100644 --- a/compiler/rustc_builtin_macros/src/deriving/hash.rs +++ b/compiler/rustc_builtin_macros/src/deriving/hash.rs @@ -32,7 +32,7 @@ pub fn expand_deriving_hash( generics: Bounds { bounds: vec![(typaram, vec![path_std!(hash::Hasher)])] }, explicit_self: true, args: vec![(Ref(Box::new(Path(arg)), Mutability::Mut), sym::state)], - ret_ty: nil_ty(), + ret_ty: Unit, attributes: vec![], unify_fieldless_variants: true, combine_substructure: combine_substructure(Box::new(|a, b, c| { From f791ac6a798a6b4c1b2b0c59e904e08340ff593e Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Fri, 1 Jul 2022 16:55:23 +0900 Subject: [PATCH 19/19] use const instead of function and make it private --- compiler/rustc_const_eval/src/const_eval/eval_queries.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/compiler/rustc_const_eval/src/const_eval/eval_queries.rs b/compiler/rustc_const_eval/src/const_eval/eval_queries.rs index 09a2977af04..0dac4f8978e 100644 --- a/compiler/rustc_const_eval/src/const_eval/eval_queries.rs +++ b/compiler/rustc_const_eval/src/const_eval/eval_queries.rs @@ -19,11 +19,9 @@ use rustc_target::abi::{self, Abi}; use std::borrow::Cow; use std::convert::TryInto; -pub fn note_on_undefined_behavior_error() -> &'static str { - "The rules on what exactly is undefined behavior aren't clear, \ +const NOTE_ON_UNDEFINED_BEHAVIOR_ERROR: &str = "The rules on what exactly is undefined behavior aren't clear, \ so this check might be overzealous. Please open an issue on the rustc \ - repository if you believe it should not be considered undefined behavior." -} + repository if you believe it should not be considered undefined behavior."; // Returns a pointer to where the result lives fn eval_body_using_ecx<'mir, 'tcx>( @@ -375,7 +373,7 @@ pub fn eval_to_allocation_raw_provider<'tcx>( ecx.tcx, "it is undefined behavior to use this value", |diag| { - diag.note(note_on_undefined_behavior_error()); + diag.note(NOTE_ON_UNDEFINED_BEHAVIOR_ERROR); diag.note(&format!( "the raw bytes of the constant ({}", display_allocation(