// The generated test harness code contains spans with a dummy location,
// but a non-dummy SyntaxContext. Previously, the incremental cache was encoding
// these spans as a full span (with a source file index), instead of skipping
// the encoding of the location information. If the file gest moved, the hash
// of the span will be unchanged (since it has a dummy location), so the incr
// cache would end up try to load a non-existent file using the previously
// enccoded source file id.
// This test reproduces the steps that used to trigger this bug, and checks
// for successful compilation.
// See https://github.com/rust-lang/rust/issues/83112

//@ ignore-none
// Reason: no-std is not supported
//@ ignore-nvptx64-nvidia-cuda
// FIXME: can't find crate for 'std'

use run_make_support::{rfs, rustc};

fn main() {
    rfs::create_dir("incr");
    rfs::create_dir("src");
    rfs::create_dir("src/mydir");
    rfs::copy("main.rs", "src/main.rs");
    rustc().input("src/main.rs").incremental("incr").arg("--test").run();
    rfs::rename("src/main.rs", "src/mydir/main.rs");
    rustc().input("src/mydir/main.rs").incremental("incr").arg("--test").run();
}
