about summary refs log tree commit diff
path: root/src/test/ui
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-10-23 09:31:44 +0000
committerbors <bors@rust-lang.org>2020-10-23 09:31:44 +0000
commit07a63e6d1fabf3560e8e1e17c1d56b10a06152d9 (patch)
tree12243a35e4aa227ca4b935b9448a90a68ecf30d9 /src/test/ui
parenta9cd294cf2775441e713c7ee2918b728733b99f5 (diff)
parentb5d2ff0fd873ff2ee21d900fa455772f06600c6d (diff)
Auto merge of #78270 - JohnTitor:rollup-bldrjh5, r=JohnTitor
Rollup of 17 pull requests

Successful merges:

 - #77268 (Link to "Contributing to Rust" rather than "Getting Started".)
 - #77339 (Implement TryFrom between NonZero types.)
 - #77488 (Mark `repr128` as `incomplete_features`)
 - #77890 (Fixing escaping to ensure generation of welformed json.)
 - #77918 (Cleanup network tests)
 - #77920 (Avoid extraneous space between visibility kw and ident for statics)
 - #77969 (Doc formating consistency between slice sort and sort_unstable, and big O notation consistency)
 - #78098 (Clean up and improve some docs)
 - #78116 (Make inline const work in range patterns)
 - #78153 (Sync LLVM submodule if it has been initialized)
 - #78163 (Clean up lib docs)
 - #78169 (Update cargo)
 - #78231 (Make closures inherit the parent function's target features)
 - #78235 (Explain where the closure return type was inferred)
 - #78255 (Reduce diagram mess in 'match arms have incompatible types' error)
 - #78263 (Add regression test of issue-77668)
 - #78265 (Add some inference-related regression tests about incorrect diagnostics)

Failed merges:

r? `@ghost`
Diffstat (limited to 'src/test/ui')
-rw-r--r--src/test/ui/closures/closure-return-type-mismatch.rs17
-rw-r--r--src/test/ui/closures/closure-return-type-mismatch.stderr21
-rw-r--r--src/test/ui/enum-discriminant/discriminant_size.rs1
-rw-r--r--src/test/ui/enum-discriminant/discriminant_size.stderr11
-rw-r--r--src/test/ui/enum-discriminant/issue-70509-partial_eq.rs1
-rw-r--r--src/test/ui/enum-discriminant/issue-70509-partial_eq.stderr11
-rw-r--r--src/test/ui/enum-discriminant/repr128.rs1
-rw-r--r--src/test/ui/enum-discriminant/repr128.stderr11
-rw-r--r--src/test/ui/generator/type-mismatch-signature-deduction.stderr5
-rw-r--r--src/test/ui/inference/issue-71732.rs23
-rw-r--r--src/test/ui/inference/issue-71732.stderr13
-rw-r--r--src/test/ui/inference/issue-72616.rs29
-rw-r--r--src/test/ui/inference/issue-72616.stderr13
-rw-r--r--src/test/ui/inline-const/const-match-pat-range.rs38
-rw-r--r--src/test/ui/issues/issue-43398.rs1
-rw-r--r--src/test/ui/issues/issue-43398.stderr11
-rw-r--r--src/test/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs4
-rw-r--r--src/test/ui/match/match-incompat-type-semi.rs10
-rw-r--r--src/test/ui/match/match-incompat-type-semi.stderr40
-rw-r--r--src/test/ui/parser/issue-66357-unexpected-unreachable.rs2
-rw-r--r--src/test/ui/parser/issue-66357-unexpected-unreachable.stderr2
-rw-r--r--src/test/ui/rfcs/rfc-2396-target_feature-11/closures-inherit-target_feature.rs18
22 files changed, 268 insertions, 15 deletions
diff --git a/src/test/ui/closures/closure-return-type-mismatch.rs b/src/test/ui/closures/closure-return-type-mismatch.rs
new file mode 100644
index 00000000000..1631bb303e5
--- /dev/null
+++ b/src/test/ui/closures/closure-return-type-mismatch.rs
@@ -0,0 +1,17 @@
+fn main() {
+    || {
+        if false {
+            return "test";
+        }
+        let a = true;
+        a //~ ERROR mismatched types
+    };
+
+    || -> bool {
+        if false {
+            return "hello" //~ ERROR mismatched types
+        };
+        let b = true;
+        b
+    };
+}
diff --git a/src/test/ui/closures/closure-return-type-mismatch.stderr b/src/test/ui/closures/closure-return-type-mismatch.stderr
new file mode 100644
index 00000000000..3a89d30a05d
--- /dev/null
+++ b/src/test/ui/closures/closure-return-type-mismatch.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+  --> $DIR/closure-return-type-mismatch.rs:7:9
+   |
+LL |         a
+   |         ^ expected `&str`, found `bool`
+   |
+note: return type inferred to be `&str` here
+  --> $DIR/closure-return-type-mismatch.rs:4:20
+   |
+LL |             return "test";
+   |                    ^^^^^^
+
+error[E0308]: mismatched types
+  --> $DIR/closure-return-type-mismatch.rs:12:20
+   |
+LL |             return "hello"
+   |                    ^^^^^^^ expected `bool`, found `&str`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/enum-discriminant/discriminant_size.rs b/src/test/ui/enum-discriminant/discriminant_size.rs
index 4cede8c2a2d..b939a70dfc5 100644
--- a/src/test/ui/enum-discriminant/discriminant_size.rs
+++ b/src/test/ui/enum-discriminant/discriminant_size.rs
@@ -1,5 +1,6 @@
 // run-pass
 #![feature(core_intrinsics, repr128)]
