Skip to content

Commit da58c05

Browse files
committed
Auto merge of #143390 - GuillaumeGomez:rollup-2avj41s, r=GuillaumeGomez
Rollup of 5 pull requests Successful merges: - #141831 (rustdoc: fix attrs of locally reexported foreign items) - #143364 (don't include `.md` in title) - #143369 (Various refactorings to the metadata loader) - #143379 (Post {beta,stable}-accepted notifications to compiler/bootstrap backport zulip channels on `{beta,stable}-accepted` label application) - #143384 (Update browser-ui-test version to `0.21.1`) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 48aee7e + 9092fbb commit da58c05

File tree

9 files changed

+279
-130
lines changed

9 files changed

+279
-130
lines changed

compiler/rustc_metadata/src/creader.rs

Lines changed: 62 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,19 @@ use rustc_middle::ty::data_structures::IndexSet;
2424
use rustc_middle::ty::{TyCtxt, TyCtxtFeed};
2525
use rustc_proc_macro::bridge::client::ProcMacro;
2626
use rustc_session::config::{
27-
self, CrateType, ExtendedTargetModifierInfo, ExternLocation, OptionsTargetModifiers,
28-
TargetModifier,
27+
CrateType, ExtendedTargetModifierInfo, ExternLocation, OptionsTargetModifiers, TargetModifier,
2928
};
3029
use rustc_session::cstore::{CrateDepKind, CrateSource, ExternCrate, ExternCrateSource};
3130
use rustc_session::lint::{self, BuiltinLintDiag};
3231
use rustc_session::output::validate_crate_name;
3332
use rustc_session::search_paths::PathKind;
3433
use rustc_span::edition::Edition;
3534
use rustc_span::{DUMMY_SP, Ident, Span, Symbol, sym};
36-
use rustc_target::spec::{PanicStrategy, Target, TargetTuple};
35+
use rustc_target::spec::{PanicStrategy, Target};
3736
use tracing::{debug, info, trace};
3837

