| //! Check the compiler's behavior when the perma-unstable env var `RUSTC_BOOTSTRAP` is set in the | |
| //! environment in relation to feature stability and which channel rustc considers itself to be. | |
| //! | |
| //! `RUSTC_BOOTSTRAP` accepts: | |
| //! | |
| //! - `1`: cheat, allow usage of unstable features even if rustc thinks it is a stable compiler. | |
| //! - `x,y,z`: comma-delimited list of crates. | |
| //! - `-1`: force rustc to think it is a stable compiler. | |
| // ignore-tidy-linelength | |
| //@ revisions: default_nightly cheat cheat_single_crate cheat_multi_crate force_stable invalid_zero invalid_junk | |
| //@ only-nightly | |
| //@[default_nightly] unset-rustc-env:RUSTC_BOOTSTRAP | |
| //@[default_nightly] check-pass | |
| // For a nightly compiler, this is same as `default_nightly` as if `RUSTC_BOOTSTRAP` was unset. | |
| //@[invalid_zero] rustc-env:RUSTC_BOOTSTRAP=0 | |
| //@[invalid_zero] check-pass | |
| // Invalid values are silently discarded, same as `default_nightly`, i.e. as if `RUSTC_BOOTSTRAP` | |
| // was unset. | |
| //@[invalid_junk] rustc-env:RUSTC_BOOTSTRAP=* | |
| //@[invalid_junk] check-pass | |
| //@[cheat] rustc-env:RUSTC_BOOTSTRAP=1 | |
| //@[cheat] check-pass | |
| //@[cheat_single_crate] rustc-env:RUSTC_BOOTSTRAP=x | |
| //@[cheat_single_crate] check-pass | |
| //@[cheat_multi_crate] rustc-env:RUSTC_BOOTSTRAP=x,y,z | |
| //@[cheat_multi_crate] check-pass | |
| // Note: compiletest passes some `-Z` flags to the compiler for ui testing purposes, so here we | |
| // instead abuse the fact that `-Z unstable-options` is also part of rustc's stability story and is | |
| // also affected by `RUSTC_BOOTSTRAP`. | |
| //@[force_stable] rustc-env:RUSTC_BOOTSTRAP=-1 | |
| //@[force_stable] compile-flags: -Z unstable-options | |
| #![crate_type = "lib"] | |
| // Note: `rustc_attrs` is a perma-unstable internal feature that is unlikely to change, which is | |
| // used as a proxy to check `RUSTC_BOOTSTRAP` versus stability checking logic. | |
| #![feature(rustc_attrs)] | |
| //[force_stable]~? RAW the option `Z` is only accepted on the nightly compiler |