2021-01-06 13:11:23 -06:00
|
|
|
// revisions: noopt opt opt_with_overflow_checks
|
|
|
|
//[noopt]compile-flags: -C opt-level=0
|
|
|
|
//[opt]compile-flags: -O
|
|
|
|
//[opt_with_overflow_checks]compile-flags: -C overflow-checks=on -O
|
2018-09-06 07:41:12 -05:00
|
|
|
|
2021-01-06 13:11:23 -06:00
|
|
|
// build-pass
|
2018-08-26 08:13:01 -05:00
|
|
|
|
2021-01-06 13:11:23 -06:00
|
|
|
const fn assert_static<T>(_: &'static T) {}
|
2021-01-04 10:15:57 -06:00
|
|
|
|
2022-03-08 11:20:31 -06:00
|
|
|
#[allow(unconditional_panic)]
|
|
|
|
const fn fail() -> i32 {
|
|
|
|
1/0
|
|
|
|
}
|
2021-01-04 10:15:57 -06:00
|
|
|
const C: i32 = {
|
|
|
|
// Promoted that fails to evaluate in dead code -- this must work
|
|
|
|
// (for backwards compatibility reasons).
|
|
|
|
if false {
|
2021-01-06 13:11:23 -06:00
|
|
|
assert_static(&fail());
|
2021-01-04 10:15:57 -06:00
|
|
|
}
|
|
|
|
42
|
|
|
|
};
|
2018-01-26 08:19:01 -06:00
|
|
|
|
|
|
|
fn main() {
|
2021-01-06 13:11:23 -06:00
|
|
|
assert_static(&["a", "b", "c"]);
|
|
|
|
assert_static(&["d", "e", "f"]);
|
2021-01-04 10:15:57 -06:00
|
|
|
assert_eq!(C, 42);
|
2018-08-26 08:13:01 -05:00
|
|
|
|
|
|
|
// make sure that these do not cause trouble despite overflowing
|
2021-01-06 13:11:23 -06:00
|
|
|
assert_static(&(0-1));
|
|
|
|
assert_static(&-i32::MIN);
|
2021-01-01 07:47:45 -06:00
|
|
|
|
|
|
|
// div-by-non-0 is okay
|
2021-01-06 13:11:23 -06:00
|
|
|
assert_static(&(1/1));
|
|
|
|
assert_static(&(1%1));
|
2021-01-01 07:47:45 -06:00
|
|
|
|
2021-01-06 13:03:22 -06:00
|
|
|
// in-bounds array access is okay
|
2021-01-06 13:11:23 -06:00
|
|
|
assert_static(&([1,2,3][0] + 1));
|
|
|
|
assert_static(&[[1,2][1]]);
|
2021-01-06 13:03:22 -06:00
|
|
|
|
2021-01-06 13:11:23 -06:00
|
|
|
// Top-level projections are not part of the promoted, so no error here.
|
2021-01-01 07:47:45 -06:00
|
|
|
if false {
|
|
|
|
#[allow(unconditional_panic)]
|
2021-01-06 13:11:23 -06:00
|
|
|
assert_static(&[1,2,3][4]);
|
2021-01-01 07:47:45 -06:00
|
|
|
}
|
2018-01-26 08:19:01 -06:00
|
|
|
}
|