about summary refs log tree commit diff
path: root/src/test/ui/expr
diff options
context:
space:
mode:
authorHavvy (Ryan Scheel) <ryan.havvy@gmail.com>2020-11-24 17:37:15 -0800
committerHavvy (Ryan Scheel) <ryan.havvy@gmail.com>2020-11-24 17:37:15 -0800
commit011bef8a84cbfea2458293fd367065bb20a9e7b4 (patch)
tree61f3a6ebb46599c6d7c89df80c83560dbf18f167 /src/test/ui/expr
parent37b97f095ccbb7dcea7c678f1bbc4210e72f4489 (diff)
downloadrust-011bef8a84cbfea2458293fd367065bb20a9e7b4.tar.gz
rust-011bef8a84cbfea2458293fd367065bb20a9e7b4.zip
Move src/test/ui/if-attrs to src/test/ui/expr/if/attrs
Diffstat (limited to 'src/test/ui/expr')
-rw-r--r--src/test/ui/expr/if/attrs/bad-cfg.rs5
-rw-r--r--src/test/ui/expr/if/attrs/bad-cfg.stderr8
-rw-r--r--src/test/ui/expr/if/attrs/builtin-if-attr.rs12
-rw-r--r--src/test/ui/expr/if/attrs/cfg-false-if-attr.rs43
-rw-r--r--src/test/ui/expr/if/attrs/else-attrs.rs25
-rw-r--r--src/test/ui/expr/if/attrs/else-attrs.stderr26
-rw-r--r--src/test/ui/expr/if/attrs/gate-whole-expr.rs15
-rw-r--r--src/test/ui/expr/if/attrs/let-chains-attr.rs13
-rw-r--r--src/test/ui/expr/if/attrs/let-chains-attr.stderr11
-rw-r--r--src/test/ui/expr/if/attrs/stmt-expr-gated.rs6
-rw-r--r--src/test/ui/expr/if/attrs/stmt-expr-gated.stderr12
11 files changed, 176 insertions, 0 deletions
diff --git a/src/test/ui/expr/if/attrs/bad-cfg.rs b/src/test/ui/expr/if/attrs/bad-cfg.rs
new file mode 100644
index 00000000000..3f84929a00e
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/bad-cfg.rs
@@ -0,0 +1,5 @@
+#![feature(stmt_expr_attributes)]
+
+fn main() {
+    let _ = #[cfg(FALSE)] if true {}; //~ ERROR removing an expression
+}
diff --git a/src/test/ui/expr/if/attrs/bad-cfg.stderr b/src/test/ui/expr/if/attrs/bad-cfg.stderr
new file mode 100644
index 00000000000..8a2890886a1
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/bad-cfg.stderr
@@ -0,0 +1,8 @@
+error: removing an expression is not supported in this position
+  --> $DIR/bad-cfg.rs:4:13
+   |
+LL |     let _ = #[cfg(FALSE)] if true {};
+   |             ^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/expr/if/attrs/builtin-if-attr.rs b/src/test/ui/expr/if/attrs/builtin-if-attr.rs
new file mode 100644
index 00000000000..7e290661501
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/builtin-if-attr.rs
@@ -0,0 +1,12 @@
+// check-pass
+
+fn main() {
+    #[allow(unused_variables)]
+    if true {
+        let a = 1;
+    } else if false {
+        let b = 1;
+    } else {
+        let c = 1;
+    }
+}
diff --git a/src/test/ui/expr/if/attrs/cfg-false-if-attr.rs b/src/test/ui/expr/if/attrs/cfg-false-if-attr.rs
new file mode 100644
index 00000000000..1f77a1bb342
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/cfg-false-if-attr.rs
@@ -0,0 +1,43 @@
+// check-pass
+
+#[cfg(FALSE)]
+fn simple_attr() {
+    #[attr] if true {}
+    #[allow_warnings] if true {}
+}
+
+#[cfg(FALSE)]
+fn if_else_chain() {
+    #[first_attr] if true {
+    } else if false {
+    } else {
+    }
+}
+
+#[cfg(FALSE)]
+fn if_let() {
+    #[attr] if let Some(_) = Some(true) {}
+}
+
+fn bar() {
+    #[cfg(FALSE)]
+    if true {
+        let x: () = true; // Should not error due to the #[cfg(FALSE)]
+    }
+
+    #[cfg_attr(not(unset_attr), cfg(FALSE))]
+    if true {
+        let a: () = true; // Should not error due to the applied #[cfg(FALSE)]
+    }
+}
+
+macro_rules! custom_macro {
+    ($expr:expr) => {}
+}
+
+custom_macro! {
+    #[attr] if true {}
+}
+
+
+fn main() {}
diff --git a/src/test/ui/expr/if/attrs/else-attrs.rs b/src/test/ui/expr/if/attrs/else-attrs.rs
new file mode 100644
index 00000000000..85da7cf6bb8
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/else-attrs.rs
@@ -0,0 +1,25 @@
+#[cfg(FALSE)]
+fn if_else_parse_error() {
+    if true {
+    } #[attr] else if false { //~ ERROR expected
+    }
+}
+
+#[cfg(FALSE)]
+fn else_attr_ifparse_error() {
+    if true {
+    } else #[attr] if false { //~ ERROR outer attributes are not allowed
+    } else {
+    }
+}
+
+#[cfg(FALSE)]
+fn else_parse_error() {
+    if true {
+    } else if false {
+    } #[attr] else { //~ ERROR expected
+    }
+}
+
+fn main() {
+}
diff --git a/src/test/ui/expr/if/attrs/else-attrs.stderr b/src/test/ui/expr/if/attrs/else-attrs.stderr
new file mode 100644
index 00000000000..2733377054d
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/else-attrs.stderr
@@ -0,0 +1,26 @@
+error: expected expression, found keyword `else`
+  --> $DIR/else-attrs.rs:4:15
+   |
+LL |     } #[attr] else if false {
+   |               ^^^^ expected expression
+
+error: outer attributes are not allowed on `if` and `else` branches
+  --> $DIR/else-attrs.rs:11:12
+   |
+LL |       } else #[attr] if false {
+   |  _______----_^^^^^^^_-
+   | |       |    |
+   | |       |    help: remove the attributes
+   | |       the branch belongs to this `else`
+LL | |     } else {
+LL | |     }
+   | |_____- the attributes are attached to this branch
+
+error: expected expression, found keyword `else`
+  --> $DIR/else-attrs.rs:20:15
+   |
+LL |     } #[attr] else {
+   |               ^^^^ expected expression
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/expr/if/attrs/gate-whole-expr.rs b/src/test/ui/expr/if/attrs/gate-whole-expr.rs
new file mode 100644
index 00000000000..63772d54b53
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/gate-whole-expr.rs
@@ -0,0 +1,15 @@
+// run-pass
+
+fn main() {
+    let x = 1;
+
+    #[cfg(FALSE)]
+    if false {
+        x = 2;
+    } else if true {
+        x = 3;
+    } else {
+        x = 4;
+    }
+    assert_eq!(x, 1);
+}
diff --git a/src/test/ui/expr/if/attrs/let-chains-attr.rs b/src/test/ui/expr/if/attrs/let-chains-attr.rs
new file mode 100644
index 00000000000..5237a9ff396
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/let-chains-attr.rs
@@ -0,0 +1,13 @@
+// check-pass
+
+#![feature(let_chains)] //~ WARN the feature `let_chains` is incomplete
+
+#[cfg(FALSE)]
+fn foo() {
+    #[attr]
+    if let Some(_) = Some(true) && let Ok(_) = Ok(1) {
+    } else if let Some(false) = Some(true) {
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/expr/if/attrs/let-chains-attr.stderr b/src/test/ui/expr/if/attrs/let-chains-attr.stderr
new file mode 100644
index 00000000000..8b987471534
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/let-chains-attr.stderr
@@ -0,0 +1,11 @@
+warning: the feature `let_chains` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/let-chains-attr.rs:3:12
+   |
+LL | #![feature(let_chains)]
+   |            ^^^^^^^^^^
+   |
+   = note: `#[warn(incomplete_features)]` on by default
+   = note: see issue #53667 <https://github.com/rust-lang/rust/issues/53667> for more information
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/expr/if/attrs/stmt-expr-gated.rs b/src/test/ui/expr/if/attrs/stmt-expr-gated.rs
new file mode 100644
index 00000000000..38599c8e67c
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/stmt-expr-gated.rs
@@ -0,0 +1,6 @@
+fn main() {
+    let _ = #[deny(warnings)] if true { //~ ERROR attributes on expressions
+    } else if false {
+    } else {
+    };
+}
diff --git a/src/test/ui/expr/if/attrs/stmt-expr-gated.stderr b/src/test/ui/expr/if/attrs/stmt-expr-gated.stderr
new file mode 100644
index 00000000000..47dac39a9ae
--- /dev/null
+++ b/src/test/ui/expr/if/attrs/stmt-expr-gated.stderr
@@ -0,0 +1,12 @@
+error[E0658]: attributes on expressions are experimental
+  --> $DIR/stmt-expr-gated.rs:2:13
+   |
+LL |     let _ = #[deny(warnings)] if true {
+   |             ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
+   = help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.