@@ -0,0 +1,41 @@ |
|
|
|
1 |
+//@ only-linux |
|
2 |
+//@ ignore-cross-compile |
|
3 |
+ |
|
4 |
+use run_make_support::llvm::llvm_bin_dir; |
|
5 |
+use run_make_support::{cmd, env_var, llvm_filecheck, read_dir, rustc, source_root}; |
|
6 |
+ |
|
7 |
+use std::ffi::OsStr; |
|
8 |
+ |
|
9 |
+fn main() { |
|
10 |
+// `-Ccodegen-units=16 -Copt-level=2` is used here to trigger thin LTO |
|
11 |
+// across codegen units to test deduplication of the named metadata |
|
12 |
+// (see `LLVMRustPrepareThinLTOImport` for details). |
|
13 |
+rustc() |
|
14 |
+.emit("link,obj") |
|
15 |
+.arg("-") |
|
16 |
+.arg("-Csave-temps") |
|
17 |
+.codegen_units(16) |
|
18 |
+.opt_level("2") |
|
19 |
+.target(&env_var("TARGET")) |
|
20 |
+.stdin("fn main(){}") |
|
21 |
+.run(); |
|
22 |
+ |
|
23 |
+// `llvm-dis` is used here since `--emit=llvm-ir` does not emit LLVM IR |
|
24 |
+// for temporary outputs. |
|
25 |
+let mut files = Vec::new(); |
|
26 |
+read_dir(".", |path |
|
27 |
+if path.is_file() && path.extension().is_some_and(|ext |
|
28 |
+ files.push(path.to_path_buf()); |
|
29 |
+} |
|
30 |
+}); |
|
31 |
+cmd(llvm_bin_dir().join("llvm-dis")).args(&files).run(); |
|
32 |
+ |
|
33 |
+// Check LLVM IR files (including temporary outputs) have `!llvm.ident` |
|
34 |
+// named metadata, reusing the related codegen test. |
|
35 |
+let llvm_ident_path = source_root().join("tests/codegen/llvm-ident.rs"); |
|
36 |
+read_dir(".", |path |
|
37 |
+if path.is_file() && path.extension().is_some_and(|ext |
|
38 |
+llvm_filecheck().input_file(path).arg(&llvm_ident_path).run(); |
|
39 |
+} |
|
40 |
+}); |
|
41 |
+} |