From eb7f429ea54db7111b9c1570ce08c3851727d2e5 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Mon, 17 Jul 2017 10:16:08 +0200 Subject: [PATCH] Move resolve diagnostic instability to compile-fail The produced paths aren't stable between builds, since reporting paths inside resolve, before resolve is finished might produce paths resolved to type aliases instead of the concrete type. Compile-fail tests can match just parts of messages, so they don't "suffer" from this issue. This is just a workaround, the instability should be fixed in the future. --- src/test/compile-fail/issue-35675.rs | 67 ++++++++++++++++++++++++++++ src/test/ui/issue-35675.rs | 16 ------- src/test/ui/issue-35675.stderr | 24 ++-------- 3 files changed, 70 insertions(+), 37 deletions(-) create mode 100644 src/test/compile-fail/issue-35675.rs diff --git a/src/test/compile-fail/issue-35675.rs b/src/test/compile-fail/issue-35675.rs new file mode 100644 index 00000000000..c09e56cbc5b --- /dev/null +++ b/src/test/compile-fail/issue-35675.rs @@ -0,0 +1,67 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// these two HELPs are actually in a new line between this line and the `enum Fruit` line +enum Fruit { //~ HELP possible candidate is found in another module, you can import it into scope + //~^ HELP possible candidate is found in another module, you can import it into scope + Apple(i64), + Orange(i64), +} + +fn should_return_fruit() -> Apple { + //~^ ERROR cannot find type `Apple` in this scope + //~| NOTE not found in this scope + //~| HELP you can try using the variant's enum + Apple(5) + //~^ ERROR cannot find function `Apple` in this scope + //~| NOTE not found in this scope +} + +fn should_return_fruit_too() -> Fruit::Apple { + //~^ ERROR expected type, found variant `Fruit::Apple` + //~| HELP you can try using the variant's enum + //~| NOTE not a type + Apple(5) + //~^ ERROR cannot find function `Apple` in this scope + //~| NOTE not found in this scope +} + +fn foo() -> Ok { + //~^ ERROR expected type, found variant `Ok` + //~| NOTE not a type + //~| HELP there is an enum variant + //~| HELP there is an enum variant + Ok(()) +} + +fn bar() -> Variant3 { + //~^ ERROR cannot find type `Variant3` in this scope + //~| HELP you can try using the variant's enum + //~| NOTE not found in this scope +} + +fn qux() -> Some { + //~^ ERROR expected type, found variant `Some` + //~| NOTE not a type + //~| HELP there is an enum variant + //~| HELP there is an enum variant + Some(1) +} + +fn main() {} + +mod x { + enum Enum { + Variant1, + Variant2(), + Variant3(usize), + Variant4 {}, + } +} diff --git a/src/test/ui/issue-35675.rs b/src/test/ui/issue-35675.rs index 001c1f2eddc..391e1f2db5c 100644 --- a/src/test/ui/issue-35675.rs +++ b/src/test/ui/issue-35675.rs @@ -33,27 +33,11 @@ fn should_return_fruit_too() -> Fruit::Apple { //~| NOTE not found in this scope } -fn foo() -> Ok { - //~^ ERROR expected type, found variant `Ok` - //~| NOTE not a type - //~| HELP there is an enum variant - //~| HELP there is an enum variant - Ok(()) -} - fn bar() -> Variant3 { //~^ ERROR cannot find type `Variant3` in this scope //~| NOTE not found in this scope } -fn qux() -> Some { - //~^ ERROR expected type, found variant `Some` - //~| NOTE not a type - //~| HELP there is an enum variant - //~| HELP there is an enum variant - Some(1) -} - fn main() {} mod x { diff --git a/src/test/ui/issue-35675.stderr b/src/test/ui/issue-35675.stderr index 36fdbe98626..c2c10724646 100644 --- a/src/test/ui/issue-35675.stderr +++ b/src/test/ui/issue-35675.stderr @@ -38,32 +38,14 @@ help: possible candidate is found in another module, you can import it into scop 12 | use Fruit::Apple; | -error[E0573]: expected type, found variant `Ok` +error[E0412]: cannot find type `Variant3` in this scope --> $DIR/issue-35675.rs:36:13 | -36 | fn foo() -> Ok { - | ^^ not a type - | - = help: there is an enum variant `std::prelude::v1::Ok`, try using `std::prelude::v1`? - = help: there is an enum variant `std::result::Result::Ok`, try using `std::result::Result`? - -error[E0412]: cannot find type `Variant3` in this scope - --> $DIR/issue-35675.rs:44:13 - | -44 | fn bar() -> Variant3 { +36 | fn bar() -> Variant3 { | ^^^^^^^^ | | | not found in this scope | help: you can try using the variant's enum: `x::Enum` -error[E0573]: expected type, found variant `Some` - --> $DIR/issue-35675.rs:49:13 - | -49 | fn qux() -> Some { - | ^^^^ not a type - | - = help: there is an enum variant `std::option::Option::Some`, try using `std::option::Option`? - = help: there is an enum variant `std::prelude::v1::Some`, try using `std::prelude::v1`? - -error: aborting due to 7 previous errors +error: aborting due to 5 previous errors