]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/borrowck/two-phase-bin-ops.rs
5e1d436e31bf22888514d90a9c62843f8893dd8c
[rust.git] / src / test / run-pass / borrowck / two-phase-bin-ops.rs
1 // run-pass
2 // revisions: lxl nll
3
4 #![cfg_attr(nll, feature(nll))]
5
6 use std::ops::{AddAssign, SubAssign, MulAssign, DivAssign, RemAssign};
7 use std::ops::{BitAndAssign, BitOrAssign, BitXorAssign, ShlAssign, ShrAssign};
8
9 struct A(i32);
10
11 macro_rules! trivial_binop {
12     ($Trait:ident, $m:ident) => {
13         impl $Trait<i32> for A { fn $m(&mut self, rhs: i32) { self.0 = rhs; } }
14     }
15 }
16
17 trivial_binop!(AddAssign, add_assign);
18 trivial_binop!(SubAssign, sub_assign);
19 trivial_binop!(MulAssign, mul_assign);
20 trivial_binop!(DivAssign, div_assign);
21 trivial_binop!(RemAssign, rem_assign);
22 trivial_binop!(BitAndAssign, bitand_assign);
23 trivial_binop!(BitOrAssign, bitor_assign);
24 trivial_binop!(BitXorAssign, bitxor_assign);
25 trivial_binop!(ShlAssign, shl_assign);
26 trivial_binop!(ShrAssign, shr_assign);
27
28 fn main() {
29     let mut a = A(10);
30     a += a.0;
31     a -= a.0;
32     a *= a.0;
33     a /= a.0;
34     a &= a.0;
35     a |= a.0;
36     a ^= a.0;
37     a <<= a.0;
38     a >>= a.0;
39 }