// Issue #66530: We would ICE if someone compiled with `-o /dev/null`, // because we would try to generate auxiliary files in `/dev/` (which // at least the OS X file system rejects). // // An attempt to `-Ztemps-dir` into a directory we cannot write into should // indeed be an error; but not an ICE. // // However, some folks run tests as root, which can write `/dev/` and end // up clobbering `/dev/null`. Instead we'll use an inaccessible path, which // also used to ICE, but even root can't magically write there. // // Note that `-Ztemps-dir` uses `create_dir_all` so it is not sufficient to // use a directory with non-existing parent like `/does-not-exist/output`. // See https://github.com/rust-lang/rust/issues/66530 //@ ignore-riscv64 // FIXME: The riscv64gc-gnu build container runs as root, and can always write // into `inaccessible/tmp`. Ideally, the riscv64-gnu docker container // would use a non-root user, but this leads to issues with // `mkfs.ext4 -d`, as well as mounting a loop device for the rootfs. //@ ignore-arm // Reason: linker error on `armhf-gnu` //@ ignore-windows // Reason: `set_readonly` has no effect on directories // and does not prevent modification. use run_make_support::{rfs, rustc, test_while_readonly}; fn main() { // Create an inaccessible directory. rfs::create_dir("inaccessible"); test_while_readonly("inaccessible", || { // Run rustc with `-Z temps-dir` set to a directory *inside* the inaccessible one, // so that it can't create `tmp`. rustc() .input("program.rs") .arg("-Ztemps-dir=inaccessible/tmp") .run_fail() .assert_stderr_contains( "failed to find or create the directory specified by `--temps-dir`", ); }); }