Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
266ede1
Isolate compiler queries inside the Queries type.
cjgillot Nov 24, 2019
5098ba6
Move linking ouside the interface queries.
cjgillot Nov 24, 2019
27513a2
Tidy.
cjgillot Nov 24, 2019
becfe5c
Fix test.
cjgillot Nov 24, 2019
cd5d0c7
Rename continue_panic_fmt to panic_handler, and make it the #[panic_h…
RalfJung Nov 25, 2019
08f779c
better comment and rename BoxMeUp::box_me_up to take_box
RalfJung Nov 25, 2019
18bb912
Remove wrong comment.
cjgillot Nov 25, 2019
ea1b803
Pass Queries by reference.
cjgillot Nov 25, 2019
7d01b6c
Simplify early exits.
cjgillot Nov 25, 2019
8ffc944
Don't move stuff out of Compiler::enter.
cjgillot Nov 25, 2019
9d5f721
Superfluous lifetime.
cjgillot Nov 25, 2019
3c48579
more panicking comments
RalfJung Nov 25, 2019
3a8e1b6
panic_handler -> begin_panic_handler (and more comments)
RalfJung Nov 26, 2019
3e96ca2
abort on BoxMeUp misuse
RalfJung Nov 26, 2019
61486f4
expand comment
RalfJung Nov 26, 2019
4a19ef9
explain why __rust_start_panic does not take a Box
RalfJung Nov 26, 2019
babe9fc
rename update_count_then_panic -> rust_panic_without_hook
RalfJung Nov 26, 2019
68b1ac9
Reduce righward drift.
cjgillot Nov 26, 2019
144d1c2
Review nits.
cjgillot Nov 26, 2019
58a9c73
Make the HIR map own the Definitions.
cjgillot Nov 26, 2019
b99513b
Have Queries own the GlobalCtxt.
cjgillot Nov 26, 2019
7b71e9a
Formatting.
cjgillot Nov 26, 2019
7e72b36
Move local Arena to Queries.
cjgillot Nov 26, 2019
1f850f6
Record temporary static references in generator witnesses
matthewjasper Nov 26, 2019
79e2324
Rename lifetimes.
cjgillot Nov 27, 2019
e5ed101
Rename BoxedGlobalCtxt.
cjgillot Nov 27, 2019
77a4c85
Simplify handling of AllArenas.
cjgillot Nov 27, 2019
e321ba9
Misc renames.
cjgillot Nov 27, 2019
1e12f39
Allocate HIR Forest on arena.
cjgillot Nov 27, 2019
38f9cd4
Clean up E0080 long explanation
GuillaumeGomez Nov 27, 2019
ce69610
Clean up E0081 long explanation
GuillaumeGomez Nov 27, 2019
7edaeba
Clean up E0091 long explanation
GuillaumeGomez Nov 27, 2019
d411dd2
Elaborate on std::ptr::{as_ref,as_mod} and clarify docs
CreepySkeleton Nov 13, 2019
f11dd32
Use intra-doc links
CreepySkeleton Nov 27, 2019
59d7391
Draw vertical lines in compiler error messages with multiline annotat…
TheSamsa Nov 20, 2019
df625bd
Add async fn test for #66695
matthewjasper Nov 27, 2019
9b78191
Clarifies how to tag users for assigning PRs
Nov 27, 2019
2a7dc5e
Update CONTRIBUTING.md
Dylan-DPC Nov 28, 2019
77f2ac4
Update CONTRIBUTING.md
Dylan-DPC Nov 28, 2019
85a468b
Clarify `{f32,f64}::EPSILON` docs
ohadravid Nov 28, 2019
3048d7e
do not consider memory allocated by caller_location leaked
RalfJung Nov 28, 2019
f07bd06
allow customising ty::TraitRef's printing behavior
basil-cow Nov 21, 2019
26e5fd4
Minor documentation fix
Mikotochan Nov 29, 2019
764ef8c
Rollup merge of #66379 - CreepySkeleton:patch-1, r=RalfJung
RalfJung Nov 29, 2019
7b75a36
Rollup merge of #66589 - TheSamsa:master, r=Dylan-DPC
RalfJung Nov 29, 2019
64efc45
Rollup merge of #66613 - Areredify:trait-ref-print, r=eddyb
RalfJung Nov 29, 2019
56203be
Rollup merge of #66766 - RalfJung:panic-comments, r=SimonSapin
RalfJung Nov 29, 2019
6ea1df2
Rollup merge of #66791 - cjgillot:arena, r=Mark-Simulacrum
RalfJung Nov 29, 2019
37c1f52
Rollup merge of #66793 - matthewjasper:record-static-refs, r=cramertj
RalfJung Nov 29, 2019
0f6e636
Rollup merge of #66808 - GuillaumeGomez:cleanup-err-code-3, r=Dylan-DPC
RalfJung Nov 29, 2019
5c90811
Rollup merge of #66826 - mlodato517:mlodato517-clarify-pr-message-ass…
RalfJung Nov 29, 2019
3959378
Rollup merge of #66837 - ohadravid:epsilon-doc, r=dtolnay
RalfJung Nov 29, 2019
0f6745d
Rollup merge of #66844 - RalfJung:caller-location-leak, r=oli-obk
RalfJung Nov 29, 2019
0b1b36c
Rollup merge of #66872 - Mikotochan:patch-1, r=jonas-schievink
RalfJung Nov 29, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Don't move stuff out of Compiler::enter.
  • Loading branch information