+//~^ WARN the feature `repr128` is incomplete
 
 use std::intrinsics::discriminant_value;
 
diff --git a/src/test/ui/enum-discriminant/discriminant_size.stderr b/src/test/ui/enum-discriminant/discriminant_size.stderr
new file mode 100644
index 00000000000..efc7d998466
--- /dev/null
+++ b/src/test/ui/enum-discriminant/discriminant_size.stderr
@@ -0,0 +1,11 @@
+warning: the feature `repr128` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/discriminant_size.rs:2:29
+   |
+LL | #![feature(core_intrinsics, repr128)]
+   |                             ^^^^^^^
+   |
+   = note: `#[warn(incomplete_features)]` on by default
+   = note: see issue #56071 <https://github.com/rust-lang/rust/issues/56071> for more information
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/enum-discriminant/issue-70509-partial_eq.rs b/src/test/ui/enum-discriminant/issue-70509-partial_eq.rs
index 4e2cc89948a..ae389e11466 100644
--- a/src/test/ui/enum-discriminant/issue-70509-partial_eq.rs
+++ b/src/test/ui/enum-discriminant/issue-70509-partial_eq.rs
@@ -1,5 +1,6 @@
 // run-pass
 #![feature(repr128, arbitrary_enum_discriminant)]
+//~^ WARN the feature `repr128` is incomplete
 
 #[derive(PartialEq, Debug)]
 #[repr(i128)]
diff --git a/src/test/ui/enum-discriminant/issue-70509-partial_eq.stderr b/src/test/ui/enum-discriminant/issue-70509-partial_eq.stderr
new file mode 100644
index 00000000000..5bf6ea56ebc
--- /dev/null
+++ b/src/test/ui/enum-discriminant/issue-70509-partial_eq.stderr
@@ -0,0 +1,11 @@
+warning: the feature `repr128` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/issue-70509-partial_eq.rs:2:12
+   |
+LL | #![feature(repr128, arbitrary_enum_discriminant)]
+   |            ^^^^^^^
+   |
+   = note: `#[warn(incomplete_features)]` on by default
+   = note: see issue #56071 <https://github.com/rust-lang/rust/issues/56071> for more information
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/enum-discriminant/repr128.rs b/src/test/ui/enum-discriminant/repr128.rs
index eefbc44f585..00021a07b37 100644
--- a/src/test/ui/enum-discriminant/repr128.rs
+++ b/src/test/ui/enum-discriminant/repr128.rs
@@ -1,5 +1,6 @@
 // run-pass
 #![feature(repr128, core_intrinsics, discriminant_kind)]
+//~^ WARN the feature `repr128` is incomplete
 
 use std::intrinsics::discriminant_value;
 use std::marker::DiscriminantKind;
