]> git.lizzy.rs Git - rust.git/blob - tests/run-make-fulldeps/issue-19371/foo.rs
Rollup merge of #106811 - khuey:dwp_extension, r=davidtwco
[rust.git] / tests / run-make-fulldeps / issue-19371 / foo.rs
1 #![feature(rustc_private)]
2
3 extern crate rustc_driver;
4 extern crate rustc_interface;
5 extern crate rustc_session;
6 extern crate rustc_span;
7
8 use rustc_interface::interface;
9 use rustc_session::config::{Input, Options, OutputType, OutputTypes};
10 use rustc_span::source_map::FileName;
11
12 use std::path::PathBuf;
13
14 fn main() {
15     let src = r#"
16     fn main() {}
17     "#;
18
19     let args: Vec<String> = std::env::args().collect();
20
21     if args.len() < 4 {
22         panic!("expected rustc path");
23     }
24
25     let tmpdir = PathBuf::from(&args[1]);
26
27     let mut sysroot = PathBuf::from(&args[3]);
28     sysroot.pop();
29     sysroot.pop();
30
31     compile(src.to_string(), tmpdir.join("out"), sysroot.clone());
32
33     compile(src.to_string(), tmpdir.join("out"), sysroot.clone());
34 }
35
36 fn compile(code: String, output: PathBuf, sysroot: PathBuf) {
37     let mut opts = Options::default();
38     opts.output_types = OutputTypes::new(&[(OutputType::Exe, None)]);
39     opts.maybe_sysroot = Some(sysroot);
40
41     if let Ok(linker) = std::env::var("RUSTC_LINKER") {
42         opts.cg.linker = Some(linker.into());
43     }
44
45     let name = FileName::anon_source_code(&code);
46     let input = Input::Str { name, input: code };
47
48     let config = interface::Config {
49         opts,
50         crate_cfg: Default::default(),
51         crate_check_cfg: Default::default(),
52         input,
53         output_file: Some(output),
54         output_dir: None,
55         file_loader: None,
56         lint_caps: Default::default(),
57         parse_sess_created: None,
58         register_lints: None,
59         override_queries: None,
60         make_codegen_backend: None,
61         registry: rustc_driver::diagnostics_registry(),
62     };
63
64     interface::run_compiler(config, |compiler| {
65         // This runs all the passes prior to linking, too.
66         let linker = compiler.enter(|queries| queries.linker());
67         if let Ok(linker) = linker {
68             linker.link();
69         }
70     });
71 }