cjgillot committed Nov 25, 2019
commit 8ffc9444a3275079ce24883ec57b041485c358a3
206 changes: 102 additions & 104 deletions src/librustdoc/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,9 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
};

interface::run_compiler_in_existing_thread_pool(config, |compiler| {
let sess = compiler.session();
compiler.enter(|queries| {
let sess = compiler.session();

let (resolver, mut global_ctxt) = compiler.enter(|queries| {
// We need to hold on to the complete resolver, so we cause everything to be
// cloned for the analysis passes to use. Suboptimal, but necessary in the
// current architecture.
Expand Down Expand Up @@ -375,121 +375,119 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
sess.fatal("Compilation failed, aborting rustdoc");
}

let global_ctxt = abort_on_err(queries.global_ctxt(), sess).take();

(resolver, global_ctxt)
});

global_ctxt.enter(|tcx| {
tcx.analysis(LOCAL_CRATE).ok();

// Abort if there were any errors so far
sess.abort_if_errors();

let access_levels = tcx.privacy_access_levels(LOCAL_CRATE);
// Convert from a HirId set to a DefId set since we don't always have easy access
// to the map from defid -> hirid
let access_levels = AccessLevels {
map: access_levels.map.iter()
.map(|(&k, &v)| (tcx.hir().local_def_id(k), v))
.collect()
};

let mut renderinfo = RenderInfo::default();
renderinfo.access_levels = access_levels;

let mut ctxt = DocContext {
tcx,
resolver,
external_traits: Default::default(),
active_extern_traits: Default::default(),
renderinfo: RefCell::new(renderinfo),
ty_substs: Default::default(),
lt_substs: Default::default(),
ct_substs: Default::default(),
impl_trait_bounds: Default::default(),
fake_def_ids: Default::default(),
all_fake_def_ids: Default::default(),
generated_synthetics: Default::default(),
auto_traits: tcx.all_traits(LOCAL_CRATE).iter().cloned().filter(|trait_def_id| {
tcx.trait_is_auto(*trait_def_id)
}).collect(),
};
debug!("crate: {:?}", tcx.hir().krate());

let mut krate = clean::krate(&mut ctxt);

fn report_deprecated_attr(name: &str, diag: &errors::Handler) {
let mut msg = diag.struct_warn(&format!("the `#![doc({})]` attribute is \
considered deprecated", name));
msg.warn("please see https://github.com/rust-lang/rust/issues/44136");
let mut global_ctxt = abort_on_err(queries.global_ctxt(), sess).take();

global_ctxt.enter(|tcx| {
tcx.analysis(LOCAL_CRATE).ok();

// Abort if there were any errors so far
sess.abort_if_errors();

let access_levels = tcx.privacy_access_levels(LOCAL_CRATE);
// Convert from a HirId set to a DefId set since we don't always have easy access
// to the map from defid -> hirid
let access_levels = AccessLevels {
map: access_levels.map.iter()
.map(|(&k, &v)| (tcx.hir().local_def_id(k), v))
.collect()
};

let mut renderinfo = RenderInfo::default();
renderinfo.access_levels = access_levels;

let mut ctxt = DocContext {
tcx,
resolver,
external_traits: Default::default(),
active_extern_traits: Default::default(),
renderinfo: RefCell::new(renderinfo),
ty_substs: Default::default(),
lt_substs: Default::default(),
ct_substs: Default::default(),
impl_trait_bounds: Default::default(),
fake_def_ids: Default::default(),
all_fake_def_ids: Default::default(),
generated_synthetics: Default::default(),
auto_traits: tcx.all_traits(LOCAL_CRATE).iter().cloned().filter(|trait_def_id| {
tcx.trait_is_auto(*trait_def_id)
}).collect(),
};
debug!("crate: {:?}", tcx.hir().krate());

let mut krate = clean::krate(&mut ctxt);

fn report_deprecated_attr(name: &str, diag: &errors::Handler) {
let mut msg = diag.struct_warn(&format!("the `#![doc({})]` attribute is \
considered deprecated", name));
msg.warn("please see https://github.com/rust-lang/rust/issues/44136");

if name == "no_default_passes" {
msg.help("you may want to use `#![doc(document_private_items)]`");
}

if name == "no_default_passes" {
msg.help("you may want to use `#![doc(document_private_items)]`");
msg.emit();
}

msg.emit();
}

// Process all of the crate attributes, extracting plugin metadata along
// with the passes which we are supposed to run.
for attr in krate.module.as_ref().unwrap().attrs.lists(sym::doc) {
let diag = ctxt.sess().diagnostic();

let name = attr.name_or_empty();
if attr.is_word() {
if name == sym::no_default_passes {
report_deprecated_attr("no_default_passes", diag);
if default_passes == passes::DefaultPassOption::Default {
default_passes = passes::DefaultPassOption::None;
// Process all of the crate attributes, extracting plugin metadata along
// with the passes which we are supposed to run.
for attr in krate.module.as_ref().unwrap().attrs.lists(sym::doc) {
let diag = ctxt.sess().diagnostic();

let name = attr.name_or_empty();
if attr.is_word() {
if name == sym::no_default_passes {
report_deprecated_attr("no_default_passes", diag);
if default_passes == passes::DefaultPassOption::Default {
default_passes = passes::DefaultPassOption::None;
}
}
} else if let Some(value) = attr.value_str() {
let sink = match name {
sym::passes => {
report_deprecated_attr("passes = \"...\"", diag);
&mut manual_passes
},
sym::plugins => {
report_deprecated_attr("plugins = \"...\"", diag);
eprintln!("WARNING: `#![doc(plugins = \"...\")]` \
no longer functions; see CVE-2018-1000622");
continue
},
_ => continue,
};
for name in value.as_str().split_whitespace() {
sink.push(name.to_string());
}
}
} else if let Some(value) = attr.value_str() {
let sink = match name {
sym::passes => {
report_deprecated_attr("passes = \"...\"", diag);
&mut manual_passes
},
sym::plugins => {
report_deprecated_attr("plugins = \"...\"", diag);
eprintln!("WARNING: `#![doc(plugins = \"...\")]` no longer functions; \
see CVE-2018-1000622");
continue
},
_ => continue,
};
for name in value.as_str().split_whitespace() {
sink.push(name.to_string());
}
}

if attr.is_word() && name == sym::document_private_items {
if default_passes == passes::DefaultPassOption::Default {
default_passes = passes::DefaultPassOption::Private;
if attr.is_word() && name == sym::document_private_items {
if default_passes == passes::DefaultPassOption::Default {
default_passes = passes::DefaultPassOption::Private;
}
}
}
}

let passes = passes::defaults(default_passes).iter().chain(manual_passes.into_iter()
.flat_map(|name| {
if let Some(pass) = passes::find_pass(&name) {
Some(pass)
} else {
error!("unknown pass {}, skipping", name);
None
}
}));
let passes = passes::defaults(default_passes).iter().chain(manual_passes.into_iter()
.flat_map(|name| {
if let Some(pass) = passes::find_pass(&name) {
Some(pass)
} else {
error!("unknown pass {}, skipping", name);
None
}
}));

info!("Executing passes");
info!("Executing passes");

for pass in passes {
debug!("running pass {}", pass.name);
krate = (pass.pass)(krate, &ctxt);
}
for pass in passes {
debug!("running pass {}", pass.name);
krate = (pass.pass)(krate, &ctxt);
}

ctxt.sess().abort_if_errors();
ctxt.sess().abort_if_errors();

(krate, ctxt.renderinfo.into_inner(), render_options)
(krate, ctxt.renderinfo.into_inner(), render_options)
})
})
})
}
Expand Down
36 changes: 18 additions & 18 deletions src/librustdoc/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,13 @@ pub fn run(options: Options) -> i32 {
let display_warnings = options.display_warnings;

let tests = interface::run_compiler(config, |compiler| -> Result<_, ErrorReported> {
let (mut collector, mut global_ctxt) = compiler.enter(|queries| {
compiler.enter(|queries| {
let lower_to_hir = queries.lower_to_hir()?;

let mut opts = scrape_test_config(lower_to_hir.peek().0.borrow().krate());
opts.display_warnings |= options.display_warnings;
let enable_per_target_ignores = options.enable_per_target_ignores;
let collector = Collector::new(
let mut collector = Collector::new(
queries.crate_name()?.peek().to_string(),
options,
false,
Expand All @@ -102,24 +102,24 @@ pub fn run(options: Options) -> i32 {
enable_per_target_ignores,
);

let global_ctxt = queries.global_ctxt()?.take();
Ok((collector, global_ctxt))
})?;
global_ctxt.enter(|tcx| {
let krate = tcx.hir().krate();
let mut hir_collector = HirCollector {
sess: compiler.session(),
collector: &mut collector,
map: tcx.hir(),
codes: ErrorCodes::from(compiler.session().opts
.unstable_features.is_nightly_build()),
};
hir_collector.visit_testable("".to_string(), &krate.attrs, |this| {
intravisit::walk_crate(this, krate);
let mut global_ctxt = queries.global_ctxt()?.take();

global_ctxt.enter(|tcx| {
let krate = tcx.hir().krate();
let mut hir_collector = HirCollector {
sess: compiler.session(),
collector: &mut collector,
map: tcx.hir(),
codes: ErrorCodes::from(compiler.session().opts
.unstable_features.is_nightly_build()),
};
hir_collector.visit_testable("".to_string(), &krate.attrs, |this| {
intravisit::walk_crate(this, krate);
});
});
});

Ok(collector.tests)
Ok(collector.tests)
})
}).expect("compiler aborted in rustdoc!");

test_args.insert(0, "rustdoctest".to_string());
Expand Down