Skip to content

Commit 0c04344

Browse files
committed
Auto merge of rust-lang#73669 - Manishearth:rollup-0n4u7vq, r=Manishearth
Rollup of 11 pull requests Successful merges: - rust-lang#72780 (Enforce doc alias check) - rust-lang#72876 (Mention that BTreeMap::new() doesn't allocate) - rust-lang#73244 (Check for assignments between non-conflicting generator saved locals) - rust-lang#73488 (code coverage foundation for hash and num_counters) - rust-lang#73523 (Fix -Z unpretty=everybody_loops) - rust-lang#73587 (Move remaining `NodeId` APIs from `Definitions` to `Resolver`) - rust-lang#73601 (Point at the call span when overflow occurs during monomorphization) - rust-lang#73613 (The const propagator cannot trace references.) - rust-lang#73614 (fix `intrinsics::needs_drop` docs) - rust-lang#73630 (Provide context on E0308 involving fn items) - rust-lang#73665 (rustc: Modernize wasm checks for atomics) Failed merges: r? @ghost
2 parents ff5b446 + 6ed6a84 commit 0c04344

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1217
-536
lines changed

Cargo.lock

+1
Original file line numberDiff line numberDiff line change
@@ -4200,6 +4200,7 @@ dependencies = [
42004200
"rustc_expand",
42014201
"rustc_feature",
42024202
"rustc_hir",
4203+
"rustc_index",
42034204
"rustc_metadata",
42044205
"rustc_middle",
42054206
"rustc_session",

src/liballoc/collections/btree/map.rs

+2
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,8 @@ struct MergeIter<K, V, I: Iterator<Item = (K, V)>> {
490490
impl<K: Ord, V> BTreeMap<K, V> {
491491
/// Makes a new empty BTreeMap with a reasonable choice for B.
492492
///
493+
/// Does not allocate anything on its own.
494+
///
493495
/// # Examples
494496
///
495497
/// Basic usage:

src/libcore/intrinsics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,7 @@ extern "rust-intrinsic" {
12911291
/// implements `Copy`.
12921292
///
12931293
/// If the actual type neither requires drop glue nor implements
1294-
/// `Copy`, then may return `true` or `false`.
1294+
/// `Copy`, then the return value of this function is unspecified.
12951295
///
12961296
/// The stabilized version of this intrinsic is
12971297
/// [`std::mem::needs_drop`](../../std/mem/fn.needs_drop.html).

src/librustc_ast_lowering/item.rs

+6-11
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
253253
hir::ItemKind::Const(ty, body_id)
254254
}
255255
ItemKind::Fn(_, FnSig { ref decl, header }, ref generics, ref body) => {
256-
let fn_def_id = self.resolver.definitions().local_def_id(id);
256+
let fn_def_id = self.resolver.local_def_id(id);
257257
self.with_new_scopes(|this| {
258258
this.current_item = Some(ident.span);
259259

@@ -342,7 +342,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
342342
self_ty: ref ty,
343343
items: ref impl_items,
344344
} => {
345-
let def_id = self.resolver.definitions().local_def_id(id);
345+
let def_id = self.resolver.local_def_id(id);
346346

347347
// Lower the "impl header" first. This ordering is important
348348
// for in-band lifetimes! Consider `'a` here:
@@ -646,7 +646,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
646646
}
647647

648648
fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem<'hir> {
649-
let def_id = self.resolver.definitions().local_def_id(i.id);
649+
let def_id = self.resolver.local_def_id(i.id);
650650
hir::ForeignItem {
651651
hir_id: self.lower_node_id(i.id),
652652
ident: i.ident,
@@ -747,7 +747,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
747747
}
748748

749749
fn lower_trait_item(&mut self, i: &AssocItem) -> hir::TraitItem<'hir> {
750-
let trait_item_def_id = self.resolver.definitions().local_def_id(i.id);
750+
let trait_item_def_id = self.resolver.local_def_id(i.id);
751751

752752
let (generics, kind) = match i.kind {
753753
AssocItemKind::Const(_, ref ty, ref default) => {
@@ -812,7 +812,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
812812
}
813813

814814
fn lower_impl_item(&mut self, i: &AssocItem) -> hir::ImplItem<'hir> {
815-
let impl_item_def_id = self.resolver.definitions().local_def_id(i.id);
815+
let impl_item_def_id = self.resolver.local_def_id(i.id);
816816

817817
let (generics, kind) = match &i.kind {
818818
AssocItemKind::Const(_, ty, expr) => {
@@ -1320,12 +1320,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
13201320
if let Some(def_id) = def_id.as_local() {
13211321
for param in &generics.params {
13221322
if let GenericParamKind::Type { .. } = param.kind {
1323-
if def_id
1324-
== self
1325-
.resolver
1326-
.definitions()
1327-
.local_def_id(param.id)
1328-
{
1323+
if def_id == self.resolver.local_def_id(param.id) {
13291324
add_bounds
13301325
.entry(param.id)
13311326
.or_default()

src/librustc_ast_lowering/lib.rs

+38-14
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ use rustc_hir::def_id::{DefId, DefIdMap, LocalDefId, CRATE_DEF_INDEX};
5454
use rustc_hir::definitions::{DefKey, DefPathData, Definitions};
5555
use rustc_hir::intravisit;
5656
use rustc_hir::{ConstArg, GenericArg, ParamName};
57-
use rustc_index::vec::IndexVec;
57+
use rustc_index::vec::{Idx, IndexVec};
5858
use rustc_session::config::nightly_options;
5959
use rustc_session::lint::{builtin::BARE_TRAIT_OBJECTS, BuiltinLintDiagnostics, LintBuffer};
6060
use rustc_session::parse::ParseSess;
@@ -205,6 +205,19 @@ pub trait Resolver {
205205
fn next_node_id(&mut self) -> NodeId;
206206

207207
fn trait_map(&self) -> &NodeMap<Vec<hir::TraitCandidate>>;
208+
209+
fn opt_local_def_id(&self, node: NodeId) -> Option<LocalDefId>;
210+
211+
fn local_def_id(&self, node: NodeId) -> LocalDefId;
212+
213+
fn create_def(
214+
&mut self,
215+
parent: LocalDefId,
216+
node_id: ast::NodeId,
217+
data: DefPathData,
218+
expn_id: ExpnId,
219+
span: Span,
220+
) -> LocalDefId;
208221
}
209222

210223
type NtToTokenstream = fn(&Nonterminal, &ParseSess, Span) -> TokenStream;
@@ -436,7 +449,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
436449
match tree.kind {
437450
UseTreeKind::Simple(_, id1, id2) => {
438451
for &id in &[id1, id2] {
439-
self.lctx.resolver.definitions().create_def_with_parent(
452+
self.lctx.resolver.create_def(
440453
owner,
441454
id,
442455
DefPathData::Misc,
@@ -488,7 +501,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
488501
| ItemKind::Enum(_, ref generics)
489502
| ItemKind::TyAlias(_, ref generics, ..)
490503
| ItemKind::Trait(_, _, ref generics, ..) => {
491-
let def_id = self.lctx.resolver.definitions().local_def_id(item.id);
504+
let def_id = self.lctx.resolver.local_def_id(item.id);
492505
let count = generics
493506
.params
494507
.iter()
@@ -564,7 +577,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
564577
.map(|(&k, v)| (self.node_id_to_hir_id[k].unwrap(), v.clone()))
565578
.collect();
566579

567-
self.resolver.definitions().init_node_id_to_hir_id_mapping(self.node_id_to_hir_id);
580+
let mut def_id_to_hir_id = IndexVec::default();
581+
582+
for (node_id, hir_id) in self.node_id_to_hir_id.into_iter_enumerated() {
583+
if let Some(def_id) = self.resolver.opt_local_def_id(node_id) {
584+
if def_id_to_hir_id.len() <= def_id.index() {
585+
def_id_to_hir_id.resize(def_id.index() + 1, None);
586+
}
587+
def_id_to_hir_id[def_id] = hir_id;
588+
}
589+
}
590+
591+
self.resolver.definitions().init_def_id_to_hir_id_mapping(def_id_to_hir_id);
568592

569593
hir::Crate {
570594
item: hir::CrateItem { module, attrs, span: c.span },
@@ -628,7 +652,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
628652
.item_local_id_counters
629653
.insert(owner, HIR_ID_COUNTER_LOCKED)
630654
.unwrap_or_else(|| panic!("no `item_local_id_counters` entry for {:?}", owner));
631-
let def_id = self.resolver.definitions().local_def_id(owner);
655+
let def_id = self.resolver.local_def_id(owner);
632656
self.current_hir_id_owner.push((def_id, counter));
633657
let ret = f(self);
634658
let (new_def_id, new_counter) = self.current_hir_id_owner.pop().unwrap();
@@ -671,8 +695,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
671695
debug_assert!(local_id != HIR_ID_COUNTER_LOCKED);
672696

673697
*local_id_counter += 1;
674-
let owner = this.resolver.definitions().opt_local_def_id(owner).expect(
675-
"you forgot to call `create_def_with_parent` or are lowering node-IDs \
698+
let owner = this.resolver.opt_local_def_id(owner).expect(
699+
"you forgot to call `create_def` or are lowering node-IDs \
676700
that do not belong to the current owner",
677701
);
678702

@@ -800,7 +824,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
800824
};
801825

802826
// Add a definition for the in-band lifetime def.
803-
self.resolver.definitions().create_def_with_parent(
827+
self.resolver.create_def(
804828
parent_def_id,
805829
node_id,
806830
DefPathData::LifetimeNs(str_name),
@@ -1088,7 +1112,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
10881112

10891113
let impl_trait_node_id = self.resolver.next_node_id();
10901114
let parent_def_id = self.current_hir_id_owner.last().unwrap().0;
1091-
self.resolver.definitions().create_def_with_parent(
1115+
self.resolver.create_def(
10921116
parent_def_id,
10931117
impl_trait_node_id,
10941118
DefPathData::ImplTrait,
@@ -1154,7 +1178,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
11541178
let node_id = self.resolver.next_node_id();
11551179

11561180
// Add a definition for the in-band const def.
1157-
self.resolver.definitions().create_def_with_parent(
1181+
self.resolver.create_def(
11581182
parent_def_id,
11591183
node_id,
11601184
DefPathData::AnonConst,
@@ -1339,7 +1363,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13391363
}
13401364
ImplTraitContext::Universal(in_band_ty_params) => {
13411365
// Add a definition for the in-band `Param`.
1342-
let def_id = self.resolver.definitions().local_def_id(def_node_id);
1366+
let def_id = self.resolver.local_def_id(def_node_id);
13431367

13441368
let hir_bounds = self.lower_param_bounds(
13451369
bounds,
@@ -1428,7 +1452,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14281452
// frequently opened issues show.
14291453
let opaque_ty_span = self.mark_span_with_reason(DesugaringKind::OpaqueTy, span, None);
14301454

1431-
let opaque_ty_def_id = self.resolver.definitions().local_def_id(opaque_ty_node_id);
1455+
let opaque_ty_def_id = self.resolver.local_def_id(opaque_ty_node_id);
14321456

14331457
self.allocate_hir_id_counter(opaque_ty_node_id);
14341458

@@ -1620,7 +1644,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
16201644
let def_node_id = self.context.resolver.next_node_id();
16211645
let hir_id =
16221646
self.context.lower_node_id_with_owner(def_node_id, self.opaque_ty_id);
1623-
self.context.resolver.definitions().create_def_with_parent(
1647+
self.context.resolver.create_def(
16241648
self.parent,
16251649
def_node_id,
16261650
DefPathData::LifetimeNs(name.ident().name),
@@ -1870,7 +1894,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18701894

18711895
let opaque_ty_span = self.mark_span_with_reason(DesugaringKind::Async, span, None);
18721896

1873-
let opaque_ty_def_id = self.resolver.definitions().local_def_id(opaque_ty_node_id);
1897+
let opaque_ty_def_id = self.resolver.local_def_id(opaque_ty_node_id);
18741898

18751899
self.allocate_hir_id_counter(opaque_ty_node_id);
18761900

src/librustc_codegen_llvm/back/write.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use rustc_middle::bug;
2323
use rustc_middle::ty::TyCtxt;
2424
use rustc_session::config::{self, Lto, OutputType, Passes, SanitizerSet, SwitchWithOptPath};
2525
use rustc_session::Session;
26+
use rustc_span::symbol::sym;
2627
use rustc_span::InnerSpan;
2728
use rustc_target::spec::{CodeModel, RelocModel};
2829

@@ -140,7 +141,7 @@ pub fn target_machine_factory(
140141
// lower atomic operations to single-threaded operations.
141142
if singlethread
142143
&& sess.target.target.llvm_target.contains("wasm32")
143-
&& features.iter().any(|s| *s == "+atomics")
144+
&& sess.target_features.contains(&sym::atomics)
144145
{
145146
singlethread = false;
146147
}

src/librustc_codegen_llvm/intrinsic.rs

+14-21
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use rustc_middle::ty::layout::{FnAbiExt, HasTyCtxt};
2323
use rustc_middle::ty::{self, Ty};
2424
use rustc_middle::{bug, span_bug};
2525
use rustc_span::Span;
26-
use rustc_span::Symbol;
2726
use rustc_target::abi::{self, HasDataLayout, LayoutOf, Primitive};
2827
use rustc_target::spec::PanicStrategy;
2928

@@ -141,26 +140,20 @@ impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> {
141140
self.call(llfn, &[], None)
142141
}
143142
"count_code_region" => {
144-
if let ty::InstanceDef::Item(fn_def_id) = caller_instance.def {
145-
let caller_fn_path = tcx.def_path_str(fn_def_id);
146-
debug!(
147-
"count_code_region to llvm.instrprof.increment(fn_name={})",
148-
caller_fn_path
149-
);
150-
151-
// FIXME(richkadel): (1) Replace raw function name with mangled function name;
152-
// (2) Replace hardcoded `1234` in `hash` with a computed hash (as discussed in)
153-
// the MCP (compiler-team/issues/278); and replace the hardcoded `1` for
154-
// `num_counters` with the actual number of counters per function (when the
155-
// changes are made to inject more than one counter per function).
156-
let (fn_name, _len_val) = self.const_str(Symbol::intern(&caller_fn_path));
157-
let index = args[0].immediate();
158-
let hash = self.const_u64(1234);
159-
let num_counters = self.const_u32(1);
160-
self.instrprof_increment(fn_name, hash, num_counters, index)
161-
} else {
162-
bug!("intrinsic count_code_region: no src.instance");
163-
}
143+
// FIXME(richkadel): The current implementation assumes the MIR for the given
144+
// caller_instance represents a single function. Validate and/or correct if inlining
145+
// and/or monomorphization invalidates these assumptions.
146+
let coverage_data = tcx.coverage_data(caller_instance.def_id());
147+
let mangled_fn = tcx.symbol_name(caller_instance);
148+
let (mangled_fn_name, _len_val) = self.const_str(mangled_fn.name);
149+
let hash = self.const_u64(coverage_data.hash);
150+
let num_counters = self.const_u32(coverage_data.num_counters);
151+
let index = args[0].immediate();
152+
debug!(
153+
"count_code_region to LLVM intrinsic instrprof.increment(fn_name={}, hash={:?}, num_counters={:?}, index={:?})",
154+
mangled_fn.name, hash, num_counters, index
155+
);
156+
self.instrprof_increment(mangled_fn_name, hash, num_counters, index)
164157
}
165158
"va_start" => self.va_start(args[0].immediate()),
166159
"va_end" => self.va_end(args[0].immediate()),

src/librustc_codegen_ssa/back/linker.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::archive;
22
use super::command::Command;
33
use super::symbol_export;
4+
use rustc_span::symbol::sym;
45

56
use std::ffi::{OsStr, OsString};
67
use std::fs::{self, File};
@@ -1036,9 +1037,7 @@ impl<'a> WasmLd<'a> {
10361037
//
10371038
// * `--export=*tls*` - when `#[thread_local]` symbols are used these
10381039
// symbols are how the TLS segments are initialized and configured.
1039-
let atomics = sess.opts.cg.target_feature.contains("+atomics")
1040-
|| sess.target.target.options.features.contains("+atomics");
1041-
if atomics {
1040+
if sess.target_features.contains(&sym::atomics) {
10421041
cmd.arg("--shared-memory");
10431042
cmd.arg("--max-memory=1073741824");
10441043
cmd.arg("--import-memory");

src/librustc_driver/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ pub fn run_compiler(
307307
compiler.output_file().as_ref().map(|p| &**p),
308308
);
309309
}
310+
trace!("finished pretty-printing");
310311
return early_exit();
311312
}
312313

0 commit comments

Comments
 (0)