diff --git a/src/test/ui/enum-discriminant/repr128.stderr b/src/test/ui/enum-discriminant/repr128.stderr
new file mode 100644
index 00000000000..88adfb1742d
--- /dev/null
+++ b/src/test/ui/enum-discriminant/repr128.stderr
@@ -0,0 +1,11 @@
+warning: the feature `repr128` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/repr128.rs:2:12
+   |
+LL | #![feature(repr128, core_intrinsics, discriminant_kind)]
+   |            ^^^^^^^
+   |
+   = note: `#[warn(incomplete_features)]` on by default
+   = note: see issue #56071 <https://github.com/rust-lang/rust/issues/56071> for more information
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/generator/type-mismatch-signature-deduction.stderr b/src/test/ui/generator/type-mismatch-signature-deduction.stderr
index 9e111d68a55..4abc0542c51 100644
--- a/src/test/ui/generator/type-mismatch-signature-deduction.stderr
+++ b/src/test/ui/generator/type-mismatch-signature-deduction.stderr
@@ -6,6 +6,11 @@ LL |         5
    |
    = note: expected type `std::result::Result<{integer}, _>`
               found type `{integer}`
+note: return type inferred to be `std::result::Result<{integer}, _>` here
+  --> $DIR/type-mismatch-signature-deduction.rs:8:20
+   |
+LL |             return Ok(6);
+   |                    ^^^^^
 
 error[E0271]: type mismatch resolving `<[generator@$DIR/type-mismatch-signature-deduction.rs:6:5: 14:6] as Generator>::Return == i32`
   --> $DIR/type-mismatch-signature-deduction.rs:5:13
diff --git a/src/test/ui/inference/issue-71732.rs b/src/test/ui/inference/issue-71732.rs
new file mode 100644
index 00000000000..30063a0957c
--- /dev/null
+++ b/src/test/ui/inference/issue-71732.rs
@@ -0,0 +1,23 @@
+// Regression test for #71732, it used to emit incorrect diagnostics, like:
+// error[E0283]: type annotations needed
+//  --> src/main.rs:5:10
+//   |
+// 5 |         .get(&"key".into())
+//   |          ^^^ cannot infer type for struct `String`
+//   |
+//   = note: cannot satisfy `String: Borrow<_>`
+// help: consider specifying the type argument in the method call
+//   |
+// 5 |         .get::<Q>(&"key".into())
+//   |
+
+use std::collections::hash_map::HashMap;
+
+fn foo(parameters: &HashMap<String, String>) -> bool {
+    parameters
+        .get(&"key".into()) //~ ERROR: type annotations needed
+        .and_then(|found: &String| Some(false))
+        .unwrap_or(false)
+}
+
+fn main() {}
diff --git a/src/test/ui/inference/issue-71732.stderr b/src/test/ui/inference/issue-71732.stderr
new file mode 100644
index 00000000000..17fad571385
--- /dev/null
+++ b/src/test/ui/inference/issue-71732.stderr
@@ -0,0 +1,13 @@
+error[E0283]: type annotations needed
+  --> $DIR/issue-71732.rs:18:10
+   |
+LL |         .get(&"key".into())
+   |          ^^^  ------------ this method call resolves to `T`
+   |          |
+   |          cannot infer type for type parameter `Q` declared on the associated function `get`
+   |
+   = note: cannot satisfy `String: Borrow<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/src/test/ui/inference/issue-72616.rs b/src/test/ui/inference/issue-72616.rs
new file mode 100644
index 00000000000..5e5a3babfe0
--- /dev/null
+++ b/src/test/ui/inference/issue-72616.rs
@@ -0,0 +1,29 @@
+// Regression test for #72616, it used to emit incorrect diagnostics, like:
+// error[E0283]: type annotations needed for `String`
+//  --> src/main.rs:8:30
+//   |
+// 5 |         let _: String = "".to_owned().try_into().unwrap();
+//   |             - consider giving this pattern a type
+// ...
+// 8 |         if String::from("a") == "a".try_into().unwrap() {}
+//   |                              ^^ cannot infer type for struct `String`
+//   |
+//   = note: cannot satisfy `String: PartialEq<_>`
+
+use std::convert::TryInto;
+
+pub fn main() {
+    {
+        let _: String = "".to_owned().try_into().unwrap();
+    }
+    {
+        if String::from("a") == "a".try_into().unwrap() {}
+        //~^ ERROR: type annotations needed
+    }
+    {
+        let _: String = match "_".try_into() {
+            Ok(a) => a,
+            Err(_) => "".into(),
+        };
+    }
+}
diff --git a/src/test/ui/inference/issue-72616.stderr b/src/test/ui/inference/issue-72616.stderr
new file mode 100644
index 00000000000..d811988c9c1
--- /dev/null
+++ b/src/test/ui/inference/issue-72616.stderr
@@ -0,0 +1,13 @@
+error[E0283]: type annotations needed
+  --> $DIR/issue-72616.rs:20:30
+   |
+LL |         if String::from("a") == "a".try_into().unwrap() {}
+   |                              ^^ -------------- this method call resolves to `std::result::Result<T, <Self as TryInto<T>>::Error>`
+   |                              |
+   |                              cannot infer type
+   |
+   = note: cannot satisfy `String: PartialEq<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/src/test/ui/inline-const/const-match-pat-range.rs b/src/test/ui/inline-const/const-match-pat-range.rs
new file mode 100644
index 00000000000..eefe43a1a22
--- /dev/null
+++ b/src/test/ui/inline-const/const-match-pat-range.rs
@@ -0,0 +1,38 @@
+// build-pass
+
+#![allow(incomplete_features)]
+#![feature(inline_const, half_open_range_patterns, exclusive_range_pattern)]
+fn main() {
+    const N: u32 = 10;
+    let x: u32 = 3;
+
+    match x {
+        1 ..= const { N + 1 } => {},
+        _ => {},
+    }
+
+    match x {
+        const { N - 1 } ..= 10 => {},
+        _ => {},
+    }
+
+    match x {
+        const { N - 1 } ..= const { N + 1 } => {},
+        _ => {},
+    }
+
+    match x {
+        .. const { N + 1 } => {},
+        _ => {},
+    }
+
+    match x {
+        const { N - 1 } .. => {},
+        _ => {},
+    }
+
+    match x {
+        ..= const { N + 1 } => {},
+        _ => {}
+    }
+}
diff --git a/src/test/ui/issues/issue-43398.rs b/src/test/ui/issues/issue-43398.rs
index f0b762c6254..581db033f92 100644
--- a/src/test/ui/issues/issue-43398.rs
+++ b/src/test/ui/issues/issue-43398.rs
@@ -2,6 +2,7 @@
 
 #![feature(core_intrinsics)]
 #![feature(repr128)]
