| // This is a codegen test which checks that when code is compiled with panic=immediate-abort, |
| // we get a `tail call void @llvm.trap()` in user code instead of a call into the standard |
| // library's panic formatting code (such as panic_fmt) or one of the numerous panic outlining shims |
| // (such as slice_index_fail). |
| |
| #![deny(warnings)] |
| |
| use run_make_support::{cargo, llvm_filecheck, path, rfs, target}; |
| |
| fn main() { |
| let target_dir = path("target"); |
| |
| cargo() |
| .args(&[ |
| "build", |
| "--release", |
| "--lib", |
| "--manifest-path", |
| "Cargo.toml", |
| "-Zbuild-std=core", |
| "--target", |
| &target(), |
| ]) |
| .env("RUSTFLAGS", "-Zunstable-options -Cpanic=immediate-abort") |
| .env("CARGO_TARGET_DIR", &target_dir) |
| .env("RUSTC_BOOTSTRAP", "1") |
| // Visual Studio 2022 requires that the LIB env var be set so it can |
| // find the Windows SDK. |
| .env("LIB", std::env::var("LIB").unwrap_or_default()) |
| .run(); |
| |
| let out_dir = target_dir.join(target()).join("release").join("deps"); |
| let ir_file = rfs::read_dir(out_dir) |
| .find_map(|e| { |
| let path = e.unwrap().path(); |
| let file_name = path.file_name().unwrap().to_str().unwrap(); |
| if file_name.starts_with("panic_scenarios") && file_name.ends_with(".ll") { |
| Some(path) |
| } else { |
| None |
| } |
| }) |
| .unwrap(); |
| |
| llvm_filecheck().patterns("lib.rs").input_file(ir_file).run(); |
| } |