Skip to content

Commit 41ea14d

Browse files
authored
Merge pull request #2309 from rust-lang-nursery/rustc-monitor
Use rustc_driver::run
2 parents a2fdfc0 + 4f21b5b commit 41ea14d

File tree

168 files changed

+375
-44
lines changed

Some content is hidden

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

168 files changed

+375
-44
lines changed

src/driver.rs

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ extern crate rustc_plugin;
1212
extern crate syntax;
1313

1414
use rustc_driver::{driver, Compilation, CompilerCalls, RustcDefaultCalls};
15-
use rustc::session::{config, CompileIncomplete, Session};
15+
use rustc::session::{config, Session};
1616
use rustc::session::config::{ErrorOutputType, Input};
1717
use std::path::PathBuf;
1818
use std::process::Command;
@@ -153,47 +153,44 @@ pub fn main() {
153153
})
154154
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
155155

156-
rustc_driver::in_rustc_thread(|| {
157-
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
158-
// We're invoking the compiler programmatically, so we ignore this/
159-
let mut orig_args: Vec<String> = env::args().collect();
160-
if orig_args.len() <= 1 {
161-
std::process::exit(1);
162-
}
163-
if orig_args[1] == "rustc" {
164-
// we still want to be able to invoke it normally though
165-
orig_args.remove(1);
166-
}
167-
// this conditional check for the --sysroot flag is there so users can call
168-
// `clippy_driver` directly
169-
// without having to pass --sysroot or anything
170-
let mut args: Vec<String> = if orig_args.iter().any(|s| s == "--sysroot") {
171-
orig_args.clone()
172-
} else {
173-
orig_args
174-
.clone()
175-
.into_iter()
176-
.chain(Some("--sysroot".to_owned()))
177-
.chain(Some(sys_root))
178-
.collect()
179-
};
180-
181-
// this check ensures that dependencies are built but not linted and the final
182-
// crate is
183-
// linted but not built
184-
let clippy_enabled = env::var("CLIPPY_TESTS")
185-
.ok()
186-
.map_or(false, |val| val == "true")
187-
|| orig_args.iter().any(|s| s == "--emit=metadata");
188-
189-
if clippy_enabled {
190-
args.extend_from_slice(&["--cfg".to_owned(), r#"feature="cargo-clippy""#.to_owned()]);
191-
}
156+
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
157+
// We're invoking the compiler programmatically, so we ignore this/
158+
let mut orig_args: Vec<String> = env::args().collect();
159+
if orig_args.len() <= 1 {
160+
std::process::exit(1);
161+
}
162+
if orig_args[1] == "rustc" {
163+
// we still want to be able to invoke it normally though
164+
orig_args.remove(1);
165+
}
166+
// this conditional check for the --sysroot flag is there so users can call
167+
// `clippy_driver` directly
168+
// without having to pass --sysroot or anything
169+
let mut args: Vec<String> = if orig_args.iter().any(|s| s == "--sysroot") {
170+
orig_args.clone()
171+
} else {
172+
orig_args
173+
.clone()
174+
.into_iter()
175+
.chain(Some("--sysroot".to_owned()))
176+
.chain(Some(sys_root))
177+
.collect()
178+
};
179+
180+
// this check ensures that dependencies are built but not linted and the final
181+
// crate is
182+
// linted but not built
183+
let clippy_enabled = env::var("CLIPPY_TESTS")
184+
.ok()
185+
.map_or(false, |val| val == "true")
186+
|| orig_args.iter().any(|s| s == "--emit=metadata");
187+
188+
if clippy_enabled {
189+
args.extend_from_slice(&["--cfg".to_owned(), r#"feature="cargo-clippy""#.to_owned()]);
190+
}
192191

193-
let mut ccc = ClippyCompilerCalls::new(clippy_enabled);
194-
let (result, _) = rustc_driver::run_compiler(&args, &mut ccc, None, None);
195-
if let Err(CompileIncomplete::Errored(_)) = result {
196-
std::process::exit(1);
197-
}
198-
}).expect("rustc_thread failed");
192+
let mut ccc = ClippyCompilerCalls::new(clippy_enabled);
193+
rustc_driver::run(move || {
194+
rustc_driver::run_compiler(&args, &mut ccc, None, None)
195+
});
199196
}

tests/compile-test.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ fn config(dir: &'static str, mode: &'static str) -> compiletest::Config {
4646
config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings", host_libs().display()));
4747

4848
config.mode = cfg_mode;
49-
config.build_base = {
49+
config.build_base = if rustc_test_suite().is_some() {
50+
PathBuf::from("/tmp/clippy_test_build_base")
51+
} else {
5052
let mut path = std::env::current_dir().unwrap();
5153
path.push("target/debug/test_build_base");
5254
path

tests/ui/absurd-extreme-comparisons.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,5 @@ error: <-comparison of unit values detected. This will always be false
143143
|
144144
= note: `-D unit-cmp` implied by `-D warnings`
145145

146+
error: aborting due to 18 previous errors
147+

tests/ui/approx_const.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,5 @@ error: approximate value of `f{32, 64}::consts::SQRT_2` found. Consider using it
114114
55 | let my_sq2 = 1.4142;
115115
| ^^^^^^
116116

117+
error: aborting due to 19 previous errors
118+

tests/ui/arithmetic.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,5 @@ error: floating-point arithmetic detected
6969
29 | -f;
7070
| ^^
7171

72+
error: aborting due to 11 previous errors
73+

tests/ui/array_indexing.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,5 @@ error: range is out of bounds
116116
44 | &empty[..4];
117117
| ^^^^^^^^^^
118118

119+
error: aborting due to 19 previous errors
120+

tests/ui/assign_ops.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,5 @@ error: manual implementation of an assign operation
134134
40 | s = s + "bla";
135135
| ^^^^^^^^^^^^^ help: replace it with: `s += "bla"`
136136

137+
error: aborting due to 22 previous errors
138+

tests/ui/assign_ops2.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,5 @@ error: variable appears on both sides of an assignment operation
4848
15 | a &= a & 1;
4949
| ^^^^^^^^^^ help: replace it with: `a &= 1`
5050

51+
error: aborting due to 8 previous errors
52+

tests/ui/attrs.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ error: the since field must contain a semver-compliant version
2020
30 | #[deprecated(since = "1")]
2121
| ^^^^^^^^^^^
2222

23+
error: aborting due to 3 previous errors
24+

tests/ui/bit_masks.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,5 @@ error: ineffective bit mask: `x | 1` compared to `8`, is the same as x compared
106106
55 | x | 1 >= 8;
107107
| ^^^^^^^^^^
108108

109+
error: aborting due to 17 previous errors
110+

0 commit comments

Comments
 (0)