+//~^ WARN the feature `repr128` is incomplete
 
 #[repr(i128)]
 enum Big { A, B }
diff --git a/src/test/ui/issues/issue-43398.stderr b/src/test/ui/issues/issue-43398.stderr
new file mode 100644
index 00000000000..9a394153bf6
--- /dev/null
+++ b/src/test/ui/issues/issue-43398.stderr
@@ -0,0 +1,11 @@
+warning: the feature `repr128` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/issue-43398.rs:4:12
+   |
+LL | #![feature(repr128)]
+   |            ^^^^^^^
+   |
+   = note: `#[warn(incomplete_features)]` on by default
+   = note: see issue #56071 <https://github.com/rust-lang/rust/issues/56071> for more information
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs b/src/test/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs
index f3a51b415fa..fb4bf2b8b44 100644
--- a/src/test/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs
+++ b/src/test/ui/issues/issue-50865-private-impl-trait/auxiliary/lib.rs
@@ -1,3 +1,7 @@
+// revisions: default miropt
+//[miropt]compile-flags: -Z mir-opt-level=2
+// ~^ This flag is for #77668, it used to be ICE.
+
 #![crate_type = "lib"]
 
 pub fn bar<P>( // Error won't happen if "bar" is not generic
diff --git a/src/test/ui/match/match-incompat-type-semi.rs b/src/test/ui/match/match-incompat-type-semi.rs
index 9ab40fa3cce..37f6beabd33 100644
--- a/src/test/ui/match/match-incompat-type-semi.rs
+++ b/src/test/ui/match/match-incompat-type-semi.rs
@@ -39,4 +39,14 @@ fn main() {
         None => { //~ ERROR incompatible types
         },
     };
+
+    let _ = match Some(42) {
+        Some(x) => "rust-lang.org"
+            .chars()
+            .skip(1)
+            .chain(Some(x as u8 as char))
+            .take(10)
+            .any(char::is_alphanumeric),
+        None => {} //~ ERROR incompatible types
+    };
 }
