1
+ //! Check that braces has the expected precedence in relation to index op and some arithmetic
2
+ //! bin-ops involving nested braces.
3
+ //!
4
+ //! This is a regression test for [Wrapping expr in curly braces changes the operator precedence
5
+ //! #28777](https://github.com/rust-lang/rust/issues/28777), which was fixed by
6
+ //! <https://github.com/rust-lang/rust/pull/30375>.
7
+
1
8
//@ run-pass
2
9
3
10
fn that_odd_parse ( c : bool , n : usize ) -> u32 {
@@ -7,7 +14,28 @@ fn that_odd_parse(c: bool, n: usize) -> u32 {
7
14
x + if c { a } else { b } [ n]
8
15
}
9
16
17
+ /// See [Wrapping expr in curly braces changes the operator precedence
18
+ /// #28777](https://github.com/rust-lang/rust/issues/28777). This was fixed by
19
+ /// <https://github.com/rust-lang/rust/pull/30375>. #30375 added the `that_odd_parse` example above,
20
+ /// but that is not *quite* the same original example as reported in #28777, so we also include the
21
+ /// original example here.
22
+ fn check_issue_28777 ( ) {
23
+ // Before #30375 fixed the precedence...
24
+
25
+ // ... `v1` evaluated to 9, indicating a parse of `(1 + 2) * 3`, while
26
+ let v1 = { 1 + { 2 } * { 3 } } ;
27
+
28
+ // `v2` evaluated to 7, indicating a parse of `1 + (2 * 3)`.
29
+ let v2 = 1 + { 2 } * { 3 } ;
30
+
31
+ // Check that both now evaluate to 7, as was fixed by #30375.
32
+ assert_eq ! ( v1, 7 ) ;
33
+ assert_eq ! ( v2, 7 ) ;
34
+ }
35
+
10
36
fn main ( ) {
11
37
assert_eq ! ( 4 , that_odd_parse( true , 1 ) ) ;
12
38
assert_eq ! ( 8 , that_odd_parse( false , 1 ) ) ;
39
+
40
+ check_issue_28777 ( ) ;
13
41
}
0 commit comments