summaryrefslogtreecommitdiffstats
path: root/src/test/ui/structs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/structs')
-rw-r--r--src/test/ui/structs/multi-line-fru-suggestion.rs22
-rw-r--r--src/test/ui/structs/multi-line-fru-suggestion.stderr25
-rw-r--r--src/test/ui/structs/struct-fn-in-definition.rs1
-rw-r--r--src/test/ui/structs/struct-fn-in-definition.stderr1
-rw-r--r--src/test/ui/structs/struct-record-suggestion.fixed7
-rw-r--r--src/test/ui/structs/struct-record-suggestion.rs3
-rw-r--r--src/test/ui/structs/struct-record-suggestion.stderr27
-rw-r--r--src/test/ui/structs/unresolved-struct-with-fru.rs12
-rw-r--r--src/test/ui/structs/unresolved-struct-with-fru.stderr9
9 files changed, 88 insertions, 19 deletions
diff --git a/src/test/ui/structs/multi-line-fru-suggestion.rs b/src/test/ui/structs/multi-line-fru-suggestion.rs
new file mode 100644
index 000000000..7b2b13914
--- /dev/null
+++ b/src/test/ui/structs/multi-line-fru-suggestion.rs
@@ -0,0 +1,22 @@
+#[derive(Default)]
+struct Inner {
+ a: u8,
+ b: u8,
+}
+
+#[derive(Default)]
+struct Outer {
+ inner: Inner,
+ defaulted: u8,
+}
+
+fn main(){
+ Outer {
+ //~^ ERROR missing field `defaulted` in initializer of `Outer`
+ inner: Inner {
+ a: 1,
+ b: 2,
+ }
+ ..Default::default()
+ };
+}
diff --git a/src/test/ui/structs/multi-line-fru-suggestion.stderr b/src/test/ui/structs/multi-line-fru-suggestion.stderr
new file mode 100644
index 000000000..8bbd3ace7
--- /dev/null
+++ b/src/test/ui/structs/multi-line-fru-suggestion.stderr
@@ -0,0 +1,25 @@
+error[E0063]: missing field `defaulted` in initializer of `Outer`
+ --> $DIR/multi-line-fru-suggestion.rs:14:5
+ |
+LL | Outer {
+ | ^^^^^ missing `defaulted`
+ |
+note: this expression may have been misinterpreted as a `..` range expression
+ --> $DIR/multi-line-fru-suggestion.rs:16:16
+ |
+LL | inner: Inner {
+ | ________________^
+LL | | a: 1,
+LL | | b: 2,
+LL | | }
+ | |_________^ this expression does not end in a comma...
+LL | ..Default::default()
+ | ^^^^^^^^^^^^^^^^^^^^ ... so this is interpreted as a `..` range expression, instead of functional record update syntax
+help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
+ |
+LL | },
+ | +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0063`.
diff --git a/src/test/ui/structs/struct-fn-in-definition.rs b/src/test/ui/structs/struct-fn-in-definition.rs
index 5ae1b727d..7f48f55fe 100644
--- a/src/test/ui/structs/struct-fn-in-definition.rs
+++ b/src/test/ui/structs/struct-fn-in-definition.rs
@@ -28,6 +28,7 @@ enum E {
//~^ ERROR functions are not allowed in enum definitions
//~| HELP unlike in C++, Java, and C#, functions are declared in `impl` blocks
//~| HELP see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information
+ //~| HELP enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`
}
fn main() {}
diff --git a/src/test/ui/structs/struct-fn-in-definition.stderr b/src/test/ui/structs/struct-fn-in-definition.stderr
index 472365c6e..439c86ec2 100644
--- a/src/test/ui/structs/struct-fn-in-definition.stderr
+++ b/src/test/ui/structs/struct-fn-in-definition.stderr
@@ -33,6 +33,7 @@ LL | fn foo() {}
|
= help: unlike in C++, Java, and C#, functions are declared in `impl` blocks
= help: see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information
+ = help: enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`
error: aborting due to 3 previous errors
diff --git a/src/test/ui/structs/struct-record-suggestion.fixed b/src/test/ui/structs/struct-record-suggestion.fixed
index 49e38b196..d93a62185 100644
--- a/src/test/ui/structs/struct-record-suggestion.fixed
+++ b/src/test/ui/structs/struct-record-suggestion.fixed
@@ -7,9 +7,8 @@ struct A {
}
fn a() {
- let q = A { c: 5,..Default::default() };
- //~^ ERROR mismatched types
- //~| ERROR missing fields
+ let q = A { c: 5, ..Default::default() };
+ //~^ ERROR missing fields
//~| HELP separate the last named field with a comma
let r = A { c: 5, ..Default::default() };
assert_eq!(q, r);
@@ -21,7 +20,7 @@ struct B {
}
fn b() {
- let q = B { b: 1,..Default::default() };
+ let q = B { b: 1, ..Default::default() };
//~^ ERROR mismatched types
//~| HELP separate the last named field with a comma
let r = B { b: 1 };
diff --git a/src/test/ui/structs/struct-record-suggestion.rs b/src/test/ui/structs/struct-record-suggestion.rs
index 901f310c8..f0fd1c94e 100644
--- a/src/test/ui/structs/struct-record-suggestion.rs
+++ b/src/test/ui/structs/struct-record-suggestion.rs
@@ -8,8 +8,7 @@ struct A {
fn a() {
let q = A { c: 5..Default::default() };
- //~^ ERROR mismatched types
- //~| ERROR missing fields
+ //~^ ERROR missing fields
//~| HELP separate the last named field with a comma
let r = A { c: 5, ..Default::default() };
assert_eq!(q, r);
diff --git a/src/test/ui/structs/struct-record-suggestion.stderr b/src/test/ui/structs/struct-record-suggestion.stderr
index 66e9f021e..f4fd655e6 100644
--- a/src/test/ui/structs/struct-record-suggestion.stderr
+++ b/src/test/ui/structs/struct-record-suggestion.stderr
@@ -1,37 +1,38 @@
-error[E0308]: mismatched types
- --> $DIR/struct-record-suggestion.rs:10:20
- |
-LL | let q = A { c: 5..Default::default() };
- | ^^^^^^^^^^^^^^^^^^^^^ expected `u64`, found struct `std::ops::Range`
- |
- = note: expected type `u64`
- found struct `std::ops::Range<{integer}>`
-
error[E0063]: missing fields `b` and `d` in initializer of `A`
--> $DIR/struct-record-suggestion.rs:10:13
|
LL | let q = A { c: 5..Default::default() };
| ^ missing `b` and `d`
|
+note: this expression may have been misinterpreted as a `..` range expression
+ --> $DIR/struct-record-suggestion.rs:10:20
+ |
+LL | let q = A { c: 5..Default::default() };
+ | ^^^^^^^^^^^^^^^^^^^^^
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
|
-LL | let q = A { c: 5,..Default::default() };
+LL | let q = A { c: 5, ..Default::default() };
| +
error[E0308]: mismatched types
- --> $DIR/struct-record-suggestion.rs:24:20
+ --> $DIR/struct-record-suggestion.rs:23:20
|
LL | let q = B { b: 1..Default::default() };
| ^^^^^^^^^^^^^^^^^^^^^ expected `u32`, found struct `std::ops::Range`
|
= note: expected type `u32`
found struct `std::ops::Range<{integer}>`
+note: this expression may have been misinterpreted as a `..` range expression
+ --> $DIR/struct-record-suggestion.rs:23:20
+ |
+LL | let q = B { b: 1..Default::default() };
+ | ^^^^^^^^^^^^^^^^^^^^^
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
|
-LL | let q = B { b: 1,..Default::default() };
+LL | let q = B { b: 1, ..Default::default() };
| +
-error: aborting due to 3 previous errors
+error: aborting due to 2 previous errors
Some errors have detailed explanations: E0063, E0308.
For more information about an error, try `rustc --explain E0063`.
diff --git a/src/test/ui/structs/unresolved-struct-with-fru.rs b/src/test/ui/structs/unresolved-struct-with-fru.rs
new file mode 100644
index 000000000..c9fdca457
--- /dev/null
+++ b/src/test/ui/structs/unresolved-struct-with-fru.rs
@@ -0,0 +1,12 @@
+struct S {
+ a: u32,
+}
+
+fn main() {
+ let s1 = S { a: 1 };
+
+ let _ = || {
+ let s2 = Oops { a: 2, ..s1 };
+ //~^ ERROR cannot find struct, variant or union type `Oops` in this scope
+ };
+}
diff --git a/src/test/ui/structs/unresolved-struct-with-fru.stderr b/src/test/ui/structs/unresolved-struct-with-fru.stderr
new file mode 100644
index 000000000..a5796a222
--- /dev/null
+++ b/src/test/ui/structs/unresolved-struct-with-fru.stderr
@@ -0,0 +1,9 @@
+error[E0422]: cannot find struct, variant or union type `Oops` in this scope
+ --> $DIR/unresolved-struct-with-fru.rs:9:18
+ |
+LL | let s2 = Oops { a: 2, ..s1 };
+ | ^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0422`.