This change makes error and warning annotations mandatory in UI tests. The only exception are tests that use error patterns to match compiler output and don't have any annotations.
63 lines
1.4 KiB
Rust
63 lines
1.4 KiB
Rust
// run-pass
|
|
|
|
#![allow(unused_must_use)]
|
|
#![allow(unused_parens)]
|
|
// This test has some extra semis in it that the pretty-printer won't
|
|
// reproduce so we don't want to automatically reformat it
|
|
|
|
// no-reformat
|
|
|
|
|
|
/*
|
|
*
|
|
* When you write a block-expression thing followed by
|
|
* a lone unary operator, you can get a surprising parse:
|
|
*
|
|
* if (...) { ... }
|
|
* -num;
|
|
*
|
|
* for example, or:
|
|
*
|
|
* if (...) { ... }
|
|
* *box;
|
|
*
|
|
* These will parse as subtraction and multiplication binops.
|
|
* To get them to parse "the way you want" you need to brace
|
|
* the leading unops:
|
|
|
|
* if (...) { ... }
|
|
* {-num};
|
|
*
|
|
* or alternatively, semi-separate them:
|
|
*
|
|
* if (...) { ... };
|
|
* -num;
|
|
*
|
|
* This seems a little wonky, but the alternative is to lower
|
|
* precedence of such block-like exprs to the point where
|
|
* you have to parenthesize them to get them to occur in the
|
|
* RHS of a binop. For example, you'd have to write:
|
|
*
|
|
* 12 + (if (foo) { 13 } else { 14 });
|
|
*
|
|
* rather than:
|
|
*
|
|
* 12 + if (foo) { 13 } else { 14 };
|
|
*
|
|
* Since we want to maintain the ability to write the latter,
|
|
* we leave the parens-burden on the trailing unop case.
|
|
*
|
|
*/
|
|
|
|
pub fn main() {
|
|
|
|
let num = 12;
|
|
|
|
assert_eq!(if (true) { 12 } else { 12 } - num, 0);
|
|
assert_eq!(12 - if (true) { 12 } else { 12 }, 0);
|
|
if (true) { 12; } {-num};
|
|
if (true) { 12; }; {-num};
|
|
if (true) { 12; };;; -num;
|
|
//~^ WARNING unnecessary trailing semicolons
|
|
}
|