diff --git a/src/test/ui/match/match-incompat-type-semi.stderr b/src/test/ui/match/match-incompat-type-semi.stderr
index 701f15fdc4b..008b1c1e93d 100644
--- a/src/test/ui/match/match-incompat-type-semi.stderr
+++ b/src/test/ui/match/match-incompat-type-semi.stderr
@@ -56,19 +56,33 @@ LL | |     };
 error[E0308]: `match` arms have incompatible types
   --> $DIR/match-incompat-type-semi.rs:39:17
    |
-LL |        let _ = match Some(42) {
-   |   _____________-
-LL |  |         Some(x) => {
-LL |  |             x
-   |  |             - this is found to be of type `{integer}`
-LL |  |         },
-LL |  |         None => {
-   |  |_________________^
-LL | ||         },
-   | ||_________^ expected integer, found `()`
-LL |  |     };
-   |  |_____- `match` arms have incompatible types
+LL |       let _ = match Some(42) {
+   |               -------------- `match` arms have incompatible types
+LL |           Some(x) => {
+LL |               x
+   |               - this is found to be of type `{integer}`
+LL |           },
+LL |           None => {
+   |  _________________^
+LL | |         },
+   | |_________^ expected integer, found `()`
+
+error[E0308]: `match` arms have incompatible types
+  --> $DIR/match-incompat-type-semi.rs:50:17
+   |
+LL |       let _ = match Some(42) {
+   |               -------------- `match` arms have incompatible types
+LL |           Some(x) => "rust-lang.org"
+   |  ____________________-
+LL | |             .chars()
+LL | |             .skip(1)
+LL | |             .chain(Some(x as u8 as char))
+LL | |             .take(10)
+LL | |             .any(char::is_alphanumeric),
+   | |_______________________________________- this is found to be of type `bool`
+LL |           None => {}
+   |                   ^^ expected `bool`, found `()`
 
-error: aborting due to 4 previous errors
+error: aborting due to 5 previous errors
 
 For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/parser/issue-66357-unexpected-unreachable.rs b/src/test/ui/parser/issue-66357-unexpected-unreachable.rs
index 7b95bc775ba..5ec143fae23 100644
--- a/src/test/ui/parser/issue-66357-unexpected-unreachable.rs
+++ b/src/test/ui/parser/issue-66357-unexpected-unreachable.rs
@@ -13,4 +13,4 @@
 
 fn f() { |[](* }
 //~^ ERROR expected one of `,` or `:`, found `(`
-//~| ERROR expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `const`, `mut`, `ref`, `|`, identifier, or path, found `*`
+//~| ERROR expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `mut`, `ref`, `|`, identifier, or path, found `*`
diff --git a/src/test/ui/parser/issue-66357-unexpected-unreachable.stderr b/src/test/ui/parser/issue-66357-unexpected-unreachable.stderr
index 5549f73920d..c3810999d23 100644
--- a/src/test/ui/parser/issue-66357-unexpected-unreachable.stderr
+++ b/src/test/ui/parser/issue-66357-unexpected-unreachable.stderr
@@ -4,7 +4,7 @@ error: expected one of `,` or `:`, found `(`
 LL | fn f() { |[](* }
    |             ^ expected one of `,` or `:`
 
-error: expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `const`, `mut`, `ref`, `|`, identifier, or path, found `*`
+error: expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `mut`, `ref`, `|`, identifier, or path, found `*`
   --> $DIR/issue-66357-unexpected-unreachable.rs:14:14
    |
 LL | fn f() { |[](* }
diff --git a/src/test/ui/rfcs/rfc-2396-target_feature-11/closures-inherit-target_feature.rs b/src/test/ui/rfcs/rfc-2396-target_feature-11/closures-inherit-target_feature.rs
new file mode 100644
index 00000000000..af35bc2014b
--- /dev/null
+++ b/src/test/ui/rfcs/rfc-2396-target_feature-11/closures-inherit-target_feature.rs
@@ -0,0 +1,18 @@
+// Tests #73631: closures inherit `#[target_feature]` annotations
+
+// check-pass
+// only-x86_64
+
+#![feature(target_feature_11)]
+
+#[target_feature(enable="avx")]
+fn also_use_avx() {
+    println!("Hello from AVX")
+}
+
+#[target_feature(enable="avx")]
+fn use_avx() -> Box<dyn Fn()> {
+    Box::new(|| also_use_avx())
+}
+
+fn main() {}