Skip to content

Commit

Permalink
Auto merge of #33450 - SiegeLord:dep_info_no_analysis, r=nrc
Browse files Browse the repository at this point in the history
Make --emit dep-info work correctly with -Z no-analysis again.

Previously, it would attempt to resolve some external crates that weren't necessary for dep-info output.

Fixes #33231.
  • Loading branch information
bors committed May 13, 2016
2 parents 4ec5ce5 + 215b260 commit 01ed700
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 45 deletions.
71 changes: 50 additions & 21 deletions src/librustc_driver/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,19 @@ pub fn compile_input(sess: &Session,
&id),
Ok(()));

write_out_deps(sess, &outputs, &id);

controller_entry_point!(after_write_deps,
sess,
CompileState::state_after_write_deps(input,
sess,
outdir,
output,
&cstore,
&expanded_crate,
&id),
Ok(()));

let expanded_crate = assign_node_ids(sess, expanded_crate);
let dep_graph = DepGraph::new(sess.opts.build_dep_graph());

Expand Down Expand Up @@ -173,25 +186,22 @@ pub fn compile_input(sess: &Session,
"indexing hir",
move || hir_map::map_crate(hir_forest, defs));


write_out_deps(sess, &outputs, &id);

{
let _ignore = hir_map.dep_graph.in_ignore();
controller_entry_point!(after_write_deps,
controller_entry_point!(after_hir_lowering,
sess,
CompileState::state_after_write_deps(input,
sess,
outdir,
output,
&arenas,
&cstore,
&hir_map,
&analysis,
&resolutions,
&expanded_crate,
&hir_map.krate(),
&id),
CompileState::state_after_hir_lowering(input,
sess,
outdir,
output,
&arenas,
&cstore,
&hir_map,
&analysis,
&resolutions,
&expanded_crate,
&hir_map.krate(),
&id),
Ok(()));
}

Expand Down Expand Up @@ -311,6 +321,7 @@ pub struct CompileController<'a> {
pub after_parse: PhaseController<'a>,
pub after_expand: PhaseController<'a>,
pub after_write_deps: PhaseController<'a>,
pub after_hir_lowering: PhaseController<'a>,
pub after_analysis: PhaseController<'a>,
pub after_llvm: PhaseController<'a>,

Expand All @@ -323,6 +334,7 @@ impl<'a> CompileController<'a> {
after_parse: PhaseController::basic(),
after_expand: PhaseController::basic(),
after_write_deps: PhaseController::basic(),
after_hir_lowering: PhaseController::basic(),
after_analysis: PhaseController::basic(),
after_llvm: PhaseController::basic(),
make_glob_map: resolve::MakeGlobMap::No,
Expand Down Expand Up @@ -433,15 +445,32 @@ impl<'a, 'b, 'ast, 'tcx> CompileState<'a, 'b, 'ast, 'tcx> {
session: &'ast Session,
out_dir: &'a Option<PathBuf>,
out_file: &'a Option<PathBuf>,
arenas: &'ast ty::CtxtArenas<'ast>,
cstore: &'a CStore,
hir_map: &'a hir_map::Map<'ast>,
analysis: &'a ty::CrateAnalysis,
resolutions: &'a Resolutions,
krate: &'a ast::Crate,
hir_crate: &'a hir::Crate,
crate_name: &'a str)
-> CompileState<'a, 'b, 'ast, 'tcx> {
CompileState {
crate_name: Some(crate_name),
cstore: Some(cstore),
expanded_crate: Some(krate),
out_file: out_file.as_ref().map(|s| &**s),
..CompileState::empty(input, session, out_dir)
}
}

fn state_after_hir_lowering(input: &'a Input,
session: &'ast Session,
out_dir: &'a Option<PathBuf>,
out_file: &'a Option<PathBuf>,
arenas: &'ast ty::CtxtArenas<'ast>,
cstore: &'a CStore,
hir_map: &'a hir_map::Map<'ast>,
analysis: &'a ty::CrateAnalysis,
resolutions: &'a Resolutions,
krate: &'a ast::Crate,
hir_crate: &'a hir::Crate,
crate_name: &'a str)
-> CompileState<'a, 'b, 'ast, 'tcx> {
CompileState {
crate_name: Some(crate_name),
arenas: Some(arenas),
Expand Down
26 changes: 13 additions & 13 deletions src/librustc_driver/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -461,23 +461,23 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls {

if let Some((ppm, opt_uii)) = parse_pretty(sess, matches) {
if ppm.needs_ast_map(&opt_uii) {
control.after_write_deps.stop = Compilation::Stop;
control.after_hir_lowering.stop = Compilation::Stop;

control.after_parse.callback = box move |state| {
state.krate = Some(pretty::fold_crate(state.krate.take().unwrap(), ppm));
};
control.after_write_deps.callback = box move |state| {
pretty::print_after_write_deps(state.session,
state.ast_map.unwrap(),
state.analysis.unwrap(),
state.resolutions.unwrap(),
state.input,
&state.expanded_crate.take().unwrap(),
state.crate_name.unwrap(),
ppm,
state.arenas.unwrap(),
opt_uii.clone(),
state.out_file);
control.after_hir_lowering.callback = box move |state| {
pretty::print_after_hir_lowering(state.session,
state.ast_map.unwrap(),
state.analysis.unwrap(),
state.resolutions.unwrap(),
state.input,
&state.expanded_crate.take().unwrap(),
state.crate_name.unwrap(),
ppm,
state.arenas.unwrap(),
opt_uii.clone(),
state.out_file);
};
} else {
control.after_parse.stop = Compilation::Stop;
Expand Down
22 changes: 11 additions & 11 deletions src/librustc_driver/pretty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -812,17 +812,17 @@ pub fn print_after_parsing(sess: &Session,
write_output(out, ofile);
}

pub fn print_after_write_deps<'tcx, 'a: 'tcx>(sess: &'a Session,
ast_map: &hir_map::Map<'tcx>,
analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
input: &Input,
krate: &ast::Crate,
crate_name: &str,
ppm: PpMode,
arenas: &'tcx ty::CtxtArenas<'tcx>,
opt_uii: Option<UserIdentifiedItem>,
ofile: Option<&Path>) {
pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session,
ast_map: &hir_map::Map<'tcx>,
analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
input: &Input,
krate: &ast::Crate,
crate_name: &str,
ppm: PpMode,
arenas: &'tcx ty::CtxtArenas<'tcx>,
opt_uii: Option<UserIdentifiedItem>,
ofile: Option<&Path>) {
let dep_graph = DepGraph::new(false);
let _ignore = dep_graph.in_ignore();

Expand Down
6 changes: 6 additions & 0 deletions src/test/run-make/dep-info-no-analysis/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-include ../tools.mk

all:
$(RUSTC) -o $(TMPDIR)/input.dd -Z no-analysis --emit dep-info input.rs
sed -i'.bak' 's/^.*input.dd/input.dd/g' $(TMPDIR)/input.dd
diff -u $(TMPDIR)/input.dd input.dd
3 changes: 3 additions & 0 deletions src/test/run-make/dep-info-no-analysis/input.dd
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
input.dd: input.rs

input.rs:
14 changes: 14 additions & 0 deletions src/test/run-make/dep-info-no-analysis/input.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// Tests that dep info can be emitted without resolving external crates.
extern crate not_there;

fn main() {}

0 comments on commit 01ed700

Please sign in to comment.