3938
use crate::errors;
40-
use crate::locator::{CrateError, CrateLocator, CratePaths};
39+
use crate::locator::{CrateError, CrateLocator, CratePaths, CrateRejections};
4140
use crate::rmeta::{
4241
CrateDep, CrateMetadata, CrateNumMap, CrateRoot, MetadataBlob, TargetModifiers,
4342
};
@@ -684,61 +683,67 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
684683
fn load_proc_macro<'b>(
685684
&self,
686685
locator: &mut CrateLocator<'b>,
686+
crate_rejections: &mut CrateRejections,
687687
path_kind: PathKind,
688688
host_hash: Option<Svh>,
689689
) -> Result<Option<(LoadResult, Option<Library>)>, CrateError>
690690
where
691691
'a: 'b,
692692
{
693-
// Use a new crate locator so trying to load a proc macro doesn't affect the error
694-
// message we emit
695-
let mut proc_macro_locator = locator.clone();
696-
697-
// Try to load a proc macro
698-
proc_macro_locator.is_proc_macro = true;
699-
700-
// Load the proc macro crate for the target
701-
let (locator, target_result) = if self.sess.opts.unstable_opts.dual_proc_macros {
702-
proc_macro_locator.reset();
703-
let result = match self.load(&mut proc_macro_locator)? {
704-
Some(LoadResult::Previous(cnum)) => {
705-
return Ok(Some((LoadResult::Previous(cnum), None)));
706-
}
707-
Some(LoadResult::Loaded(library)) => Some(LoadResult::Loaded(library)),
708-
None => return Ok(None),
709-
};
710-
locator.hash = host_hash;
711-
// Use the locator when looking for the host proc macro crate, as that is required
712-
// so we want it to affect the error message
713-
(locator, result)
714-
} else {
715-
(&mut proc_macro_locator, None)
716-
};
693+
if self.sess.opts.unstable_opts.dual_proc_macros {
694+
// Use a new crate locator and crate rejections so trying to load a proc macro doesn't
695+
// affect the error message we emit
696+
let mut proc_macro_locator = locator.clone();
697+
698+
// Try to load a proc macro
699+
proc_macro_locator.for_target_proc_macro(self.sess, path_kind);
700+
701+
// Load the proc macro crate for the target
702+
let target_result =
703+
match self.load(&mut proc_macro_locator, &mut CrateRejections::default())? {
704+
Some(LoadResult::Previous(cnum)) => {
705+
return Ok(Some((LoadResult::Previous(cnum), None)));
706+
}
707+
Some(LoadResult::Loaded(library)) => Some(LoadResult::Loaded(library)),
708+
None => return Ok(None),
709+
};
717710

718-
// Load the proc macro crate for the host
711+
// Use the existing crate_rejections as we want the error message to be affected by
712+
// loading the host proc macro.
713+
*crate_rejections = CrateRejections::default();
719714

720-
locator.reset();
721-
locator.is_proc_macro = true;
722-
locator.target = &self.sess.host;
723-
locator.tuple = TargetTuple::from_tuple(config::host_tuple());
724-
locator.filesearch = self.sess.host_filesearch();
725-
locator.path_kind = path_kind;
715+
// Load the proc macro crate for the host
716+
locator.for_proc_macro(self.sess, path_kind);
726717

727-
let Some(host_result) = self.load(locator)? else {
728-
return Ok(None);
729-
};
718+
locator.hash = host_hash;
719+
720+
let Some(host_result) = self.load(locator, crate_rejections)? else {
721+
return Ok(None);
722+
};
730723

731-
Ok(Some(if self.sess.opts.unstable_opts.dual_proc_macros {
732724
let host_result = match host_result {
733725
LoadResult::Previous(..) => {
734726
panic!("host and target proc macros must be loaded in lock-step")
735727
}
736728
LoadResult::Loaded(library) => library,
737729
};
738-
(target_result.unwrap(), Some(host_result))
730+
Ok(Some((target_result.unwrap(), Some(host_result))))
739731
} else {
740-
(host_result, None)
741-
}))
732+
// Use a new crate locator and crate rejections so trying to load a proc macro doesn't
733+
// affect the error message we emit
734+
let mut proc_macro_locator = locator.clone();
735+
736+
// Load the proc macro crate for the host
737+
proc_macro_locator.for_proc_macro(self.sess, path_kind);
738+
739+
let Some(host_result) =
740+
self.load(&mut proc_macro_locator, &mut CrateRejections::default())?
741+
else {
742+
return Ok(None);
743+
};
744+
745+
Ok(Some((host_result, None)))
746+
}
742747
}
743748

744749
fn resolve_crate(
@@ -799,15 +804,21 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
799804
extra_filename,
800805
path_kind,
801806
);
807+
let mut crate_rejections = CrateRejections::default();
802808

803-
match self.load(&mut locator)? {
809+
match self.load(&mut locator, &mut crate_rejections)? {
804810
Some(res) => (res, None),
805811
None => {
806812
info!("falling back to loading proc_macro");
807813
dep_kind = CrateDepKind::MacrosOnly;
808-
match self.load_proc_macro(&mut locator, path_kind, host_hash)? {
814+
match self.load_proc_macro(
815+
&mut locator,
816+
&mut crate_rejections,
817+
path_kind,
818+
host_hash,
819+
)? {
809820
Some(res) => res,
810-
None => return Err(locator.into_error(dep_root.cloned())),
821+
None => return Err(locator.into_error(crate_rejections, dep_root.cloned())),
811822
}
812823
}
813824
}
@@ -837,8 +848,12 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
837848
}
838849
}
839850

840-
fn load(&self, locator: &mut CrateLocator<'_>) -> Result<Option<LoadResult>, CrateError> {
841-
let Some(library) = locator.maybe_load_library_crate()? else {
851+
fn load(
852+
&self,
853+
locator: &CrateLocator<'_>,
854+
crate_rejections: &mut CrateRejections,
855+
) -> Result<Option<LoadResult>, CrateError> {
856+
let Some(library) = locator.maybe_load_library_crate(crate_rejections)? else {
842857
return Ok(None);
843858
};
844859

0 commit comments

Comments
 (0)