From d9d69212c3d1dca7e8975d5163f09289db4a7420 Mon Sep 17 00:00:00 2001 From: Henry Boisdequin <65845077+henryboisdequin@users.noreply.github.com> Date: Wed, 3 Mar 2021 16:50:07 +0530 Subject: [PATCH] Fix diagnostic suggests adding type `[type error]` Fixes #79040 Unresolved questions: Why does this change output the diagnostic twice? Why does the CI fail when the errors are pointed out (UI tests)? --- compiler/rustc_typeck/src/collect/type_of.rs | 2 +- src/test/ui/79040.rs | 5 +++++ src/test/ui/79040.stderr | 19 +++++++++++++++++++ ...em-free-const-no-body-semantic-fail.stderr | 8 +------- ...m-free-static-no-body-semantic-fail.stderr | 14 +------------- 5 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 src/test/ui/79040.rs create mode 100644 src/test/ui/79040.stderr diff --git a/compiler/rustc_typeck/src/collect/type_of.rs b/compiler/rustc_typeck/src/collect/type_of.rs index e4eabca9c3b..92e2b523202 100644 --- a/compiler/rustc_typeck/src/collect/type_of.rs +++ b/compiler/rustc_typeck/src/collect/type_of.rs @@ -659,7 +659,7 @@ fn infer_placeholder_type( format!("{}: {}", item_ident, ty), Applicability::MachineApplicable, ) - .emit(); + .emit_unless(matches!(ty.kind(), ty::Error(_))); } None => { let mut diag = bad_placeholder_type(tcx, vec![span]); diff --git a/src/test/ui/79040.rs b/src/test/ui/79040.rs new file mode 100644 index 00000000000..adc9dc8b426 --- /dev/null +++ b/src/test/ui/79040.rs @@ -0,0 +1,5 @@ +fn main() { + const FOO = "hello" + 1; + //^~ ERROR cannot add `{integer}` to `&str` + println!("{}", FOO); +} \ No newline at end of file diff --git a/src/test/ui/79040.stderr b/src/test/ui/79040.stderr new file mode 100644 index 00000000000..be7d2363c2d --- /dev/null +++ b/src/test/ui/79040.stderr @@ -0,0 +1,19 @@ +error[E0369]: cannot add `{integer}` to `&str` + --> $DIR/79040.rs:2:25 + | +LL | const FOO = "hello" + 1; + | ------- ^ - {integer} + | | + | &str + +error[E0369]: cannot add `{integer}` to `&str` + --> $DIR/79040.rs:2:25 + | +LL | const FOO = "hello" + 1; + | ------- ^ - {integer} + | | + | &str + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0369`. diff --git a/src/test/ui/parser/item-free-const-no-body-semantic-fail.stderr b/src/test/ui/parser/item-free-const-no-body-semantic-fail.stderr index 4e97229fa1a..aa75e5cee01 100644 --- a/src/test/ui/parser/item-free-const-no-body-semantic-fail.stderr +++ b/src/test/ui/parser/item-free-const-no-body-semantic-fail.stderr @@ -14,11 +14,5 @@ LL | const B; | | | help: provide a definition for the constant: `= ;` -error: missing type for `const` item - --> $DIR/item-free-const-no-body-semantic-fail.rs:6:7 - | -LL | const B; - | ^ help: provide a type for the item: `B: [type error]` - -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors diff --git a/src/test/ui/parser/item-free-static-no-body-semantic-fail.stderr b/src/test/ui/parser/item-free-static-no-body-semantic-fail.stderr index 60b7bb34c69..2a270c8290f 100644 --- a/src/test/ui/parser/item-free-static-no-body-semantic-fail.stderr +++ b/src/test/ui/parser/item-free-static-no-body-semantic-fail.stderr @@ -30,17 +30,5 @@ LL | static mut D; | | | help: provide a definition for the static: `= ;` -error: missing type for `static` item - --> $DIR/item-free-static-no-body-semantic-fail.rs:6:8 - | -LL | static B; - | ^ help: provide a type for the item: `B: [type error]` - -error: missing type for `static mut` item - --> $DIR/item-free-static-no-body-semantic-fail.rs:10:12 - | -LL | static mut D; - | ^ help: provide a type for the item: `D: [type error]` - -error: aborting due to 6 previous errors +error: aborting due to 4 previous errors