]> git.proxmox.com Git - rustc.git/blob - tests/run-make-fulldeps/issue-19371/foo.rs
New upstream version 1.74.1+dfsg1
[rustc.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, OutFileName, 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(OutFileName::Real(output)),
54 output_dir: None,
55 ice_file: None,
56 file_loader: None,
57 locale_resources: &[],
58 lint_caps: Default::default(),
59 parse_sess_created: None,
60 register_lints: None,
61 override_queries: None,
62 make_codegen_backend: None,
63 registry: rustc_driver::diagnostics_registry(),
64 expanded_args: Default::default(),
65 };
66
67 interface::run_compiler(config, |compiler| {
68 let linker = compiler.enter(|queries| {
69 queries.global_ctxt()?.enter(|tcx| tcx.analysis(()))?;
70 let ongoing_codegen = queries.ongoing_codegen()?;
71 queries.linker(ongoing_codegen)
72 });
73 linker.unwrap().link().unwrap();
74 });
75 }