1 // run-pass
2 #![allow(unused_must_use)]
3 // ignore-emscripten no threads support
4 #![feature(rustc_attrs)]
5 
6 use std::thread;
7 
8 trait Int {
zero() -> Self9     fn zero() -> Self;
one() -> Self10     fn one() -> Self;
11 }
12 macro_rules! doit {
13     ($($t:ident)*) => ($(impl Int for $t {
14         fn zero() -> Self { 0 }
15         fn one() -> Self { 1 }
16     })*)
17 }
18 doit! { i8 i16 i32 i64 isize }
19 
20 macro_rules! check {
21     ($($e:expr),*) => {
22         $(assert!(thread::spawn({
23             move|| { $e; }
24         }).join().is_err());)*
25     }
26 }
27 
main()28 fn main() {
29     check![
30         isize::MIN / -isize::one(),
31         i8::MIN / -i8::one(),
32         i16::MIN / -i16::one(),
33         i32::MIN / -i32::one(),
34         i64::MIN / -i64::one(),
35         1isize / isize::zero(),
36         1i8 / i8::zero(),
37         1i16 / i16::zero(),
38         1i32 / i32::zero(),
39         1i64 / i64::zero(),
40         isize::MIN % -isize::one(),
41         i8::MIN % -i8::one(),
42         i16::MIN % -i16::one(),
43         i32::MIN % -i32::one(),
44         i64::MIN % -i64::one(),
45         1isize % isize::zero(),
46         1i8 % i8::zero(),
47         1i16 % i16::zero(),
48         1i32 % i32::zero(),
49         1i64 % i64::zero()
50     ];
51 }
52