From 7d0a952e465b6584d2a86d2fca3c8a4b077567cd Mon Sep 17 00:00:00 2001 From: flip1995 Date: Thu, 2 May 2019 16:53:12 +0200 Subject: [PATCH 01/32] Implement initernal lint LINT_PASS_IMPL_WITHOUT_MACRO --- src/librustc/lint/context.rs | 2 + src/librustc/lint/internal.rs | 50 ++++++++++++------- src/librustc_lint/lib.rs | 2 + .../lint_pass_impl_without_macro.rs | 35 +++++++++++++ .../lint_pass_impl_without_macro.stderr | 15 ++++++ 5 files changed, 87 insertions(+), 17 deletions(-) create mode 100644 src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs create mode 100644 src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 7f09120bbdd5e..7203dd9beaae4 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -1341,6 +1341,7 @@ struct LateLintPassObjects<'a> { lints: &'a mut [LateLintPassObject], } +#[cfg_attr(not(stage0), allow(lint_pass_impl_without_macro))] impl LintPass for LateLintPassObjects<'_> { fn name(&self) -> &'static str { panic!() @@ -1510,6 +1511,7 @@ struct EarlyLintPassObjects<'a> { lints: &'a mut [EarlyLintPassObject], } +#[cfg_attr(not(stage0), allow(lint_pass_impl_without_macro))] impl LintPass for EarlyLintPassObjects<'_> { fn name(&self) -> &'static str { panic!() diff --git a/src/librustc/lint/internal.rs b/src/librustc/lint/internal.rs index 86dae579ca753..d3996c4e37a9f 100644 --- a/src/librustc/lint/internal.rs +++ b/src/librustc/lint/internal.rs @@ -7,7 +7,7 @@ use crate::lint::{ }; use errors::Applicability; use rustc_data_structures::fx::FxHashMap; -use syntax::ast::Ident; +use syntax::ast::{Ident, Item, ItemKind}; use syntax::symbol::{sym, Symbol}; declare_lint! { @@ -36,10 +36,7 @@ impl_lint_pass!(DefaultHashTypes => [DEFAULT_HASH_TYPES]); impl EarlyLintPass for DefaultHashTypes { fn check_ident(&mut self, cx: &EarlyContext<'_>, ident: Ident) { if let Some(replace) = self.map.get(&ident.name) { - let msg = format!( - "Prefer {} over {}, it has better performance", - replace, ident - ); + let msg = format!("Prefer {} over {}, it has better performance", replace, ident); let mut db = cx.struct_span_lint(DEFAULT_HASH_TYPES, ident.span, &msg); db.span_suggestion( ident.span, @@ -47,11 +44,8 @@ impl EarlyLintPass for DefaultHashTypes { replace.to_string(), Applicability::MaybeIncorrect, // FxHashMap, ... needs another import ); - db.note(&format!( - "a `use rustc_data_structures::fx::{}` may be necessary", - replace - )) - .emit(); + db.note(&format!("a `use rustc_data_structures::fx::{}` may be necessary", replace)) + .emit(); } } } @@ -137,13 +131,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TyTyKind { } } } - TyKind::Rptr( - _, - MutTy { - ty: inner_ty, - mutbl: Mutability::MutImmutable, - }, - ) => { + TyKind::Rptr(_, MutTy { ty: inner_ty, mutbl: Mutability::MutImmutable }) => { if let Some(impl_did) = cx.tcx.impl_of_method(ty.hir_id.owner_def_id()) { if cx.tcx.impl_trait_ref(impl_did).is_some() { return; @@ -225,3 +213,31 @@ fn gen_args(segment: &PathSegment) -> String { String::new() } + +declare_lint! { + pub LINT_PASS_IMPL_WITHOUT_MACRO, + Allow, + "`impl LintPass` without the `declare_lint_pass!` or `impl_lint_pass!` macros" +} + +declare_lint_pass!(LintPassImpl => [LINT_PASS_IMPL_WITHOUT_MACRO]); + +impl EarlyLintPass for LintPassImpl { + fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) { + if let ItemKind::Impl(_, _, _, _, Some(lint_pass), _, _) = &item.node { + if !lint_pass.path.span.ctxt().outer_expn_info().is_some() { + if let Some(last) = lint_pass.path.segments.last() { + if last.ident.as_str() == "LintPass" { + cx.struct_span_lint( + LINT_PASS_IMPL_WITHOUT_MACRO, + lint_pass.path.span, + "implementing `LintPass` by hand", + ) + .help("try using `declare_lint_pass!` or `impl_lint_pass!` instead") + .emit(); + } + } + } + } + } +} diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index ec8a9c6fbb2a8..8a5fde322b2a7 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -493,6 +493,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { pub fn register_internals(store: &mut lint::LintStore, sess: Option<&Session>) { store.register_early_pass(sess, false, false, box DefaultHashTypes::new()); + store.register_early_pass(sess, false, false, box LintPassImpl); store.register_late_pass(sess, false, false, false, box TyTyKind); store.register_group( sess, @@ -502,6 +503,7 @@ pub fn register_internals(store: &mut lint::LintStore, sess: Option<&Session>) { vec![ LintId::of(DEFAULT_HASH_TYPES), LintId::of(USAGE_OF_TY_TYKIND), + LintId::of(LINT_PASS_IMPL_WITHOUT_MACRO), LintId::of(TY_PASS_BY_REFERENCE), LintId::of(USAGE_OF_QUALIFIED_TY), ], diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs new file mode 100644 index 0000000000000..92f8e8364a775 --- /dev/null +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs @@ -0,0 +1,35 @@ +// compile-flags: -Z unstable-options + +#![feature(rustc_private)] +#![deny(lint_pass_impl_without_macro)] + +extern crate rustc; + +use rustc::lint::{LintArray, LintPass}; +use rustc::{declare_lint, declare_lint_pass, impl_lint_pass, lint_array}; + +declare_lint! { + pub TEST_LINT, + Allow, + "test" +} + +struct Foo; + +impl LintPass for Foo { //~ERROR implementing `LintPass` by hand + fn get_lints(&self) -> LintArray { + lint_array!(TEST_LINT) + } + + fn name(&self) -> &'static str { + "Foo" + } +} + +struct Bar; + +impl_lint_pass!(Bar => [TEST_LINT]); + +declare_lint_pass!(Baz => [TEST_LINT]); + +fn main() {} diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr new file mode 100644 index 0000000000000..9ddd6af472a8b --- /dev/null +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr @@ -0,0 +1,15 @@ +error: implementing `LintPass` by hand + --> $DIR/lint_pass_impl_without_macro.rs:19:6 + | +LL | impl LintPass for Foo { + | ^^^^^^^^ + | +note: lint level defined here + --> $DIR/lint_pass_impl_without_macro.rs:4:9 + | +LL | #![deny(lint_pass_impl_without_macro)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + = help: try using `declare_lint_pass!` or `impl_lint_pass!` instead + +error: aborting due to previous error + From 37f09cb237ebbabdd6889d3c3d707075b8acc29d Mon Sep 17 00:00:00 2001 From: flip1995 Date: Thu, 13 Jun 2019 15:49:33 +0200 Subject: [PATCH 02/32] Only allow {declare,impl}_lint_pass macros for implementing LintPass --- src/librustc/lint/internal.rs | 34 +++++++++++++------ src/libsyntax_pos/symbol.rs | 3 ++ .../lint_pass_impl_without_macro.rs | 18 ++++++++++ .../lint_pass_impl_without_macro.stderr | 13 ++++++- 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/librustc/lint/internal.rs b/src/librustc/lint/internal.rs index d3996c4e37a9f..9763801f0d9a8 100644 --- a/src/librustc/lint/internal.rs +++ b/src/librustc/lint/internal.rs @@ -9,6 +9,7 @@ use errors::Applicability; use rustc_data_structures::fx::FxHashMap; use syntax::ast::{Ident, Item, ItemKind}; use syntax::symbol::{sym, Symbol}; +use syntax_pos::ExpnInfo; declare_lint! { pub DEFAULT_HASH_TYPES, @@ -225,19 +226,32 @@ declare_lint_pass!(LintPassImpl => [LINT_PASS_IMPL_WITHOUT_MACRO]); impl EarlyLintPass for LintPassImpl { fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) { if let ItemKind::Impl(_, _, _, _, Some(lint_pass), _, _) = &item.node { - if !lint_pass.path.span.ctxt().outer_expn_info().is_some() { - if let Some(last) = lint_pass.path.segments.last() { - if last.ident.as_str() == "LintPass" { - cx.struct_span_lint( - LINT_PASS_IMPL_WITHOUT_MACRO, - lint_pass.path.span, - "implementing `LintPass` by hand", - ) - .help("try using `declare_lint_pass!` or `impl_lint_pass!` instead") - .emit(); + if let Some(last) = lint_pass.path.segments.last() { + if last.ident.name == sym::LintPass { + match &lint_pass.path.span.ctxt().outer_expn_info() { + Some(info) if is_lint_pass_expansion(info) => {} + _ => { + cx.struct_span_lint( + LINT_PASS_IMPL_WITHOUT_MACRO, + lint_pass.path.span, + "implementing `LintPass` by hand", + ) + .help("try using `declare_lint_pass!` or `impl_lint_pass!` instead") + .emit(); + } } } } } } } + +fn is_lint_pass_expansion(expn_info: &ExpnInfo) -> bool { + if expn_info.format.name() == sym::impl_lint_pass { + true + } else if let Some(info) = expn_info.call_site.ctxt().outer_expn_info() { + info.format.name() == sym::declare_lint_pass + } else { + false + } +} diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index 756bc8c29d828..4b8535fa625b9 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -214,6 +214,7 @@ symbols! { custom_inner_attributes, custom_test_frameworks, c_variadic, + declare_lint_pass, decl_macro, Default, default_lib_allocator, @@ -324,6 +325,7 @@ symbols! { if_while_or_patterns, ignore, impl_header_lifetime_elision, + impl_lint_pass, impl_trait_in_bindings, import_shadowing, index, @@ -365,6 +367,7 @@ symbols! { link_llvm_intrinsics, link_name, link_section, + LintPass, lint_reasons, literal, local_inner_macros, diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs index 92f8e8364a775..89fa838768e8e 100644 --- a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs @@ -26,6 +26,24 @@ impl LintPass for Foo { //~ERROR implementing `LintPass` by hand } } +macro_rules! custom_lint_pass_macro { + () => { + struct Custom; + + impl LintPass for Custom { //~ERROR implementing `LintPass` by hand + fn get_lints(&self) -> LintArray { + lint_array!(TEST_LINT) + } + + fn name(&self) -> &'static str { + "Custom" + } + } + }; +} + +custom_lint_pass_macro!(); + struct Bar; impl_lint_pass!(Bar => [TEST_LINT]); diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr index 9ddd6af472a8b..a033b0a07e006 100644 --- a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr @@ -11,5 +11,16 @@ LL | #![deny(lint_pass_impl_without_macro)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: try using `declare_lint_pass!` or `impl_lint_pass!` instead -error: aborting due to previous error +error: implementing `LintPass` by hand + --> $DIR/lint_pass_impl_without_macro.rs:33:14 + | +LL | impl LintPass for Custom { + | ^^^^^^^^ +... +LL | custom_lint_pass_macro!(); + | -------------------------- in this macro invocation + | + = help: try using `declare_lint_pass!` or `impl_lint_pass!` instead + +error: aborting due to 2 previous errors From 084c829fb8ee8fc4410169cde0d029b8214e38e0 Mon Sep 17 00:00:00 2001 From: flip1995 Date: Mon, 17 Jun 2019 17:04:40 +0200 Subject: [PATCH 03/32] Enable internal lints in bootstrap --- src/bootstrap/bin/rustc.rs | 8 +++++++- src/libarena/lib.rs | 1 - src/libfmt_macros/lib.rs | 1 - src/librustc/lib.rs | 1 - src/librustc_allocator/lib.rs | 1 - src/librustc_borrowck/lib.rs | 1 - src/librustc_codegen_llvm/lib.rs | 1 - src/librustc_codegen_ssa/lib.rs | 1 - src/librustc_codegen_utils/lib.rs | 1 - src/librustc_driver/lib.rs | 1 - src/librustc_errors/lib.rs | 1 - src/librustc_incremental/lib.rs | 1 - src/librustc_interface/lib.rs | 1 - src/librustc_lint/lib.rs | 1 - src/librustc_metadata/lib.rs | 1 - src/librustc_mir/lib.rs | 1 - src/librustc_passes/lib.rs | 1 - src/librustc_privacy/lib.rs | 1 - src/librustc_resolve/lib.rs | 1 - src/librustc_save_analysis/lib.rs | 1 - src/librustc_target/lib.rs | 1 - src/librustc_traits/lib.rs | 1 - src/librustc_typeck/lib.rs | 1 - src/librustdoc/lib.rs | 1 - src/libsyntax/lib.rs | 1 - src/libsyntax_ext/lib.rs | 1 - src/libsyntax_pos/lib.rs | 1 - 27 files changed, 7 insertions(+), 27 deletions(-) diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 595deb07ec82b..34bd62d300d87 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -306,7 +306,13 @@ fn main() { } // This is required for internal lints. - cmd.arg("-Zunstable-options"); + if let Some(crate_name) = args.windows(2).find(|a| &*a[0] == "--crate-name") { + let crate_name = crate_name[1].to_string_lossy(); + if crate_name.starts_with("rustc") || crate_name.starts_with("syntax") { + cmd.arg("-Zunstable-options"); + cmd.arg("-Winternal"); + } + } // Force all crates compiled by this compiler to (a) be unstable and (b) // allow the `rustc_private` feature to link to other unstable crates diff --git a/src/libarena/lib.rs b/src/libarena/lib.rs index 3d16e335cd8f1..a4c6e5b85f9a4 100644 --- a/src/libarena/lib.rs +++ b/src/libarena/lib.rs @@ -12,7 +12,6 @@ test(no_crate_inject, attr(deny(warnings))))] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(core_intrinsics)] diff --git a/src/libfmt_macros/lib.rs b/src/libfmt_macros/lib.rs index f6e9143dd0583..39f130b82ed83 100644 --- a/src/libfmt_macros/lib.rs +++ b/src/libfmt_macros/lib.rs @@ -9,7 +9,6 @@ test(attr(deny(warnings))))] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(nll)] diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index 257d5159f1131..4b58f05bd2e5f 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -29,7 +29,6 @@ #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(arbitrary_self_types)] diff --git a/src/librustc_allocator/lib.rs b/src/librustc_allocator/lib.rs index e7a70895a3023..8d380c47bc4a3 100644 --- a/src/librustc_allocator/lib.rs +++ b/src/librustc_allocator/lib.rs @@ -2,7 +2,6 @@ #![feature(rustc_private)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] pub mod expand; diff --git a/src/librustc_borrowck/lib.rs b/src/librustc_borrowck/lib.rs index 98e629ce046bb..b857c625ec2e7 100644 --- a/src/librustc_borrowck/lib.rs +++ b/src/librustc_borrowck/lib.rs @@ -2,7 +2,6 @@ #![allow(non_camel_case_types)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(in_band_lifetimes)] diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index 7283aa95b3027..2863dacb815e7 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -22,7 +22,6 @@ #![feature(static_nobundle)] #![feature(trusted_len)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] use back::write::{create_target_machine, create_informational_target_machine}; diff --git a/src/librustc_codegen_ssa/lib.rs b/src/librustc_codegen_ssa/lib.rs index b76f098773f0b..3e8bd4ca0b808 100644 --- a/src/librustc_codegen_ssa/lib.rs +++ b/src/librustc_codegen_ssa/lib.rs @@ -13,7 +13,6 @@ #![allow(unused_attributes)] #![allow(dead_code)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![recursion_limit="256"] diff --git a/src/librustc_codegen_utils/lib.rs b/src/librustc_codegen_utils/lib.rs index 942c2d13fac87..f38b672afd939 100644 --- a/src/librustc_codegen_utils/lib.rs +++ b/src/librustc_codegen_utils/lib.rs @@ -17,7 +17,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 5fb6ed31b0693..1cbc542b9abcc 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -17,7 +17,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] pub extern crate getopts; diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 05cee6dff2309..03869e07f5527 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -10,7 +10,6 @@ #![feature(nll)] #![feature(optin_builtin_traits)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[allow(unused_extern_crates)] diff --git a/src/librustc_incremental/lib.rs b/src/librustc_incremental/lib.rs index ffea495d3ebdb..569aa78c9d4b3 100644 --- a/src/librustc_incremental/lib.rs +++ b/src/librustc_incremental/lib.rs @@ -9,7 +9,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] extern crate rustc; diff --git a/src/librustc_interface/lib.rs b/src/librustc_interface/lib.rs index 7fc311d40c3d0..4bc50c24e817c 100644 --- a/src/librustc_interface/lib.rs +++ b/src/librustc_interface/lib.rs @@ -7,7 +7,6 @@ #![cfg_attr(unix, feature(libc))] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![allow(unused_imports)] diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 8a5fde322b2a7..d3e3558965200 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -20,7 +20,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] diff --git a/src/librustc_metadata/lib.rs b/src/librustc_metadata/lib.rs index e49ca8acf6702..826349362db25 100644 --- a/src/librustc_metadata/lib.rs +++ b/src/librustc_metadata/lib.rs @@ -15,7 +15,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] extern crate libc; diff --git a/src/librustc_mir/lib.rs b/src/librustc_mir/lib.rs index cb02e1a778c93..d118d66326cf2 100644 --- a/src/librustc_mir/lib.rs +++ b/src/librustc_mir/lib.rs @@ -28,7 +28,6 @@ Rust MIR: a lowered representation of Rust. Also: an experiment! #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] extern crate log; diff --git a/src/librustc_passes/lib.rs b/src/librustc_passes/lib.rs index 5f3d7159be6ce..0a96ad3e3445e 100644 --- a/src/librustc_passes/lib.rs +++ b/src/librustc_passes/lib.rs @@ -14,7 +14,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 0fdc9ac890350..c0cebfe8153f7 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -1,7 +1,6 @@ #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(in_band_lifetimes)] diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 3b418d0dbb665..13afc0f006ca0 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -11,7 +11,6 @@ #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] pub use rustc::hir::def::{Namespace, PerNS}; diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 23fe150c6ff65..1294404d09883 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -1,7 +1,6 @@ #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")] #![feature(nll)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![allow(unused_attributes)] diff --git a/src/librustc_target/lib.rs b/src/librustc_target/lib.rs index 1bebe420251fd..b65813fd8e38d 100644 --- a/src/librustc_target/lib.rs +++ b/src/librustc_target/lib.rs @@ -16,7 +16,6 @@ #![feature(step_trait)] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] extern crate log; diff --git a/src/librustc_traits/lib.rs b/src/librustc_traits/lib.rs index 7311fd96dadc7..12b19a2648d7f 100644 --- a/src/librustc_traits/lib.rs +++ b/src/librustc_traits/lib.rs @@ -2,7 +2,6 @@ //! the guts are broken up into modules; see the comments in those modules. #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(crate_visibility_modifier)] diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs index ec0f431d9b25e..7063dbbd4b458 100644 --- a/src/librustc_typeck/lib.rs +++ b/src/librustc_typeck/lib.rs @@ -73,7 +73,6 @@ This API is completely unstable and subject to change. #![recursion_limit="256"] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #[macro_use] extern crate log; diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 7a8b088020c53..f2e9fc29668a5 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -1,5 +1,4 @@ #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/", diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index 337b84247361d..baaaa63f2872b 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -8,7 +8,6 @@ test(attr(deny(warnings))))] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(bind_by_move_pattern_guards)] diff --git a/src/libsyntax_ext/lib.rs b/src/libsyntax_ext/lib.rs index b868f5b273c4e..77b69ddd303b4 100644 --- a/src/libsyntax_ext/lib.rs +++ b/src/libsyntax_ext/lib.rs @@ -3,7 +3,6 @@ #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(in_band_lifetimes)] diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index 2dd409bf5bee0..07b9f60932024 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -7,7 +7,6 @@ #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(rust_2018_idioms)] -#![deny(internal)] #![deny(unused_lifetimes)] #![feature(const_fn)] From 65c81dee75a39dc990485f181e3eaf055dc37fa4 Mon Sep 17 00:00:00 2001 From: flip1995 Date: Mon, 17 Jun 2019 17:05:45 +0200 Subject: [PATCH 04/32] Allow default_hash_types in some crates --- src/librustc/lint/internal.rs | 2 +- src/librustc_data_structures/lib.rs | 1 + src/librustc_macros/src/lib.rs | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/librustc/lint/internal.rs b/src/librustc/lint/internal.rs index 9763801f0d9a8..e458e07cda4ed 100644 --- a/src/librustc/lint/internal.rs +++ b/src/librustc/lint/internal.rs @@ -23,7 +23,7 @@ pub struct DefaultHashTypes { impl DefaultHashTypes { // we are allowed to use `HashMap` and `HashSet` as identifiers for implementing the lint itself - #[allow(internal)] + #[allow(default_hash_types)] pub fn new() -> Self { let mut map = FxHashMap::default(); map.insert(sym::HashMap, sym::FxHashMap); diff --git a/src/librustc_data_structures/lib.rs b/src/librustc_data_structures/lib.rs index a1d7ab8856daa..96fb8deb2cf43 100644 --- a/src/librustc_data_structures/lib.rs +++ b/src/librustc_data_structures/lib.rs @@ -27,6 +27,7 @@ #![cfg_attr(test, feature(test))] #![deny(rust_2018_idioms)] +#![allow(default_hash_types)] #[macro_use] extern crate log; diff --git a/src/librustc_macros/src/lib.rs b/src/librustc_macros/src/lib.rs index 98fba55218f9b..cc85ef6717ed1 100644 --- a/src/librustc_macros/src/lib.rs +++ b/src/librustc_macros/src/lib.rs @@ -1,5 +1,6 @@ #![feature(proc_macro_hygiene)] #![deny(rust_2018_idioms)] +#![allow(default_hash_types)] extern crate proc_macro; From 08b81f2d070fdeb5364c96ccb2fdd8d992dff955 Mon Sep 17 00:00:00 2001 From: flip1995 Date: Mon, 17 Jun 2019 17:06:11 +0200 Subject: [PATCH 05/32] Rename internal -> rustc::internal --- src/bootstrap/bin/rustc.rs | 4 +++- src/librustc_lint/lib.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 34bd62d300d87..5b5e9e0def238 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -310,7 +310,9 @@ fn main() { let crate_name = crate_name[1].to_string_lossy(); if crate_name.starts_with("rustc") || crate_name.starts_with("syntax") { cmd.arg("-Zunstable-options"); - cmd.arg("-Winternal"); + if stage != "0" { + cmd.arg("-Wrustc::internal"); + } } } diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index d3e3558965200..8053c73849d9e 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -497,7 +497,7 @@ pub fn register_internals(store: &mut lint::LintStore, sess: Option<&Session>) { store.register_group( sess, false, - "internal", + "rustc::internal", None, vec![ LintId::of(DEFAULT_HASH_TYPES), From 7de6f5472812a7dde8ffba399b71a3c558cd44bf Mon Sep 17 00:00:00 2001 From: flip1995 Date: Mon, 24 Jun 2019 10:43:51 +0200 Subject: [PATCH 06/32] Turn internal lints into tool lints --- src/bootstrap/bin/rustc.rs | 8 +++++-- src/librustc/lint/context.rs | 4 ++-- src/librustc/lint/internal.rs | 22 +++++++++---------- src/librustc/ty/mod.rs | 2 +- src/librustc_data_structures/lib.rs | 2 +- src/librustc_macros/src/lib.rs | 2 +- src/libsyntax/attr/mod.rs | 2 +- .../ui-fulldeps/auxiliary/lint-tool-test.rs | 12 +++++++--- .../internal-lints/default_hash_types.rs | 2 +- .../internal-lints/default_hash_types.stderr | 4 ++-- .../lint_pass_impl_without_macro.rs | 2 +- .../lint_pass_impl_without_macro.stderr | 4 ++-- .../internal-lints/pass_ty_by_ref.rs | 2 +- .../internal-lints/pass_ty_by_ref.stderr | 4 ++-- .../internal-lints/qualified_ty_ty_ctxt.rs | 2 +- .../qualified_ty_ty_ctxt.stderr | 4 ++-- .../internal-lints/ty_tykind_usage.rs | 2 +- .../internal-lints/ty_tykind_usage.stderr | 4 ++-- 18 files changed, 47 insertions(+), 37 deletions(-) diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 5b5e9e0def238..a1333ff3dc700 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -306,10 +306,14 @@ fn main() { } // This is required for internal lints. + cmd.arg("-Zunstable-options"); if let Some(crate_name) = args.windows(2).find(|a| &*a[0] == "--crate-name") { let crate_name = crate_name[1].to_string_lossy(); - if crate_name.starts_with("rustc") || crate_name.starts_with("syntax") { - cmd.arg("-Zunstable-options"); + if crate_name.starts_with("rustc") + || crate_name.starts_with("syntax") + || crate_name == "arena" + || crate_name == "fmt_macros" + { if stage != "0" { cmd.arg("-Wrustc::internal"); } diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 7203dd9beaae4..950f7ad2e089f 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -1341,7 +1341,7 @@ struct LateLintPassObjects<'a> { lints: &'a mut [LateLintPassObject], } -#[cfg_attr(not(stage0), allow(lint_pass_impl_without_macro))] +#[cfg_attr(not(bootstrap), allow(rustc::lint_pass_impl_without_macro))] impl LintPass for LateLintPassObjects<'_> { fn name(&self) -> &'static str { panic!() @@ -1511,7 +1511,7 @@ struct EarlyLintPassObjects<'a> { lints: &'a mut [EarlyLintPassObject], } -#[cfg_attr(not(stage0), allow(lint_pass_impl_without_macro))] +#[cfg_attr(not(bootstrap), allow(rustc::lint_pass_impl_without_macro))] impl LintPass for EarlyLintPassObjects<'_> { fn name(&self) -> &'static str { panic!() diff --git a/src/librustc/lint/internal.rs b/src/librustc/lint/internal.rs index e458e07cda4ed..3489973694967 100644 --- a/src/librustc/lint/internal.rs +++ b/src/librustc/lint/internal.rs @@ -11,8 +11,8 @@ use syntax::ast::{Ident, Item, ItemKind}; use syntax::symbol::{sym, Symbol}; use syntax_pos::ExpnInfo; -declare_lint! { - pub DEFAULT_HASH_TYPES, +declare_tool_lint! { + pub rustc::DEFAULT_HASH_TYPES, Allow, "forbid HashMap and HashSet and suggest the FxHash* variants" } @@ -23,7 +23,7 @@ pub struct DefaultHashTypes { impl DefaultHashTypes { // we are allowed to use `HashMap` and `HashSet` as identifiers for implementing the lint itself - #[allow(default_hash_types)] + #[cfg_attr(not(bootstrap), allow(rustc::default_hash_types))] pub fn new() -> Self { let mut map = FxHashMap::default(); map.insert(sym::HashMap, sym::FxHashMap); @@ -51,20 +51,20 @@ impl EarlyLintPass for DefaultHashTypes { } } -declare_lint! { - pub USAGE_OF_TY_TYKIND, +declare_tool_lint! { + pub rustc::USAGE_OF_TY_TYKIND, Allow, "usage of `ty::TyKind` outside of the `ty::sty` module" } -declare_lint! { - pub TY_PASS_BY_REFERENCE, +declare_tool_lint! { + pub rustc::TY_PASS_BY_REFERENCE, Allow, "passing `Ty` or `TyCtxt` by reference" } -declare_lint! { - pub USAGE_OF_QUALIFIED_TY, +declare_tool_lint! { + pub rustc::USAGE_OF_QUALIFIED_TY, Allow, "using `ty::{Ty,TyCtxt}` instead of importing it" } @@ -215,8 +215,8 @@ fn gen_args(segment: &PathSegment) -> String { String::new() } -declare_lint! { - pub LINT_PASS_IMPL_WITHOUT_MACRO, +declare_tool_lint! { + pub rustc::LINT_PASS_IMPL_WITHOUT_MACRO, Allow, "`impl LintPass` without the `declare_lint_pass!` or `impl_lint_pass!` macros" } diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index ad9880725128f..796b2b3c1a1c8 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -1,6 +1,6 @@ // ignore-tidy-filelength -#![allow(usage_of_ty_tykind)] +#![cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] pub use self::Variance::*; pub use self::AssocItemContainer::*; diff --git a/src/librustc_data_structures/lib.rs b/src/librustc_data_structures/lib.rs index 96fb8deb2cf43..7609e9591fb0a 100644 --- a/src/librustc_data_structures/lib.rs +++ b/src/librustc_data_structures/lib.rs @@ -27,7 +27,7 @@ #![cfg_attr(test, feature(test))] #![deny(rust_2018_idioms)] -#![allow(default_hash_types)] +#![cfg_attr(not(bootstrap), allow(rustc::default_hash_types))] #[macro_use] extern crate log; diff --git a/src/librustc_macros/src/lib.rs b/src/librustc_macros/src/lib.rs index cc85ef6717ed1..28996f93312b2 100644 --- a/src/librustc_macros/src/lib.rs +++ b/src/librustc_macros/src/lib.rs @@ -1,6 +1,6 @@ #![feature(proc_macro_hygiene)] #![deny(rust_2018_idioms)] -#![allow(default_hash_types)] +#![cfg_attr(not(bootstrap), allow(rustc::default_hash_types))] extern crate proc_macro; diff --git a/src/libsyntax/attr/mod.rs b/src/libsyntax/attr/mod.rs index 436620ae7293b..08bea08c2574e 100644 --- a/src/libsyntax/attr/mod.rs +++ b/src/libsyntax/attr/mod.rs @@ -60,7 +60,7 @@ pub fn is_known(attr: &Attribute) -> bool { } pub fn is_known_lint_tool(m_item: Ident) -> bool { - ["clippy"].contains(&m_item.as_str().as_ref()) + ["clippy", "rustc"].contains(&m_item.as_str().as_ref()) } impl NestedMetaItem { diff --git a/src/test/ui-fulldeps/auxiliary/lint-tool-test.rs b/src/test/ui-fulldeps/auxiliary/lint-tool-test.rs index 64664377cd943..2a57876f464c0 100644 --- a/src/test/ui-fulldeps/auxiliary/lint-tool-test.rs +++ b/src/test/ui-fulldeps/auxiliary/lint-tool-test.rs @@ -8,8 +8,7 @@ extern crate syntax; extern crate rustc; extern crate rustc_plugin; -use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass, - LintArray}; +use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass}; use rustc_plugin::Registry; use syntax::ast; declare_tool_lint!(pub clippy::TEST_LINT, Warn, "Warn about stuff"); @@ -19,7 +18,14 @@ declare_tool_lint!( Warn, "Warn about other stuff" ); -declare_lint_pass!(Pass => [TEST_LINT, TEST_GROUP]); +declare_tool_lint!( + /// Some docs + pub rustc::TEST_RUSTC_TOOL_LINT, + Deny, + "Deny internal stuff" +); + +declare_lint_pass!(Pass => [TEST_LINT, TEST_GROUP, TEST_RUSTC_TOOL_LINT]); impl EarlyLintPass for Pass { fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) { diff --git a/src/test/ui-fulldeps/internal-lints/default_hash_types.rs b/src/test/ui-fulldeps/internal-lints/default_hash_types.rs index 3264099c876d0..3786c6de7e78c 100644 --- a/src/test/ui-fulldeps/internal-lints/default_hash_types.rs +++ b/src/test/ui-fulldeps/internal-lints/default_hash_types.rs @@ -7,7 +7,7 @@ extern crate rustc_data_structures; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use std::collections::{HashMap, HashSet}; -#[deny(default_hash_types)] +#[deny(rustc::default_hash_types)] fn main() { let _map: HashMap = HashMap::default(); //~^ ERROR Prefer FxHashMap over HashMap, it has better performance diff --git a/src/test/ui-fulldeps/internal-lints/default_hash_types.stderr b/src/test/ui-fulldeps/internal-lints/default_hash_types.stderr index 64f322cb0c165..c1762d31323cf 100644 --- a/src/test/ui-fulldeps/internal-lints/default_hash_types.stderr +++ b/src/test/ui-fulldeps/internal-lints/default_hash_types.stderr @@ -7,8 +7,8 @@ LL | let _map: HashMap = HashMap::default(); note: lint level defined here --> $DIR/default_hash_types.rs:10:8 | -LL | #[deny(default_hash_types)] - | ^^^^^^^^^^^^^^^^^^ +LL | #[deny(rustc::default_hash_types)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ = note: a `use rustc_data_structures::fx::FxHashMap` may be necessary error: Prefer FxHashMap over HashMap, it has better performance diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs index 89fa838768e8e..48dd5b122b5ac 100644 --- a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs @@ -1,7 +1,7 @@ // compile-flags: -Z unstable-options #![feature(rustc_private)] -#![deny(lint_pass_impl_without_macro)] +#![deny(rustc::lint_pass_impl_without_macro)] extern crate rustc; diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr index a033b0a07e006..b439ae2cd148d 100644 --- a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr @@ -7,8 +7,8 @@ LL | impl LintPass for Foo { note: lint level defined here --> $DIR/lint_pass_impl_without_macro.rs:4:9 | -LL | #![deny(lint_pass_impl_without_macro)] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | #![deny(rustc::lint_pass_impl_without_macro)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: try using `declare_lint_pass!` or `impl_lint_pass!` instead error: implementing `LintPass` by hand diff --git a/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.rs b/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.rs index 9534ddbbc6471..7564c0245802d 100644 --- a/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.rs +++ b/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.rs @@ -1,7 +1,7 @@ // compile-flags: -Z unstable-options #![feature(rustc_private)] -#![deny(ty_pass_by_reference)] +#![deny(rustc::ty_pass_by_reference)] #![allow(unused)] extern crate rustc; diff --git a/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.stderr b/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.stderr index 0f9f24b98a08c..d2ed6b6a19c31 100644 --- a/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.stderr +++ b/src/test/ui-fulldeps/internal-lints/pass_ty_by_ref.stderr @@ -7,8 +7,8 @@ LL | ty_ref: &Ty<'_>, note: lint level defined here --> $DIR/pass_ty_by_ref.rs:4:9 | -LL | #![deny(ty_pass_by_reference)] - | ^^^^^^^^^^^^^^^^^^^^ +LL | #![deny(rustc::ty_pass_by_reference)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: passing `TyCtxt<'_>` by reference --> $DIR/pass_ty_by_ref.rs:15:18 diff --git a/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs b/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs index 56033100344a6..0040230ec7d7c 100644 --- a/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs +++ b/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs @@ -1,7 +1,7 @@ // compile-flags: -Z unstable-options #![feature(rustc_private)] -#![deny(usage_of_qualified_ty)] +#![deny(rustc::usage_of_qualified_ty)] #![allow(unused)] extern crate rustc; diff --git a/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.stderr b/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.stderr index c3642e6a4ba74..72c23f8cd3cac 100644 --- a/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.stderr +++ b/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.stderr @@ -7,8 +7,8 @@ LL | ty_q: ty::Ty<'_>, note: lint level defined here --> $DIR/qualified_ty_ty_ctxt.rs:4:9 | -LL | #![deny(usage_of_qualified_ty)] - | ^^^^^^^^^^^^^^^^^^^^^ +LL | #![deny(rustc::usage_of_qualified_ty)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: usage of qualified `ty::TyCtxt<'_>` --> $DIR/qualified_ty_ty_ctxt.rs:27:16 diff --git a/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs b/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs index dba0db69b7f39..c6bd122f4e548 100644 --- a/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs +++ b/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs @@ -6,7 +6,7 @@ extern crate rustc; use rustc::ty::{self, Ty, TyKind}; -#[deny(usage_of_ty_tykind)] +#[deny(rustc::usage_of_ty_tykind)] fn main() { let sty = TyKind::Bool; //~ ERROR usage of `ty::TyKind::` diff --git a/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.stderr b/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.stderr index 10229a331c285..8add4252c4103 100644 --- a/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.stderr +++ b/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.stderr @@ -7,8 +7,8 @@ LL | let sty = TyKind::Bool; note: lint level defined here --> $DIR/ty_tykind_usage.rs:9:8 | -LL | #[deny(usage_of_ty_tykind)] - | ^^^^^^^^^^^^^^^^^^ +LL | #[deny(rustc::usage_of_ty_tykind)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ error: usage of `ty::TyKind::` --> $DIR/ty_tykind_usage.rs:14:9 From 8e087cdd98850f9bdb998ddfa6c4dfe2d4553260 Mon Sep 17 00:00:00 2001 From: flip1995 Date: Mon, 24 Jun 2019 18:14:04 +0200 Subject: [PATCH 07/32] Use symbols in lint tool list --- src/bootstrap/bin/rustc.rs | 11 ++++++----- src/libsyntax/attr/mod.rs | 2 +- src/libsyntax_pos/symbol.rs | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index a1333ff3dc700..242074fec7795 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -306,14 +306,15 @@ fn main() { } // This is required for internal lints. - cmd.arg("-Zunstable-options"); if let Some(crate_name) = args.windows(2).find(|a| &*a[0] == "--crate-name") { let crate_name = crate_name[1].to_string_lossy(); - if crate_name.starts_with("rustc") - || crate_name.starts_with("syntax") - || crate_name == "arena" - || crate_name == "fmt_macros" + if crate_name != "rustc_version" + && (crate_name.starts_with("rustc") + || crate_name.starts_with("syntax") + || crate_name == "arena" + || crate_name == "fmt_macros") { + cmd.arg("-Zunstable-options"); if stage != "0" { cmd.arg("-Wrustc::internal"); } diff --git a/src/libsyntax/attr/mod.rs b/src/libsyntax/attr/mod.rs index 08bea08c2574e..21e0f60a2e7e3 100644 --- a/src/libsyntax/attr/mod.rs +++ b/src/libsyntax/attr/mod.rs @@ -60,7 +60,7 @@ pub fn is_known(attr: &Attribute) -> bool { } pub fn is_known_lint_tool(m_item: Ident) -> bool { - ["clippy", "rustc"].contains(&m_item.as_str().as_ref()) + [sym::clippy, sym::rustc].contains(&m_item.name) } impl NestedMetaItem { diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index 4b8535fa625b9..554512b23bc57 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -173,6 +173,7 @@ symbols! { cfg_target_thread_local, cfg_target_vendor, char, + clippy, clone, Clone, clone_closures, From d0625a380b03e83fcfc2f0230986186992d13c71 Mon Sep 17 00:00:00 2001 From: flip1995 Date: Mon, 24 Jun 2019 18:14:53 +0200 Subject: [PATCH 08/32] Allow usage_of_ty_tykind only in sty and in some special cases --- src/librustc/ty/codec.rs | 2 ++ src/librustc/ty/context.rs | 3 +++ src/librustc/ty/flags.rs | 2 ++ src/librustc/ty/mod.rs | 37 ++++++++++++++++++------------------- src/librustc/ty/sty.rs | 2 ++ 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/librustc/ty/codec.rs b/src/librustc/ty/codec.rs index 224f7d5f28dc3..26e7cc9004d4e 100644 --- a/src/librustc/ty/codec.rs +++ b/src/librustc/ty/codec.rs @@ -27,6 +27,7 @@ pub trait EncodableWithShorthand: Clone + Eq + Hash { fn variant(&self) -> &Self::Variant; } +#[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] impl<'tcx> EncodableWithShorthand for Ty<'tcx> { type Variant = ty::TyKind<'tcx>; fn variant(&self) -> &Self::Variant { @@ -159,6 +160,7 @@ where Ok(decoder.map_encoded_cnum_to_current(cnum)) } +#[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] #[inline] pub fn decode_ty(decoder: &mut D) -> Result, D::Error> where diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 28399ed5439f7..a00eed3fdda95 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -135,6 +135,7 @@ impl<'tcx> CtxtInterners<'tcx> { } /// Intern a type + #[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] #[inline(never)] fn intern_ty( local: &CtxtInterners<'tcx>, @@ -2195,6 +2196,7 @@ impl<'tcx> Hash for Interned<'tcx, TyS<'tcx>> { } } +#[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] impl<'tcx> Borrow> for Interned<'tcx, TyS<'tcx>> { fn borrow<'a>(&'a self) -> &'a TyKind<'tcx> { &self.0.sty @@ -2429,6 +2431,7 @@ impl<'tcx> TyCtxt<'tcx> { self.mk_fn_ptr(converted_sig) } + #[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] #[inline] pub fn mk_ty(&self, st: TyKind<'tcx>) -> Ty<'tcx> { CtxtInterners::intern_ty(&self.interners, &self.global_interners, st) diff --git a/src/librustc/ty/flags.rs b/src/librustc/ty/flags.rs index 8d7e7e16e85cb..411b18e043a20 100644 --- a/src/librustc/ty/flags.rs +++ b/src/librustc/ty/flags.rs @@ -18,6 +18,7 @@ impl FlagComputation { } } + #[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] pub fn for_sty(st: &ty::TyKind<'_>) -> FlagComputation { let mut result = FlagComputation::new(); result.add_sty(st); @@ -61,6 +62,7 @@ impl FlagComputation { } // otherwise, this binder captures nothing } + #[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] fn add_sty(&mut self, st: &ty::TyKind<'_>) { match st { &ty::Bool | diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index 796b2b3c1a1c8..90c18a7e364ea 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -1,7 +1,5 @@ // ignore-tidy-filelength -#![cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] - pub use self::Variance::*; pub use self::AssocItemContainer::*; pub use self::BorrowKind::*; @@ -484,6 +482,7 @@ bitflags! { } } +#[cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] pub struct TyS<'tcx> { pub sty: TyKind<'tcx>, pub flags: TypeFlags, @@ -541,29 +540,29 @@ impl<'tcx> Hash for TyS<'tcx> { impl<'tcx> TyS<'tcx> { pub fn is_primitive_ty(&self) -> bool { match self.sty { - TyKind::Bool | - TyKind::Char | - TyKind::Int(_) | - TyKind::Uint(_) | - TyKind::Float(_) | - TyKind::Infer(InferTy::IntVar(_)) | - TyKind::Infer(InferTy::FloatVar(_)) | - TyKind::Infer(InferTy::FreshIntTy(_)) | - TyKind::Infer(InferTy::FreshFloatTy(_)) => true, - TyKind::Ref(_, x, _) => x.is_primitive_ty(), + Bool | + Char | + Int(_) | + Uint(_) | + Float(_) | + Infer(InferTy::IntVar(_)) | + Infer(InferTy::FloatVar(_)) | + Infer(InferTy::FreshIntTy(_)) | + Infer(InferTy::FreshFloatTy(_)) => true, + Ref(_, x, _) => x.is_primitive_ty(), _ => false, } } pub fn is_suggestable(&self) -> bool { match self.sty { - TyKind::Opaque(..) | - TyKind::FnDef(..) | - TyKind::FnPtr(..) | - TyKind::Dynamic(..) | - TyKind::Closure(..) | - TyKind::Infer(..) | - TyKind::Projection(..) => false, + Opaque(..) | + FnDef(..) | + FnPtr(..) | + Dynamic(..) | + Closure(..) | + Infer(..) | + Projection(..) => false, _ => true, } } diff --git a/src/librustc/ty/sty.rs b/src/librustc/ty/sty.rs index 8bfbd8b854b03..5d17080a9b2bc 100644 --- a/src/librustc/ty/sty.rs +++ b/src/librustc/ty/sty.rs @@ -1,5 +1,7 @@ //! This module contains `TyKind` and its major components. +#![cfg_attr(not(bootstrap), allow(rustc::usage_of_ty_tykind))] + use crate::hir; use crate::hir::def_id::DefId; use crate::infer::canonical::Canonical; From e47553909650b4e4339e902eaa19c0fbdf3610ab Mon Sep 17 00:00:00 2001 From: Christian Poveda Date: Wed, 26 Jun 2019 13:13:19 -0500 Subject: [PATCH 09/32] Add MemoryExtra in InterpretCx constructor params --- src/librustc_mir/const_eval.rs | 8 ++++++-- src/librustc_mir/interpret/eval_context.rs | 9 +++++++-- src/librustc_mir/interpret/memory.rs | 4 ++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/librustc_mir/const_eval.rs b/src/librustc_mir/const_eval.rs index 887ef4b520ea3..96e45c2c8fe5b 100644 --- a/src/librustc_mir/const_eval.rs +++ b/src/librustc_mir/const_eval.rs @@ -47,7 +47,7 @@ pub(crate) fn mk_eval_cx<'mir, 'tcx>( param_env: ty::ParamEnv<'tcx>, ) -> CompileTimeEvalContext<'mir, 'tcx> { debug!("mk_eval_cx: {:?}", param_env); - InterpretCx::new(tcx.at(span), param_env, CompileTimeInterpreter::new()) + InterpretCx::new(tcx.at(span), param_env, CompileTimeInterpreter::new(), Default::default()) } pub(crate) fn eval_promoted<'mir, 'tcx>( @@ -632,7 +632,11 @@ pub fn const_eval_raw_provider<'tcx>( } let span = tcx.def_span(cid.instance.def_id()); - let mut ecx = InterpretCx::new(tcx.at(span), key.param_env, CompileTimeInterpreter::new()); + let mut ecx = InterpretCx::new( + tcx.at(span), + key.param_env, + CompileTimeInterpreter::new(), + Default::default()); let res = ecx.load_mir(cid.instance.def); res.map(|body| { diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index c6e762bddd4d9..4c4330ffb261d 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -196,12 +196,17 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf for InterpretCx<'mir, 'tcx, M> } impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpretCx<'mir, 'tcx, M> { - pub fn new(tcx: TyCtxtAt<'tcx>, param_env: ty::ParamEnv<'tcx>, machine: M) -> Self { + pub fn new( + tcx: TyCtxtAt<'tcx>, + param_env: ty::ParamEnv<'tcx>, + machine: M, + memory_extra: M::MemoryExtra, + ) -> Self { InterpretCx { machine, tcx, param_env, - memory: Memory::new(tcx), + memory: Memory::new(tcx, memory_extra), stack: Vec::new(), vtables: FxHashMap::default(), } diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs index c3eec677a4850..c06fdccf6cac6 100644 --- a/src/librustc_mir/interpret/memory.rs +++ b/src/librustc_mir/interpret/memory.rs @@ -106,11 +106,11 @@ where } impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> { - pub fn new(tcx: TyCtxtAt<'tcx>) -> Self { + pub fn new(tcx: TyCtxtAt<'tcx>, extra: M::MemoryExtra) -> Self { Memory { alloc_map: M::MemoryMap::default(), dead_alloc_map: FxHashMap::default(), - extra: M::MemoryExtra::default(), + extra, tcx, } } From e32b8eb00a94274e680d1ae63c429d5b7db65e99 Mon Sep 17 00:00:00 2001 From: Christian Poveda Date: Wed, 26 Jun 2019 13:56:33 -0500 Subject: [PATCH 10/32] Remove default bound for Machine::MemoryExtra --- src/librustc_mir/const_eval.rs | 3 ++- src/librustc_mir/interpret/machine.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/librustc_mir/const_eval.rs b/src/librustc_mir/const_eval.rs index 96e45c2c8fe5b..4d5a2ccf659bb 100644 --- a/src/librustc_mir/const_eval.rs +++ b/src/librustc_mir/const_eval.rs @@ -636,7 +636,8 @@ pub fn const_eval_raw_provider<'tcx>( tcx.at(span), key.param_env, CompileTimeInterpreter::new(), - Default::default()); + Default::default() + ); let res = ecx.load_mir(cid.instance.def); res.map(|body| { diff --git a/src/librustc_mir/interpret/machine.rs b/src/librustc_mir/interpret/machine.rs index 4eb95f20d9354..a3956e12300f1 100644 --- a/src/librustc_mir/interpret/machine.rs +++ b/src/librustc_mir/interpret/machine.rs @@ -73,7 +73,7 @@ pub trait Machine<'mir, 'tcx>: Sized { /// Extra data stored in memory. A reference to this is available when `AllocExtra` /// gets initialized, so you can e.g., have an `Rc` here if there is global state you /// need access to in the `AllocExtra` hooks. - type MemoryExtra: Default; + type MemoryExtra; /// Extra data stored in every allocation. type AllocExtra: AllocationExtra + 'static; From 0ffb6438a6b19135cdfd3461dbd9efaf0011a149 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 29 Jun 2019 14:06:22 +0300 Subject: [PATCH 11/32] Make sure `#[rustc_doc_only_macro]` and other rustc attributes are registered --- src/libcore/lib.rs | 1 + src/librustc_resolve/macros.rs | 12 +---- src/libsyntax/ext/expand.rs | 4 +- src/libsyntax/feature_gate.rs | 52 ++++++++++++++----- .../run-pass-fulldeps/issue-15778-pass.rs | 5 +- src/test/run-pass/attr-on-generic-formals.rs | 52 ------------------- .../attrs-with-no-formal-in-generics-1.rs | 6 +-- .../attrs-with-no-formal-in-generics-1.stderr | 6 +-- .../attrs-with-no-formal-in-generics-2.rs | 2 +- .../attrs-with-no-formal-in-generics-2.stderr | 6 +-- .../allow_const_fn_ptr_feature_gate.rs | 2 +- .../allow_const_fn_ptr_feature_gate.stderr | 6 +-- .../feature-gates/feature-gate-rustc-attrs.rs | 4 +- .../feature-gate-rustc-attrs.stderr | 8 +-- src/test/ui/generic/generic-param-attrs.rs | 44 +++++++--------- .../ty-outlives/projection-implied-bounds.rs | 7 +-- .../projection-implied-bounds.stderr | 2 +- .../ty-outlives/ty-param-implied-bounds.rs | 4 -- .../object-lifetime-default.stderr | 48 ++++++++--------- .../ui/proc-macro/expand-to-unstable-2.rs | 4 +- .../ui/proc-macro/expand-to-unstable-2.stderr | 6 +-- .../ui/reserved/reserved-attr-on-macro.rs | 2 +- .../ui/reserved/reserved-attr-on-macro.stderr | 4 +- src/test/ui/suggestions/attribute-typos.rs | 17 +++--- .../ui/suggestions/attribute-typos.stderr | 8 +-- 25 files changed, 127 insertions(+), 185 deletions(-) delete mode 100644 src/test/run-pass/attr-on-generic-formals.rs diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs index 04c50329de3d0..1f31b65b3603b 100644 --- a/src/libcore/lib.rs +++ b/src/libcore/lib.rs @@ -74,6 +74,7 @@ #![feature(concat_idents)] #![feature(const_fn)] #![feature(const_fn_union)] +#![feature(custom_inner_attributes)] #![feature(doc_cfg)] #![feature(doc_spotlight)] #![feature(extern_types)] diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 392a46a262f50..08a105572376c 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -323,21 +323,13 @@ impl<'a> Resolver<'a> { let features = self.session.features_untracked(); if attr_kind == NonMacroAttrKind::Custom { assert!(path.segments.len() == 1); - let name = path.segments[0].ident.as_str(); - if name.starts_with("rustc_") { - if !features.rustc_attrs { - let msg = "unless otherwise specified, attributes with the prefix \ - `rustc_` are reserved for internal compiler diagnostics"; - self.report_unknown_attribute(path.span, &name, msg, - sym::rustc_attrs); - } - } else if !features.custom_attribute { + if !features.custom_attribute { let msg = format!("The attribute `{}` is currently unknown to the \ compiler and may have meaning added to it in the \ future", path); self.report_unknown_attribute( path.span, - &name, + &path.segments[0].ident.as_str(), &msg, sym::custom_attribute, ); diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 5473f55aa3370..3f2bae50325d5 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -1525,9 +1525,7 @@ impl<'feat> ExpansionConfig<'feat> { } fn enable_custom_inner_attributes(&self) -> bool { - self.features.map_or(false, |features| { - features.custom_inner_attributes || features.custom_attribute || features.rustc_attrs - }) + self.features.map_or(false, |features| features.custom_inner_attributes) } } diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index a6e8441a915e0..9aea995831edb 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1290,6 +1290,18 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[ attribute is just used for rustc unit \ tests and will never be stable", cfg_fn!(rustc_attrs))), + (sym::rustc_dump_env_program_clauses, Whitelisted, template!(Word), Gated(Stability::Unstable, + sym::rustc_attrs, + "the `#[rustc_dump_env_program_clauses]` \ + attribute is just used for rustc unit \ + tests and will never be stable", + cfg_fn!(rustc_attrs))), + (sym::rustc_object_lifetime_default, Whitelisted, template!(Word), Gated(Stability::Unstable, + sym::rustc_attrs, + "the `#[rustc_object_lifetime_default]` \ + attribute is just used for rustc unit \ + tests and will never be stable", + cfg_fn!(rustc_attrs))), (sym::rustc_test_marker, Normal, template!(Word), Gated(Stability::Unstable, sym::rustc_attrs, "the `#[rustc_test_marker]` attribute \ @@ -1351,6 +1363,26 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[ "internal implementation detail", cfg_fn!(rustc_attrs))), + (sym::rustc_allocator_nounwind, Whitelisted, template!(Word), Gated(Stability::Unstable, + sym::rustc_attrs, + "internal implementation detail", + cfg_fn!(rustc_attrs))), + + (sym::rustc_doc_only_macro, Whitelisted, template!(Word), Gated(Stability::Unstable, + sym::rustc_attrs, + "internal implementation detail", + cfg_fn!(rustc_attrs))), + + (sym::rustc_promotable, Whitelisted, template!(Word), Gated(Stability::Unstable, + sym::rustc_attrs, + "internal implementation detail", + cfg_fn!(rustc_attrs))), + + (sym::rustc_allow_const_fn_ptr, Whitelisted, template!(Word), Gated(Stability::Unstable, + sym::rustc_attrs, + "internal implementation detail", + cfg_fn!(rustc_attrs))), + (sym::rustc_dummy, Normal, template!(Word /* doesn't matter*/), Gated(Stability::Unstable, sym::rustc_attrs, "used by the test suite", @@ -1647,19 +1679,13 @@ impl<'a> Context<'a> { return; } } - if !attr::is_known(attr) { - if attr.name_or_empty().as_str().starts_with("rustc_") { - let msg = "unless otherwise specified, attributes with the prefix `rustc_` \ - are reserved for internal compiler diagnostics"; - gate_feature!(self, rustc_attrs, attr.span, msg); - } else if !is_macro { - // Only run the custom attribute lint during regular feature gate - // checking. Macro gating runs before the plugin attributes are - // registered, so we skip this in that case. - let msg = format!("The attribute `{}` is currently unknown to the compiler and \ - may have meaning added to it in the future", attr.path); - gate_feature!(self, custom_attribute, attr.span, &msg); - } + if !is_macro && !attr::is_known(attr) { + // Only run the custom attribute lint during regular feature gate + // checking. Macro gating runs before the plugin attributes are + // registered, so we skip this in that case. + let msg = format!("The attribute `{}` is currently unknown to the compiler and \ + may have meaning added to it in the future", attr.path); + gate_feature!(self, custom_attribute, attr.span, &msg); } } } diff --git a/src/test/run-pass-fulldeps/issue-15778-pass.rs b/src/test/run-pass-fulldeps/issue-15778-pass.rs index 2add3ccbe36f2..23c1c0766770b 100644 --- a/src/test/run-pass-fulldeps/issue-15778-pass.rs +++ b/src/test/run-pass-fulldeps/issue-15778-pass.rs @@ -2,7 +2,8 @@ // ignore-stage1 // compile-flags: -D crate-not-okay -#![feature(plugin, rustc_attrs)] +#![feature(plugin, custom_attribute, custom_inner_attributes)] + #![plugin(lint_for_crate)] #![rustc_crate_okay] #![rustc_crate_blue] @@ -10,4 +11,4 @@ #![rustc_crate_grey] #![rustc_crate_green] -pub fn main() { } +fn main() {} diff --git a/src/test/run-pass/attr-on-generic-formals.rs b/src/test/run-pass/attr-on-generic-formals.rs deleted file mode 100644 index 9ebf0fcb1c192..0000000000000 --- a/src/test/run-pass/attr-on-generic-formals.rs +++ /dev/null @@ -1,52 +0,0 @@ -#![allow(unused_attributes)] - -// This test ensures we can attach attributes to the formals in all -// places where generic parameter lists occur, assuming appropriate -// feature gates are enabled. -// -// (We are prefixing all tested features with `rustc_`, to ensure that -// the attributes themselves won't be rejected by the compiler when -// using `rustc_attrs` feature. There is a separate compile-fail/ test -// ensuring that the attribute feature-gating works in this context.) - -#![feature(rustc_attrs)] -#![allow(dead_code)] - -struct StLt<#[rustc_lt_struct] 'a>(&'a u32); -struct StTy<#[rustc_ty_struct] I>(I); - -enum EnLt<#[rustc_lt_enum] 'b> { A(&'b u32), B } -enum EnTy<#[rustc_ty_enum] J> { A(J), B } - -trait TrLt<#[rustc_lt_trait] 'c> { fn foo(&self, _: &'c [u32]) -> &'c u32; } -trait TrTy<#[rustc_ty_trait] K> { fn foo(&self, _: K); } - -type TyLt<#[rustc_lt_type] 'd> = &'d u32; -type TyTy<#[rustc_ty_type] L> = (L, ); - -impl<#[rustc_lt_inherent] 'e> StLt<'e> { } -impl<#[rustc_ty_inherent] M> StTy { } - -impl<#[rustc_lt_impl_for] 'f> TrLt<'f> for StLt<'f> { - fn foo(&self, _: &'f [u32]) -> &'f u32 { loop { } } -} -impl<#[rustc_ty_impl_for] N> TrTy for StTy { - fn foo(&self, _: N) { } -} - -fn f_lt<#[rustc_lt_fn] 'g>(_: &'g [u32]) -> &'g u32 { loop { } } -fn f_ty<#[rustc_ty_fn] O>(_: O) { } - -impl StTy { - fn m_lt<#[rustc_lt_meth] 'h>(_: &'h [u32]) -> &'h u32 { loop { } } - fn m_ty<#[rustc_ty_meth] P>(_: P) { } -} - -fn hof_lt(_: Q) - where Q: for <#[rustc_lt_hof] 'i> Fn(&'i [u32]) -> &'i u32 -{ -} - -fn main() { - -} diff --git a/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.rs b/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.rs index ca5fdd9da859b..df9c8d894652b 100644 --- a/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.rs +++ b/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.rs @@ -6,10 +6,8 @@ struct RefIntPair<'a, 'b>(&'a u32, &'b u32); -impl<#[rustc_1] 'a, 'b, #[oops]> RefIntPair<'a, 'b> { +impl<#[rustc_dummy] 'a, 'b, #[oops]> RefIntPair<'a, 'b> { //~^ ERROR trailing attribute after generic parameter } -fn main() { - -} +fn main() {} diff --git a/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.stderr b/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.stderr index 55e7a9877846f..5b4f5222a2b14 100644 --- a/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.stderr +++ b/src/test/ui/attributes/attrs-with-no-formal-in-generics-1.stderr @@ -1,8 +1,8 @@ error: trailing attribute after generic parameter - --> $DIR/attrs-with-no-formal-in-generics-1.rs:9:25 + --> $DIR/attrs-with-no-formal-in-generics-1.rs:9:29 | -LL | impl<#[rustc_1] 'a, 'b, #[oops]> RefIntPair<'a, 'b> { - | ^^^^^^^ attributes must go before parameters +LL | impl<#[rustc_dummy] 'a, 'b, #[oops]> RefIntPair<'a, 'b> { + | ^^^^^^^ attributes must go before parameters error: aborting due to previous error diff --git a/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.rs b/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.rs index c795612acf08c..d1d044035260b 100644 --- a/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.rs +++ b/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.rs @@ -6,7 +6,7 @@ struct RefAny<'a, T>(&'a T); -impl<#[rustc_1] 'a, #[rustc_2] T, #[oops]> RefAny<'a, T> {} +impl<#[rustc_dummy] 'a, #[rustc_dummy] T, #[oops]> RefAny<'a, T> {} //~^ ERROR trailing attribute after generic parameter fn main() {} diff --git a/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.stderr b/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.stderr index acd0ae3678a7c..fce3ff7de78e8 100644 --- a/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.stderr +++ b/src/test/ui/attributes/attrs-with-no-formal-in-generics-2.stderr @@ -1,8 +1,8 @@ error: trailing attribute after generic parameter - --> $DIR/attrs-with-no-formal-in-generics-2.rs:9:35 + --> $DIR/attrs-with-no-formal-in-generics-2.rs:9:43 | -LL | impl<#[rustc_1] 'a, #[rustc_2] T, #[oops]> RefAny<'a, T> {} - | ^^^^^^^ attributes must go before parameters +LL | impl<#[rustc_dummy] 'a, #[rustc_dummy] T, #[oops]> RefAny<'a, T> {} + | ^^^^^^^ attributes must go before parameters error: aborting due to previous error diff --git a/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.rs b/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.rs index 0395795ef7bfe..0f9d37292958a 100644 --- a/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.rs +++ b/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.rs @@ -5,7 +5,7 @@ const fn error(_: fn()) {} #[stable(feature = "rust1", since = "1.0.0")] #[rustc_allow_const_fn_ptr] -//~^ ERROR unless otherwise specified, attributes with the prefix `rustc_` are reserved +//~^ ERROR internal implementation detail const fn compiles(_: fn()) {} fn main() {} diff --git a/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.stderr b/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.stderr index c934307e918b9..d2ca0c8bc381b 100644 --- a/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.stderr +++ b/src/test/ui/consts/min_const_fn/allow_const_fn_ptr_feature_gate.stderr @@ -1,8 +1,8 @@ -error[E0658]: unless otherwise specified, attributes with the prefix `rustc_` are reserved for internal compiler diagnostics - --> $DIR/allow_const_fn_ptr_feature_gate.rs:7:3 +error[E0658]: internal implementation detail + --> $DIR/allow_const_fn_ptr_feature_gate.rs:7:1 | LL | #[rustc_allow_const_fn_ptr] - | ^^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: for more information, see https://github.com/rust-lang/rust/issues/29642 = help: add #![feature(rustc_attrs)] to the crate attributes to enable diff --git a/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs b/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs index 5ec413cc71de0..95ff18213f797 100644 --- a/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs +++ b/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs @@ -1,6 +1,6 @@ // Test that `#[rustc_*]` attributes are gated by `rustc_attrs` feature gate. -#[rustc_foo] -//~^ ERROR unless otherwise specified, attributes with the prefix `rustc_` are reserved +#[rustc_dummy] +//~^ ERROR used by the test suite fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr b/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr index 3c823c8d4e25f..57dcc77e518f3 100644 --- a/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr +++ b/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr @@ -1,8 +1,8 @@ -error[E0658]: unless otherwise specified, attributes with the prefix `rustc_` are reserved for internal compiler diagnostics - --> $DIR/feature-gate-rustc-attrs.rs:3:3 +error[E0658]: used by the test suite + --> $DIR/feature-gate-rustc-attrs.rs:3:1 | -LL | #[rustc_foo] - | ^^^^^^^^^ +LL | #[rustc_dummy] + | ^^^^^^^^^^^^^^ | = note: for more information, see https://github.com/rust-lang/rust/issues/29642 = help: add #![feature(rustc_attrs)] to the crate attributes to enable diff --git a/src/test/ui/generic/generic-param-attrs.rs b/src/test/ui/generic/generic-param-attrs.rs index 601d2a9e0a31f..6c628914f1f8d 100644 --- a/src/test/ui/generic/generic-param-attrs.rs +++ b/src/test/ui/generic/generic-param-attrs.rs @@ -1,44 +1,38 @@ // This test previously ensured that attributes on formals in generic parameter // lists are rejected without a feature gate. -// -// (We are prefixing all tested features with `rustc_`, to ensure that -// the attributes themselves won't be rejected by the compiler when -// using `rustc_attrs` feature. There is a separate compile-fail/ test -// ensuring that the attribute feature-gating works in this context.) // compile-pass #![feature(rustc_attrs)] -#![allow(dead_code)] - -struct StLt<#[rustc_lt_struct] 'a>(&'a u32); -struct StTy<#[rustc_ty_struct] I>(I); -enum EnLt<#[rustc_lt_enum] 'b> { A(&'b u32), B } -enum EnTy<#[rustc_ty_enum] J> { A(J), B } -trait TrLt<#[rustc_lt_trait] 'c> { fn foo(&self, _: &'c [u32]) -> &'c u32; } -trait TrTy<#[rustc_ty_trait] K> { fn foo(&self, _: K); } -type TyLt<#[rustc_lt_type] 'd> = &'d u32; -type TyTy<#[rustc_ty_type] L> = (L, ); - -impl<#[rustc_lt_inherent] 'e> StLt<'e> { } -impl<#[rustc_ty_inherent] M> StTy { } -impl<#[rustc_lt_impl_for] 'f> TrLt<'f> for StLt<'f> { + +struct StLt<#[rustc_dummy] 'a>(&'a u32); +struct StTy<#[rustc_dummy] I>(I); +enum EnLt<#[rustc_dummy] 'b> { A(&'b u32), B } +enum EnTy<#[rustc_dummy] J> { A(J), B } +trait TrLt<#[rustc_dummy] 'c> { fn foo(&self, _: &'c [u32]) -> &'c u32; } +trait TrTy<#[rustc_dummy] K> { fn foo(&self, _: K); } +type TyLt<#[rustc_dummy] 'd> = &'d u32; +type TyTy<#[rustc_dummy] L> = (L, ); + +impl<#[rustc_dummy] 'e> StLt<'e> { } +impl<#[rustc_dummy] M> StTy { } +impl<#[rustc_dummy] 'f> TrLt<'f> for StLt<'f> { fn foo(&self, _: &'f [u32]) -> &'f u32 { loop { } } } -impl<#[rustc_ty_impl_for] N> TrTy for StTy { +impl<#[rustc_dummy] N> TrTy for StTy { fn foo(&self, _: N) { } } -fn f_lt<#[rustc_lt_fn] 'g>(_: &'g [u32]) -> &'g u32 { loop { } } -fn f_ty<#[rustc_ty_fn] O>(_: O) { } +fn f_lt<#[rustc_dummy] 'g>(_: &'g [u32]) -> &'g u32 { loop { } } +fn f_ty<#[rustc_dummy] O>(_: O) { } impl StTy { - fn m_lt<#[rustc_lt_meth] 'h>(_: &'h [u32]) -> &'h u32 { loop { } } - fn m_ty<#[rustc_ty_meth] P>(_: P) { } + fn m_lt<#[rustc_dummy] 'h>(_: &'h [u32]) -> &'h u32 { loop { } } + fn m_ty<#[rustc_dummy] P>(_: P) { } } fn hof_lt(_: Q) - where Q: for <#[rustc_lt_hof] 'i> Fn(&'i [u32]) -> &'i u32 + where Q: for <#[rustc_dummy] 'i> Fn(&'i [u32]) -> &'i u32 {} fn main() {} diff --git a/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs b/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs index 1245ce8583e29..fb50dce1af616 100644 --- a/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs +++ b/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs @@ -1,10 +1,7 @@ -// compile-flags:-Zborrowck=mir -Zverbose - // Test that we can deduce when projections like `T::Item` outlive the // function body. Test that this does not imply that `T: 'a` holds. -#![allow(warnings)] -#![feature(rustc_attrs)] +// compile-flags:-Zborrowck=mir -Zverbose use std::cell::Cell; @@ -18,7 +15,6 @@ where f(&value, Cell::new(&n)); } -#[rustc_errors] fn generic1(value: T) { // No error here: twice(value, |value_ref, item| invoke1(item)); @@ -30,7 +26,6 @@ where { } -#[rustc_errors] fn generic2(value: T) { twice(value, |value_ref, item| invoke2(value_ref, item)); //~^ ERROR the parameter type `T` may not live long enough diff --git a/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr b/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr index 9cdb78a10281c..9f0c60c1e1705 100644 --- a/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr +++ b/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr @@ -1,5 +1,5 @@ error[E0310]: the parameter type `T` may not live long enough - --> $DIR/projection-implied-bounds.rs:35:18 + --> $DIR/projection-implied-bounds.rs:30:18 | LL | twice(value, |value_ref, item| invoke2(value_ref, item)); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs b/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs index f61f54f80a78b..6a9ef3b5ce07f 100644 --- a/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs +++ b/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs @@ -4,9 +4,6 @@ // Test that we assume that universal types like `T` outlive the // function body. -#![allow(warnings)] -#![feature(rustc_attrs)] - use std::cell::Cell; fn twice(value: T, mut f: F) @@ -17,7 +14,6 @@ where f(Cell::new(&value)); } -#[rustc_errors] fn generic(value: T) { // No error here: twice(value, |r| invoke(r)); diff --git a/src/test/ui/object-lifetime/object-lifetime-default.stderr b/src/test/ui/object-lifetime/object-lifetime-default.stderr index 2642cdff2bf6a..f71c8cd0e0c39 100644 --- a/src/test/ui/object-lifetime/object-lifetime-default.stderr +++ b/src/test/ui/object-lifetime/object-lifetime-default.stderr @@ -1,20 +1,20 @@ -error: 'a,Ambiguous - --> $DIR/object-lifetime-default.rs:24:1 +error: BaseDefault + --> $DIR/object-lifetime-default.rs:6:1 | -LL | struct G<'a,'b,T:'a,U:'a+'b>(&'a T, &'b U); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | struct A(T); + | ^^^^^^^^^^^^^^^ -error: 'a,'b - --> $DIR/object-lifetime-default.rs:21:1 +error: BaseDefault + --> $DIR/object-lifetime-default.rs:9:1 | -LL | struct F<'a,'b,T:'a,U:'b>(&'a T, &'b U); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | struct B<'a,T>(&'a (), T); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: 'b - --> $DIR/object-lifetime-default.rs:18:1 +error: 'a + --> $DIR/object-lifetime-default.rs:12:1 | -LL | struct E<'a,'b:'a,T:'b>(&'a T, &'b T); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | struct C<'a,T:'a>(&'a T); + | ^^^^^^^^^^^^^^^^^^^^^^^^^ error: Ambiguous --> $DIR/object-lifetime-default.rs:15:1 @@ -22,23 +22,23 @@ error: Ambiguous LL | struct D<'a,'b,T:'a+'b>(&'a T, &'b T); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: 'a - --> $DIR/object-lifetime-default.rs:12:1 +error: 'b + --> $DIR/object-lifetime-default.rs:18:1 | -LL | struct C<'a,T:'a>(&'a T); - | ^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | struct E<'a,'b:'a,T:'b>(&'a T, &'b T); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: BaseDefault - --> $DIR/object-lifetime-default.rs:9:1 +error: 'a,'b + --> $DIR/object-lifetime-default.rs:21:1 | -LL | struct B<'a,T>(&'a (), T); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | struct F<'a,'b,T:'a,U:'b>(&'a T, &'b U); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: BaseDefault - --> $DIR/object-lifetime-default.rs:6:1 +error: 'a,Ambiguous + --> $DIR/object-lifetime-default.rs:24:1 | -LL | struct A(T); - | ^^^^^^^^^^^^^^^ +LL | struct G<'a,'b,T:'a,U:'a+'b>(&'a T, &'b U); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 7 previous errors diff --git a/src/test/ui/proc-macro/expand-to-unstable-2.rs b/src/test/ui/proc-macro/expand-to-unstable-2.rs index 4b4ba52ecd726..8ce3cde6f0432 100644 --- a/src/test/ui/proc-macro/expand-to-unstable-2.rs +++ b/src/test/ui/proc-macro/expand-to-unstable-2.rs @@ -1,12 +1,10 @@ // aux-build:derive-unstable-2.rs -#![allow(warnings)] - #[macro_use] extern crate derive_unstable_2; #[derive(Unstable)] -//~^ ERROR: reserved for internal compiler +//~^ ERROR attribute `rustc_foo` is currently unknown struct A; fn main() { diff --git a/src/test/ui/proc-macro/expand-to-unstable-2.stderr b/src/test/ui/proc-macro/expand-to-unstable-2.stderr index e2f51dd3d5dd2..77be3d5272394 100644 --- a/src/test/ui/proc-macro/expand-to-unstable-2.stderr +++ b/src/test/ui/proc-macro/expand-to-unstable-2.stderr @@ -1,11 +1,11 @@ -error[E0658]: unless otherwise specified, attributes with the prefix `rustc_` are reserved for internal compiler diagnostics - --> $DIR/expand-to-unstable-2.rs:8:10 +error[E0658]: The attribute `rustc_foo` is currently unknown to the compiler and may have meaning added to it in the future + --> $DIR/expand-to-unstable-2.rs:6:10 | LL | #[derive(Unstable)] | ^^^^^^^^ | = note: for more information, see https://github.com/rust-lang/rust/issues/29642 - = help: add #![feature(rustc_attrs)] to the crate attributes to enable + = help: add #![feature(custom_attribute)] to the crate attributes to enable error: aborting due to previous error diff --git a/src/test/ui/reserved/reserved-attr-on-macro.rs b/src/test/ui/reserved/reserved-attr-on-macro.rs index 96c63ba4db8c9..0ee6577f8a11d 100644 --- a/src/test/ui/reserved/reserved-attr-on-macro.rs +++ b/src/test/ui/reserved/reserved-attr-on-macro.rs @@ -1,5 +1,5 @@ #[rustc_attribute_should_be_reserved] -//~^ ERROR unless otherwise specified, attributes with the prefix `rustc_` are reserved +//~^ ERROR attribute `rustc_attribute_should_be_reserved` is currently unknown macro_rules! foo { () => (()); } diff --git a/src/test/ui/reserved/reserved-attr-on-macro.stderr b/src/test/ui/reserved/reserved-attr-on-macro.stderr index c8738d1ed3429..34b21ecd1265d 100644 --- a/src/test/ui/reserved/reserved-attr-on-macro.stderr +++ b/src/test/ui/reserved/reserved-attr-on-macro.stderr @@ -1,11 +1,11 @@ -error[E0658]: unless otherwise specified, attributes with the prefix `rustc_` are reserved for internal compiler diagnostics +error[E0658]: The attribute `rustc_attribute_should_be_reserved` is currently unknown to the compiler and may have meaning added to it in the future --> $DIR/reserved-attr-on-macro.rs:1:3 | LL | #[rustc_attribute_should_be_reserved] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: for more information, see https://github.com/rust-lang/rust/issues/29642 - = help: add #![feature(rustc_attrs)] to the crate attributes to enable + = help: add #![feature(custom_attribute)] to the crate attributes to enable error: cannot determine resolution for the macro `foo` --> $DIR/reserved-attr-on-macro.rs:8:5 diff --git a/src/test/ui/suggestions/attribute-typos.rs b/src/test/ui/suggestions/attribute-typos.rs index 13c6308b97e85..b45acbdd9206c 100644 --- a/src/test/ui/suggestions/attribute-typos.rs +++ b/src/test/ui/suggestions/attribute-typos.rs @@ -1,13 +1,8 @@ -#[deprcated] //~ ERROR E0658 -fn foo() {} //~| HELP a built-in attribute with a similar name exists - //~| SUGGESTION deprecated - //~| HELP add #![feature(custom_attribute)] to the crate attributes to enable +#[deprcated] //~ ERROR attribute `deprcated` is currently unknown +fn foo() {} -#[tests] //~ ERROR E0658 -fn bar() {} //~| HELP a built-in attribute with a similar name exists - //~| SUGGESTION test - //~| HELP add #![feature(custom_attribute)] to the crate attributes to enable +#[tests] //~ ERROR attribute `tests` is currently unknown to the compiler +fn bar() {} -#[rustc_err] //~ ERROR E0658 -fn main() {} //~| HELP add #![feature(rustc_attrs)] to the crate attributes to enable - // don't suggest rustc attributes +#[rustc_err] //~ ERROR attribute `rustc_err` is currently unknown +fn main() {} diff --git a/src/test/ui/suggestions/attribute-typos.stderr b/src/test/ui/suggestions/attribute-typos.stderr index 8367ff20aa408..ee063aaa12220 100644 --- a/src/test/ui/suggestions/attribute-typos.stderr +++ b/src/test/ui/suggestions/attribute-typos.stderr @@ -1,14 +1,14 @@ -error[E0658]: unless otherwise specified, attributes with the prefix `rustc_` are reserved for internal compiler diagnostics - --> $DIR/attribute-typos.rs:11:3 +error[E0658]: The attribute `rustc_err` is currently unknown to the compiler and may have meaning added to it in the future + --> $DIR/attribute-typos.rs:7:3 | LL | #[rustc_err] | ^^^^^^^^^ | = note: for more information, see https://github.com/rust-lang/rust/issues/29642 - = help: add #![feature(rustc_attrs)] to the crate attributes to enable + = help: add #![feature(custom_attribute)] to the crate attributes to enable error[E0658]: The attribute `tests` is currently unknown to the compiler and may have meaning added to it in the future - --> $DIR/attribute-typos.rs:6:3 + --> $DIR/attribute-typos.rs:4:3 | LL | #[tests] | ^^^^^ help: a built-in attribute with a similar name exists: `test` From e4e7eb2d5891ceb9241f769540dd413e90020971 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sun, 30 Jun 2019 13:00:45 +0300 Subject: [PATCH 12/32] Feature gate `rustc` attributes harder --- src/librustc_resolve/macros.rs | 19 +++++-- src/libsyntax/feature_gate.rs | 8 +++ .../run-pass-fulldeps/issue-15778-pass.rs | 2 +- .../feature-gates/feature-gate-rustc-attrs.rs | 19 ++++++- .../feature-gate-rustc-attrs.stderr | 52 ++++++++++++++++++- .../ui/proc-macro/expand-to-unstable-2.rs | 4 +- .../ui/proc-macro/expand-to-unstable-2.stderr | 11 +++- .../ui/reserved/reserved-attr-on-macro.rs | 2 + .../ui/reserved/reserved-attr-on-macro.stderr | 13 ++++- src/test/ui/suggestions/attribute-typos.rs | 5 +- .../ui/suggestions/attribute-typos.stderr | 11 +++- 11 files changed, 132 insertions(+), 14 deletions(-) diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 08a105572376c..522dc1aa9f8de 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -19,9 +19,8 @@ use syntax::ext::base::{MacroKind, SyntaxExtension}; use syntax::ext::expand::{AstFragment, Invocation, InvocationKind}; use syntax::ext::hygiene::Mark; use syntax::ext::tt::macro_rules; -use syntax::feature_gate::{ - feature_err, is_builtin_attr_name, AttributeGate, GateIssue, Stability, BUILTIN_ATTRIBUTES, -}; +use syntax::feature_gate::{feature_err, emit_feature_err, is_builtin_attr_name}; +use syntax::feature_gate::{AttributeGate, GateIssue, Stability, BUILTIN_ATTRIBUTES}; use syntax::symbol::{Symbol, kw, sym}; use syntax::visit::Visitor; use syntax::util::lev_distance::find_best_match_for_name; @@ -298,12 +297,25 @@ impl<'a> Resolver<'a> { let res = self.resolve_macro_to_res_inner(path, kind, parent_scope, trace, force); // Report errors and enforce feature gates for the resolved macro. + let features = self.session.features_untracked(); if res != Err(Determinacy::Undetermined) { // Do not report duplicated errors on every undetermined resolution. for segment in &path.segments { if let Some(args) = &segment.args { self.session.span_err(args.span(), "generic arguments in macro path"); } + if kind == MacroKind::Attr && !features.rustc_attrs && + segment.ident.as_str().starts_with("rustc") { + let msg = "attributes starting with `rustc` are \ + reserved for use by the `rustc` compiler"; + emit_feature_err( + &self.session.parse_sess, + sym::rustc_attrs, + segment.ident.span, + GateIssue::Language, + msg, + ); + } } } @@ -320,7 +332,6 @@ impl<'a> Resolver<'a> { } Res::NonMacroAttr(attr_kind) => { if kind == MacroKind::Attr { - let features = self.session.features_untracked(); if attr_kind == NonMacroAttrKind::Custom { assert!(path.segments.len() == 1); if !features.custom_attribute { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 9aea995831edb..6037b06eaf20e 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1669,6 +1669,14 @@ impl<'a> Context<'a> { } debug!("check_attribute: {:?} is builtin, {:?}, {:?}", attr.path, ty, gateage); return; + } else { + for segment in &attr.path.segments { + if segment.ident.as_str().starts_with("rustc") { + let msg = "attributes starting with `rustc` are \ + reserved for use by the `rustc` compiler"; + gate_feature!(self, rustc_attrs, segment.ident.span, msg); + } + } } for &(n, ty) in self.plugin_attributes { if attr.path == n { diff --git a/src/test/run-pass-fulldeps/issue-15778-pass.rs b/src/test/run-pass-fulldeps/issue-15778-pass.rs index 23c1c0766770b..35152e7f4babd 100644 --- a/src/test/run-pass-fulldeps/issue-15778-pass.rs +++ b/src/test/run-pass-fulldeps/issue-15778-pass.rs @@ -2,7 +2,7 @@ // ignore-stage1 // compile-flags: -D crate-not-okay -#![feature(plugin, custom_attribute, custom_inner_attributes)] +#![feature(plugin, custom_attribute, custom_inner_attributes, rustc_attrs)] #![plugin(lint_for_crate)] #![rustc_crate_okay] diff --git a/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs b/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs index 95ff18213f797..d3a2e486416af 100644 --- a/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs +++ b/src/test/ui/feature-gates/feature-gate-rustc-attrs.rs @@ -1,6 +1,23 @@ // Test that `#[rustc_*]` attributes are gated by `rustc_attrs` feature gate. +#![feature(decl_macro)] + +mod rustc { pub macro unknown() {} } +mod unknown { pub macro rustc() {} } + +#[rustc::unknown] +//~^ ERROR attributes starting with `rustc` are reserved for use by the `rustc` compiler +//~| ERROR macro `rustc::unknown` may not be used in attributes +fn f() {} + +#[unknown::rustc] +//~^ ERROR attributes starting with `rustc` are reserved for use by the `rustc` compiler +//~| ERROR macro `unknown::rustc` may not be used in attributes +fn g() {} + #[rustc_dummy] //~^ ERROR used by the test suite - +#[rustc_unknown] +//~^ ERROR attributes starting with `rustc` are reserved for use by the `rustc` compiler +//~| ERROR attribute `rustc_unknown` is currently unknown fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr b/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr index 57dcc77e518f3..cdc7b27a749e5 100644 --- a/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr +++ b/src/test/ui/feature-gates/feature-gate-rustc-attrs.stderr @@ -1,5 +1,53 @@ +error[E0658]: attributes starting with `rustc` are reserved for use by the `rustc` compiler + --> $DIR/feature-gate-rustc-attrs.rs:8:3 + | +LL | #[rustc::unknown] + | ^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(rustc_attrs)] to the crate attributes to enable + +error: macro `rustc::unknown` may not be used in attributes + --> $DIR/feature-gate-rustc-attrs.rs:8:1 + | +LL | #[rustc::unknown] + | ^^^^^^^^^^^^^^^^^ + +error[E0658]: attributes starting with `rustc` are reserved for use by the `rustc` compiler + --> $DIR/feature-gate-rustc-attrs.rs:13:12 + | +LL | #[unknown::rustc] + | ^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(rustc_attrs)] to the crate attributes to enable + +error: macro `unknown::rustc` may not be used in attributes + --> $DIR/feature-gate-rustc-attrs.rs:13:1 + | +LL | #[unknown::rustc] + | ^^^^^^^^^^^^^^^^^ + +error[E0658]: attributes starting with `rustc` are reserved for use by the `rustc` compiler + --> $DIR/feature-gate-rustc-attrs.rs:20:3 + | +LL | #[rustc_unknown] + | ^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(rustc_attrs)] to the crate attributes to enable + +error[E0658]: The attribute `rustc_unknown` is currently unknown to the compiler and may have meaning added to it in the future + --> $DIR/feature-gate-rustc-attrs.rs:20:3 + | +LL | #[rustc_unknown] + | ^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(custom_attribute)] to the crate attributes to enable + error[E0658]: used by the test suite - --> $DIR/feature-gate-rustc-attrs.rs:3:1 + --> $DIR/feature-gate-rustc-attrs.rs:18:1 | LL | #[rustc_dummy] | ^^^^^^^^^^^^^^ @@ -7,6 +55,6 @@ LL | #[rustc_dummy] = note: for more information, see https://github.com/rust-lang/rust/issues/29642 = help: add #![feature(rustc_attrs)] to the crate attributes to enable -error: aborting due to previous error +error: aborting due to 7 previous errors For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/proc-macro/expand-to-unstable-2.rs b/src/test/ui/proc-macro/expand-to-unstable-2.rs index 8ce3cde6f0432..437ae93093470 100644 --- a/src/test/ui/proc-macro/expand-to-unstable-2.rs +++ b/src/test/ui/proc-macro/expand-to-unstable-2.rs @@ -4,7 +4,9 @@ extern crate derive_unstable_2; #[derive(Unstable)] -//~^ ERROR attribute `rustc_foo` is currently unknown +//~^ ERROR attributes starting with `rustc` are reserved for use by the `rustc` compiler +//~| ERROR attribute `rustc_foo` is currently unknown to the compiler + struct A; fn main() { diff --git a/src/test/ui/proc-macro/expand-to-unstable-2.stderr b/src/test/ui/proc-macro/expand-to-unstable-2.stderr index 77be3d5272394..803773db88e96 100644 --- a/src/test/ui/proc-macro/expand-to-unstable-2.stderr +++ b/src/test/ui/proc-macro/expand-to-unstable-2.stderr @@ -1,3 +1,12 @@ +error[E0658]: attributes starting with `rustc` are reserved for use by the `rustc` compiler + --> $DIR/expand-to-unstable-2.rs:6:10 + | +LL | #[derive(Unstable)] + | ^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(rustc_attrs)] to the crate attributes to enable + error[E0658]: The attribute `rustc_foo` is currently unknown to the compiler and may have meaning added to it in the future --> $DIR/expand-to-unstable-2.rs:6:10 | @@ -7,6 +16,6 @@ LL | #[derive(Unstable)] = note: for more information, see https://github.com/rust-lang/rust/issues/29642 = help: add #![feature(custom_attribute)] to the crate attributes to enable -error: aborting due to previous error +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/reserved/reserved-attr-on-macro.rs b/src/test/ui/reserved/reserved-attr-on-macro.rs index 0ee6577f8a11d..cb535362266c0 100644 --- a/src/test/ui/reserved/reserved-attr-on-macro.rs +++ b/src/test/ui/reserved/reserved-attr-on-macro.rs @@ -1,5 +1,7 @@ #[rustc_attribute_should_be_reserved] //~^ ERROR attribute `rustc_attribute_should_be_reserved` is currently unknown +//~| ERROR attributes starting with `rustc` are reserved for use by the `rustc` compiler + macro_rules! foo { () => (()); } diff --git a/src/test/ui/reserved/reserved-attr-on-macro.stderr b/src/test/ui/reserved/reserved-attr-on-macro.stderr index 34b21ecd1265d..0c62c82017e18 100644 --- a/src/test/ui/reserved/reserved-attr-on-macro.stderr +++ b/src/test/ui/reserved/reserved-attr-on-macro.stderr @@ -1,3 +1,12 @@ +error[E0658]: attributes starting with `rustc` are reserved for use by the `rustc` compiler + --> $DIR/reserved-attr-on-macro.rs:1:3 + | +LL | #[rustc_attribute_should_be_reserved] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(rustc_attrs)] to the crate attributes to enable + error[E0658]: The attribute `rustc_attribute_should_be_reserved` is currently unknown to the compiler and may have meaning added to it in the future --> $DIR/reserved-attr-on-macro.rs:1:3 | @@ -8,13 +17,13 @@ LL | #[rustc_attribute_should_be_reserved] = help: add #![feature(custom_attribute)] to the crate attributes to enable error: cannot determine resolution for the macro `foo` - --> $DIR/reserved-attr-on-macro.rs:8:5 + --> $DIR/reserved-attr-on-macro.rs:10:5 | LL | foo!(); | ^^^ | = note: import resolution is stuck, try simplifying macro imports -error: aborting due to 2 previous errors +error: aborting due to 3 previous errors For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/suggestions/attribute-typos.rs b/src/test/ui/suggestions/attribute-typos.rs index b45acbdd9206c..0e10131ce8d1f 100644 --- a/src/test/ui/suggestions/attribute-typos.rs +++ b/src/test/ui/suggestions/attribute-typos.rs @@ -4,5 +4,8 @@ fn foo() {} #[tests] //~ ERROR attribute `tests` is currently unknown to the compiler fn bar() {} -#[rustc_err] //~ ERROR attribute `rustc_err` is currently unknown +#[rustc_err] +//~^ ERROR attribute `rustc_err` is currently unknown +//~| ERROR attributes starting with `rustc` are reserved for use by the `rustc` compiler + fn main() {} diff --git a/src/test/ui/suggestions/attribute-typos.stderr b/src/test/ui/suggestions/attribute-typos.stderr index ee063aaa12220..958688b4d3906 100644 --- a/src/test/ui/suggestions/attribute-typos.stderr +++ b/src/test/ui/suggestions/attribute-typos.stderr @@ -1,3 +1,12 @@ +error[E0658]: attributes starting with `rustc` are reserved for use by the `rustc` compiler + --> $DIR/attribute-typos.rs:7:3 + | +LL | #[rustc_err] + | ^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/29642 + = help: add #![feature(rustc_attrs)] to the crate attributes to enable + error[E0658]: The attribute `rustc_err` is currently unknown to the compiler and may have meaning added to it in the future --> $DIR/attribute-typos.rs:7:3 | @@ -25,6 +34,6 @@ LL | #[deprcated] = note: for more information, see https://github.com/rust-lang/rust/issues/29642 = help: add #![feature(custom_attribute)] to the crate attributes to enable -error: aborting due to 3 previous errors +error: aborting due to 4 previous errors For more information about this error, try `rustc --explain E0658`. From 7987719dbe7158df9304932ce5fb9145715626cb Mon Sep 17 00:00:00 2001 From: ljedrz Date: Thu, 27 Jun 2019 10:02:55 +0200 Subject: [PATCH 13/32] remove FIXMEs for functions that won't go away --- src/librustc/hir/map/definitions.rs | 1 - src/librustc/hir/map/mod.rs | 3 --- 2 files changed, 4 deletions(-) diff --git a/src/librustc/hir/map/definitions.rs b/src/librustc/hir/map/definitions.rs index b4bda36bc8a27..9e7898e10b011 100644 --- a/src/librustc/hir/map/definitions.rs +++ b/src/librustc/hir/map/definitions.rs @@ -371,7 +371,6 @@ impl Definitions { None } - // FIXME(@ljedrz): replace the NodeId variant #[inline] pub fn as_local_hir_id(&self, def_id: DefId) -> Option { if def_id.krate == LOCAL_CRATE { diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 037d04a5d8ed3..49a1386e3c113 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -239,7 +239,6 @@ impl<'hir> Map<'hir> { }) } - // FIXME(@ljedrz): replace the `NodeId` variant. #[inline] pub fn local_def_id_from_hir_id(&self, hir_id: HirId) -> DefId { self.opt_local_def_id_from_hir_id(hir_id).unwrap_or_else(|| { @@ -248,7 +247,6 @@ impl<'hir> Map<'hir> { }) } - // FIXME(@ljedrz): replace the `NodeId` variant. #[inline] pub fn opt_local_def_id_from_hir_id(&self, hir_id: HirId) -> Option { let node_id = self.hir_to_node_id(hir_id); @@ -265,7 +263,6 @@ impl<'hir> Map<'hir> { self.definitions.as_local_node_id(def_id) } - // FIXME(@ljedrz): replace the `NodeId` variant. #[inline] pub fn as_local_hir_id(&self, def_id: DefId) -> Option { self.definitions.as_local_hir_id(def_id) From 4f7ba515c2bfacde6f09e860c3cc9f37bb742481 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Thu, 27 Jun 2019 11:16:59 +0200 Subject: [PATCH 14/32] rename hir::map::local_def_id to local_def_id_from_node_id --- src/librustc/dep_graph/dep_tracking_map.rs | 2 +- src/librustc/hir/map/hir_id_validator.rs | 3 ++- src/librustc/hir/map/mod.rs | 4 ++-- .../nice_region_error/find_anon_type.rs | 6 ++--- src/librustc/lint/context.rs | 2 +- src/librustc/ty/context.rs | 6 ++--- src/librustc_driver/pretty.rs | 2 +- src/librustc_interface/passes.rs | 13 ++++++----- src/librustc_save_analysis/dump_visitor.rs | 22 +++++++++---------- src/librustc_save_analysis/lib.rs | 20 ++++++++--------- src/librustc_typeck/impl_wf_check.rs | 2 +- src/librustc_typeck/lib.rs | 4 ++-- src/librustdoc/clean/mod.rs | 7 +++--- 13 files changed, 48 insertions(+), 45 deletions(-) diff --git a/src/librustc/dep_graph/dep_tracking_map.rs b/src/librustc/dep_graph/dep_tracking_map.rs index 94b832bea628e..31d5780a0c00b 100644 --- a/src/librustc/dep_graph/dep_tracking_map.rs +++ b/src/librustc/dep_graph/dep_tracking_map.rs @@ -55,7 +55,7 @@ impl MemoizationMap for RefCell> { /// /// ``` /// fn type_of_item(..., item: &hir::Item) -> Ty<'tcx> { - /// let item_def_id = ccx.tcx.hir().local_def_id(it.id); + /// let item_def_id = ccx.tcx.hir().local_def_id_from_node_id(it.id); /// ccx.tcx.item_types.memoized(item_def_id, || { /// ccx.tcx.dep_graph.read(DepNode::Hir(item_def_id)); // (*) /// compute_type_of_item(ccx, item) diff --git a/src/librustc/hir/map/hir_id_validator.rs b/src/librustc/hir/map/hir_id_validator.rs index 891a1956bc971..0def5e12a60bd 100644 --- a/src/librustc/hir/map/hir_id_validator.rs +++ b/src/librustc/hir/map/hir_id_validator.rs @@ -10,7 +10,8 @@ pub fn check_crate(hir_map: &hir::map::Map<'_>) { let errors = Lock::new(Vec::new()); par_iter(&hir_map.krate().modules).for_each(|(module_id, _)| { - hir_map.visit_item_likes_in_module(hir_map.local_def_id(*module_id), &mut OuterVisitor { + let local_def_id = hir_map.local_def_id_from_node_id(*module_id); + hir_map.visit_item_likes_in_module(local_def_id, &mut OuterVisitor { hir_map, errors: &errors, }); diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 49a1386e3c113..76f4512a87643 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -231,10 +231,10 @@ impl<'hir> Map<'hir> { } #[inline] - pub fn local_def_id(&self, node: NodeId) -> DefId { + pub fn local_def_id_from_node_id(&self, node: NodeId) -> DefId { self.opt_local_def_id(node).unwrap_or_else(|| { let hir_id = self.node_to_hir_id(node); - bug!("local_def_id: no entry for `{}`, which has a map of `{:?}`", + bug!("local_def_id_from_node_id: no entry for `{}`, which has a map of `{:?}`", node, self.find_entry(hir_id)) }) } diff --git a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs index 283af94b89b48..be3070277510c 100644 --- a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs +++ b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs @@ -140,7 +140,7 @@ impl Visitor<'tcx> for FindNestedTypeVisitor<'tcx> { // region at the right depth with the same index (Some(rl::Region::EarlyBound(_, id, _)), ty::BrNamed(def_id, _)) => { debug!( - "EarlyBound self.infcx.tcx.hir().local_def_id(id)={:?} \ + "EarlyBound self.infcx.tcx.hir().local_def_id_from_node_id(id)={:?} \ def_id={:?}", id, def_id @@ -162,7 +162,7 @@ impl Visitor<'tcx> for FindNestedTypeVisitor<'tcx> { "FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}", debruijn_index ); - debug!("self.infcx.tcx.hir().local_def_id(id)={:?}", id); + debug!("self.infcx.tcx.hir().local_def_id_from_node_id(id)={:?}", id); debug!("def_id={:?}", def_id); if debruijn_index == self.current_index && id == def_id { self.found_type = Some(arg); @@ -232,7 +232,7 @@ impl Visitor<'tcx> for TyPathVisitor<'tcx> { (Some(rl::Region::EarlyBound(_, id, _)), ty::BrNamed(def_id, _)) => { debug!( - "EarlyBound self.infcx.tcx.hir().local_def_id(id)={:?} \ + "EarlyBound self.infcx.tcx.hir().local_def_id_from_node_id(id)={:?} \ def_id={:?}", id, def_id diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 7f09120bbdd5e..9b1e9a22ee0b9 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -1500,7 +1500,7 @@ pub fn check_crate<'tcx, T: for<'a> LateLintPass<'a, 'tcx>>( time(tcx.sess, "module lints", || { // Run per-module lints par_iter(&tcx.hir().krate().modules).for_each(|(&module, _)| { - tcx.ensure().lint_mod(tcx.hir().local_def_id(module)); + tcx.ensure().lint_mod(tcx.hir().local_def_id_from_node_id(module)); }); }); }); diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 4710d611d99df..42719ae26b7d6 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -1304,15 +1304,15 @@ impl<'tcx> TyCtxt<'tcx> { maybe_unused_trait_imports: resolutions.maybe_unused_trait_imports .into_iter() - .map(|id| hir.local_def_id(id)) + .map(|id| hir.local_def_id_from_node_id(id)) .collect(), maybe_unused_extern_crates: resolutions.maybe_unused_extern_crates .into_iter() - .map(|(id, sp)| (hir.local_def_id(id), sp)) + .map(|(id, sp)| (hir.local_def_id_from_node_id(id), sp)) .collect(), glob_map: resolutions.glob_map.into_iter().map(|(id, names)| { - (hir.local_def_id(id), names) + (hir.local_def_id_from_node_id(id), names) }).collect(), extern_prelude: resolutions.extern_prelude, hir_map: hir, diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index ff0c4ff548b71..3be06e291ff09 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -887,7 +887,7 @@ fn print_with_analysis( let mut print = || match ppm { PpmMir | PpmMirCFG => { if let Some(nodeid) = nodeid { - let def_id = tcx.hir().local_def_id(nodeid); + let def_id = tcx.hir().local_def_id_from_node_id(nodeid); match ppm { PpmMir => write_mir_pretty(tcx, Some(def_id), &mut out), PpmMirCFG => write_mir_graphviz(tcx, Some(def_id), &mut out), diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index d698728198130..9a5eb2b93d574 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -899,9 +899,10 @@ fn analysis(tcx: TyCtxt<'_>, cnum: CrateNum) -> Result<()> { }); }, { par_iter(&tcx.hir().krate().modules).for_each(|(&module, _)| { - tcx.ensure().check_mod_loops(tcx.hir().local_def_id(module)); - tcx.ensure().check_mod_attrs(tcx.hir().local_def_id(module)); - tcx.ensure().check_mod_unstable_api_usage(tcx.hir().local_def_id(module)); + tcx.ensure().check_mod_loops(tcx.hir().local_def_id_from_node_id(module)); + tcx.ensure().check_mod_attrs(tcx.hir().local_def_id_from_node_id(module)); + tcx.ensure().check_mod_unstable_api_usage( + tcx.hir().local_def_id_from_node_id(module)); }); }); }); @@ -924,9 +925,9 @@ fn analysis(tcx: TyCtxt<'_>, cnum: CrateNum) -> Result<()> { // "not all control paths return a value" is reported here. // // maybe move the check to a MIR pass? - tcx.ensure().check_mod_liveness(tcx.hir().local_def_id(module)); + tcx.ensure().check_mod_liveness(tcx.hir().local_def_id_from_node_id(module)); - tcx.ensure().check_mod_intrinsics(tcx.hir().local_def_id(module)); + tcx.ensure().check_mod_intrinsics(tcx.hir().local_def_id_from_node_id(module)); }); }); }); @@ -986,7 +987,7 @@ fn analysis(tcx: TyCtxt<'_>, cnum: CrateNum) -> Result<()> { }, { time(sess, "privacy checking modules", || { par_iter(&tcx.hir().krate().modules).for_each(|(&module, _)| { - tcx.ensure().check_mod_privacy(tcx.hir().local_def_id(module)); + tcx.ensure().check_mod_privacy(tcx.hir().local_def_id_from_node_id(module)); }); }); }); diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index beef9f151cf00..5289013c9ea7e 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -123,7 +123,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { where F: FnOnce(&mut DumpVisitor<'l, 'tcx, 'll, O>), { - let item_def_id = self.tcx.hir().local_def_id(item_id); + let item_def_id = self.tcx.hir().local_def_id_from_node_id(item_id); if self.tcx.has_typeck_tables(item_def_id) { let tables = self.tcx.typeck_tables_of(item_def_id); let old_tables = self.save_ctxt.tables; @@ -436,7 +436,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { attrs: &'l [Attribute], ) { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(id))); if !self.span.filter_generated(ident.span) { let sig = sig::assoc_const_signature(id, ident.name, typ, expr, &self.save_ctxt); @@ -481,7 +481,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { debug!("process_struct {:?} {:?}", item, item.span); let name = item.ident.to_string(); let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); let kind = match item.node { ast::ItemKind::Struct(_, _) => DefKind::Struct, @@ -683,7 +683,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { self.process_generic_params(generics, "", item.id); for impl_item in impl_items { let map = &self.tcx.hir(); - self.process_impl_item(impl_item, map.local_def_id(item.id)); + self.process_impl_item(impl_item, map.local_def_id_from_node_id(item.id)); } } @@ -696,7 +696,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { ) { let name = item.ident.to_string(); let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); let mut val = name.clone(); if !generics.params.is_empty() { val.push_str(&generic_params_to_string(&generics.params)); @@ -764,7 +764,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { self.process_generic_params(generics, &qualname, item.id); for method in methods { let map = &self.tcx.hir(); - self.process_trait_item(method, map.local_def_id(item.id)) + self.process_trait_item(method, map.local_def_id_from_node_id(item.id)) } } @@ -1109,7 +1109,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { // FIXME do something with _bounds (for type refs) let name = trait_item.ident.name.to_string(); let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(trait_item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(trait_item.id))); if !self.span.filter_generated(trait_item.ident.span) { let span = self.span_from_span(trait_item.ident.span); @@ -1261,7 +1261,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { }; // Make a comma-separated list of names of imported modules. - let def_id = self.tcx.hir().local_def_id(id); + let def_id = self.tcx.hir().local_def_id_from_node_id(id); let names = self.tcx.names_imported_by_glob_use(def_id); let names: Vec<_> = names.iter().map(|n| n.to_string()).collect(); @@ -1318,7 +1318,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tcx, ' assert_eq!(id, ast::CRATE_NODE_ID); let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(id))); let cm = self.tcx.sess.source_map(); let filename = cm.span_to_filename(span); @@ -1408,7 +1408,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tcx, ' } Ty(ref ty, ref ty_params) => { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); let value = ty_to_string(&ty); if !self.span.filter_generated(item.ident.span) { let span = self.span_from_span(item.ident.span); @@ -1439,7 +1439,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tcx, ' } Existential(ref _bounds, ref ty_params) => { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); // FIXME do something with _bounds let value = String::new(); if !self.span.filter_generated(item.ident.span) { diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index ab82f75f74f4b..481e501d24a6e 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -135,7 +135,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { pub fn get_extern_item_data(&self, item: &ast::ForeignItem) -> Option { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); match item.node { ast::ForeignItemKind::Fn(ref decl, ref generics) => { filter!(self.span_utils, item.ident.span); @@ -186,7 +186,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { match item.node { ast::ItemKind::Fn(ref decl, .., ref generics, _) => { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); filter!(self.span_utils, item.ident.span); Some(Data::DefData(Def { kind: DefKind::Function, @@ -205,7 +205,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { } ast::ItemKind::Static(ref typ, ..) => { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); filter!(self.span_utils, item.ident.span); @@ -229,7 +229,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { } ast::ItemKind::Const(ref typ, _) => { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); filter!(self.span_utils, item.ident.span); let id = id_from_node_id(item.id, self); @@ -252,7 +252,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { } ast::ItemKind::Mod(ref m) => { let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); let cm = self.tcx.sess.source_map(); let filename = cm.span_to_filename(m.inner); @@ -280,7 +280,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { ast::ItemKind::Enum(ref def, _) => { let name = item.ident.to_string(); let qualname = format!("::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.id))); + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(item.id))); filter!(self.span_utils, item.ident.span); let variants_str = def.variants .iter() @@ -365,10 +365,10 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { if let Some(ident) = field.ident { let name = ident.to_string(); let qualname = format!("::{}::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(scope)), + self.tcx.def_path_str(self.tcx.hir().local_def_id_from_node_id(scope)), ident); filter!(self.span_utils, ident.span); - let def_id = self.tcx.hir().local_def_id(field.id); + let def_id = self.tcx.hir().local_def_id_from_node_id(field.id); let typ = self.tcx.type_of(def_id).to_string(); @@ -400,7 +400,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { // The qualname for a method is the trait name or name of the struct in an impl in // which the method is declared in, followed by the method's name. let (qualname, parent_scope, decl_id, docs, attributes) = - match self.tcx.impl_of_method(self.tcx.hir().local_def_id(id)) { + match self.tcx.impl_of_method(self.tcx.hir().local_def_id_from_node_id(id)) { Some(impl_id) => match self.tcx.hir().get_if_local(impl_id) { Some(Node::Item(item)) => match item.node { hir::ItemKind::Impl(.., ref ty, _) => { @@ -451,7 +451,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { ); } }, - None => match self.tcx.trait_of_item(self.tcx.hir().local_def_id(id)) { + None => match self.tcx.trait_of_item(self.tcx.hir().local_def_id_from_node_id(id)) { Some(def_id) => { let mut docs = String::new(); let mut attrs = vec![]; diff --git a/src/librustc_typeck/impl_wf_check.rs b/src/librustc_typeck/impl_wf_check.rs index 08c7cbc389a67..d03a815db5782 100644 --- a/src/librustc_typeck/impl_wf_check.rs +++ b/src/librustc_typeck/impl_wf_check.rs @@ -54,7 +54,7 @@ pub fn impl_wf_check(tcx: TyCtxt<'_>) { // but it's one that we must perform earlier than the rest of // WfCheck. for &module in tcx.hir().krate().modules.keys() { - tcx.ensure().check_mod_impl_wf(tcx.hir().local_def_id(module)); + tcx.ensure().check_mod_impl_wf(tcx.hir().local_def_id_from_node_id(module)); } } diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs index 88e6c0f579efa..5ba2de1b9c5b7 100644 --- a/src/librustc_typeck/lib.rs +++ b/src/librustc_typeck/lib.rs @@ -310,7 +310,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorReported> { tcx.sess.track_errors(|| { time(tcx.sess, "type collecting", || { for &module in tcx.hir().krate().modules.keys() { - tcx.ensure().collect_mod_item_types(tcx.hir().local_def_id(module)); + tcx.ensure().collect_mod_item_types(tcx.hir().local_def_id_from_node_id(module)); } }); })?; @@ -345,7 +345,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorReported> { time(tcx.sess, "item-types checking", || { for &module in tcx.hir().krate().modules.keys() { - tcx.ensure().check_mod_item_types(tcx.hir().local_def_id(module)); + tcx.ensure().check_mod_item_types(tcx.hir().local_def_id_from_node_id(module)); } }); diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 8ae96d8665718..e6e57eb230add 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -654,7 +654,7 @@ impl Clean for doctree::Module<'_> { visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), - def_id: cx.tcx.hir().local_def_id(self.id), + def_id: cx.tcx.hir().local_def_id_from_node_id(self.id), inner: ModuleItem(Module { is_crate: self.is_crate, items, @@ -2982,10 +2982,11 @@ impl<'tcx> Clean for Ty<'tcx> { ty::FnPtr(_) => { let ty = cx.tcx.lift(self).expect("FnPtr lift failed"); let sig = ty.fn_sig(cx.tcx); + let local_def_id = cx.tcx.hir().local_def_id_from_node_id(ast::CRATE_NODE_ID); BareFunction(box BareFunctionDecl { unsafety: sig.unsafety(), generic_params: Vec::new(), - decl: (cx.tcx.hir().local_def_id(ast::CRATE_NODE_ID), sig).clean(cx), + decl: (local_def_id, sig).clean(cx), abi: sig.abi(), }) } @@ -3991,7 +3992,7 @@ impl Clean> for doctree::Import<'_> { name: None, attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id(ast::CRATE_NODE_ID), + def_id: cx.tcx.hir().local_def_id_from_node_id(ast::CRATE_NODE_ID), visibility: self.vis.clean(cx), stability: None, deprecation: None, From 37d7e1f22a9da3f31c117d0def02c5ea8e23a096 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Thu, 27 Jun 2019 11:28:14 +0200 Subject: [PATCH 15/32] rename hir::map::local_def_id_from_hir_id to local_def_id --- src/librustc/hir/check_attr.rs | 2 +- src/librustc/hir/map/hir_id_validator.rs | 2 +- src/librustc/hir/map/mod.rs | 14 ++--- src/librustc/hir/upvars.rs | 2 +- src/librustc/infer/opaque_types/mod.rs | 4 +- src/librustc/lint/context.rs | 2 +- src/librustc/middle/dead.rs | 8 +-- src/librustc/middle/entry.rs | 8 +-- src/librustc/middle/expr_use_visitor.rs | 2 +- src/librustc/middle/lang_items.rs | 2 +- src/librustc/middle/liveness.rs | 4 +- src/librustc/middle/reachable.rs | 10 ++-- src/librustc/middle/region.rs | 2 +- src/librustc/middle/resolve_lifetime.rs | 10 ++-- src/librustc/middle/stability.rs | 8 +-- src/librustc/mir/mono.rs | 2 +- .../ty/inhabitedness/def_id_forest.rs | 2 +- src/librustc/ty/mod.rs | 10 ++-- src/librustc/ty/trait_def.rs | 2 +- src/librustc_borrowck/borrowck/mod.rs | 2 +- .../back/symbol_export.rs | 4 +- .../symbol_names_test.rs | 2 +- src/librustc_driver/pretty.rs | 2 +- src/librustc_incremental/assert_dep_graph.rs | 2 +- .../persist/dirty_clean.rs | 2 +- src/librustc_interface/proc_macro_decls.rs | 2 +- src/librustc_lint/builtin.rs | 20 +++---- src/librustc_lint/nonstandard_style.rs | 2 +- src/librustc_lint/types.rs | 6 +- src/librustc_metadata/encoder.rs | 30 +++++----- src/librustc_metadata/foreign_modules.rs | 4 +- src/librustc_metadata/native_libs.rs | 2 +- .../borrow_check/nll/universal_regions.rs | 2 +- src/librustc_mir/build/mod.rs | 4 +- src/librustc_mir/hair/cx/expr.rs | 8 +-- src/librustc_mir/hair/cx/mod.rs | 2 +- src/librustc_mir/monomorphize/collector.rs | 14 ++--- src/librustc_mir/monomorphize/item.rs | 2 +- src/librustc_mir/monomorphize/partitioning.rs | 4 +- src/librustc_mir/transform/mod.rs | 2 +- src/librustc_passes/layout_test.rs | 2 +- src/librustc_passes/rvalue_promotion.rs | 4 +- src/librustc_plugin/build.rs | 2 +- src/librustc_privacy/lib.rs | 22 +++---- src/librustc_traits/lowering/mod.rs | 2 +- src/librustc_typeck/astconv.rs | 10 ++-- src/librustc_typeck/check/closure.rs | 2 +- src/librustc_typeck/check/expr.rs | 2 +- src/librustc_typeck/check/intrinsic.rs | 2 +- src/librustc_typeck/check/method/mod.rs | 4 +- src/librustc_typeck/check/method/suggest.rs | 2 +- src/librustc_typeck/check/mod.rs | 38 ++++++------ src/librustc_typeck/check/regionck.rs | 2 +- src/librustc_typeck/check/upvar.rs | 2 +- src/librustc_typeck/check/wfcheck.rs | 28 ++++----- src/librustc_typeck/check/writeback.rs | 2 +- src/librustc_typeck/check_unused.rs | 4 +- src/librustc_typeck/coherence/builtin.rs | 2 +- .../coherence/inherent_impls.rs | 4 +- .../coherence/inherent_impls_overlap.rs | 2 +- src/librustc_typeck/coherence/mod.rs | 6 +- src/librustc_typeck/coherence/orphan.rs | 2 +- src/librustc_typeck/coherence/unsafety.rs | 2 +- src/librustc_typeck/collect.rs | 58 +++++++++---------- src/librustc_typeck/impl_wf_check.rs | 4 +- src/librustc_typeck/lib.rs | 4 +- .../outlives/implicit_infer.rs | 2 +- src/librustc_typeck/outlives/test.rs | 2 +- src/librustc_typeck/variance/constraints.rs | 2 +- src/librustc_typeck/variance/solve.rs | 2 +- src/librustc_typeck/variance/terms.rs | 2 +- src/librustc_typeck/variance/test.rs | 2 +- src/librustdoc/clean/mod.rs | 54 ++++++++--------- src/librustdoc/core.rs | 2 +- src/librustdoc/passes/collect_trait_impls.rs | 2 +- src/librustdoc/visit_ast.rs | 6 +- 76 files changed, 252 insertions(+), 252 deletions(-) diff --git a/src/librustc/hir/check_attr.rs b/src/librustc/hir/check_attr.rs index 9160b8024ee45..316ca6424731c 100644 --- a/src/librustc/hir/check_attr.rs +++ b/src/librustc/hir/check_attr.rs @@ -95,7 +95,7 @@ impl CheckAttrVisitor<'tcx> { /// Checks any attribute. fn check_attributes(&self, item: &hir::Item, target: Target) { if target == Target::Fn || target == Target::Const { - self.tcx.codegen_fn_attrs(self.tcx.hir().local_def_id_from_hir_id(item.hir_id)); + self.tcx.codegen_fn_attrs(self.tcx.hir().local_def_id(item.hir_id)); } else if let Some(a) = item.attrs.iter().find(|a| a.check_name(sym::target_feature)) { self.tcx.sess.struct_span_err(a.span, "attribute should be applied to a function") .span_label(item.span, "not a function") diff --git a/src/librustc/hir/map/hir_id_validator.rs b/src/librustc/hir/map/hir_id_validator.rs index 0def5e12a60bd..889659382d060 100644 --- a/src/librustc/hir/map/hir_id_validator.rs +++ b/src/librustc/hir/map/hir_id_validator.rs @@ -80,7 +80,7 @@ impl<'a, 'hir> HirIdValidator<'a, 'hir> { hir_id: HirId, walk: F) { assert!(self.owner_def_index.is_none()); - let owner_def_index = self.hir_map.local_def_id_from_hir_id(hir_id).index; + let owner_def_index = self.hir_map.local_def_id(hir_id).index; self.owner_def_index = Some(owner_def_index); walk(self); diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 76f4512a87643..c9c40d0e5dbc0 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -240,9 +240,9 @@ impl<'hir> Map<'hir> { } #[inline] - pub fn local_def_id_from_hir_id(&self, hir_id: HirId) -> DefId { - self.opt_local_def_id_from_hir_id(hir_id).unwrap_or_else(|| { - bug!("local_def_id_from_hir_id: no entry for `{:?}`, which has a map of `{:?}`", + pub fn local_def_id(&self, hir_id: HirId) -> DefId { + self.opt_local_def_id(hir_id).unwrap_or_else(|| { + bug!("local_def_id: no entry for `{:?}`, which has a map of `{:?}`", hir_id, self.find_entry(hir_id)) }) } @@ -427,7 +427,7 @@ impl<'hir> Map<'hir> { } pub fn body_owner_def_id(&self, id: BodyId) -> DefId { - self.local_def_id_from_hir_id(self.body_owner(id)) + self.local_def_id(self.body_owner(id)) } /// Given a `HirId`, returns the `BodyId` associated with it, @@ -763,7 +763,7 @@ impl<'hir> Map<'hir> { /// Returns the `DefId` of `id`'s nearest module parent, or `id` itself if no /// module parent is in this map. pub fn get_module_parent(&self, id: HirId) -> DefId { - self.local_def_id_from_hir_id(self.get_module_parent_node(id)) + self.local_def_id(self.get_module_parent_node(id)) } /// Returns the `HirId` of `id`'s nearest module parent, or `id` itself if no @@ -839,7 +839,7 @@ impl<'hir> Map<'hir> { } pub fn get_parent_did(&self, id: HirId) -> DefId { - self.local_def_id_from_hir_id(self.get_parent_item(id)) + self.local_def_id(self.get_parent_item(id)) } pub fn get_foreign_abi(&self, hir_id: HirId) -> Abi { @@ -1245,7 +1245,7 @@ fn hir_id_to_string(map: &Map<'_>, id: HirId, include_id: bool) -> String { // the user-friendly path, otherwise fall back to stringifying DefPath. crate::ty::tls::with_opt(|tcx| { if let Some(tcx) = tcx { - let def_id = map.local_def_id_from_hir_id(id); + let def_id = map.local_def_id(id); tcx.def_path_str(def_id) } else if let Some(path) = map.def_path_from_hir_id(id) { path.data.into_iter().map(|elem| { diff --git a/src/librustc/hir/upvars.rs b/src/librustc/hir/upvars.rs index 54b4435573baa..cc532cb064ebe 100644 --- a/src/librustc/hir/upvars.rs +++ b/src/librustc/hir/upvars.rs @@ -83,7 +83,7 @@ impl Visitor<'tcx> for CaptureCollector<'a, 'tcx> { fn visit_expr(&mut self, expr: &'tcx hir::Expr) { if let hir::ExprKind::Closure(..) = expr.node { - let closure_def_id = self.tcx.hir().local_def_id_from_hir_id(expr.hir_id); + let closure_def_id = self.tcx.hir().local_def_id(expr.hir_id); if let Some(upvars) = self.tcx.upvars(closure_def_id) { // Every capture of a closure expression is a local in scope, // that is moved/copied/borrowed into the closure value, and diff --git a/src/librustc/infer/opaque_types/mod.rs b/src/librustc/infer/opaque_types/mod.rs index f43e3fa0b7787..c127e667ce9e9 100644 --- a/src/librustc/infer/opaque_types/mod.rs +++ b/src/librustc/infer/opaque_types/mod.rs @@ -951,8 +951,8 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> { let parent_def_id = self.parent_def_id; let def_scope_default = || { let opaque_parent_hir_id = tcx.hir().get_parent_item(opaque_hir_id); - parent_def_id - == tcx.hir().local_def_id_from_hir_id(opaque_parent_hir_id) + parent_def_id == tcx.hir() + .local_def_id(opaque_parent_hir_id) }; let (in_definition_scope, origin) = match tcx.hir().find(opaque_hir_id) { Some(Node::Item(item)) => match item.node { diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 9b1e9a22ee0b9..6bd00b1d02e8d 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -926,7 +926,7 @@ impl<'a, 'tcx, T: LateLintPass<'a, 'tcx>> LateContextAndPass<'a, 'tcx, T> { { let old_param_env = self.context.param_env; self.context.param_env = self.context.tcx.param_env( - self.context.tcx.hir().local_def_id_from_hir_id(id) + self.context.tcx.hir().local_def_id(id) ); f(self); self.context.param_env = old_param_env; diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index e1889aa555f86..4c27318c3e19b 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -161,7 +161,7 @@ impl<'a, 'tcx> MarkSymbolVisitor<'a, 'tcx> { Node::Item(item) => { match item.node { hir::ItemKind::Struct(..) | hir::ItemKind::Union(..) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let def = self.tcx.adt_def(def_id); self.repr_has_repr_c = def.repr.c(); @@ -325,7 +325,7 @@ fn has_allow_dead_code_or_lang_attr( return true; } - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); let cg_attrs = tcx.codegen_fn_attrs(def_id); // #[used], #[no_mangle], #[export_name], etc also keeps the item alive @@ -494,7 +494,7 @@ impl DeadVisitor<'tcx> { } fn should_warn_about_field(&mut self, field: &hir::StructField) -> bool { - let field_type = self.tcx.type_of(self.tcx.hir().local_def_id_from_hir_id(field.hir_id)); + let field_type = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id)); !field.is_positional() && !self.symbol_is_live(field.hir_id) && !field_type.is_phantom_data() @@ -525,7 +525,7 @@ impl DeadVisitor<'tcx> { // This is done to handle the case where, for example, the static // method of a private type is used, but the type itself is never // called directly. - let def_id = self.tcx.hir().local_def_id_from_hir_id(id); + let def_id = self.tcx.hir().local_def_id(id); let inherent_impls = self.tcx.inherent_impls(def_id); for &impl_did in inherent_impls.iter() { for &item_did in &self.tcx.associated_item_def_ids(impl_did)[..] { diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index d1867e8fa36b2..cba4d0f1598c4 100644 --- a/src/librustc/middle/entry.rs +++ b/src/librustc/middle/entry.rs @@ -32,7 +32,7 @@ struct EntryContext<'a, 'tcx> { impl<'a, 'tcx> ItemLikeVisitor<'tcx> for EntryContext<'a, 'tcx> { fn visit_item(&mut self, item: &'tcx Item) { - let def_id = self.map.local_def_id_from_hir_id(item.hir_id); + let def_id = self.map.local_def_id(item.hir_id); let def_key = self.map.def_key(def_id); let at_root = def_key.parent == Some(CRATE_DEF_INDEX); find_item(item, self, at_root); @@ -142,11 +142,11 @@ fn find_item(item: &Item, ctxt: &mut EntryContext<'_, '_>, at_root: bool) { fn configure_main(tcx: TyCtxt<'_>, visitor: &EntryContext<'_, '_>) -> Option<(DefId, EntryFnType)> { if let Some((hir_id, _)) = visitor.start_fn { - Some((tcx.hir().local_def_id_from_hir_id(hir_id), EntryFnType::Start)) + Some((tcx.hir().local_def_id(hir_id), EntryFnType::Start)) } else if let Some((hir_id, _)) = visitor.attr_main_fn { - Some((tcx.hir().local_def_id_from_hir_id(hir_id), EntryFnType::Main)) + Some((tcx.hir().local_def_id(hir_id), EntryFnType::Main)) } else if let Some((hir_id, _)) = visitor.main_fn { - Some((tcx.hir().local_def_id_from_hir_id(hir_id), EntryFnType::Main)) + Some((tcx.hir().local_def_id(hir_id), EntryFnType::Main)) } else { // No main function let mut err = struct_err!(tcx.sess, E0601, diff --git a/src/librustc/middle/expr_use_visitor.rs b/src/librustc/middle/expr_use_visitor.rs index c93cc847adff2..77094604edacf 100644 --- a/src/librustc/middle/expr_use_visitor.rs +++ b/src/librustc/middle/expr_use_visitor.rs @@ -930,7 +930,7 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> { fn walk_captures(&mut self, closure_expr: &hir::Expr, fn_decl_span: Span) { debug!("walk_captures({:?})", closure_expr); - let closure_def_id = self.tcx().hir().local_def_id_from_hir_id(closure_expr.hir_id); + let closure_def_id = self.tcx().hir().local_def_id(closure_expr.hir_id); if let Some(upvars) = self.tcx().upvars(closure_def_id) { for (&var_id, upvar) in upvars.iter() { let upvar_id = ty::UpvarId { diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index a6e5bd275ae19..7c15f2ef94d1b 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -118,7 +118,7 @@ impl ItemLikeVisitor<'v> for LanguageItemCollector<'tcx> { match self.item_refs.get(&*value.as_str()).cloned() { // Known lang item with attribute on correct target. Some((item_index, expected_target)) if actual_target == expected_target => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); self.collect_item(item_index, def_id); }, // Known lang item with attribute on incorrect target. diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 30ff835bdcc43..c4d60b676b279 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -363,7 +363,7 @@ fn visit_fn<'tcx>( debug!("visit_fn"); // swap in a new set of IR maps for this function body: - let def_id = ir.tcx.hir().local_def_id_from_hir_id(id); + let def_id = ir.tcx.hir().local_def_id(id); let mut fn_maps = IrMaps::new(ir.tcx, def_id); // Don't run unused pass for #[derive()] @@ -494,7 +494,7 @@ fn visit_expr<'tcx>(ir: &mut IrMaps<'tcx>, expr: &'tcx Expr) { // in better error messages than just pointing at the closure // construction site. let mut call_caps = Vec::new(); - let closure_def_id = ir.tcx.hir().local_def_id_from_hir_id(expr.hir_id); + let closure_def_id = ir.tcx.hir().local_def_id(expr.hir_id); if let Some(upvars) = ir.tcx.upvars(closure_def_id) { let parent_upvars = ir.tcx.upvars(ir.body_owner); call_caps.extend(upvars.iter().filter_map(|(&var_id, upvar)| { diff --git a/src/librustc/middle/reachable.rs b/src/librustc/middle/reachable.rs index 6b26be34d7520..b9a95219d3146 100644 --- a/src/librustc/middle/reachable.rs +++ b/src/librustc/middle/reachable.rs @@ -35,7 +35,7 @@ fn item_might_be_inlined(tcx: TyCtxt<'tcx>, item: &hir::Item, attrs: CodegenFnAt match item.node { hir::ItemKind::Impl(..) | hir::ItemKind::Fn(..) => { - let generics = tcx.generics_of(tcx.hir().local_def_id_from_hir_id(item.hir_id)); + let generics = tcx.generics_of(tcx.hir().local_def_id(item.hir_id)); generics.requires_monomorphization(tcx) } _ => false, @@ -48,7 +48,7 @@ fn method_might_be_inlined( impl_src: DefId, ) -> bool { let codegen_fn_attrs = tcx.codegen_fn_attrs(impl_item.hir_id.owner_def_id()); - let generics = tcx.generics_of(tcx.hir().local_def_id_from_hir_id(impl_item.hir_id)); + let generics = tcx.generics_of(tcx.hir().local_def_id(impl_item.hir_id)); if codegen_fn_attrs.requests_inline() || generics.requires_monomorphization(tcx) { return true } @@ -222,7 +222,7 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> { } else { false }; - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let codegen_attrs = self.tcx.codegen_fn_attrs(def_id); let is_extern = codegen_attrs.contains_extern_indicator(); let std_internal = codegen_attrs.flags.contains( @@ -243,7 +243,7 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> { Node::Item(item) => { match item.node { hir::ItemKind::Fn(.., body) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); if item_might_be_inlined(self.tcx, &item, self.tcx.codegen_fn_attrs(def_id)) { @@ -345,7 +345,7 @@ impl<'a, 'tcx> ItemLikeVisitor<'tcx> for CollectPrivateImplItemsVisitor<'a, 'tcx // Anything which has custom linkage gets thrown on the worklist no // matter where it is in the crate, along with "special std symbols" // which are currently akin to allocator symbols. - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let codegen_attrs = self.tcx.codegen_fn_attrs(def_id); if codegen_attrs.contains_extern_indicator() || codegen_attrs.flags.contains(CodegenFnAttrFlags::RUSTC_STD_INTERNAL_SYMBOL) { diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index f859e835425c4..26ac1275bb992 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -675,7 +675,7 @@ impl<'tcx> ScopeTree { &format!("free_scope: {:?} not recognized by the \ region scope tree for {:?} / {:?}", param_owner, - self.root_parent.map(|id| tcx.hir().local_def_id_from_hir_id(id)), + self.root_parent.map(|id| tcx.hir().local_def_id(id)), self.root_body.map(|hir_id| DefId::local(hir_id.owner)))); } diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index 758f14ebf99a6..0839a2b435ae8 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -83,7 +83,7 @@ impl Region { fn early(hir_map: &Map<'_>, index: &mut u32, param: &GenericParam) -> (ParamName, Region) { let i = *index; *index += 1; - let def_id = hir_map.local_def_id_from_hir_id(param.hir_id); + let def_id = hir_map.local_def_id(param.hir_id); let origin = LifetimeDefOrigin::from_param(param); debug!("Region::early: index={} def_id={:?}", i, def_id); (param.name.modern(), Region::EarlyBound(i, def_id, origin)) @@ -91,7 +91,7 @@ impl Region { fn late(hir_map: &Map<'_>, param: &GenericParam) -> (ParamName, Region) { let depth = ty::INNERMOST; - let def_id = hir_map.local_def_id_from_hir_id(param.hir_id); + let def_id = hir_map.local_def_id(param.hir_id); let origin = LifetimeDefOrigin::from_param(param); debug!( "Region::late: param={:?} depth={:?} def_id={:?} origin={:?}", @@ -1326,7 +1326,7 @@ fn object_lifetime_defaults_for_item( add_bounds(&mut set, ¶m.bounds); - let param_def_id = tcx.hir().local_def_id_from_hir_id(param.hir_id); + let param_def_id = tcx.hir().local_def_id(param.hir_id); for predicate in &generics.where_clause.predicates { // Look for `type: ...` where clauses. let data = match *predicate { @@ -1370,7 +1370,7 @@ fn object_lifetime_defaults_for_item( .enumerate() .find(|&(_, (_, lt_name, _))| lt_name == name) .map_or(Set1::Many, |(i, (id, _, origin))| { - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); Set1::One(Region::EarlyBound(i as u32, def_id, origin)) }) } @@ -1835,7 +1835,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { node: hir::ImplItemKind::Method(..), .. }) => { - let scope = self.tcx.hir().local_def_id_from_hir_id(fn_id); + let scope = self.tcx.hir().local_def_id(fn_id); def = Region::Free(scope, def.id().unwrap()); } _ => {} diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 101563d2d99ef..7757336cf9c36 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -361,7 +361,7 @@ impl<'a, 'tcx> Visitor<'tcx> for MissingStabilityAnnotations<'a, 'tcx> { } fn visit_impl_item(&mut self, ii: &'tcx hir::ImplItem) { - let impl_def_id = self.tcx.hir().local_def_id_from_hir_id( + let impl_def_id = self.tcx.hir().local_def_id( self.tcx.hir().get_parent_item(ii.hir_id)); if self.tcx.impl_trait_ref(impl_def_id).is_none() { self.check_missing_stability(ii.hir_id, ii.span, "item"); @@ -598,7 +598,7 @@ impl<'tcx> TyCtxt<'tcx> { // Deprecated attributes apply in-crate and cross-crate. if let Some(id) = id { if let Some(depr_entry) = self.lookup_deprecation_entry(def_id) { - let parent_def_id = self.hir().local_def_id_from_hir_id( + let parent_def_id = self.hir().local_def_id( self.hir().get_parent_item(id)); let skip = self.lookup_deprecation_entry(parent_def_id) .map_or(false, |parent_depr| parent_depr.same_origin(&depr_entry)); @@ -766,7 +766,7 @@ impl Visitor<'tcx> for Checker<'tcx> { // compiler-generated `extern crate` items have a dummy span. if item.span.is_dummy() { return } - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let cnum = match self.tcx.extern_mod_stmt_cnum(def_id) { Some(cnum) => cnum, None => return, @@ -796,7 +796,7 @@ impl Visitor<'tcx> for Checker<'tcx> { // There's no good place to insert stability check for non-Copy unions, // so semi-randomly perform it here in stability.rs hir::ItemKind::Union(..) if !self.tcx.features().untagged_unions => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let adt_def = self.tcx.adt_def(def_id); let ty = self.tcx.type_of(def_id); diff --git a/src/librustc/mir/mono.rs b/src/librustc/mir/mono.rs index 432a61de6cb98..a061e6f48f4c0 100644 --- a/src/librustc/mir/mono.rs +++ b/src/librustc/mir/mono.rs @@ -79,7 +79,7 @@ impl<'tcx> MonoItem<'tcx> { tcx.symbol_name(Instance::mono(tcx, def_id)) } MonoItem::GlobalAsm(hir_id) => { - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); SymbolName { name: InternedString::intern(&format!("global_asm_{:?}", def_id)) } diff --git a/src/librustc/ty/inhabitedness/def_id_forest.rs b/src/librustc/ty/inhabitedness/def_id_forest.rs index af8dedfc8812e..4453624fa4502 100644 --- a/src/librustc/ty/inhabitedness/def_id_forest.rs +++ b/src/librustc/ty/inhabitedness/def_id_forest.rs @@ -33,7 +33,7 @@ impl<'tcx> DefIdForest { /// crate. #[inline] pub fn full(tcx: TyCtxt<'tcx>) -> DefIdForest { - let crate_id = tcx.hir().local_def_id_from_hir_id(CRATE_HIR_ID); + let crate_id = tcx.hir().local_def_id(CRATE_HIR_ID); DefIdForest::from_id(crate_id) } diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index ad9880725128f..7f60f74760034 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -2816,7 +2816,7 @@ impl<'tcx> TyCtxt<'tcx> { parent_vis: &hir::Visibility, trait_item_ref: &hir::TraitItemRef) -> AssocItem { - let def_id = self.hir().local_def_id_from_hir_id(trait_item_ref.id.hir_id); + let def_id = self.hir().local_def_id(trait_item_ref.id.hir_id); let (kind, has_self) = match trait_item_ref.kind { hir::AssocItemKind::Const => (ty::AssocKind::Const, false), hir::AssocItemKind::Method { has_self } => { @@ -2842,7 +2842,7 @@ impl<'tcx> TyCtxt<'tcx> { parent_def_id: DefId, impl_item_ref: &hir::ImplItemRef) -> AssocItem { - let def_id = self.hir().local_def_id_from_hir_id(impl_item_ref.id.hir_id); + let def_id = self.hir().local_def_id(impl_item_ref.id.hir_id); let (kind, has_self) = match impl_item_ref.kind { hir::AssocItemKind::Const => (ty::AssocKind::Const, false), hir::AssocItemKind::Method { has_self } => { @@ -3114,7 +3114,7 @@ impl Iterator for AssocItemsIterator<'_> { fn associated_item(tcx: TyCtxt<'_>, def_id: DefId) -> AssocItem { let id = tcx.hir().as_local_hir_id(def_id).unwrap(); let parent_id = tcx.hir().get_parent_item(id); - let parent_def_id = tcx.hir().local_def_id_from_hir_id(parent_id); + let parent_def_id = tcx.hir().local_def_id(parent_id); let parent_item = tcx.hir().expect_item(parent_id); match parent_item.node { hir::ItemKind::Impl(.., ref impl_item_refs) => { @@ -3178,14 +3178,14 @@ fn associated_item_def_ids(tcx: TyCtxt<'_>, def_id: DefId) -> &[DefId] { tcx.arena.alloc_from_iter( trait_item_refs.iter() .map(|trait_item_ref| trait_item_ref.id) - .map(|id| tcx.hir().local_def_id_from_hir_id(id.hir_id)) + .map(|id| tcx.hir().local_def_id(id.hir_id)) ) } hir::ItemKind::Impl(.., ref impl_item_refs) => { tcx.arena.alloc_from_iter( impl_item_refs.iter() .map(|impl_item_ref| impl_item_ref.id) - .map(|id| tcx.hir().local_def_id_from_hir_id(id.hir_id)) + .map(|id| tcx.hir().local_def_id(id.hir_id)) ) } hir::ItemKind::TraitAlias(..) => &[], diff --git a/src/librustc/ty/trait_def.rs b/src/librustc/ty/trait_def.rs index a7ade875bf11b..2bb9c258f8b67 100644 --- a/src/librustc/ty/trait_def.rs +++ b/src/librustc/ty/trait_def.rs @@ -186,7 +186,7 @@ pub(super) fn trait_impls_of_provider( } for &hir_id in tcx.hir().trait_impls(trait_id) { - add_impl(tcx.hir().local_def_id_from_hir_id(hir_id)); + add_impl(tcx.hir().local_def_id(hir_id)); } } diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs index 8763a6bc066b3..34db080ef6633 100644 --- a/src/librustc_borrowck/borrowck/mod.rs +++ b/src/librustc_borrowck/borrowck/mod.rs @@ -198,7 +198,7 @@ pub fn build_borrowck_dataflow_data_for_fn<'a, 'tcx>( cfg: &cfg::CFG, ) -> (BorrowckCtxt<'a, 'tcx>, AnalysisData<'tcx>) { let owner_id = tcx.hir().body_owner(body_id); - let owner_def_id = tcx.hir().local_def_id_from_hir_id(owner_id); + let owner_def_id = tcx.hir().local_def_id(owner_id); let tables = tcx.typeck_tables_of(owner_def_id); let region_scope_tree = tcx.region_scope_tree(owner_def_id); let body = tcx.hir().body(body_id); diff --git a/src/librustc_codegen_ssa/back/symbol_export.rs b/src/librustc_codegen_ssa/back/symbol_export.rs index b64c9a60d9713..c5553fa93cf67 100644 --- a/src/librustc_codegen_ssa/back/symbol_export.rs +++ b/src/librustc_codegen_ssa/back/symbol_export.rs @@ -84,7 +84,7 @@ fn reachable_non_generics_provider( // let it through if it's included statically. match tcx.hir().get(hir_id) { Node::ForeignItem(..) => { - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); if tcx.is_statically_included_foreign_item(def_id) { Some(def_id) } else { @@ -104,7 +104,7 @@ fn reachable_non_generics_provider( node: hir::ImplItemKind::Method(..), .. }) => { - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); let generics = tcx.generics_of(def_id); if !generics.requires_monomorphization(tcx) && // Functions marked with #[inline] are only ever codegened diff --git a/src/librustc_codegen_utils/symbol_names_test.rs b/src/librustc_codegen_utils/symbol_names_test.rs index 7ab29c5c4c3d0..f562744dbe753 100644 --- a/src/librustc_codegen_utils/symbol_names_test.rs +++ b/src/librustc_codegen_utils/symbol_names_test.rs @@ -33,7 +33,7 @@ impl SymbolNamesTest<'tcx> { fn process_attrs(&mut self, hir_id: hir::HirId) { let tcx = self.tcx; - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); for attr in tcx.get_attrs(def_id).iter() { if attr.check_name(SYMBOL_NAME) { // for now, can only use on monomorphic names diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 3be06e291ff09..a8f1b001cec8d 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -471,7 +471,7 @@ impl<'b, 'tcx> HirPrinterSupport<'tcx> for TypedAnnotation<'b, 'tcx> { } fn node_path(&self, id: hir::HirId) -> Option { - Some(self.tcx.def_path_str(self.tcx.hir().local_def_id_from_hir_id(id))) + Some(self.tcx.def_path_str(self.tcx.hir().local_def_id(id))) } } diff --git a/src/librustc_incremental/assert_dep_graph.rs b/src/librustc_incremental/assert_dep_graph.rs index 38dc6edaf6325..ba893f5f93691 100644 --- a/src/librustc_incremental/assert_dep_graph.rs +++ b/src/librustc_incremental/assert_dep_graph.rs @@ -111,7 +111,7 @@ impl IfThisChanged<'tcx> { } fn process_attrs(&mut self, hir_id: hir::HirId, attrs: &[ast::Attribute]) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = self.tcx.hir().local_def_id(hir_id); let def_path_hash = self.tcx.def_path_hash(def_id); for attr in attrs { if attr.check_name(ATTR_IF_THIS_CHANGED) { diff --git a/src/librustc_incremental/persist/dirty_clean.rs b/src/librustc_incremental/persist/dirty_clean.rs index 1d83aa112a837..c23bb6b47f490 100644 --- a/src/librustc_incremental/persist/dirty_clean.rs +++ b/src/librustc_incremental/persist/dirty_clean.rs @@ -500,7 +500,7 @@ impl DirtyCleanVisitor<'tcx> { } fn check_item(&mut self, item_id: hir::HirId, item_span: Span) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item_id); + let def_id = self.tcx.hir().local_def_id(item_id); for attr in self.tcx.get_attrs(def_id).iter() { let assertion = match self.assertion_maybe(item_id, attr) { Some(a) => a, diff --git a/src/librustc_interface/proc_macro_decls.rs b/src/librustc_interface/proc_macro_decls.rs index d888c9e57d326..56180bcad06d3 100644 --- a/src/librustc_interface/proc_macro_decls.rs +++ b/src/librustc_interface/proc_macro_decls.rs @@ -16,7 +16,7 @@ fn proc_macro_decls_static(tcx: TyCtxt<'_>, cnum: CrateNum) -> Option { let mut finder = Finder { decls: None }; tcx.hir().krate().visit_all_item_likes(&mut finder); - finder.decls.map(|id| tcx.hir().local_def_id_from_hir_id(id)) + finder.decls.map(|id| tcx.hir().local_def_id(id)) } struct Finder { diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index 12719c3b9d303..267b09bae35e4 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -114,7 +114,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for BoxPointers { hir::ItemKind::Enum(..) | hir::ItemKind::Struct(..) | hir::ItemKind::Union(..) => { - let def_id = cx.tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = cx.tcx.hir().local_def_id(it.hir_id); self.check_heap_type(cx, it.span, cx.tcx.type_of(def_id)) } _ => () @@ -125,7 +125,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for BoxPointers { hir::ItemKind::Struct(ref struct_def, _) | hir::ItemKind::Union(ref struct_def, _) => { for struct_field in struct_def.fields() { - let def_id = cx.tcx.hir().local_def_id_from_hir_id(struct_field.hir_id); + let def_id = cx.tcx.hir().local_def_id(struct_field.hir_id); self.check_heap_type(cx, struct_field.span, cx.tcx.type_of(def_id)); } @@ -500,21 +500,21 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingCopyImplementations { if !ast_generics.params.is_empty() { return; } - let def = cx.tcx.adt_def(cx.tcx.hir().local_def_id_from_hir_id(item.hir_id)); + let def = cx.tcx.adt_def(cx.tcx.hir().local_def_id(item.hir_id)); (def, cx.tcx.mk_adt(def, cx.tcx.intern_substs(&[]))) } hir::ItemKind::Union(_, ref ast_generics) => { if !ast_generics.params.is_empty() { return; } - let def = cx.tcx.adt_def(cx.tcx.hir().local_def_id_from_hir_id(item.hir_id)); + let def = cx.tcx.adt_def(cx.tcx.hir().local_def_id(item.hir_id)); (def, cx.tcx.mk_adt(def, cx.tcx.intern_substs(&[]))) } hir::ItemKind::Enum(_, ref ast_generics) => { if !ast_generics.params.is_empty() { return; } - let def = cx.tcx.adt_def(cx.tcx.hir().local_def_id_from_hir_id(item.hir_id)); + let def = cx.tcx.adt_def(cx.tcx.hir().local_def_id(item.hir_id)); (def, cx.tcx.mk_adt(def, cx.tcx.intern_substs(&[]))) } _ => return, @@ -792,7 +792,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for PluginAsLibrary { _ => return, }; - let def_id = cx.tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = cx.tcx.hir().local_def_id(it.hir_id); let prfn = match cx.tcx.extern_mod_stmt_cnum(def_id) { Some(cnum) => cx.tcx.plugin_registrar_fn(cnum), None => { @@ -973,7 +973,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnionsWithDropFields { if let hir::ItemKind::Union(ref vdata, _) = item.node { for field in vdata.fields() { let field_ty = ctx.tcx.type_of( - ctx.tcx.hir().local_def_id_from_hir_id(field.hir_id)); + ctx.tcx.hir().local_def_id(field.hir_id)); if field_ty.needs_drop(ctx.tcx, ctx.param_env) { ctx.span_lint(UNIONS_WITH_DROP_FIELDS, field.span, @@ -1216,7 +1216,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TrivialConstraints { use rustc::ty::Predicate::*; if cx.tcx.features().trivial_bounds { - let def_id = cx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = cx.tcx.hir().local_def_id(item.hir_id); let predicates = cx.tcx.predicates_of(def_id); for &(predicate, span) in &predicates.predicates { let predicate_kind_name = match predicate { @@ -1541,7 +1541,7 @@ impl ExplicitOutlivesRequirements { ty_generics: &'tcx ty::Generics, ) -> Vec> { let index = ty_generics.param_def_id_to_index[ - &tcx.hir().local_def_id_from_hir_id(param.hir_id)]; + &tcx.hir().local_def_id(param.hir_id)]; match param.kind { hir::GenericParamKind::Lifetime { .. } => { @@ -1659,7 +1659,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for ExplicitOutlivesRequirements { use rustc::middle::resolve_lifetime::Region; let infer_static = cx.tcx.features().infer_static_outlives_requirements; - let def_id = cx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = cx.tcx.hir().local_def_id(item.hir_id); if let hir::ItemKind::Struct(_, ref hir_generics) | hir::ItemKind::Enum(_, ref hir_generics) | hir::ItemKind::Union(_, ref hir_generics) = item.node diff --git a/src/librustc_lint/nonstandard_style.rs b/src/librustc_lint/nonstandard_style.rs index b221b8ed30c59..84f068ab50a22 100644 --- a/src/librustc_lint/nonstandard_style.rs +++ b/src/librustc_lint/nonstandard_style.rs @@ -20,7 +20,7 @@ pub enum MethodLateContext { } pub fn method_context(cx: &LateContext<'_, '_>, id: hir::HirId) -> MethodLateContext { - let def_id = cx.tcx.hir().local_def_id_from_hir_id(id); + let def_id = cx.tcx.hir().local_def_id(id); let item = cx.tcx.associated_item(def_id); match item.container { ty::TraitContainer(..) => MethodLateContext::TraitAutoImpl, diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs index d0258ca30c507..fdfc6f68590a4 100644 --- a/src/librustc_lint/types.rs +++ b/src/librustc_lint/types.rs @@ -888,7 +888,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> { } fn check_foreign_fn(&mut self, id: hir::HirId, decl: &hir::FnDecl) { - let def_id = self.cx.tcx.hir().local_def_id_from_hir_id(id); + let def_id = self.cx.tcx.hir().local_def_id(id); let sig = self.cx.tcx.fn_sig(def_id); let sig = self.cx.tcx.erase_late_bound_regions(&sig); let inputs = if sig.c_variadic { @@ -912,7 +912,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> { } fn check_foreign_static(&mut self, id: hir::HirId, span: Span) { - let def_id = self.cx.tcx.hir().local_def_id_from_hir_id(id); + let def_id = self.cx.tcx.hir().local_def_id(id); let ty = self.cx.tcx.type_of(def_id); self.check_type_for_ffi_and_report_errors(span, ty); } @@ -941,7 +941,7 @@ declare_lint_pass!(VariantSizeDifferences => [VARIANT_SIZE_DIFFERENCES]); impl<'a, 'tcx> LateLintPass<'a, 'tcx> for VariantSizeDifferences { fn check_item(&mut self, cx: &LateContext<'_, '_>, it: &hir::Item) { if let hir::ItemKind::Enum(ref enum_definition, _) = it.node { - let item_def_id = cx.tcx.hir().local_def_id_from_hir_id(it.hir_id); + let item_def_id = cx.tcx.hir().local_def_id(it.hir_id); let t = cx.tcx.type_of(item_def_id); let ty = cx.tcx.erase_regions(&t); let layout = match cx.layout_of(ty) { diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 73c20ccad5abf..c7f57be642618 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -667,7 +667,7 @@ impl EncodeContext<'tcx> { (id, md, attrs, vis): (hir::HirId, &hir::Mod, &[ast::Attribute], &hir::Visibility), ) -> Entry<'tcx> { let tcx = self.tcx; - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); debug!("EncodeContext::encode_info_for_mod({:?})", def_id); let data = ModData { @@ -683,7 +683,7 @@ impl EncodeContext<'tcx> { span: self.lazy(&tcx.def_span(def_id)), attributes: self.encode_attributes(attrs), children: self.lazy_seq(md.item_ids.iter().map(|item_id| { - tcx.hir().local_def_id_from_hir_id(item_id.id).index + tcx.hir().local_def_id(item_id.id).index })), stability: self.encode_stability(def_id), deprecation: self.encode_deprecation(def_id), @@ -1105,7 +1105,7 @@ impl EncodeContext<'tcx> { // for methods, write all the stuff get_trait_method // needs to know let ctor = struct_def.ctor_hir_id() - .map(|ctor_hir_id| tcx.hir().local_def_id_from_hir_id(ctor_hir_id).index); + .map(|ctor_hir_id| tcx.hir().local_def_id(ctor_hir_id).index); let repr_options = get_repr_options(tcx, def_id); @@ -1194,7 +1194,7 @@ impl EncodeContext<'tcx> { hir::ItemKind::ForeignMod(ref fm) => { self.lazy_seq(fm.items .iter() - .map(|foreign_item| tcx.hir().local_def_id_from_hir_id( + .map(|foreign_item| tcx.hir().local_def_id( foreign_item.hir_id).index)) } hir::ItemKind::Enum(..) => { @@ -1313,7 +1313,7 @@ impl EncodeContext<'tcx> { /// Serialize the text of exported macros fn encode_info_for_macro_def(&mut self, macro_def: &hir::MacroDef) -> Entry<'tcx> { use syntax::print::pprust; - let def_id = self.tcx.hir().local_def_id_from_hir_id(macro_def.hir_id); + let def_id = self.tcx.hir().local_def_id(macro_def.hir_id); Entry { kind: EntryKind::MacroDef(self.lazy(&MacroDef { body: pprust::tts_to_string(¯o_def.body.trees().collect::>()), @@ -1656,7 +1656,7 @@ impl Visitor<'tcx> for EncodeContext<'tcx> { } fn visit_item(&mut self, item: &'tcx hir::Item) { intravisit::walk_item(self, item); - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); match item.node { hir::ItemKind::ExternCrate(_) | hir::ItemKind::Use(..) => {} // ignore these @@ -1666,7 +1666,7 @@ impl Visitor<'tcx> for EncodeContext<'tcx> { } fn visit_foreign_item(&mut self, ni: &'tcx hir::ForeignItem) { intravisit::walk_foreign_item(self, ni); - let def_id = self.tcx.hir().local_def_id_from_hir_id(ni.hir_id); + let def_id = self.tcx.hir().local_def_id(ni.hir_id); self.record(def_id, EncodeContext::encode_info_for_foreign_item, (def_id, ni)); @@ -1678,7 +1678,7 @@ impl Visitor<'tcx> for EncodeContext<'tcx> { intravisit::walk_variant(self, v, g, id); if let Some(ref discr) = v.node.disr_expr { - let def_id = self.tcx.hir().local_def_id_from_hir_id(discr.hir_id); + let def_id = self.tcx.hir().local_def_id(discr.hir_id); self.record(def_id, EncodeContext::encode_info_for_anon_const, def_id); } } @@ -1691,7 +1691,7 @@ impl Visitor<'tcx> for EncodeContext<'tcx> { self.encode_info_for_ty(ty); } fn visit_macro_def(&mut self, macro_def: &'tcx hir::MacroDef) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(macro_def.hir_id); + let def_id = self.tcx.hir().local_def_id(macro_def.hir_id); self.record(def_id, EncodeContext::encode_info_for_macro_def, macro_def); } } @@ -1710,7 +1710,7 @@ impl EncodeContext<'tcx> { fn encode_info_for_generics(&mut self, generics: &hir::Generics) { for param in &generics.params { - let def_id = self.tcx.hir().local_def_id_from_hir_id(param.hir_id); + let def_id = self.tcx.hir().local_def_id(param.hir_id); match param.kind { GenericParamKind::Lifetime { .. } => continue, GenericParamKind::Type { ref default, .. } => { @@ -1730,7 +1730,7 @@ impl EncodeContext<'tcx> { fn encode_info_for_ty(&mut self, ty: &hir::Ty) { match ty.node { hir::TyKind::Array(_, ref length) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(length.hir_id); + let def_id = self.tcx.hir().local_def_id(length.hir_id); self.record(def_id, EncodeContext::encode_info_for_anon_const, def_id); } _ => {} @@ -1740,7 +1740,7 @@ impl EncodeContext<'tcx> { fn encode_info_for_expr(&mut self, expr: &hir::Expr) { match expr.node { hir::ExprKind::Closure(..) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(expr.hir_id); + let def_id = self.tcx.hir().local_def_id(expr.hir_id); self.record(def_id, EncodeContext::encode_info_for_closure, def_id); } _ => {} @@ -1752,7 +1752,7 @@ impl EncodeContext<'tcx> { /// so it's easier to do that here then to wait until we would encounter /// normally in the visitor walk. fn encode_addl_info_for_item(&mut self, item: &hir::Item) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); match item.node { hir::ItemKind::Static(..) | hir::ItemKind::Const(..) | @@ -1788,7 +1788,7 @@ impl EncodeContext<'tcx> { // If the struct has a constructor, encode it. if let Some(ctor_hir_id) = struct_def.ctor_hir_id() { - let ctor_def_id = self.tcx.hir().local_def_id_from_hir_id(ctor_hir_id); + let ctor_def_id = self.tcx.hir().local_def_id(ctor_hir_id); self.record(ctor_def_id, EncodeContext::encode_struct_ctor, (def_id, ctor_def_id)); @@ -1823,7 +1823,7 @@ struct ImplVisitor<'tcx> { impl<'tcx, 'v> ItemLikeVisitor<'v> for ImplVisitor<'tcx> { fn visit_item(&mut self, item: &hir::Item) { if let hir::ItemKind::Impl(..) = item.node { - let impl_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let impl_id = self.tcx.hir().local_def_id(item.hir_id); if let Some(trait_ref) = self.tcx.impl_trait_ref(impl_id) { self.impls .entry(trait_ref.def_id) diff --git a/src/librustc_metadata/foreign_modules.rs b/src/librustc_metadata/foreign_modules.rs index b1f4dfffc7898..b2e40282d9332 100644 --- a/src/librustc_metadata/foreign_modules.rs +++ b/src/librustc_metadata/foreign_modules.rs @@ -25,11 +25,11 @@ impl ItemLikeVisitor<'tcx> for Collector<'tcx> { }; let foreign_items = fm.items.iter() - .map(|it| self.tcx.hir().local_def_id_from_hir_id(it.hir_id)) + .map(|it| self.tcx.hir().local_def_id(it.hir_id)) .collect(); self.modules.push(ForeignModule { foreign_items, - def_id: self.tcx.hir().local_def_id_from_hir_id(it.hir_id), + def_id: self.tcx.hir().local_def_id(it.hir_id), }); } diff --git a/src/librustc_metadata/native_libs.rs b/src/librustc_metadata/native_libs.rs index 4a01d0e559af4..5da5384f8aaa7 100644 --- a/src/librustc_metadata/native_libs.rs +++ b/src/librustc_metadata/native_libs.rs @@ -56,7 +56,7 @@ impl ItemLikeVisitor<'tcx> for Collector<'tcx> { name: None, kind: cstore::NativeUnknown, cfg: None, - foreign_module: Some(self.tcx.hir().local_def_id_from_hir_id(it.hir_id)), + foreign_module: Some(self.tcx.hir().local_def_id(it.hir_id)), wasm_import_module: None, }; let mut kind_specified = false; diff --git a/src/librustc_mir/borrow_check/nll/universal_regions.rs b/src/librustc_mir/borrow_check/nll/universal_regions.rs index a85f4776a8bee..3e090aed52270 100644 --- a/src/librustc_mir/borrow_check/nll/universal_regions.rs +++ b/src/librustc_mir/borrow_check/nll/universal_regions.rs @@ -768,7 +768,7 @@ fn for_each_late_bound_region_defined_on<'tcx>( local_id: *late_bound, }; let name = tcx.hir().name(hir_id).as_interned_str(); - let region_def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let region_def_id = tcx.hir().local_def_id(hir_id); let liberated_region = tcx.mk_region(ty::ReFree(ty::FreeRegion { scope: fn_def_id, bound_region: ty::BoundRegion::BrNamed(region_def_id, name), diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 80a035d8287f4..21444ebe0ca5e 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -69,7 +69,7 @@ pub fn mir_build(tcx: TyCtxt<'_>, def_id: DefId) -> Body<'_> { // fetch the fully liberated fn signature (that is, all bound // types/lifetimes replaced) let fn_sig = cx.tables().liberated_fn_sigs()[id].clone(); - let fn_def_id = tcx.hir().local_def_id_from_hir_id(id); + let fn_def_id = tcx.hir().local_def_id(id); let ty = tcx.type_of(fn_def_id); let mut abi = fn_sig.abi; @@ -534,7 +534,7 @@ where let span = tcx_hir.span(fn_id); let hir_tables = hir.tables(); - let fn_def_id = tcx_hir.local_def_id_from_hir_id(fn_id); + let fn_def_id = tcx_hir.local_def_id(fn_id); // Gather the upvars of a closure, if any. let mut upvar_mutbls = vec![]; diff --git a/src/librustc_mir/hair/cx/expr.rs b/src/librustc_mir/hair/cx/expr.rs index 94b4f6e8dd1c5..e7663ddaa9879 100644 --- a/src/librustc_mir/hair/cx/expr.rs +++ b/src/librustc_mir/hair/cx/expr.rs @@ -542,7 +542,7 @@ fn make_mirror_unadjusted<'a, 'tcx>( // Now comes the rote stuff: hir::ExprKind::Repeat(ref v, ref count) => { - let def_id = cx.tcx.hir().local_def_id_from_hir_id(count.hir_id); + let def_id = cx.tcx.hir().local_def_id(count.hir_id); let substs = InternalSubsts::identity_for_item(cx.tcx.global_tcx(), def_id); let instance = ty::Instance::resolve( cx.tcx.global_tcx(), @@ -910,9 +910,9 @@ fn convert_path_expr<'a, 'tcx>( Res::Def(DefKind::ConstParam, def_id) => { let hir_id = cx.tcx.hir().as_local_hir_id(def_id).unwrap(); let item_id = cx.tcx.hir().get_parent_node(hir_id); - let item_def_id = cx.tcx.hir().local_def_id_from_hir_id(item_id); + let item_def_id = cx.tcx.hir().local_def_id(item_id); let generics = cx.tcx.generics_of(item_def_id); - let local_def_id = cx.tcx.hir().local_def_id_from_hir_id(hir_id); + let local_def_id = cx.tcx.hir().local_def_id(hir_id); let index = generics.param_def_id_to_index[&local_def_id]; let name = cx.tcx.hir().name(hir_id).as_interned_str(); let val = ConstValue::Param(ty::ParamConst::new(index, name)); @@ -1191,7 +1191,7 @@ fn capture_upvar<'tcx>( ) -> ExprRef<'tcx> { let upvar_id = ty::UpvarId { var_path: ty::UpvarPath { hir_id: var_hir_id }, - closure_expr_id: cx.tcx.hir().local_def_id_from_hir_id(closure_expr.hir_id).to_local(), + closure_expr_id: cx.tcx.hir().local_def_id(closure_expr.hir_id).to_local(), }; let upvar_capture = cx.tables().upvar_capture(upvar_id); let temp_lifetime = cx.region_scope_tree.temporary_scope(closure_expr.hir_id.local_id); diff --git a/src/librustc_mir/hair/cx/mod.rs b/src/librustc_mir/hair/cx/mod.rs index a21d900cf5e5e..3d9349df5bedb 100644 --- a/src/librustc_mir/hair/cx/mod.rs +++ b/src/librustc_mir/hair/cx/mod.rs @@ -54,7 +54,7 @@ pub struct Cx<'a, 'tcx> { impl<'a, 'tcx> Cx<'a, 'tcx> { pub fn new(infcx: &'a InferCtxt<'a, 'tcx>, src_id: hir::HirId) -> Cx<'a, 'tcx> { let tcx = infcx.tcx; - let src_def_id = tcx.hir().local_def_id_from_hir_id(src_id); + let src_def_id = tcx.hir().local_def_id(src_id); let tables = tcx.typeck_tables_of(src_def_id); let body_owner_kind = tcx.hir().body_owner_kind(src_id); diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs index 097d76925c8eb..da8fdb5082a8c 100644 --- a/src/librustc_mir/monomorphize/collector.rs +++ b/src/librustc_mir/monomorphize/collector.rs @@ -989,7 +989,7 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> { hir::ItemKind::Union(_, ref generics) => { if generics.params.is_empty() { if self.mode == MonoItemCollectionMode::Eager { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); debug!("RootCollector: ADT drop-glue for {}", def_id_to_string(self.tcx, def_id)); @@ -1001,11 +1001,11 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> { hir::ItemKind::GlobalAsm(..) => { debug!("RootCollector: ItemKind::GlobalAsm({})", def_id_to_string(self.tcx, - self.tcx.hir().local_def_id_from_hir_id(item.hir_id))); + self.tcx.hir().local_def_id(item.hir_id))); self.output.push(MonoItem::GlobalAsm(item.hir_id)); } hir::ItemKind::Static(..) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); debug!("RootCollector: ItemKind::Static({})", def_id_to_string(self.tcx, def_id)); self.output.push(MonoItem::Static(def_id)); @@ -1015,7 +1015,7 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> { // actually used somewhere. Just declaring them is insufficient. // but even just declaring them must collect the items they refer to - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let instance = Instance::mono(self.tcx, def_id); let cid = GlobalId { @@ -1029,7 +1029,7 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> { } } hir::ItemKind::Fn(..) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); self.push_if_root(def_id); } } @@ -1043,7 +1043,7 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> { fn visit_impl_item(&mut self, ii: &'v hir::ImplItem) { match ii.node { hir::ImplItemKind::Method(hir::MethodSig { .. }, _) => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(ii.hir_id); + let def_id = self.tcx.hir().local_def_id(ii.hir_id); self.push_if_root(def_id); } _ => { /* Nothing to do here */ } @@ -1136,7 +1136,7 @@ fn create_mono_items_for_default_impls<'tcx>( } } - let impl_def_id = tcx.hir().local_def_id_from_hir_id(item.hir_id); + let impl_def_id = tcx.hir().local_def_id(item.hir_id); debug!("create_mono_items_for_default_impls(item={})", def_id_to_string(tcx, impl_def_id)); diff --git a/src/librustc_mir/monomorphize/item.rs b/src/librustc_mir/monomorphize/item.rs index 2bcf058ad7c35..e63426281bf21 100644 --- a/src/librustc_mir/monomorphize/item.rs +++ b/src/librustc_mir/monomorphize/item.rs @@ -55,7 +55,7 @@ pub trait MonoItemExt<'tcx>: fmt::Debug { tcx.symbol_name(Instance::mono(tcx, def_id)) } MonoItem::GlobalAsm(hir_id) => { - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); ty::SymbolName { name: InternedString::intern(&format!("global_asm_{:?}", def_id)) } diff --git a/src/librustc_mir/monomorphize/partitioning.rs b/src/librustc_mir/monomorphize/partitioning.rs index a934c921d9257..ad9db4e0aa8d8 100644 --- a/src/librustc_mir/monomorphize/partitioning.rs +++ b/src/librustc_mir/monomorphize/partitioning.rs @@ -314,7 +314,7 @@ fn mono_item_visibility( }; } MonoItem::GlobalAsm(hir_id) => { - let def_id = tcx.hir().local_def_id_from_hir_id(*hir_id); + let def_id = tcx.hir().local_def_id(*hir_id); return if tcx.is_reachable_non_generic(def_id) { *can_be_internalized = false; default_visibility(tcx, def_id, false) @@ -698,7 +698,7 @@ fn characteristic_def_id_of_mono_item<'tcx>( Some(def_id) } MonoItem::Static(def_id) => Some(def_id), - MonoItem::GlobalAsm(hir_id) => Some(tcx.hir().local_def_id_from_hir_id(hir_id)), + MonoItem::GlobalAsm(hir_id) => Some(tcx.hir().local_def_id(hir_id)), } } diff --git a/src/librustc_mir/transform/mod.rs b/src/librustc_mir/transform/mod.rs index 7f43c4a3e89a1..15e2dc3261d98 100644 --- a/src/librustc_mir/transform/mod.rs +++ b/src/librustc_mir/transform/mod.rs @@ -78,7 +78,7 @@ fn mir_keys(tcx: TyCtxt<'_>, krate: CrateNum) -> &DefIdSet { _: hir::HirId, _: Span) { if let hir::VariantData::Tuple(_, hir_id) = *v { - self.set.insert(self.tcx.hir().local_def_id_from_hir_id(hir_id)); + self.set.insert(self.tcx.hir().local_def_id(hir_id)); } intravisit::walk_struct_def(self, v) } diff --git a/src/librustc_passes/layout_test.rs b/src/librustc_passes/layout_test.rs index 6b1ce578240e4..95cb8de70675d 100644 --- a/src/librustc_passes/layout_test.rs +++ b/src/librustc_passes/layout_test.rs @@ -29,7 +29,7 @@ struct VarianceTest<'tcx> { impl ItemLikeVisitor<'tcx> for VarianceTest<'tcx> { fn visit_item(&mut self, item: &'tcx hir::Item) { - let item_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_def_id = self.tcx.hir().local_def_id(item.hir_id); if let ItemKind::Ty(..) = item.node { for attr in self.tcx.get_attrs(item_def_id).iter() { diff --git a/src/librustc_passes/rvalue_promotion.rs b/src/librustc_passes/rvalue_promotion.rs index e14fa07fbbfe4..daa64478bca83 100644 --- a/src/librustc_passes/rvalue_promotion.rs +++ b/src/librustc_passes/rvalue_promotion.rs @@ -165,7 +165,7 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> { impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> { fn check_nested_body(&mut self, body_id: hir::BodyId) -> Promotability { let item_id = self.tcx.hir().body_owner(body_id); - let item_def_id = self.tcx.hir().local_def_id_from_hir_id(item_id); + let item_def_id = self.tcx.hir().local_def_id(item_id); let outer_in_fn = self.in_fn; let outer_tables = self.tables; @@ -451,7 +451,7 @@ fn check_expr_kind<'a, 'tcx>( let nested_body_promotable = v.check_nested_body(body_id); // Paths in constant contexts cannot refer to local variables, // as there are none, and thus closures can't have upvars there. - let closure_def_id = v.tcx.hir().local_def_id_from_hir_id(e.hir_id); + let closure_def_id = v.tcx.hir().local_def_id(e.hir_id); if !v.tcx.upvars(closure_def_id).map_or(true, |v| v.is_empty()) { NotPromotable } else { diff --git a/src/librustc_plugin/build.rs b/src/librustc_plugin/build.rs index 816e283a10460..f1bf1111cf700 100644 --- a/src/librustc_plugin/build.rs +++ b/src/librustc_plugin/build.rs @@ -44,7 +44,7 @@ fn plugin_registrar_fn(tcx: TyCtxt<'_>, cnum: CrateNum) -> Option { 0 => None, 1 => { let (hir_id, _) = finder.registrars.pop().unwrap(); - Some(tcx.hir().local_def_id_from_hir_id(hir_id)) + Some(tcx.hir().local_def_id(hir_id)) }, _ => { let diagnostic = tcx.sess.diagnostic(); diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 339021f511afd..b68e10a647df1 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -250,13 +250,13 @@ fn def_id_visibility<'tcx>( let parent_hir_id = tcx.hir().get_parent_node(hir_id); match tcx.hir().get(parent_hir_id) { Node::Variant(..) => { - let parent_did = tcx.hir().local_def_id_from_hir_id(parent_hir_id); + let parent_did = tcx.hir().local_def_id(parent_hir_id); let (mut ctor_vis, mut span, mut descr) = def_id_visibility( tcx, parent_did, ); let adt_def = tcx.adt_def(tcx.hir().get_parent_did(hir_id)); - let ctor_did = tcx.hir().local_def_id_from_hir_id( + let ctor_did = tcx.hir().local_def_id( vdata.ctor_hir_id().unwrap()); let variant = adt_def.variant_with_ctor_id(ctor_did); @@ -333,7 +333,7 @@ fn item_tables<'a, 'tcx>( hir_id: hir::HirId, empty_tables: &'a ty::TypeckTables<'tcx>, ) -> &'a ty::TypeckTables<'tcx> { - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); if tcx.has_typeck_tables(def_id) { tcx.typeck_tables_of(def_id) } else { empty_tables } } @@ -394,7 +394,7 @@ trait VisibilityLike: Sized { access_levels: &AccessLevels, ) -> Self { let mut find = FindMin { tcx, access_levels, min: Self::MAX }; - let def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = tcx.hir().local_def_id(hir_id); find.visit(tcx.type_of(def_id)); if let Some(trait_ref) = tcx.impl_trait_ref(def_id) { find.visit_trait(trait_ref); @@ -475,7 +475,7 @@ impl EmbargoVisitor<'tcx> { ) -> ReachEverythingInTheInterfaceVisitor<'_, 'tcx> { ReachEverythingInTheInterfaceVisitor { access_level: cmp::min(access_level, Some(AccessLevel::Reachable)), - item_def_id: self.tcx.hir().local_def_id_from_hir_id(item_id), + item_def_id: self.tcx.hir().local_def_id(item_id), ev: self, } } @@ -506,7 +506,7 @@ impl EmbargoVisitor<'tcx> { if let hir::ItemKind::Mod(m) = &item.node { for item_id in m.item_ids.as_ref() { let item = self.tcx.hir().expect_item(item_id.id); - let def_id = self.tcx.hir().local_def_id_from_hir_id(item_id.id); + let def_id = self.tcx.hir().local_def_id(item_id.id); if !self.tcx.hygienic_eq(segment.ident, item.ident, def_id) { continue; } if let hir::ItemKind::Use(..) = item.node { self.update(item.hir_id, Some(AccessLevel::Exported)); @@ -726,7 +726,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { // This code is here instead of in visit_item so that the // crate module gets processed as well. if self.prev_level.is_some() { - let def_id = self.tcx.hir().local_def_id_from_hir_id(id); + let def_id = self.tcx.hir().local_def_id(id); if let Some(exports) = self.tcx.module_exports(def_id) { for export in exports.iter() { if export.vis == ty::Visibility::Public { @@ -751,7 +751,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { let module_did = ty::DefIdTree::parent( self.tcx, - self.tcx.hir().local_def_id_from_hir_id(md.hir_id) + self.tcx.hir().local_def_id(md.hir_id) ).unwrap(); let mut module_id = self.tcx.hir().as_local_hir_id(module_did).unwrap(); let level = if md.vis.node.is_pub() { self.get(module_id) } else { None }; @@ -772,7 +772,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { for id in &module.item_ids { self.update(id.id, level); } - let def_id = self.tcx.hir().local_def_id_from_hir_id(module_id); + let def_id = self.tcx.hir().local_def_id(module_id); if let Some(exports) = self.tcx.module_exports(def_id) { for export in exports.iter() { if let Some(hir_id) = self.tcx.hir().as_local_hir_id(export.res.def_id()) { @@ -1163,7 +1163,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypePrivacyVisitor<'a, 'tcx> { // Check types in item interfaces. fn visit_item(&mut self, item: &'tcx hir::Item) { let orig_current_item = mem::replace(&mut self.current_item, - self.tcx.hir().local_def_id_from_hir_id(item.hir_id)); + self.tcx.hir().local_def_id(item.hir_id)); let orig_in_body = mem::replace(&mut self.in_body, false); let orig_tables = mem::replace(&mut self.tables, item_tables(self.tcx, item.hir_id, self.empty_tables)); @@ -1689,7 +1689,7 @@ impl<'a, 'tcx> PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> { SearchInterfaceForPrivateItemsVisitor { tcx: self.tcx, item_id, - item_def_id: self.tcx.hir().local_def_id_from_hir_id(item_id), + item_def_id: self.tcx.hir().local_def_id(item_id), span: self.tcx.hir().span(item_id), required_visibility, has_pub_restricted: self.has_pub_restricted, diff --git a/src/librustc_traits/lowering/mod.rs b/src/librustc_traits/lowering/mod.rs index b0d9134c834d6..c81b1dc8974b0 100644 --- a/src/librustc_traits/lowering/mod.rs +++ b/src/librustc_traits/lowering/mod.rs @@ -628,7 +628,7 @@ struct ClauseDumper<'tcx> { impl ClauseDumper<'tcx> { fn process_attrs(&mut self, hir_id: hir::HirId, attrs: &[ast::Attribute]) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(hir_id); + let def_id = self.tcx.hir().local_def_id(hir_id); for attr in attrs { let mut clauses = None; diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 1792716d1fb35..7154b7958b932 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -1999,7 +1999,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap(); let item_id = tcx.hir().get_parent_node(hir_id); - let item_def_id = tcx.hir().local_def_id_from_hir_id(item_id); + let item_def_id = tcx.hir().local_def_id(item_id); let generics = tcx.generics_of(item_def_id); let index = generics.param_def_id_to_index[&def_id]; tcx.mk_ty_param(index, tcx.hir().name(hir_id).as_interned_str()) @@ -2091,7 +2091,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { self.res_to_ty(opt_self_ty, path, false) } hir::TyKind::Def(item_id, ref lifetimes) => { - let did = tcx.hir().local_def_id_from_hir_id(item_id.id); + let did = tcx.hir().local_def_id(item_id.id); self.impl_trait_ty_to_ty(did, lifetimes) } hir::TyKind::Path(hir::QPath::TypeRelative(ref qself, ref segment)) => { @@ -2173,7 +2173,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { debug!("ast_const_to_const(id={:?}, ast_const={:?})", ast_const.hir_id, ast_const); let tcx = self.tcx(); - let def_id = tcx.hir().local_def_id_from_hir_id(ast_const.hir_id); + let def_id = tcx.hir().local_def_id(ast_const.hir_id); let mut const_ = ty::Const { val: ConstValue::Unevaluated( @@ -2189,9 +2189,9 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { // parent item and construct a `ParamConst`. let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap(); let item_id = tcx.hir().get_parent_node(hir_id); - let item_def_id = tcx.hir().local_def_id_from_hir_id(item_id); + let item_def_id = tcx.hir().local_def_id(item_id); let generics = tcx.generics_of(item_def_id); - let index = generics.param_def_id_to_index[&tcx.hir().local_def_id_from_hir_id(hir_id)]; + let index = generics.param_def_id_to_index[&tcx.hir().local_def_id(hir_id)]; let name = tcx.hir().name(hir_id).as_interned_str(); const_.val = ConstValue::Param(ty::ParamConst::new(index, name)); } diff --git a/src/librustc_typeck/check/closure.rs b/src/librustc_typeck/check/closure.rs index 6c0deededdc73..d2f2f89cf0b1c 100644 --- a/src/librustc_typeck/check/closure.rs +++ b/src/librustc_typeck/check/closure.rs @@ -72,7 +72,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { opt_kind, expected_sig ); - let expr_def_id = self.tcx.hir().local_def_id_from_hir_id(expr.hir_id); + let expr_def_id = self.tcx.hir().local_def_id(expr.hir_id); let ClosureSignatures { bound_sig, diff --git a/src/librustc_typeck/check/expr.rs b/src/librustc_typeck/check/expr.rs index ccc20bd9585c9..603726dfe238c 100644 --- a/src/librustc_typeck/check/expr.rs +++ b/src/librustc_typeck/check/expr.rs @@ -901,7 +901,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { expr: &'tcx hir::Expr, ) -> Ty<'tcx> { let tcx = self.tcx; - let count_def_id = tcx.hir().local_def_id_from_hir_id(count.hir_id); + let count_def_id = tcx.hir().local_def_id(count.hir_id); let count = if self.const_param_def_id(count).is_some() { Ok(self.to_const(count, tcx.type_of(count_def_id))) } else { diff --git a/src/librustc_typeck/check/intrinsic.rs b/src/librustc_typeck/check/intrinsic.rs index 9b1a891382209..2f4f1d8f7346b 100644 --- a/src/librustc_typeck/check/intrinsic.rs +++ b/src/librustc_typeck/check/intrinsic.rs @@ -22,7 +22,7 @@ fn equate_intrinsic_type<'tcx>( inputs: Vec>, output: Ty<'tcx>, ) { - let def_id = tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = tcx.hir().local_def_id(it.hir_id); match it.node { hir::ForeignItemKind::Fn(..) => {} diff --git a/src/librustc_typeck/check/method/mod.rs b/src/librustc_typeck/check/method/mod.rs index b8b65279fe767..a7e4f8e5c6289 100644 --- a/src/librustc_typeck/check/method/mod.rs +++ b/src/librustc_typeck/check/method/mod.rs @@ -196,7 +196,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { )?; for import_id in &pick.import_ids { - let import_def_id = self.tcx.hir().local_def_id_from_hir_id(*import_id); + let import_def_id = self.tcx.hir().local_def_id(*import_id); debug!("used_trait_import: {:?}", import_def_id); Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports) .unwrap().insert(import_def_id); @@ -434,7 +434,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { self_ty, expr_id, ProbeScope::TraitsInScope)?; debug!("resolve_ufcs: pick={:?}", pick); for import_id in pick.import_ids { - let import_def_id = tcx.hir().local_def_id_from_hir_id(import_id); + let import_def_id = tcx.hir().local_def_id(import_id); debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id); Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports) .unwrap().insert(import_def_id); diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs index be00a6efe55ed..8dcfa184d7dad 100644 --- a/src/librustc_typeck/check/method/suggest.rs +++ b/src/librustc_typeck/check/method/suggest.rs @@ -797,7 +797,7 @@ fn compute_all_traits(tcx: TyCtxt<'_>) -> Vec { match i.node { hir::ItemKind::Trait(..) | hir::ItemKind::TraitAlias(..) => { - let def_id = self.map.local_def_id_from_hir_id(i.hir_id); + let def_id = self.map.local_def_id(i.hir_id); self.traits.push(def_id); } _ => () diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index fb7d681a72da7..efe9079e19e4b 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1085,7 +1085,7 @@ fn check_fn<'a, 'tcx>( fcx.yield_ty = Some(yield_ty); } - let outer_def_id = fcx.tcx.closure_base_def_id(fcx.tcx.hir().local_def_id_from_hir_id(fn_id)); + let outer_def_id = fcx.tcx.closure_base_def_id(fcx.tcx.hir().local_def_id(fn_id)); let outer_hir_id = fcx.tcx.hir().as_local_hir_id(outer_def_id).unwrap(); GatherLocalsVisitor { fcx: &fcx, parent_id: outer_hir_id, }.visit_body(body); @@ -1183,7 +1183,7 @@ fn check_fn<'a, 'tcx>( // Check that a function marked as `#[panic_handler]` has signature `fn(&PanicInfo) -> !` if let Some(panic_impl_did) = fcx.tcx.lang_items().panic_impl() { - if panic_impl_did == fcx.tcx.hir().local_def_id_from_hir_id(fn_id) { + if panic_impl_did == fcx.tcx.hir().local_def_id(fn_id) { if let Some(panic_info_did) = fcx.tcx.lang_items().panic_info() { // at this point we don't care if there are duplicate handlers or if the handler has // the wrong signature as this value we'll be used when writing metadata and that @@ -1241,7 +1241,7 @@ fn check_fn<'a, 'tcx>( // Check that a function marked as `#[alloc_error_handler]` has signature `fn(Layout) -> !` if let Some(alloc_error_handler_did) = fcx.tcx.lang_items().oom() { - if alloc_error_handler_did == fcx.tcx.hir().local_def_id_from_hir_id(fn_id) { + if alloc_error_handler_did == fcx.tcx.hir().local_def_id(fn_id) { if let Some(alloc_layout_did) = fcx.tcx.lang_items().alloc_layout() { if declared_ret_ty.sty != ty::Never { fcx.tcx.sess.span_err( @@ -1292,7 +1292,7 @@ fn check_fn<'a, 'tcx>( } fn check_struct(tcx: TyCtxt<'_>, id: hir::HirId, span: Span) { - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); let def = tcx.adt_def(def_id); def.destructor(tcx); // force the destructor to be evaluated check_representable(tcx, span, def_id); @@ -1306,7 +1306,7 @@ fn check_struct(tcx: TyCtxt<'_>, id: hir::HirId, span: Span) { } fn check_union(tcx: TyCtxt<'_>, id: hir::HirId, span: Span) { - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); let def = tcx.adt_def(def_id); def.destructor(tcx); // force the destructor to be evaluated check_representable(tcx, span, def_id); @@ -1334,18 +1334,18 @@ pub fn check_item_type<'tcx>(tcx: TyCtxt<'tcx>, it: &'tcx hir::Item) { debug!( "check_item_type(it.hir_id={}, it.name={})", it.hir_id, - tcx.def_path_str(tcx.hir().local_def_id_from_hir_id(it.hir_id)) + tcx.def_path_str(tcx.hir().local_def_id(it.hir_id)) ); let _indenter = indenter(); match it.node { // Consts can play a role in type-checking, so they are included here. hir::ItemKind::Static(..) => { - let def_id = tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = tcx.hir().local_def_id(it.hir_id); tcx.typeck_tables_of(def_id); maybe_check_static_with_link_section(tcx, def_id, it.span); } hir::ItemKind::Const(..) => { - tcx.typeck_tables_of(tcx.hir().local_def_id_from_hir_id(it.hir_id)); + tcx.typeck_tables_of(tcx.hir().local_def_id(it.hir_id)); } hir::ItemKind::Enum(ref enum_definition, _) => { check_enum(tcx, it.span, &enum_definition.variants, it.hir_id); @@ -1353,7 +1353,7 @@ pub fn check_item_type<'tcx>(tcx: TyCtxt<'tcx>, it: &'tcx hir::Item) { hir::ItemKind::Fn(..) => {} // entirely within check_item_body hir::ItemKind::Impl(.., ref impl_item_refs) => { debug!("ItemKind::Impl {} with id {}", it.ident, it.hir_id); - let impl_def_id = tcx.hir().local_def_id_from_hir_id(it.hir_id); + let impl_def_id = tcx.hir().local_def_id(it.hir_id); if let Some(impl_trait_ref) = tcx.impl_trait_ref(impl_def_id) { check_impl_items_against_trait( tcx, @@ -1367,7 +1367,7 @@ pub fn check_item_type<'tcx>(tcx: TyCtxt<'tcx>, it: &'tcx hir::Item) { } } hir::ItemKind::Trait(..) => { - let def_id = tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = tcx.hir().local_def_id(it.hir_id); check_on_unimplemented(tcx, def_id, it); } hir::ItemKind::Struct(..) => { @@ -1377,13 +1377,13 @@ pub fn check_item_type<'tcx>(tcx: TyCtxt<'tcx>, it: &'tcx hir::Item) { check_union(tcx, it.hir_id, it.span); } hir::ItemKind::Existential(..) => { - let def_id = tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = tcx.hir().local_def_id(it.hir_id); let substs = InternalSubsts::identity_for_item(tcx, def_id); check_opaque(tcx, def_id, substs, it.span); } hir::ItemKind::Ty(..) => { - let def_id = tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = tcx.hir().local_def_id(it.hir_id); let pty_ty = tcx.type_of(def_id); let generics = tcx.generics_of(def_id); check_bounds_are_used(tcx, &generics, pty_ty); @@ -1401,7 +1401,7 @@ pub fn check_item_type<'tcx>(tcx: TyCtxt<'tcx>, it: &'tcx hir::Item) { } } else { for item in &m.items { - let generics = tcx.generics_of(tcx.hir().local_def_id_from_hir_id(item.hir_id)); + let generics = tcx.generics_of(tcx.hir().local_def_id(item.hir_id)); if generics.params.len() - generics.own_counts().lifetimes != 0 { let mut err = struct_span_err!( tcx.sess, @@ -1468,7 +1468,7 @@ fn maybe_check_static_with_link_section(tcx: TyCtxt<'_>, id: DefId, span: Span) } fn check_on_unimplemented(tcx: TyCtxt<'_>, trait_def_id: DefId, item: &hir::Item) { - let item_def_id = tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_def_id = tcx.hir().local_def_id(item.hir_id); // an error would be reported if this fails. let _ = traits::OnUnimplementedDirective::of_item(tcx, trait_def_id, item_def_id); } @@ -1551,7 +1551,7 @@ fn check_impl_items_against_trait<'tcx>( // and compatible with trait signature for impl_item in impl_items() { let ty_impl_item = tcx.associated_item( - tcx.hir().local_def_id_from_hir_id(impl_item.hir_id)); + tcx.hir().local_def_id(impl_item.hir_id)); let ty_trait_item = tcx.associated_items(impl_trait_ref.def_id) .find(|ac| Namespace::from(&impl_item.node) == Namespace::from(ac.kind) && tcx.hygienic_eq(ty_impl_item.ident, ac.ident, impl_trait_ref.def_id)) @@ -1909,7 +1909,7 @@ fn check_transparent(tcx: TyCtxt<'_>, sp: Span, def_id: DefId) { #[allow(trivial_numeric_casts)] pub fn check_enum<'tcx>(tcx: TyCtxt<'tcx>, sp: Span, vs: &'tcx [hir::Variant], id: hir::HirId) { - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); let def = tcx.adt_def(def_id); def.destructor(tcx); // force the destructor to be evaluated @@ -1937,7 +1937,7 @@ pub fn check_enum<'tcx>(tcx: TyCtxt<'tcx>, sp: Span, vs: &'tcx [hir::Variant], i for v in vs { if let Some(ref e) = v.node.disr_expr { - tcx.typeck_tables_of(tcx.hir().local_def_id_from_hir_id(e.hir_id)); + tcx.typeck_tables_of(tcx.hir().local_def_id(e.hir_id)); } } @@ -2006,7 +2006,7 @@ impl<'a, 'tcx> AstConv<'tcx> for FnCtxt<'a, 'tcx> { let tcx = self.tcx; let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap(); let item_id = tcx.hir().ty_param_owner(hir_id); - let item_def_id = tcx.hir().local_def_id_from_hir_id(item_id); + let item_def_id = tcx.hir().local_def_id(item_id); let generics = tcx.generics_of(item_def_id); let index = generics.param_def_id_to_index[&def_id]; tcx.arena.alloc(ty::GenericPredicates { @@ -2453,7 +2453,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { value: &T, value_span: Span, ) -> T { - let parent_def_id = self.tcx.hir().local_def_id_from_hir_id(parent_id); + let parent_def_id = self.tcx.hir().local_def_id(parent_id); debug!("instantiate_opaque_types_from_value(parent_def_id={:?}, value={:?})", parent_def_id, value); diff --git a/src/librustc_typeck/check/regionck.rs b/src/librustc_typeck/check/regionck.rs index 5313e1d0f73a3..c66d746d6e029 100644 --- a/src/librustc_typeck/check/regionck.rs +++ b/src/librustc_typeck/check/regionck.rs @@ -138,7 +138,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { /// types from which we should derive implied bounds, if any. pub fn regionck_item(&self, item_id: hir::HirId, span: Span, wf_tys: &[Ty<'tcx>]) { debug!("regionck_item(item.id={:?}, wf_tys={:?})", item_id, wf_tys); - let subject = self.tcx.hir().local_def_id_from_hir_id(item_id); + let subject = self.tcx.hir().local_def_id(item_id); let mut rcx = RegionCtxt::new( self, RepeatingScope(item_id), diff --git a/src/librustc_typeck/check/upvar.rs b/src/librustc_typeck/check/upvar.rs index ac39757df74dc..155cabb27a92f 100644 --- a/src/librustc_typeck/check/upvar.rs +++ b/src/librustc_typeck/check/upvar.rs @@ -248,7 +248,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { // This may change if abstract return types of some sort are // implemented. let tcx = self.tcx; - let closure_def_id = tcx.hir().local_def_id_from_hir_id(closure_id); + let closure_def_id = tcx.hir().local_def_id(closure_id); tcx.upvars(closure_def_id).iter().flat_map(|upvars| { upvars diff --git a/src/librustc_typeck/check/wfcheck.rs b/src/librustc_typeck/check/wfcheck.rs index 3aa144ca35282..a41f4ec91a426 100644 --- a/src/librustc_typeck/check/wfcheck.rs +++ b/src/librustc_typeck/check/wfcheck.rs @@ -95,7 +95,7 @@ pub fn check_item_well_formed(tcx: TyCtxt<'_>, def_id: DefId) { // won't be allowed unless there's an *explicit* implementation of `Send` // for `T` hir::ItemKind::Impl(_, polarity, defaultness, _, ref trait_ref, ref self_ty, _) => { - let is_auto = tcx.impl_trait_ref(tcx.hir().local_def_id_from_hir_id(item.hir_id)) + let is_auto = tcx.impl_trait_ref(tcx.hir().local_def_id(item.hir_id)) .map_or(false, |trait_ref| tcx.trait_is_auto(trait_ref.def_id)); if let (hir::Defaultness::Default { .. }, true) = (defaultness, is_auto) { tcx.sess.span_err(item.span, "impls of auto traits cannot be default"); @@ -188,7 +188,7 @@ fn check_associated_item( let code = ObligationCauseCode::MiscObligation; for_id(tcx, item_id, span).with_fcx(|fcx, tcx| { - let item = fcx.tcx.associated_item(fcx.tcx.hir().local_def_id_from_hir_id(item_id)); + let item = fcx.tcx.associated_item(fcx.tcx.hir().local_def_id(item_id)); let (mut implied_bounds, self_ty) = match item.container { ty::TraitContainer(_) => (vec![], fcx.tcx.mk_self_type()), @@ -232,7 +232,7 @@ fn for_item<'tcx>(tcx: TyCtxt<'tcx>, item: &hir::Item) -> CheckWfFcxBuilder<'tcx } fn for_id(tcx: TyCtxt<'_>, id: hir::HirId, span: Span) -> CheckWfFcxBuilder<'_> { - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); CheckWfFcxBuilder { inherited: Inherited::build(tcx, def_id), id, @@ -252,7 +252,7 @@ fn check_type_defn<'tcx, F>( { for_item(tcx, item).with_fcx(|fcx, fcx_tcx| { let variants = lookup_fields(fcx); - let def_id = fcx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = fcx.tcx.hir().local_def_id(item.hir_id); let packed = fcx.tcx.adt_def(def_id).repr.packed(); for variant in &variants { @@ -320,7 +320,7 @@ fn check_type_defn<'tcx, F>( fn check_trait(tcx: TyCtxt<'_>, item: &hir::Item) { debug!("check_trait: {:?}", item.hir_id); - let trait_def_id = tcx.hir().local_def_id_from_hir_id(item.hir_id); + let trait_def_id = tcx.hir().local_def_id(item.hir_id); let trait_def = tcx.trait_def(trait_def_id); if trait_def.is_marker { @@ -342,7 +342,7 @@ fn check_trait(tcx: TyCtxt<'_>, item: &hir::Item) { fn check_item_fn(tcx: TyCtxt<'_>, item: &hir::Item) { for_item(tcx, item).with_fcx(|fcx, tcx| { - let def_id = fcx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = fcx.tcx.hir().local_def_id(item.hir_id); let sig = fcx.tcx.fn_sig(def_id); let sig = fcx.normalize_associated_types_in(item.span, &sig); let mut implied_bounds = vec![]; @@ -361,7 +361,7 @@ fn check_item_type( debug!("check_item_type: {:?}", item_id); for_id(tcx, item_id, ty_span).with_fcx(|fcx, gcx| { - let ty = gcx.type_of(gcx.hir().local_def_id_from_hir_id(item_id)); + let ty = gcx.type_of(gcx.hir().local_def_id(item_id)); let item_ty = fcx.normalize_associated_types_in(ty_span, &ty); let mut forbid_unsized = true; @@ -394,7 +394,7 @@ fn check_impl<'tcx>( debug!("check_impl: {:?}", item); for_item(tcx, item).with_fcx(|fcx, tcx| { - let item_def_id = fcx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_def_id = fcx.tcx.hir().local_def_id(item.hir_id); match *ast_trait_ref { Some(ref ast_trait_ref) => { @@ -943,7 +943,7 @@ fn check_variances_for_type_defn<'tcx>( item: &hir::Item, hir_generics: &hir::Generics, ) { - let item_def_id = tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_def_id = tcx.hir().local_def_id(item.hir_id); let ty = tcx.type_of(item_def_id); if tcx.has_error_field(ty) { return; @@ -1026,7 +1026,7 @@ fn reject_shadowing_parameters(tcx: TyCtxt<'_>, def_id: DefId) { fn check_false_global_bounds(fcx: &FnCtxt<'_, '_>, span: Span, id: hir::HirId) { let empty_env = ty::ParamEnv::empty(); - let def_id = fcx.tcx.hir().local_def_id_from_hir_id(id); + let def_id = fcx.tcx.hir().local_def_id(id); let predicates = fcx.tcx.predicates_of(def_id).predicates .iter() .map(|(p, _)| *p) @@ -1069,19 +1069,19 @@ impl CheckTypeWellFormedVisitor<'tcx> { impl ParItemLikeVisitor<'tcx> for CheckTypeWellFormedVisitor<'tcx> { fn visit_item(&self, i: &'tcx hir::Item) { debug!("visit_item: {:?}", i); - let def_id = self.tcx.hir().local_def_id_from_hir_id(i.hir_id); + let def_id = self.tcx.hir().local_def_id(i.hir_id); self.tcx.ensure().check_item_well_formed(def_id); } fn visit_trait_item(&self, trait_item: &'tcx hir::TraitItem) { debug!("visit_trait_item: {:?}", trait_item); - let def_id = self.tcx.hir().local_def_id_from_hir_id(trait_item.hir_id); + let def_id = self.tcx.hir().local_def_id(trait_item.hir_id); self.tcx.ensure().check_trait_item_well_formed(def_id); } fn visit_impl_item(&self, impl_item: &'tcx hir::ImplItem) { debug!("visit_impl_item: {:?}", impl_item); - let def_id = self.tcx.hir().local_def_id_from_hir_id(impl_item.hir_id); + let def_id = self.tcx.hir().local_def_id(impl_item.hir_id); self.tcx.ensure().check_impl_item_well_formed(def_id); } } @@ -1101,7 +1101,7 @@ struct AdtField<'tcx> { impl<'a, 'tcx> FnCtxt<'a, 'tcx> { fn non_enum_variant(&self, struct_def: &hir::VariantData) -> AdtVariant<'tcx> { let fields = struct_def.fields().iter().map(|field| { - let field_ty = self.tcx.type_of(self.tcx.hir().local_def_id_from_hir_id(field.hir_id)); + let field_ty = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id)); let field_ty = self.normalize_associated_types_in(field.span, &field_ty); let field_ty = self.resolve_vars_if_possible(&field_ty); diff --git a/src/librustc_typeck/check/writeback.rs b/src/librustc_typeck/check/writeback.rs index 28711e32a4c51..a2632b20c2ecb 100644 --- a/src/librustc_typeck/check/writeback.rs +++ b/src/librustc_typeck/check/writeback.rs @@ -34,7 +34,7 @@ use syntax_pos::Span; impl<'a, 'tcx> FnCtxt<'a, 'tcx> { pub fn resolve_type_vars_in_body(&self, body: &'tcx hir::Body) -> &'tcx ty::TypeckTables<'tcx> { let item_id = self.tcx.hir().body_owner(body.id()); - let item_def_id = self.tcx.hir().local_def_id_from_hir_id(item_id); + let item_def_id = self.tcx.hir().local_def_id(item_id); // This attribute causes us to dump some writeback information // in the form of errors, which is uSymbolfor unit tests. diff --git a/src/librustc_typeck/check_unused.rs b/src/librustc_typeck/check_unused.rs index 8614de1977085..ffc66ec16de13 100644 --- a/src/librustc_typeck/check_unused.rs +++ b/src/librustc_typeck/check_unused.rs @@ -52,7 +52,7 @@ struct CheckVisitor<'tcx> { impl CheckVisitor<'tcx> { fn check_import(&self, id: hir::HirId, span: Span) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(id); + let def_id = self.tcx.hir().local_def_id(id); if !self.tcx.maybe_unused_trait_import(def_id) { return; } @@ -219,7 +219,7 @@ struct ExternCrateToLint { impl<'a, 'tcx, 'v> ItemLikeVisitor<'v> for CollectExternCrateVisitor<'a, 'tcx> { fn visit_item(&mut self, item: &hir::Item) { if let hir::ItemKind::ExternCrate(orig_name) = item.node { - let extern_crate_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let extern_crate_def_id = self.tcx.hir().local_def_id(item.hir_id); self.crates_to_lint.push( ExternCrateToLint { def_id: extern_crate_def_id, diff --git a/src/librustc_typeck/coherence/builtin.rs b/src/librustc_typeck/coherence/builtin.rs index 68bdcbfe3fd95..a95b9a03dcf77 100644 --- a/src/librustc_typeck/coherence/builtin.rs +++ b/src/librustc_typeck/coherence/builtin.rs @@ -38,7 +38,7 @@ impl<'tcx> Checker<'tcx> { { if Some(self.trait_def_id) == trait_def_id { for &impl_id in self.tcx.hir().trait_impls(self.trait_def_id) { - let impl_def_id = self.tcx.hir().local_def_id_from_hir_id(impl_id); + let impl_def_id = self.tcx.hir().local_def_id(impl_id); f(self.tcx, impl_def_id); } } diff --git a/src/librustc_typeck/coherence/inherent_impls.rs b/src/librustc_typeck/coherence/inherent_impls.rs index 9efe1273ac044..fb79a85ea25bf 100644 --- a/src/librustc_typeck/coherence/inherent_impls.rs +++ b/src/librustc_typeck/coherence/inherent_impls.rs @@ -54,7 +54,7 @@ impl ItemLikeVisitor<'v> for InherentCollect<'tcx> { _ => return }; - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); let self_ty = self.tcx.type_of(def_id); let lang_items = self.tcx.lang_items(); match self_ty.sty { @@ -257,7 +257,7 @@ impl InherentCollect<'tcx> { // Add the implementation to the mapping from implementation to base // type def ID, if there is a base type for this implementation and // the implementation does not have any associated traits. - let impl_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let impl_def_id = self.tcx.hir().local_def_id(item.hir_id); let vec = self.impls_map.inherent_impls.entry(def_id).or_default(); vec.push(impl_def_id); } else { diff --git a/src/librustc_typeck/coherence/inherent_impls_overlap.rs b/src/librustc_typeck/coherence/inherent_impls_overlap.rs index 1785304fb1d48..04b59a63e1d8a 100644 --- a/src/librustc_typeck/coherence/inherent_impls_overlap.rs +++ b/src/librustc_typeck/coherence/inherent_impls_overlap.rs @@ -89,7 +89,7 @@ impl ItemLikeVisitor<'v> for InherentOverlapChecker<'tcx> { hir::ItemKind::Struct(..) | hir::ItemKind::Trait(..) | hir::ItemKind::Union(..) => { - let type_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let type_def_id = self.tcx.hir().local_def_id(item.hir_id); self.check_for_overlapping_inherent_impls(type_def_id); } _ => {} diff --git a/src/librustc_typeck/coherence/mod.rs b/src/librustc_typeck/coherence/mod.rs index 9b9789139b70f..1d0e433f07b3a 100644 --- a/src/librustc_typeck/coherence/mod.rs +++ b/src/librustc_typeck/coherence/mod.rs @@ -19,7 +19,7 @@ mod orphan; mod unsafety; fn check_impl(tcx: TyCtxt<'_>, hir_id: HirId) { - let impl_def_id = tcx.hir().local_def_id_from_hir_id(hir_id); + let impl_def_id = tcx.hir().local_def_id(hir_id); // If there are no traits, then this implementation must have a // base type. @@ -151,8 +151,8 @@ pub fn check_coherence(tcx: TyCtxt<'_>) { /// Overlap: no two impls for the same trait are implemented for the /// same type. Likewise, no two inherent impls for a given type /// constructor provide a method with the same name. -fn check_impl_overlap(tcx: TyCtxt<'_>, hir_id: HirId) { - let impl_def_id = tcx.hir().local_def_id_from_hir_id(hir_id); +fn check_impl_overlap<'tcx>(tcx: TyCtxt<'tcx>, hir_id: HirId) { + let impl_def_id = tcx.hir().local_def_id(hir_id); let trait_ref = tcx.impl_trait_ref(impl_def_id).unwrap(); let trait_def_id = trait_ref.def_id; diff --git a/src/librustc_typeck/coherence/orphan.rs b/src/librustc_typeck/coherence/orphan.rs index 2d0faecd8ee71..299e18337bd30 100644 --- a/src/librustc_typeck/coherence/orphan.rs +++ b/src/librustc_typeck/coherence/orphan.rs @@ -22,7 +22,7 @@ impl ItemLikeVisitor<'v> for OrphanChecker<'tcx> { /// to prevent inundating the user with a bunch of similar error /// reports. fn visit_item(&mut self, item: &hir::Item) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.tcx.hir().local_def_id(item.hir_id); // "Trait" impl if let hir::ItemKind::Impl(.., Some(_), _, _) = item.node { debug!("coherence2::orphan check: trait impl {}", diff --git a/src/librustc_typeck/coherence/unsafety.rs b/src/librustc_typeck/coherence/unsafety.rs index 123d7c6123b89..07fbfddd96e43 100644 --- a/src/librustc_typeck/coherence/unsafety.rs +++ b/src/librustc_typeck/coherence/unsafety.rs @@ -21,7 +21,7 @@ impl UnsafetyChecker<'tcx> { unsafety: hir::Unsafety, polarity: hir::ImplPolarity) { - let local_did = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let local_did = self.tcx.hir().local_def_id(item.hir_id); if let Some(trait_ref) = self.tcx.impl_trait_ref(local_did) { let trait_def = self.tcx.trait_def(trait_ref.def_id); let unsafe_attr = impl_generics.and_then(|generics| { diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index e5802179ec479..09de228dd5780 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -124,12 +124,12 @@ impl Visitor<'tcx> for CollectItemTypesVisitor<'tcx> { hir::GenericParamKind::Type { default: Some(_), .. } => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(param.hir_id); + let def_id = self.tcx.hir().local_def_id(param.hir_id); self.tcx.type_of(def_id); } hir::GenericParamKind::Type { .. } => {} hir::GenericParamKind::Const { .. } => { - let def_id = self.tcx.hir().local_def_id_from_hir_id(param.hir_id); + let def_id = self.tcx.hir().local_def_id(param.hir_id); self.tcx.type_of(def_id); } } @@ -139,7 +139,7 @@ impl Visitor<'tcx> for CollectItemTypesVisitor<'tcx> { fn visit_expr(&mut self, expr: &'tcx hir::Expr) { if let hir::ExprKind::Closure(..) = expr.node { - let def_id = self.tcx.hir().local_def_id_from_hir_id(expr.hir_id); + let def_id = self.tcx.hir().local_def_id(expr.hir_id); self.tcx.generics_of(def_id); self.tcx.type_of(def_id); } @@ -265,7 +265,7 @@ fn type_param_predicates( let param_id = tcx.hir().as_local_hir_id(def_id).unwrap(); let param_owner = tcx.hir().ty_param_owner(param_id); - let param_owner_def_id = tcx.hir().local_def_id_from_hir_id(param_owner); + let param_owner_def_id = tcx.hir().local_def_id(param_owner); let generics = tcx.generics_of(param_owner_def_id); let index = generics.param_def_id_to_index[&def_id]; let ty = tcx.mk_ty_param(index, tcx.hir().ty_param_name(param_id).as_interned_str()); @@ -385,7 +385,7 @@ fn is_param(tcx: TyCtxt<'_>, ast_ty: &hir::Ty, param_id: hir::HirId) -> bool { if let hir::TyKind::Path(hir::QPath::Resolved(None, ref path)) = ast_ty.node { match path.res { Res::SelfTy(Some(def_id), None) | Res::Def(DefKind::TyParam, def_id) => { - def_id == tcx.hir().local_def_id_from_hir_id(param_id) + def_id == tcx.hir().local_def_id(param_id) } _ => false, } @@ -397,7 +397,7 @@ fn is_param(tcx: TyCtxt<'_>, ast_ty: &hir::Ty, param_id: hir::HirId) -> bool { fn convert_item(tcx: TyCtxt<'_>, item_id: hir::HirId) { let it = tcx.hir().expect_item(item_id); debug!("convert: item {} with id {}", it.ident, it.hir_id); - let def_id = tcx.hir().local_def_id_from_hir_id(item_id); + let def_id = tcx.hir().local_def_id(item_id); match it.node { // These don't define types. hir::ItemKind::ExternCrate(_) @@ -406,7 +406,7 @@ fn convert_item(tcx: TyCtxt<'_>, item_id: hir::HirId) { | hir::ItemKind::GlobalAsm(_) => {} hir::ItemKind::ForeignMod(ref foreign_mod) => { for item in &foreign_mod.items { - let def_id = tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = tcx.hir().local_def_id(item.hir_id); tcx.generics_of(def_id); tcx.type_of(def_id); tcx.predicates_of(def_id); @@ -444,7 +444,7 @@ fn convert_item(tcx: TyCtxt<'_>, item_id: hir::HirId) { tcx.predicates_of(def_id); for f in struct_def.fields() { - let def_id = tcx.hir().local_def_id_from_hir_id(f.hir_id); + let def_id = tcx.hir().local_def_id(f.hir_id); tcx.generics_of(def_id); tcx.type_of(def_id); tcx.predicates_of(def_id); @@ -478,7 +478,7 @@ fn convert_item(tcx: TyCtxt<'_>, item_id: hir::HirId) { fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) { let trait_item = tcx.hir().expect_trait_item(trait_item_id); - let def_id = tcx.hir().local_def_id_from_hir_id(trait_item.hir_id); + let def_id = tcx.hir().local_def_id(trait_item.hir_id); tcx.generics_of(def_id); match trait_item.node { @@ -498,7 +498,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) { } fn convert_impl_item(tcx: TyCtxt<'_>, impl_item_id: hir::HirId) { - let def_id = tcx.hir().local_def_id_from_hir_id(impl_item_id); + let def_id = tcx.hir().local_def_id(impl_item_id); tcx.generics_of(def_id); tcx.type_of(def_id); tcx.predicates_of(def_id); @@ -508,7 +508,7 @@ fn convert_impl_item(tcx: TyCtxt<'_>, impl_item_id: hir::HirId) { } fn convert_variant_ctor(tcx: TyCtxt<'_>, ctor_id: hir::HirId) { - let def_id = tcx.hir().local_def_id_from_hir_id(ctor_id); + let def_id = tcx.hir().local_def_id(ctor_id); tcx.generics_of(def_id); tcx.type_of(def_id); tcx.predicates_of(def_id); @@ -525,7 +525,7 @@ fn convert_enum_variant_types<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, variants: let wrapped_discr = prev_discr.map_or(initial, |d| d.wrap_incr(tcx)); prev_discr = Some( if let Some(ref e) = variant.node.disr_expr { - let expr_did = tcx.hir().local_def_id_from_hir_id(e.hir_id); + let expr_did = tcx.hir().local_def_id(e.hir_id); def.eval_explicit_discr(tcx, expr_did) } else if let Some(discr) = repr_type.disr_incr(tcx, prev_discr) { Some(discr) @@ -548,7 +548,7 @@ fn convert_enum_variant_types<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, variants: ); for f in variant.node.data.fields() { - let def_id = tcx.hir().local_def_id_from_hir_id(f.hir_id); + let def_id = tcx.hir().local_def_id(f.hir_id); tcx.generics_of(def_id); tcx.type_of(def_id); tcx.predicates_of(def_id); @@ -578,7 +578,7 @@ fn convert_variant( .fields() .iter() .map(|f| { - let fid = tcx.hir().local_def_id_from_hir_id(f.hir_id); + let fid = tcx.hir().local_def_id(f.hir_id); let dup_span = seen_fields.get(&f.ident.modern()).cloned(); if let Some(prev_span) = dup_span { struct_span_err!( @@ -635,13 +635,13 @@ fn adt_def(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::AdtDef { let variants = def.variants .iter() .map(|v| { - let variant_did = Some(tcx.hir().local_def_id_from_hir_id(v.node.id)); + let variant_did = Some(tcx.hir().local_def_id(v.node.id)); let ctor_did = v.node.data.ctor_hir_id() - .map(|hir_id| tcx.hir().local_def_id_from_hir_id(hir_id)); + .map(|hir_id| tcx.hir().local_def_id(hir_id)); let discr = if let Some(ref e) = v.node.disr_expr { distance_from_explicit = 0; - ty::VariantDiscr::Explicit(tcx.hir().local_def_id_from_hir_id(e.hir_id)) + ty::VariantDiscr::Explicit(tcx.hir().local_def_id(e.hir_id)) } else { ty::VariantDiscr::Relative(distance_from_explicit) }; @@ -657,7 +657,7 @@ fn adt_def(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::AdtDef { ItemKind::Struct(ref def, _) => { let variant_did = None; let ctor_did = def.ctor_hir_id() - .map(|hir_id| tcx.hir().local_def_id_from_hir_id(hir_id)); + .map(|hir_id| tcx.hir().local_def_id(hir_id)); let variants = std::iter::once(convert_variant( tcx, variant_did, ctor_did, item.ident, ty::VariantDiscr::Relative(0), def, @@ -669,7 +669,7 @@ fn adt_def(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::AdtDef { ItemKind::Union(ref def, _) => { let variant_did = None; let ctor_did = def.ctor_hir_id() - .map(|hir_id| tcx.hir().local_def_id_from_hir_id(hir_id)); + .map(|hir_id| tcx.hir().local_def_id(hir_id)); let variants = std::iter::once(convert_variant( tcx, variant_did, ctor_did, item.ident, ty::VariantDiscr::Relative(0), def, @@ -889,7 +889,7 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::Generics { Node::ImplItem(_) | Node::TraitItem(_) | Node::Variant(_) | Node::Ctor(..) | Node::Field(_) => { let parent_id = tcx.hir().get_parent_item(hir_id); - Some(tcx.hir().local_def_id_from_hir_id(parent_id)) + Some(tcx.hir().local_def_id(parent_id)) } Node::Expr(&hir::Expr { node: hir::ExprKind::Closure(..), @@ -937,7 +937,7 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::Generics { opt_self = Some(ty::GenericParamDef { index: 0, name: kw::SelfUpper.as_interned_str(), - def_id: tcx.hir().local_def_id_from_hir_id(param_id), + def_id: tcx.hir().local_def_id(param_id), pure_wrt_drop: false, kind: ty::GenericParamDefKind::Type { has_default: false, @@ -983,7 +983,7 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::Generics { .map(|(i, param)| ty::GenericParamDef { name: param.name.ident().as_interned_str(), index: own_start + i as u32, - def_id: tcx.hir().local_def_id_from_hir_id(param.hir_id), + def_id: tcx.hir().local_def_id(param.hir_id), pure_wrt_drop: param.pure_wrt_drop, kind: ty::GenericParamDefKind::Lifetime, }), @@ -1050,7 +1050,7 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> &ty::Generics { let param_def = ty::GenericParamDef { index: type_start + i as u32, name: param.name.ident().as_interned_str(), - def_id: tcx.hir().local_def_id_from_hir_id(param.hir_id), + def_id: tcx.hir().local_def_id(param.hir_id), pure_wrt_drop: param.pure_wrt_drop, kind, }; @@ -1623,7 +1623,7 @@ fn find_existential_constraints(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> { intravisit::NestedVisitorMap::All(&self.tcx.hir()) } fn visit_item(&mut self, it: &'tcx Item) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = self.tcx.hir().local_def_id(it.hir_id); // The existential type itself or its children are not within its reveal scope. if def_id != self.def_id { self.check(def_id); @@ -1631,7 +1631,7 @@ fn find_existential_constraints(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> { } } fn visit_impl_item(&mut self, it: &'tcx ImplItem) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = self.tcx.hir().local_def_id(it.hir_id); // The existential type itself or its children are not within its reveal scope. if def_id != self.def_id { self.check(def_id); @@ -1639,7 +1639,7 @@ fn find_existential_constraints(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> { } } fn visit_trait_item(&mut self, it: &'tcx TraitItem) { - let def_id = self.tcx.hir().local_def_id_from_hir_id(it.hir_id); + let def_id = self.tcx.hir().local_def_id(it.hir_id); self.check(def_id); intravisit::walk_trait_item(self, it); } @@ -1720,7 +1720,7 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> { let ty = tcx.type_of(tcx.hir().get_parent_did(hir_id)); let inputs = data.fields() .iter() - .map(|f| tcx.type_of(tcx.hir().local_def_id_from_hir_id(f.hir_id))); + .map(|f| tcx.type_of(tcx.hir().local_def_id(f.hir_id))); ty::Binder::bind(tcx.mk_fn_sig( inputs, ty, @@ -2036,7 +2036,7 @@ fn explicit_predicates_of( let mut index = parent_count + has_own_self as u32; for param in early_bound_lifetimes_from_generics(tcx, ast_generics) { let region = tcx.mk_region(ty::ReEarlyBound(ty::EarlyBoundRegion { - def_id: tcx.hir().local_def_id_from_hir_id(param.hir_id), + def_id: tcx.hir().local_def_id(param.hir_id), index, name: param.name.ident().as_interned_str(), })); @@ -2154,7 +2154,7 @@ fn explicit_predicates_of( }; let assoc_ty = - tcx.mk_projection(tcx.hir().local_def_id_from_hir_id(trait_item.hir_id), + tcx.mk_projection(tcx.hir().local_def_id(trait_item.hir_id), self_trait_ref.substs); let bounds = AstConv::compute_bounds( diff --git a/src/librustc_typeck/impl_wf_check.rs b/src/librustc_typeck/impl_wf_check.rs index d03a815db5782..029a8f9c41f68 100644 --- a/src/librustc_typeck/impl_wf_check.rs +++ b/src/librustc_typeck/impl_wf_check.rs @@ -79,7 +79,7 @@ struct ImplWfCheck<'tcx> { impl ItemLikeVisitor<'tcx> for ImplWfCheck<'tcx> { fn visit_item(&mut self, item: &'tcx hir::Item) { if let hir::ItemKind::Impl(.., ref impl_item_refs) = item.node { - let impl_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let impl_def_id = self.tcx.hir().local_def_id(item.hir_id); enforce_impl_params_are_constrained(self.tcx, impl_def_id, impl_item_refs); @@ -109,7 +109,7 @@ fn enforce_impl_params_are_constrained( // Disallow unconstrained lifetimes, but only if they appear in assoc types. let lifetimes_in_associated_types: FxHashSet<_> = impl_item_refs.iter() - .map(|item_ref| tcx.hir().local_def_id_from_hir_id(item_ref.id.hir_id)) + .map(|item_ref| tcx.hir().local_def_id(item_ref.id.hir_id)) .filter(|&def_id| { let item = tcx.associated_item(def_id); item.kind == ty::AssocKind::Type && item.defaultness.has_value() diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs index 5ba2de1b9c5b7..01383da38cd91 100644 --- a/src/librustc_typeck/lib.rs +++ b/src/librustc_typeck/lib.rs @@ -370,7 +370,7 @@ pub fn hir_ty_to_ty<'tcx>(tcx: TyCtxt<'tcx>, hir_ty: &hir::Ty) -> Ty<'tcx> { // def-ID that will be used to determine the traits/predicates in // scope. This is derived from the enclosing item-like thing. let env_node_id = tcx.hir().get_parent_item(hir_ty.hir_id); - let env_def_id = tcx.hir().local_def_id_from_hir_id(env_node_id); + let env_def_id = tcx.hir().local_def_id(env_node_id); let item_cx = self::collect::ItemCtxt::new(tcx, env_def_id); astconv::AstConv::ast_ty_to_ty(&item_cx, hir_ty) @@ -384,7 +384,7 @@ pub fn hir_trait_to_predicates<'tcx>( // def-ID that will be used to determine the traits/predicates in // scope. This is derived from the enclosing item-like thing. let env_hir_id = tcx.hir().get_parent_item(hir_trait.hir_ref_id); - let env_def_id = tcx.hir().local_def_id_from_hir_id(env_hir_id); + let env_def_id = tcx.hir().local_def_id(env_hir_id); let item_cx = self::collect::ItemCtxt::new(tcx, env_def_id); let mut bounds = Bounds::default(); let (principal, _) = AstConv::instantiate_poly_trait_ref_inner( diff --git a/src/librustc_typeck/outlives/implicit_infer.rs b/src/librustc_typeck/outlives/implicit_infer.rs index f2661b46b8b0c..6b288347ad006 100644 --- a/src/librustc_typeck/outlives/implicit_infer.rs +++ b/src/librustc_typeck/outlives/implicit_infer.rs @@ -52,7 +52,7 @@ pub struct InferVisitor<'cx, 'tcx> { impl<'cx, 'tcx> ItemLikeVisitor<'tcx> for InferVisitor<'cx, 'tcx> { fn visit_item(&mut self, item: &hir::Item) { - let item_did = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_did = self.tcx.hir().local_def_id(item.hir_id); debug!("InferVisitor::visit_item(item={:?})", item_did); diff --git a/src/librustc_typeck/outlives/test.rs b/src/librustc_typeck/outlives/test.rs index 5ddf95b0f80c2..3ae646b3ac7ce 100644 --- a/src/librustc_typeck/outlives/test.rs +++ b/src/librustc_typeck/outlives/test.rs @@ -15,7 +15,7 @@ struct OutlivesTest<'tcx> { impl ItemLikeVisitor<'tcx> for OutlivesTest<'tcx> { fn visit_item(&mut self, item: &'tcx hir::Item) { - let item_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_def_id = self.tcx.hir().local_def_id(item.hir_id); // For unit testing: check for a special "rustc_outlives" // attribute and report an error with various results if found. diff --git a/src/librustc_typeck/variance/constraints.rs b/src/librustc_typeck/variance/constraints.rs index 36f0dbcd2fcbd..b75a0912657fa 100644 --- a/src/librustc_typeck/variance/constraints.rs +++ b/src/librustc_typeck/variance/constraints.rs @@ -120,7 +120,7 @@ impl<'a, 'tcx, 'v> ItemLikeVisitor<'v> for ConstraintContext<'a, 'tcx> { impl<'a, 'tcx> ConstraintContext<'a, 'tcx> { fn visit_node_helper(&mut self, id: hir::HirId) { let tcx = self.terms_cx.tcx; - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); self.build_constraints_for_item(def_id); } diff --git a/src/librustc_typeck/variance/solve.rs b/src/librustc_typeck/variance/solve.rs index 3851b918c4855..51fb5465d1e59 100644 --- a/src/librustc_typeck/variance/solve.rs +++ b/src/librustc_typeck/variance/solve.rs @@ -99,7 +99,7 @@ impl<'a, 'tcx> SolveContext<'a, 'tcx> { let solutions = &self.solutions; self.terms_cx.inferred_starts.iter().map(|(&id, &InferredIndex(start))| { - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); let generics = tcx.generics_of(def_id); let count = generics.count(); diff --git a/src/librustc_typeck/variance/terms.rs b/src/librustc_typeck/variance/terms.rs index 3f6eadeac3334..7af7c79bb3c0d 100644 --- a/src/librustc_typeck/variance/terms.rs +++ b/src/librustc_typeck/variance/terms.rs @@ -103,7 +103,7 @@ fn lang_items(tcx: TyCtxt<'_>) -> Vec<(hir::HirId, Vec)> { impl<'a, 'tcx> TermsContext<'a, 'tcx> { fn add_inferreds_for_item(&mut self, id: hir::HirId) { let tcx = self.tcx; - let def_id = tcx.hir().local_def_id_from_hir_id(id); + let def_id = tcx.hir().local_def_id(id); let count = tcx.generics_of(def_id).count(); if count == 0 { diff --git a/src/librustc_typeck/variance/test.rs b/src/librustc_typeck/variance/test.rs index 0c7ebc34e8f6d..9f6266b316f3a 100644 --- a/src/librustc_typeck/variance/test.rs +++ b/src/librustc_typeck/variance/test.rs @@ -13,7 +13,7 @@ struct VarianceTest<'tcx> { impl ItemLikeVisitor<'tcx> for VarianceTest<'tcx> { fn visit_item(&mut self, item: &'tcx hir::Item) { - let item_def_id = self.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let item_def_id = self.tcx.hir().local_def_id(item.hir_id); // For unit testing: check for a special "rustc_variance" // attribute and report an error with various results if found. diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index e6e57eb230add..b6d749e1a4069 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -281,14 +281,14 @@ impl Clean for CrateNum { hir::ItemKind::Mod(_) => { as_primitive(Res::Def( DefKind::Mod, - cx.tcx.hir().local_def_id_from_hir_id(id.id), + cx.tcx.hir().local_def_id(id.id), )) } hir::ItemKind::Use(ref path, hir::UseKind::Single) if item.vis.node.is_pub() => { as_primitive(path.res).map(|(_, prim, attrs)| { // Pretend the primitive is local. - (cx.tcx.hir().local_def_id_from_hir_id(id.id), prim, attrs) + (cx.tcx.hir().local_def_id(id.id), prim, attrs) }) } _ => None @@ -325,13 +325,13 @@ impl Clean for CrateNum { hir::ItemKind::Mod(_) => { as_keyword(Res::Def( DefKind::Mod, - cx.tcx.hir().local_def_id_from_hir_id(id.id), + cx.tcx.hir().local_def_id(id.id), )) } hir::ItemKind::Use(ref path, hir::UseKind::Single) if item.vis.node.is_pub() => { as_keyword(path.res).map(|(_, prim, attrs)| { - (cx.tcx.hir().local_def_id_from_hir_id(id.id), prim, attrs) + (cx.tcx.hir().local_def_id(id.id), prim, attrs) }) } _ => None @@ -1588,7 +1588,7 @@ impl Clean for hir::GenericParam { } hir::GenericParamKind::Type { ref default, synthetic } => { (self.name.ident().name.clean(cx), GenericParamDefKind::Type { - did: cx.tcx.hir().local_def_id_from_hir_id(self.hir_id), + did: cx.tcx.hir().local_def_id(self.hir_id), bounds: self.bounds.clean(cx), default: default.clean(cx), synthetic: synthetic, @@ -1596,7 +1596,7 @@ impl Clean for hir::GenericParam { } hir::GenericParamKind::Const { ref ty } => { (self.name.ident().name.clean(cx), GenericParamDefKind::Const { - did: cx.tcx.hir().local_def_id_from_hir_id(self.hir_id), + did: cx.tcx.hir().local_def_id(self.hir_id), ty: ty.clean(cx), }) } @@ -1926,7 +1926,7 @@ impl Clean for doctree::Function<'_> { (self.generics.clean(cx), (self.decl, self.body).clean(cx)) }); - let did = cx.tcx.hir().local_def_id_from_hir_id(self.id); + let did = cx.tcx.hir().local_def_id(self.id); let constness = if cx.tcx.is_min_const_fn(did) { hir::Constness::Const } else { @@ -2136,7 +2136,7 @@ impl Clean for doctree::Trait<'_> { name: Some(self.name.clean(cx)), attrs: attrs, source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -2166,7 +2166,7 @@ impl Clean for doctree::TraitAlias<'_> { name: Some(self.name.clean(cx)), attrs, source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -2229,7 +2229,7 @@ impl Clean for hir::TraitItem { AssocTypeItem(bounds.clean(cx), default.clean(cx)) } }; - let local_did = cx.tcx.hir().local_def_id_from_hir_id(self.hir_id); + let local_did = cx.tcx.hir().local_def_id(self.hir_id); Item { name: Some(self.ident.name.clean(cx)), attrs: self.attrs.clean(cx), @@ -2262,7 +2262,7 @@ impl Clean for hir::ImplItem { generics: Generics::default(), }, true), }; - let local_did = cx.tcx.hir().local_def_id_from_hir_id(self.hir_id); + let local_did = cx.tcx.hir().local_def_id(self.hir_id); Item { name: Some(self.ident.name.clean(cx)), source: self.span.clean(cx), @@ -2757,7 +2757,7 @@ impl Clean for hir::Ty { } TyKind::Slice(ref ty) => Slice(box ty.clean(cx)), TyKind::Array(ref ty, ref length) => { - let def_id = cx.tcx.hir().local_def_id_from_hir_id(length.hir_id); + let def_id = cx.tcx.hir().local_def_id(length.hir_id); let param_env = cx.tcx.param_env(def_id); let substs = InternalSubsts::identity_for_item(cx.tcx, def_id); let cid = GlobalId { @@ -2829,7 +2829,7 @@ impl Clean for hir::Ty { if let Some(lt) = lifetime.cloned() { if !lt.is_elided() { let lt_def_id = - cx.tcx.hir().local_def_id_from_hir_id(param.hir_id); + cx.tcx.hir().local_def_id(param.hir_id); lt_substs.insert(lt_def_id, lt.clean(cx)); } } @@ -2837,7 +2837,7 @@ impl Clean for hir::Ty { } hir::GenericParamKind::Type { ref default, .. } => { let ty_param_def_id = - cx.tcx.hir().local_def_id_from_hir_id(param.hir_id); + cx.tcx.hir().local_def_id(param.hir_id); let mut j = 0; let type_ = generic_args.args.iter().find_map(|arg| { match arg { @@ -2861,7 +2861,7 @@ impl Clean for hir::Ty { } hir::GenericParamKind::Const { .. } => { let const_param_def_id = - cx.tcx.hir().local_def_id_from_hir_id(param.hir_id); + cx.tcx.hir().local_def_id(param.hir_id); let mut j = 0; let const_ = generic_args.args.iter().find_map(|arg| { match arg { @@ -3159,7 +3159,7 @@ impl<'tcx> Clean for ty::Const<'tcx> { impl Clean for hir::StructField { fn clean(&self, cx: &DocContext<'_>) -> Item { - let local_did = cx.tcx.hir().local_def_id_from_hir_id(self.hir_id); + let local_did = cx.tcx.hir().local_def_id(self.hir_id); Item { name: Some(self.ident.name).clean(cx), @@ -3240,7 +3240,7 @@ impl Clean for doctree::Struct<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3260,7 +3260,7 @@ impl Clean for doctree::Union<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3307,7 +3307,7 @@ impl Clean for doctree::Enum<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3334,7 +3334,7 @@ impl Clean for doctree::Variant<'_> { visibility: None, stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), inner: VariantItem(Variant { kind: self.def.clean(cx), }), @@ -3635,7 +3635,7 @@ impl Clean for doctree::Typedef<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3659,7 +3659,7 @@ impl Clean for doctree::Existential<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3710,7 +3710,7 @@ impl Clean for doctree::Static<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3735,7 +3735,7 @@ impl Clean for doctree::Constant<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -3822,7 +3822,7 @@ impl Clean> for doctree::Impl<'_> { name: None, attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -4053,7 +4053,7 @@ impl Clean for doctree::ForeignItem<'_> { name: Some(self.name.clean(cx)), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), visibility: self.vis.clean(cx), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), @@ -4269,7 +4269,7 @@ impl Clean for doctree::ProcMacro<'_> { visibility: Some(Public), stability: self.stab.clean(cx), deprecation: self.depr.clean(cx), - def_id: cx.tcx.hir().local_def_id_from_hir_id(self.id), + def_id: cx.tcx.hir().local_def_id(self.id), inner: ProcMacroItem(ProcMacro { kind: self.kind, helpers: self.helpers.clean(cx), diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 29ee59d124274..c391baabee06b 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -363,7 +363,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt // to the map from defid -> hirid let access_levels = AccessLevels { map: access_levels.map.iter() - .map(|(&k, &v)| (tcx.hir().local_def_id_from_hir_id(k), v)) + .map(|(&k, &v)| (tcx.hir().local_def_id(k), v)) .collect() }; diff --git a/src/librustdoc/passes/collect_trait_impls.rs b/src/librustdoc/passes/collect_trait_impls.rs index 70cd4b72199bc..a2a6b1efe820c 100644 --- a/src/librustdoc/passes/collect_trait_impls.rs +++ b/src/librustdoc/passes/collect_trait_impls.rs @@ -118,7 +118,7 @@ pub fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate { // doesn't work with it anyway, so pull them from the HIR map instead for &trait_did in cx.all_traits.iter() { for &impl_node in cx.tcx.hir().trait_impls(trait_did) { - let impl_did = cx.tcx.hir().local_def_id_from_hir_id(impl_node); + let impl_did = cx.tcx.hir().local_def_id(impl_node); inline::build_impl(cx, impl_did, &mut new_items); } } diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index 781e62c3b274c..3561233bff1d3 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -375,7 +375,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { let ident = renamed.unwrap_or(item.ident); if item.vis.node.is_pub() { - let def_id = self.cx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.cx.tcx.hir().local_def_id(item.hir_id); self.store_path(def_id); } @@ -389,7 +389,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { _ if self.inlining && !item.vis.node.is_pub() => {} hir::ItemKind::GlobalAsm(..) => {} hir::ItemKind::ExternCrate(orig_name) => { - let def_id = self.cx.tcx.hir().local_def_id_from_hir_id(item.hir_id); + let def_id = self.cx.tcx.hir().local_def_id(item.hir_id); om.extern_crates.push(ExternCrate { cnum: self.cx.tcx.extern_mod_stmt_cnum(def_id) .unwrap_or(LOCAL_CRATE), @@ -618,7 +618,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { Macro { - def_id: self.cx.tcx.hir().local_def_id_from_hir_id(def.hir_id), + def_id: self.cx.tcx.hir().local_def_id(def.hir_id), attrs: &def.attrs, name: renamed.unwrap_or(def.name), whence: def.span, From c6131b23ae99d05978795ca43d64b2213b87a24c Mon Sep 17 00:00:00 2001 From: ljedrz Date: Thu, 27 Jun 2019 11:49:08 +0200 Subject: [PATCH 16/32] rename hir::map::opt_local_def_id* --- src/librustc/hir/map/mod.rs | 8 ++++---- src/librustc_save_analysis/dump_visitor.rs | 4 ++-- src/librustc_save_analysis/lib.rs | 2 +- src/librustdoc/visit_ast.rs | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index c9c40d0e5dbc0..48ef4acca47aa 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -220,7 +220,7 @@ impl<'hir> Map<'hir> { } pub fn def_path_from_hir_id(&self, id: HirId) -> Option { - self.opt_local_def_id_from_hir_id(id).map(|def_id| { + self.opt_local_def_id(id).map(|def_id| { self.def_path(def_id) }) } @@ -232,7 +232,7 @@ impl<'hir> Map<'hir> { #[inline] pub fn local_def_id_from_node_id(&self, node: NodeId) -> DefId { - self.opt_local_def_id(node).unwrap_or_else(|| { + self.opt_local_def_id_from_node_id(node).unwrap_or_else(|| { let hir_id = self.node_to_hir_id(node); bug!("local_def_id_from_node_id: no entry for `{}`, which has a map of `{:?}`", node, self.find_entry(hir_id)) @@ -248,13 +248,13 @@ impl<'hir> Map<'hir> { } #[inline] - pub fn opt_local_def_id_from_hir_id(&self, hir_id: HirId) -> Option { + pub fn opt_local_def_id(&self, hir_id: HirId) -> Option { let node_id = self.hir_to_node_id(hir_id); self.definitions.opt_local_def_id(node_id) } #[inline] - pub fn opt_local_def_id(&self, node: NodeId) -> Option { + pub fn opt_local_def_id_from_node_id(&self, node: NodeId) -> Option { self.definitions.opt_local_def_id(node) } diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index 5289013c9ea7e..dfdf560d41906 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -1217,7 +1217,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { let access = access_from!(self.save_ctxt, root_item, hir_id); // The parent `DefId` of a given use tree is always the enclosing item. - let parent = self.save_ctxt.tcx.hir().opt_local_def_id(id) + let parent = self.save_ctxt.tcx.hir().opt_local_def_id_from_node_id(id) .and_then(|id| self.save_ctxt.tcx.parent(id)) .map(id_from_def_id); @@ -1367,7 +1367,7 @@ impl<'l, 'tcx, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tcx, ' let name_span = item.ident.span; if !self.span.filter_generated(name_span) { let span = self.span_from_span(name_span); - let parent = self.save_ctxt.tcx.hir().opt_local_def_id(item.id) + let parent = self.save_ctxt.tcx.hir().opt_local_def_id_from_node_id(item.id) .and_then(|id| self.save_ctxt.tcx.parent(id)) .map(id_from_def_id); self.dumper.import( diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 481e501d24a6e..8982405ea5d79 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -1193,7 +1193,7 @@ fn id_from_def_id(id: DefId) -> rls_data::Id { } fn id_from_node_id(id: NodeId, scx: &SaveContext<'_, '_>) -> rls_data::Id { - let def_id = scx.tcx.hir().opt_local_def_id(id); + let def_id = scx.tcx.hir().opt_local_def_id_from_node_id(id); def_id.map(|id| id_from_def_id(id)).unwrap_or_else(|| { // Create a *fake* `DefId` out of a `NodeId` by subtracting the `NodeId` // out of the maximum u32 value. This will work unless you have *billions* diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index 3561233bff1d3..fa5faaf3ff568 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -66,12 +66,12 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { } fn stability(&self, id: hir::HirId) -> Option { - self.cx.tcx.hir().opt_local_def_id_from_hir_id(id) + self.cx.tcx.hir().opt_local_def_id(id) .and_then(|def_id| self.cx.tcx.lookup_stability(def_id)).cloned() } fn deprecation(&self, id: hir::HirId) -> Option { - self.cx.tcx.hir().opt_local_def_id_from_hir_id(id) + self.cx.tcx.hir().opt_local_def_id(id) .and_then(|def_id| self.cx.tcx.lookup_deprecation(def_id)) } From 01e0d83336d58f4fb1a25552ebd77226619b8137 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Fri, 28 Jun 2019 09:41:32 +0200 Subject: [PATCH 17/32] infer::error_reporting: adjust 2 debug messages --- .../nice_region_error/find_anon_type.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs index be3070277510c..33723d840b8c4 100644 --- a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs +++ b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs @@ -139,12 +139,7 @@ impl Visitor<'tcx> for FindNestedTypeVisitor<'tcx> { // error. We will then search the function parameters for a bound // region at the right depth with the same index (Some(rl::Region::EarlyBound(_, id, _)), ty::BrNamed(def_id, _)) => { - debug!( - "EarlyBound self.infcx.tcx.hir().local_def_id_from_node_id(id)={:?} \ - def_id={:?}", - id, - def_id - ); + debug!("EarlyBound id={:?} def_id={:?}", id, def_id); if id == def_id { self.found_type = Some(arg); return; // we can stop visiting now @@ -162,8 +157,7 @@ impl Visitor<'tcx> for FindNestedTypeVisitor<'tcx> { "FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}", debruijn_index ); - debug!("self.infcx.tcx.hir().local_def_id_from_node_id(id)={:?}", id); - debug!("def_id={:?}", def_id); + debug!("LateBound id={:?} def_id={:?}", id, def_id); if debruijn_index == self.current_index && id == def_id { self.found_type = Some(arg); return; // we can stop visiting now From 675bfb6d169f29ffc3b0eadeab81901a32b79e73 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Tue, 2 Jul 2019 08:45:56 +0200 Subject: [PATCH 18/32] fix a dep_graph doc regarding type_of_item --- src/librustc/dep_graph/dep_tracking_map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/dep_graph/dep_tracking_map.rs b/src/librustc/dep_graph/dep_tracking_map.rs index 31d5780a0c00b..ee22d0b755a09 100644 --- a/src/librustc/dep_graph/dep_tracking_map.rs +++ b/src/librustc/dep_graph/dep_tracking_map.rs @@ -55,7 +55,7 @@ impl MemoizationMap for RefCell> { /// /// ``` /// fn type_of_item(..., item: &hir::Item) -> Ty<'tcx> { - /// let item_def_id = ccx.tcx.hir().local_def_id_from_node_id(it.id); + /// let item_def_id = ccx.tcx.hir().local_def_id(it.hir_id); /// ccx.tcx.item_types.memoized(item_def_id, || { /// ccx.tcx.dep_graph.read(DepNode::Hir(item_def_id)); // (*) /// compute_type_of_item(ccx, item) From a6030ff699e24a2d8f09bfd833361f119a9f0633 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Tue, 2 Jul 2019 09:43:33 +0200 Subject: [PATCH 19/32] infer: fix a Region-related debug message --- .../error_reporting/nice_region_error/find_anon_type.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs index 33723d840b8c4..34f3b8a2c7205 100644 --- a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs +++ b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs @@ -225,12 +225,7 @@ impl Visitor<'tcx> for TyPathVisitor<'tcx> { } (Some(rl::Region::EarlyBound(_, id, _)), ty::BrNamed(def_id, _)) => { - debug!( - "EarlyBound self.infcx.tcx.hir().local_def_id_from_node_id(id)={:?} \ - def_id={:?}", - id, - def_id - ); + debug!("EarlyBound id={:?} def_id={:?}", id, def_id); if id == def_id { self.found_it = true; return; // we can stop visiting now From 7f035baaf704195029a814276d4350d2b1319c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Romanowski?= Date: Thu, 4 Jul 2019 18:44:34 +0200 Subject: [PATCH 20/32] Fix a typo in Write::write_vectored docs --- src/libstd/io/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index 3d0568c16cdf6..a8d4d1181aa4f 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -1144,7 +1144,7 @@ pub trait Write { /// Like `write`, except that it writes from a slice of buffers. /// - /// Data is copied to from each buffer in order, with the final buffer + /// Data is copied from each buffer in order, with the final buffer /// read from possibly being only partially consumed. This method must /// behave as a call to `write` with the buffers concatenated would. /// From 61ddf5e85cdc46cff8617088594d7916d597e87e Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Thu, 27 Jun 2019 21:46:23 +0100 Subject: [PATCH 21/32] Create async version of the dynamic-drop test --- src/test/run-pass/drop/dynamic-drop-async.rs | 328 +++++++++++++++++++ 1 file changed, 328 insertions(+) create mode 100644 src/test/run-pass/drop/dynamic-drop-async.rs diff --git a/src/test/run-pass/drop/dynamic-drop-async.rs b/src/test/run-pass/drop/dynamic-drop-async.rs new file mode 100644 index 0000000000000..9226145d9354d --- /dev/null +++ b/src/test/run-pass/drop/dynamic-drop-async.rs @@ -0,0 +1,328 @@ +// Test that values are not leaked in async functions, even in the cases where: +// * Dropping one of the values panics while running the future. +// * The future is dropped at one of its suspend points. +// * Dropping one of the values panics while dropping the future. + +// run-pass +// edition:2018 +// ignore-wasm32-bare compiled with panic=abort by default + +#![allow(unused_assignments)] +#![allow(unused_variables)] +#![feature(slice_patterns)] +#![feature(async_await)] + +use std::{ + cell::{Cell, RefCell}, + future::Future, + marker::Unpin, + panic, + pin::Pin, + ptr, + rc::Rc, + task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, + usize, +}; + +struct InjectedFailure; + +struct Defer { + ready: bool, + value: Option, +} + +impl Future for Defer { + type Output = T; + fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll { + if self.ready { + Poll::Ready(self.value.take().unwrap()) + } else { + self.ready = true; + Poll::Pending + } + } +} + +/// Allocator tracks the creation and destruction of `Ptr`s. +/// The `failing_op`-th operation will panic. +struct Allocator { + data: RefCell>, + failing_op: usize, + cur_ops: Cell, +} + +impl panic::UnwindSafe for Allocator {} +impl panic::RefUnwindSafe for Allocator {} + +impl Drop for Allocator { + fn drop(&mut self) { + let data = self.data.borrow(); + if data.iter().any(|d| *d) { + panic!("missing free: {:?}", data); + } + } +} + +impl Allocator { + fn new(failing_op: usize) -> Self { + Allocator { failing_op, cur_ops: Cell::new(0), data: RefCell::new(vec![]) } + } + fn alloc(&self) -> impl Future> + '_ { + self.fallible_operation(); + + let mut data = self.data.borrow_mut(); + + let addr = data.len(); + data.push(true); + Defer { ready: false, value: Some(Ptr(addr, self)) } + } + fn fallible_operation(&self) { + self.cur_ops.set(self.cur_ops.get() + 1); + + if self.cur_ops.get() == self.failing_op { + panic!(InjectedFailure); + } + } +} + +// Type that tracks whether it was dropped and can panic when it's created or +// destroyed. +struct Ptr<'a>(usize, &'a Allocator); +impl<'a> Drop for Ptr<'a> { + fn drop(&mut self) { + match self.1.data.borrow_mut()[self.0] { + false => panic!("double free at index {:?}", self.0), + ref mut d => *d = false, + } + + self.1.fallible_operation(); + } +} + +async fn dynamic_init(a: Rc, c: bool) { + let _x; + if c { + _x = Some(a.alloc().await); + } +} + +async fn dynamic_drop(a: Rc, c: bool) { + let x = a.alloc().await; + if c { + Some(x) + } else { + None + }; +} + +struct TwoPtrs<'a>(Ptr<'a>, Ptr<'a>); +async fn struct_dynamic_drop(a: Rc, c0: bool, c1: bool, c: bool) { + for i in 0..2 { + let x; + let y; + if (c0 && i == 0) || (c1 && i == 1) { + x = (a.alloc().await, a.alloc().await, a.alloc().await); + y = TwoPtrs(a.alloc().await, a.alloc().await); + if c { + drop(x.1); + a.alloc().await; + drop(y.0); + a.alloc().await; + } + } + } +} + +async fn field_assignment(a: Rc, c0: bool) { + let mut x = (TwoPtrs(a.alloc().await, a.alloc().await), a.alloc().await); + + x.1 = a.alloc().await; + x.1 = a.alloc().await; + + let f = (x.0).0; + a.alloc().await; + if c0 { + (x.0).0 = f; + } + a.alloc().await; +} + +async fn assignment(a: Rc, c0: bool, c1: bool) { + let mut _v = a.alloc().await; + let mut _w = a.alloc().await; + if c0 { + drop(_v); + } + _v = _w; + if c1 { + _w = a.alloc().await; + } +} + +async fn array_simple(a: Rc) { + let _x = [a.alloc().await, a.alloc().await, a.alloc().await, a.alloc().await]; +} + +async fn vec_simple(a: Rc) { + let _x = vec![a.alloc().await, a.alloc().await, a.alloc().await, a.alloc().await]; +} + +async fn mixed_drop_and_nondrop(a: Rc) { + // check that destructor panics handle drop + // and non-drop blocks in the same scope correctly. + // + // Surprisingly enough, this used to not work. + let (x, y, z); + x = a.alloc().await; + y = 5; + z = a.alloc().await; +} + +#[allow(unreachable_code)] +async fn vec_unreachable(a: Rc) { + let _x = vec![a.alloc().await, a.alloc().await, a.alloc().await, return]; +} + +async fn slice_pattern_one_of(a: Rc, i: usize) { + let array = [a.alloc().await, a.alloc().await, a.alloc().await, a.alloc().await]; + let _x = match i { + 0 => { + let [a, ..] = array; + a + } + 1 => { + let [_, a, ..] = array; + a + } + 2 => { + let [_, _, a, _] = array; + a + } + 3 => { + let [_, _, _, a] = array; + a + } + _ => panic!("unmatched"), + }; + a.alloc().await; +} + +async fn subslice_pattern_from_end_with_drop(a: Rc, arg: bool, arg2: bool) { + let arr = [a.alloc().await, a.alloc().await, a.alloc().await, a.alloc().await, a.alloc().await]; + if arg2 { + drop(arr); + return; + } + + if arg { + let [.., _x, _] = arr; + } else { + let [_, _y..] = arr; + } + a.alloc().await; +} + +async fn subslice_pattern_reassign(a: Rc) { + let mut ar = [a.alloc().await, a.alloc().await, a.alloc().await]; + let [_, _, _x] = ar; + ar = [a.alloc().await, a.alloc().await, a.alloc().await]; + let [_, _y..] = ar; + a.alloc().await; +} + +fn run_test(cx: &mut Context<'_>, ref f: F) +where + F: Fn(Rc) -> G, + G: Future, +{ + for polls in 0.. { + // Run without any panics to find which operations happen after the + // penultimate `poll`. + let first_alloc = Rc::new(Allocator::new(usize::MAX)); + let mut fut = Box::pin(f(first_alloc.clone())); + let mut ops_before_last_poll = 0; + let mut completed = false; + for _ in 0..polls { + ops_before_last_poll = first_alloc.cur_ops.get(); + if let Poll::Ready(()) = fut.as_mut().poll(cx) { + completed = true; + } + } + drop(fut); + + // Start at `ops_before_last_poll` so that we will always be able to + // `poll` the expected number of times. + for failing_op in ops_before_last_poll..first_alloc.cur_ops.get() { + let alloc = Rc::new(Allocator::new(failing_op + 1)); + let f = &f; + let cx = &mut *cx; + let result = panic::catch_unwind(panic::AssertUnwindSafe(move || { + let mut fut = Box::pin(f(alloc)); + for _ in 0..polls { + let _ = fut.as_mut().poll(cx); + } + drop(fut); + })); + match result { + Ok(..) => panic!("test executed more ops on first call"), + Err(e) => { + if e.downcast_ref::().is_none() { + panic::resume_unwind(e); + } + } + } + } + + if completed { + break; + } + } +} + +fn clone_waker(data: *const ()) -> RawWaker { + RawWaker::new(data, &RawWakerVTable::new(clone_waker, drop, drop, drop)) +} + +fn main() { + let waker = unsafe { Waker::from_raw(clone_waker(ptr::null())) }; + let context = &mut Context::from_waker(&waker); + + run_test(context, |a| dynamic_init(a, false)); + run_test(context, |a| dynamic_init(a, true)); + run_test(context, |a| dynamic_drop(a, false)); + run_test(context, |a| dynamic_drop(a, true)); + + run_test(context, |a| assignment(a, false, false)); + run_test(context, |a| assignment(a, false, true)); + run_test(context, |a| assignment(a, true, false)); + run_test(context, |a| assignment(a, true, true)); + + run_test(context, |a| array_simple(a)); + run_test(context, |a| vec_simple(a)); + run_test(context, |a| vec_unreachable(a)); + + run_test(context, |a| struct_dynamic_drop(a, false, false, false)); + run_test(context, |a| struct_dynamic_drop(a, false, false, true)); + run_test(context, |a| struct_dynamic_drop(a, false, true, false)); + run_test(context, |a| struct_dynamic_drop(a, false, true, true)); + run_test(context, |a| struct_dynamic_drop(a, true, false, false)); + run_test(context, |a| struct_dynamic_drop(a, true, false, true)); + run_test(context, |a| struct_dynamic_drop(a, true, true, false)); + run_test(context, |a| struct_dynamic_drop(a, true, true, true)); + + run_test(context, |a| field_assignment(a, false)); + run_test(context, |a| field_assignment(a, true)); + + run_test(context, |a| mixed_drop_and_nondrop(a)); + + run_test(context, |a| slice_pattern_one_of(a, 0)); + run_test(context, |a| slice_pattern_one_of(a, 1)); + run_test(context, |a| slice_pattern_one_of(a, 2)); + run_test(context, |a| slice_pattern_one_of(a, 3)); + + run_test(context, |a| subslice_pattern_from_end_with_drop(a, true, true)); + run_test(context, |a| subslice_pattern_from_end_with_drop(a, true, false)); + run_test(context, |a| subslice_pattern_from_end_with_drop(a, false, true)); + run_test(context, |a| subslice_pattern_from_end_with_drop(a, false, false)); + run_test(context, |a| subslice_pattern_reassign(a)); +} From f4b30f4bae352d501ea51ee227dbbcf3c5f91f6a Mon Sep 17 00:00:00 2001 From: Mark Brooks Date: Thu, 4 Jul 2019 17:35:26 -0400 Subject: [PATCH 22/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15d09f4aada3b..caebdfde8cde1 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Read ["Installation"] from [The Book]. _Note: If you wish to contribute to the compiler, you should read [this chapter](https://rust-lang.github.io/rustc-guide/how-to-build-and-run.html) -of the rustc-guide instead._ +of the rustc-guide instead of this section._ ### Building on *nix 1. Make sure you have installed the dependencies: From 90419d36bd05718bce2b1a6eafaac8469a327bec Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 25 Jun 2019 10:04:47 +1000 Subject: [PATCH 23/32] Remove `solve_nll_region_constraints` measurements from `-Ztime-passes` output. Because it pollutes the output with hundreds or thousands of uninteresting lines for which the time duration is always(?) 0.000s. --- .../borrow_check/nll/region_infer/mod.rs | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/librustc_mir/borrow_check/nll/region_infer/mod.rs b/src/librustc_mir/borrow_check/nll/region_infer/mod.rs index 4e609460c1f70..40388722bcac9 100644 --- a/src/librustc_mir/borrow_check/nll/region_infer/mod.rs +++ b/src/librustc_mir/borrow_check/nll/region_infer/mod.rs @@ -20,7 +20,7 @@ use rustc::mir::{ ConstraintCategory, Local, Location, }; use rustc::ty::{self, subst::SubstsRef, RegionVid, Ty, TyCtxt, TypeFoldable}; -use rustc::util::common::{self, ErrorReported}; +use rustc::util::common::ErrorReported; use rustc_data_structures::binary_search_util; use rustc_data_structures::bit_set::BitSet; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; @@ -468,22 +468,6 @@ impl<'tcx> RegionInferenceContext<'tcx> { upvars: &[Upvar], mir_def_id: DefId, errors_buffer: &mut Vec, - ) -> Option> { - common::time_ext( - infcx.tcx.sess.time_extended(), - Some(infcx.tcx.sess), - &format!("solve_nll_region_constraints({:?})", mir_def_id), - || self.solve_inner(infcx, body, upvars, mir_def_id, errors_buffer), - ) - } - - fn solve_inner( - &mut self, - infcx: &InferCtxt<'_, 'tcx>, - body: &Body<'tcx>, - upvars: &[Upvar], - mir_def_id: DefId, - errors_buffer: &mut Vec, ) -> Option> { self.propagate_constraints(body); From 87b103d4a99193bf57a17866fb99596df7d31d8b Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 25 Jun 2019 13:52:07 +1000 Subject: [PATCH 24/32] Add a "total" measurement to -Ztime-passes. This is useful for getting the total compilation time at the end. To do this, the patch changes `print_time_passes_entry` to not increment the depth, which means that `print_time_passes_entry_internal` is no longer needed. --- src/librustc/util/common.rs | 14 +---------- src/librustc_codegen_ssa/back/write.rs | 2 +- src/librustc_codegen_ssa/base.rs | 5 +++- src/librustc_driver/lib.rs | 32 +++++++++++++++++++++----- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/librustc/util/common.rs b/src/librustc/util/common.rs index 2140018223c34..8e7936dae0976 100644 --- a/src/librustc/util/common.rs +++ b/src/librustc/util/common.rs @@ -170,7 +170,7 @@ pub fn time_ext(do_it: bool, sess: Option<&Session>, what: &str, f: F) -> } } - print_time_passes_entry_internal(what, dur); + print_time_passes_entry(true, what, dur); TIME_DEPTH.with(|slot| slot.set(old)); @@ -182,18 +182,6 @@ pub fn print_time_passes_entry(do_it: bool, what: &str, dur: Duration) { return } - let old = TIME_DEPTH.with(|slot| { - let r = slot.get(); - slot.set(r + 1); - r - }); - - print_time_passes_entry_internal(what, dur); - - TIME_DEPTH.with(|slot| slot.set(old)); -} - -fn print_time_passes_entry_internal(what: &str, dur: Duration) { let indentation = TIME_DEPTH.with(|slot| slot.get()); let mem_string = match get_resident() { diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs index fbf57701c5a95..7bb2cc7c08977 100644 --- a/src/librustc_codegen_ssa/back/write.rs +++ b/src/librustc_codegen_ssa/back/write.rs @@ -1554,7 +1554,7 @@ fn start_executing_work( let total_llvm_time = Instant::now().duration_since(llvm_start_time); // This is the top-level timing for all of LLVM, set the time-depth // to zero. - set_time_depth(0); + set_time_depth(1); print_time_passes_entry(cgcx.time_passes, "LLVM passes", total_llvm_time); diff --git a/src/librustc_codegen_ssa/base.rs b/src/librustc_codegen_ssa/base.rs index d06460fc85696..a554bf7761c93 100644 --- a/src/librustc_codegen_ssa/base.rs +++ b/src/librustc_codegen_ssa/base.rs @@ -25,7 +25,7 @@ use rustc::ty::{self, Ty, TyCtxt, Instance}; use rustc::ty::layout::{self, Align, TyLayout, LayoutOf, VariantIdx, HasTyCtxt}; use rustc::ty::query::Providers; use rustc::middle::cstore::{self, LinkagePreference}; -use rustc::util::common::{time, print_time_passes_entry}; +use rustc::util::common::{time, print_time_passes_entry, set_time_depth, time_depth}; use rustc::session::config::{self, EntryFnType, Lto}; use rustc::session::Session; use rustc::util::nodemap::FxHashMap; @@ -639,9 +639,12 @@ pub fn codegen_crate( // Since the main thread is sometimes blocked during codegen, we keep track // -Ztime-passes output manually. + let time_depth = time_depth(); + set_time_depth(time_depth + 1); print_time_passes_entry(tcx.sess.time_passes(), "codegen to LLVM IR", total_codegen_time); + set_time_depth(time_depth); ::rustc_incremental::assert_module_sources::assert_module_sources(tcx); diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 5fb6ed31b0693..3258e2517319b 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -38,7 +38,8 @@ use rustc::session::{early_error, early_warn}; use rustc::lint::Lint; use rustc::lint; use rustc::hir::def_id::LOCAL_CRATE; -use rustc::util::common::{time, ErrorReported, install_panic_hook}; +use rustc::util::common::{ErrorReported, install_panic_hook, print_time_passes_entry}; +use rustc::util::common::{set_time_depth, time}; use rustc_metadata::locator; use rustc_metadata::cstore::CStore; use rustc_codegen_utils::codegen_backend::CodegenBackend; @@ -54,11 +55,12 @@ use std::default::Default; use std::env; use std::ffi::OsString; use std::io::{self, Read, Write}; +use std::mem; use std::panic::{self, catch_unwind}; use std::path::PathBuf; use std::process::{self, Command, Stdio}; use std::str; -use std::mem; +use std::time::Instant; use syntax::ast; use syntax::source_map::FileLoader; @@ -72,7 +74,7 @@ pub mod pretty; /// Exit status code used for successful compilation and help output. pub const EXIT_SUCCESS: i32 = 0; -/// Exit status code used for compilation failures and invalid flags. +/// Exit status code used for compilation failures and invalid flags. pub const EXIT_FAILURE: i32 = 1; const BUG_REPORT_URL: &str = "https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.\ @@ -118,6 +120,18 @@ pub struct DefaultCallbacks; impl Callbacks for DefaultCallbacks {} +#[derive(Default)] +pub struct TimePassesCallbacks { + time_passes: bool, +} + +impl Callbacks for TimePassesCallbacks { + fn config(&mut self, config: &mut interface::Config) { + self.time_passes = + config.opts.debugging_opts.time_passes || config.opts.debugging_opts.time; + } +} + // Parse args and run the compiler. This is the primary entry point for rustc. // See comments on CompilerCalls below for details about the callbacks argument. // The FileLoader provides a way to load files from sources other than the file system. @@ -1169,7 +1183,9 @@ pub fn init_rustc_env_logger() { } pub fn main() { + let start = Instant::now(); init_rustc_env_logger(); + let mut callbacks = TimePassesCallbacks::default(); let result = report_ices_to_stderr_if_any(|| { let args = env::args_os().enumerate() .map(|(i, arg)| arg.into_string().unwrap_or_else(|arg| { @@ -1177,10 +1193,14 @@ pub fn main() { &format!("Argument {} is not valid Unicode: {:?}", i, arg)) })) .collect::>(); - run_compiler(&args, &mut DefaultCallbacks, None, None) + run_compiler(&args, &mut callbacks, None, None) }).and_then(|result| result); - process::exit(match result { + let exit_code = match result { Ok(_) => EXIT_SUCCESS, Err(_) => EXIT_FAILURE, - }); + }; + // The extra `\t` is necessary to align this label with the others. + set_time_depth(0); + print_time_passes_entry(callbacks.time_passes, "\ttotal", start.elapsed()); + process::exit(exit_code); } From 50510e4491ea8225c3abe997fe27f0c53e0094e2 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 5 Jul 2019 08:44:16 +0200 Subject: [PATCH 25/32] remove Scalar::is_null_ptr Miri does not need it any more and it is otherwise unused --- src/librustc/mir/interpret/value.rs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/librustc/mir/interpret/value.rs b/src/librustc/mir/interpret/value.rs index 388c549324268..867565d5e0922 100644 --- a/src/librustc/mir/interpret/value.rs +++ b/src/librustc/mir/interpret/value.rs @@ -275,17 +275,6 @@ impl<'tcx, Tag> Scalar { } } - #[inline] - pub fn is_null_ptr(self, cx: &impl HasDataLayout) -> bool { - match self { - Scalar::Raw { data, size } => { - assert_eq!(size as u64, cx.data_layout().pointer_size.bytes()); - data == 0 - }, - Scalar::Ptr(_) => false, - } - } - #[inline] pub fn from_bool(b: bool) -> Self { Scalar::Raw { data: b as u128, size: 1 } From 050a71b570e49106e8dd6f6282e322220a5edf6f Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Thu, 4 Jul 2019 19:31:52 +0300 Subject: [PATCH 26/32] rustc_target: avoid negative register counts in the SysV x86_64 ABI. --- src/librustc_target/abi/call/x86_64.rs | 33 +++++++++---- src/test/auxiliary/rust_test_helpers.c | 23 ++++++++++ src/test/run-pass/abi-sysv64-arg-passing.rs | 36 +++++++++++++++ .../issues/issue-62350-sysv-neg-reg-counts.rs | 46 +++++++++++++++++++ 4 files changed, 129 insertions(+), 9 deletions(-) create mode 100644 src/test/run-pass/abi/issues/issue-62350-sysv-neg-reg-counts.rs diff --git a/src/librustc_target/abi/call/x86_64.rs b/src/librustc_target/abi/call/x86_64.rs index b68c70224c95e..cdec65e5d40df 100644 --- a/src/librustc_target/abi/call/x86_64.rs +++ b/src/librustc_target/abi/call/x86_64.rs @@ -167,20 +167,23 @@ fn cast_target(cls: &[Option], size: Size) -> CastTarget { target } +const MAX_INT_REGS: usize = 6; // RDI, RSI, RDX, RCX, R8, R9 +const MAX_SSE_REGS: usize = 8; // XMM0-7 + pub fn compute_abi_info<'a, Ty, C>(cx: &C, fty: &mut FnType<'a, Ty>) where Ty: TyLayoutMethods<'a, C> + Copy, C: LayoutOf> + HasDataLayout { - let mut int_regs = 6; // RDI, RSI, RDX, RCX, R8, R9 - let mut sse_regs = 8; // XMM0-7 + let mut int_regs = MAX_INT_REGS; + let mut sse_regs = MAX_SSE_REGS; let mut x86_64_ty = |arg: &mut ArgType<'a, Ty>, is_arg: bool| { let mut cls_or_mem = classify_arg(cx, arg); - let mut needed_int = 0; - let mut needed_sse = 0; if is_arg { if let Ok(cls) = cls_or_mem { + let mut needed_int = 0; + let mut needed_sse = 0; for &c in &cls { match c { Some(Class::Int) => needed_int += 1, @@ -188,8 +191,20 @@ pub fn compute_abi_info<'a, Ty, C>(cx: &C, fty: &mut FnType<'a, Ty>) _ => {} } } - if arg.layout.is_aggregate() && (int_regs < needed_int || sse_regs < needed_sse) { - cls_or_mem = Err(Memory); + match (int_regs.checked_sub(needed_int), sse_regs.checked_sub(needed_sse)) { + (Some(left_int), Some(left_sse)) => { + int_regs = left_int; + sse_regs = left_sse; + } + _ => { + // Not enough registers for this argument, so it will be + // passed on the stack, but we only mark aggregates + // explicitly as indirect `byval` arguments, as LLVM will + // automatically put immediates on the stack itself. + if arg.layout.is_aggregate() { + cls_or_mem = Err(Memory); + } + } } } } @@ -201,14 +216,14 @@ pub fn compute_abi_info<'a, Ty, C>(cx: &C, fty: &mut FnType<'a, Ty>) } else { // `sret` parameter thus one less integer register available arg.make_indirect(); + // NOTE(eddyb) return is handled first, so no registers + // should've been used yet. + assert_eq!(int_regs, MAX_INT_REGS); int_regs -= 1; } } Ok(ref cls) => { // split into sized chunks passed individually - int_regs -= needed_int; - sse_regs -= needed_sse; - if arg.layout.is_aggregate() { let size = arg.layout.size; arg.cast_to(cast_target(cls, size)) diff --git a/src/test/auxiliary/rust_test_helpers.c b/src/test/auxiliary/rust_test_helpers.c index 7f2afd9c5715c..b95b0ca1a89c0 100644 --- a/src/test/auxiliary/rust_test_helpers.c +++ b/src/test/auxiliary/rust_test_helpers.c @@ -215,6 +215,29 @@ uint64_t get_c_many_params(void *a, void *b, void *c, void *d, struct quad f) { return f.c; } +struct quad_floats { + float a; + float b; + float c; + float d; +}; + +float get_c_exhaust_sysv64_ints( + void *a, + void *b, + void *c, + void *d, + void *e, + void *f, + // `f` used the last integer register, so `g` goes on the stack. + // It also used to bring the "count of available integer registers" down to + // `-1` which broke the next SSE-only aggregate argument (`h`) - see #62350. + void *g, + struct quad_floats h +) { + return h.c; +} + // Calculates the average of `(x + y) / n` where x: i64, y: f64. There must be exactly n pairs // passed as variadic arguments. There are two versions of this function: the // variadic one, and the one that takes a `va_list`. diff --git a/src/test/run-pass/abi-sysv64-arg-passing.rs b/src/test/run-pass/abi-sysv64-arg-passing.rs index 0b9f9934fa9c8..fdf0573b5e3ec 100644 --- a/src/test/run-pass/abi-sysv64-arg-passing.rs +++ b/src/test/run-pass/abi-sysv64-arg-passing.rs @@ -20,6 +20,7 @@ // extern-return-TwoU64s // foreign-fn-with-byval // issue-28676 +// issue-62350-sysv-neg-reg-counts // struct-return // ignore-android @@ -83,6 +84,9 @@ mod tests { #[derive(Copy, Clone)] pub struct Quad { a: u64, b: u64, c: u64, d: u64 } + #[derive(Copy, Clone)] + pub struct QuadFloats { a: f32, b: f32, c: f32, d: f32 } + #[repr(C)] #[derive(Copy, Clone)] pub struct Floats { a: f64, b: u8, c: f64 } @@ -108,6 +112,16 @@ mod tests { pub fn get_z(x: S) -> u64; pub fn get_c_many_params(_: *const (), _: *const (), _: *const (), _: *const (), f: Quad) -> u64; + pub fn get_c_exhaust_sysv64_ints( + _: *const (), + _: *const (), + _: *const (), + _: *const (), + _: *const (), + _: *const (), + _: *const (), + h: QuadFloats, + ) -> f32; pub fn rust_dbg_abi_1(q: Quad) -> Quad; pub fn rust_dbg_abi_2(f: Floats) -> Floats; } @@ -263,6 +277,27 @@ mod tests { test(); } + fn test_62350() { + use std::ptr; + unsafe { + let null = ptr::null(); + let q = QuadFloats { + a: 10.2, + b: 20.3, + c: 30.4, + d: 40.5 + }; + assert_eq!( + get_c_exhaust_sysv64_ints(null, null, null, null, null, null, null, q), + q.c, + ); + } + } + + pub fn issue_62350() { + test_62350(); + } + fn test1() { unsafe { let q = Quad { a: 0xaaaa_aaaa_aaaa_aaaa, @@ -321,6 +356,7 @@ fn main() { extern_return_twou64s(); foreign_fn_with_byval(); issue_28676(); + issue_62350(); struct_return(); } diff --git a/src/test/run-pass/abi/issues/issue-62350-sysv-neg-reg-counts.rs b/src/test/run-pass/abi/issues/issue-62350-sysv-neg-reg-counts.rs new file mode 100644 index 0000000000000..df819306e4aa2 --- /dev/null +++ b/src/test/run-pass/abi/issues/issue-62350-sysv-neg-reg-counts.rs @@ -0,0 +1,46 @@ +// run-pass +#![allow(dead_code)] +#![allow(improper_ctypes)] + +// ignore-wasm32-bare no libc to test ffi with + +#[derive(Copy, Clone)] +pub struct QuadFloats { a: f32, b: f32, c: f32, d: f32 } + +mod rustrt { + use super::QuadFloats; + + #[link(name = "rust_test_helpers", kind = "static")] + extern { + pub fn get_c_exhaust_sysv64_ints( + _: *const (), + _: *const (), + _: *const (), + _: *const (), + _: *const (), + _: *const (), + _: *const (), + h: QuadFloats, + ) -> f32; + } +} + +fn test() { + unsafe { + let null = std::ptr::null(); + let q = QuadFloats { + a: 10.2, + b: 20.3, + c: 30.4, + d: 40.5 + }; + assert_eq!( + rustrt::get_c_exhaust_sysv64_ints(null, null, null, null, null, null, null, q), + q.c, + ); + } +} + +pub fn main() { + test(); +} From f01e5e6ce71cb57d4b47ef39899d3f09c40928c7 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Fri, 5 Jul 2019 07:24:58 -0400 Subject: [PATCH 27/32] Lint on invalid values passed to x.py --warnings This also introduces support for `--warnings allow` and fixes --warnings being overridden by the configuration file, config.toml. --- src/bootstrap/config.rs | 4 ++-- src/bootstrap/flags.rs | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 66f504ea924e9..20d7548df5c65 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -405,7 +405,7 @@ impl Config { config.incremental = flags.incremental; config.dry_run = flags.dry_run; config.keep_stage = flags.keep_stage; - if let Some(value) = flags.warnings { + if let Some(value) = flags.deny_warnings { config.deny_warnings = value; } @@ -571,7 +571,7 @@ impl Config { config.rustc_default_linker = rust.default_linker.clone(); config.musl_root = rust.musl_root.clone().map(PathBuf::from); config.save_toolstates = rust.save_toolstates.clone().map(PathBuf::from); - set(&mut config.deny_warnings, rust.deny_warnings.or(flags.warnings)); + set(&mut config.deny_warnings, flags.deny_warnings.or(rust.deny_warnings)); set(&mut config.backtrace_on_ice, rust.backtrace_on_ice); set(&mut config.rust_verify_llvm_ir, rust.verify_llvm_ir); set(&mut config.rust_remap_debuginfo, rust.remap_debuginfo); diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs index 179accda0c8b2..0e171e92b3125 100644 --- a/src/bootstrap/flags.rs +++ b/src/bootstrap/flags.rs @@ -33,8 +33,11 @@ pub struct Flags { pub rustc_error_format: Option, pub dry_run: bool, - // true => deny - pub warnings: Option, + // This overrides the deny-warnings configuation option, + // which passes -Dwarnings to the compiler invocations. + // + // true => deny, false => allow + pub deny_warnings: Option, } pub enum Subcommand { @@ -468,7 +471,7 @@ Arguments: .into_iter() .map(|p| p.into()) .collect::>(), - warnings: matches.opt_str("warnings").map(|v| v == "deny"), + deny_warnings: parse_deny_warnings(&matches), } } } @@ -549,3 +552,18 @@ fn split(s: &[String]) -> Vec { .map(|s| s.to_string()) .collect() } + +fn parse_deny_warnings(matches: &getopts::Matches) -> Option { + match matches.opt_str("warnings").as_ref().map(|v| v.as_str()) { + Some("deny") => Some(true), + Some("allow") => Some(false), + Some(value) => { + eprintln!( + r#"invalid value for --warnings: {:?}, expected "allow" or "deny""#, + value, + ); + process::exit(1); + }, + None => None, + } +} From 7fb17d868bd629019bf11c56596bb64eea6bd6f6 Mon Sep 17 00:00:00 2001 From: Jethro Beekman Date: Fri, 5 Jul 2019 09:03:49 -0700 Subject: [PATCH 28/32] Remove last use of mem::uninitialized in SGX --- src/libstd/sys/sgx/mod.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/libstd/sys/sgx/mod.rs b/src/libstd/sys/sgx/mod.rs index 3bf9ecf40808b..601957acd5c63 100644 --- a/src/libstd/sys/sgx/mod.rs +++ b/src/libstd/sys/sgx/mod.rs @@ -3,8 +3,6 @@ //! This module contains the facade (aka platform-specific) implementations of //! OS level functionality for Fortanix SGX. -#![allow(deprecated)] - use crate::io::ErrorKind; use crate::os::raw::c_char; use crate::sync::atomic::{AtomicBool, Ordering}; @@ -142,7 +140,7 @@ pub unsafe extern "C" fn __rust_abort() { pub fn hashmap_random_keys() -> (u64, u64) { fn rdrand64() -> u64 { unsafe { - let mut ret: u64 = crate::mem::uninitialized(); + let mut ret: u64 = 0; for _ in 0..10 { if crate::arch::x86_64::_rdrand64_step(&mut ret) == 1 { return ret; From ce77031e9674fc921a69e23e107a9705b053b324 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Thu, 4 Jul 2019 19:28:20 +0900 Subject: [PATCH 29/32] Remove compile-pass from compiletest Also change annotations in some tests --- .../multiple-lifetimes/ordinary-bounds-pick-original-elided.rs | 2 +- .../ordinary-bounds-pick-original-existential.rs | 2 +- .../multiple-lifetimes/ordinary-bounds-pick-original.rs | 2 +- .../multiple-lifetimes/ordinary-bounds-pick-other.rs | 2 +- src/tools/compiletest/src/header.rs | 3 --- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-elided.rs b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-elided.rs index 5f484773405cd..553dea7aa6ed3 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-elided.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-elided.rs @@ -1,5 +1,5 @@ // edition:2018 -// compile-pass +// build-pass (FIXME(62277): could be check-pass?) // revisions: migrate mir //[mir]compile-flags: -Z borrowck=mir diff --git a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-existential.rs b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-existential.rs index c17ae6f0519bf..43915e05e8824 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-existential.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-existential.rs @@ -1,5 +1,5 @@ // edition:2018 -// compile-pass +// build-pass (FIXME(62277): could be check-pass?) // revisions: migrate mir //[mir]compile-flags: -Z borrowck=mir diff --git a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original.rs b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original.rs index 31891ef15c754..c0930ec5944e0 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original.rs @@ -1,5 +1,5 @@ // edition:2018 -// compile-pass +// build-pass (FIXME(62277): could be check-pass?) // revisions: migrate mir //[mir]compile-flags: -Z borrowck=mir diff --git a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-other.rs b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-other.rs index 29c997085d8f4..ed36bda7db719 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-other.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-other.rs @@ -1,5 +1,5 @@ // edition:2018 -// compile-pass +// build-pass (FIXME(62277): could be check-pass?) // revisions: migrate mir //[mir]compile-flags: -Z borrowck=mir diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 52f777db2daa6..b8008152e2a05 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -591,9 +591,6 @@ impl TestProps { } else if config.parse_name_directive(ln, "build-pass") { check_no_run("build-pass"); Some(PassMode::Build) - } else if config.parse_name_directive(ln, "compile-pass") /* compatibility */ { - check_no_run("compile-pass"); - Some(PassMode::Build) } else if config.parse_name_directive(ln, "run-pass") { if config.mode != Mode::Ui && config.mode != Mode::RunPass /* compatibility */ { panic!("`run-pass` header is only supported in UI tests") From db93d0149390c797237d0a3fb820f028d1885e45 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Thu, 4 Jul 2019 20:52:26 +0900 Subject: [PATCH 30/32] Remove compile-pass from error codes' explanation --- src/librustc_mir/error_codes.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc_mir/error_codes.rs b/src/librustc_mir/error_codes.rs index 4807782c66347..618c047e77359 100644 --- a/src/librustc_mir/error_codes.rs +++ b/src/librustc_mir/error_codes.rs @@ -331,7 +331,7 @@ An if-let pattern attempts to match the pattern, and enters the body if the match was successful. If the match is irrefutable (when it cannot fail to match), use a regular `let`-binding instead. For instance: -```compile_pass +``` struct Irrefutable(i32); let irr = Irrefutable(0); @@ -360,7 +360,7 @@ A while-let pattern attempts to match the pattern, and enters the body if the match was successful. If the match is irrefutable (when it cannot fail to match), use a regular `let`-binding inside a `loop` instead. For instance: -```compile_pass,no_run +```no_run struct Irrefutable(i32); let irr = Irrefutable(0); From 211b52bb23f4867720b365b0c8baead601062ee9 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Thu, 4 Jul 2019 20:56:13 +0900 Subject: [PATCH 31/32] Update rustc-guide --- src/doc/rustc-guide | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-guide b/src/doc/rustc-guide index abf512fc9cc96..b5a2b9353c661 160000 --- a/src/doc/rustc-guide +++ b/src/doc/rustc-guide @@ -1 +1 @@ -Subproject commit abf512fc9cc969dcbea69aa15b44586bbeb13c2d +Subproject commit b5a2b9353c661000378415ecfeb757eb7df42d66 From 1640ab2e1f92e943e5cc08856f9fb851de1fde4c Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sat, 6 Jul 2019 02:06:39 +0900 Subject: [PATCH 32/32] Fix test annotation --- src/test/ui/async-await/async-closure-matches-expr.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/async-await/async-closure-matches-expr.rs b/src/test/ui/async-await/async-closure-matches-expr.rs index 90bd51ec5d0d2..1c192a4d1d882 100644 --- a/src/test/ui/async-await/async-closure-matches-expr.rs +++ b/src/test/ui/async-await/async-closure-matches-expr.rs @@ -1,4 +1,4 @@ -// compile-pass +// build-pass // edition:2018 #![feature(async_await, async_closure)]