Auto merge of #27085 - Ryman:gh17546, r=alexcrichton

This also changes how variant values are printed in errors, they are no
longer printed in their parent scope. As far as I can tell, this is
leftover from pre-namespacing of enums.

Closes #17546.
This commit is contained in:
bors 2015-07-18 06:02:50 +00:00
commit 3f50dca386
6 changed files with 78 additions and 27 deletions

View file

@ -498,9 +498,8 @@ impl<'ast> Map<'ast> {
{
let parent = self.get_parent(id);
let parent = match self.find_entry(id) {
Some(EntryForeignItem(..)) | Some(EntryVariant(..)) => {
// Anonymous extern items, enum variants and struct ctors
// go in the parent scope.
Some(EntryForeignItem(..)) => {
// Anonymous extern items go in the parent scope.
self.get_parent(parent)
}
// But tuple struct ctors don't have names, so use the path of its

View file

@ -1476,8 +1476,10 @@ fn base_def_to_ty<'tcx>(this: &AstConv<'tcx>,
prim_ty_to_ty(tcx, base_segments, prim_ty)
}
_ => {
let node = def.def_id().node;
span_err!(tcx.sess, span, E0248,
"found value name used as a type: {:?}", *def);
"found value `{}` used as a type",
tcx.map.path_to_string(node));
return this.tcx().types.err;
}
}

View file

@ -1,4 +1,4 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
@ -14,6 +14,6 @@ enum Foo {
Bar
}
fn foo(x: Foo::Bar) {} //~ERROR found value name used as a type
fn foo(x: Foo::Bar) {} //~ERROR found value `Foo::Bar` used as a type
fn main() {}

View file

@ -0,0 +1,50 @@
// Copyright 2015 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 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use foo::MyEnum::Result;
use foo::NoResult; // Through a re-export
mod foo {
pub use self::MyEnum::NoResult;
enum MyEnum {
Result,
NoResult
}
fn new() -> NoResult<MyEnum, String> {
//~^ ERROR: found value `foo::MyEnum::NoResult` used as a type
unimplemented!()
}
}
mod bar {
use foo::MyEnum::Result;
use foo;
fn new() -> Result<foo::MyEnum, String> {
//~^ ERROR: found value `foo::MyEnum::Result` used as a type
unimplemented!()
}
}
fn new() -> Result<foo::MyEnum, String> {
//~^ ERROR: found value `foo::MyEnum::Result` used as a type
unimplemented!()
}
fn newer() -> NoResult<foo::MyEnum, String> {
//~^ ERROR: found value `foo::MyEnum::NoResult` used as a type
unimplemented!()
}
fn main() {
let _ = new();
}

View file

@ -1,4 +1,4 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
@ -30,7 +30,7 @@ pub enum Lonely<X,Y> { Zero, One(X), Two(X, Y) }
#[rustc_move_fragments]
pub fn test_match_partial(p: Lonely<D, D>) {
//~^ ERROR parent_of_fragments: `$(local p)`
//~| ERROR assigned_leaf_path: `($(local p) as Zero)`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Zero)`
match p {
Zero(..) => {}
_ => {}
@ -40,9 +40,9 @@ pub fn test_match_partial(p: Lonely<D, D>) {
#[rustc_move_fragments]
pub fn test_match_full(p: Lonely<D, D>) {
//~^ ERROR parent_of_fragments: `$(local p)`
//~| ERROR assigned_leaf_path: `($(local p) as Zero)`
//~| ERROR assigned_leaf_path: `($(local p) as One)`
//~| ERROR assigned_leaf_path: `($(local p) as Two)`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Zero)`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::One)`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Two)`
match p {
Zero(..) => {}
One(..) => {}
@ -53,10 +53,10 @@ pub fn test_match_full(p: Lonely<D, D>) {
#[rustc_move_fragments]
pub fn test_match_bind_one(p: Lonely<D, D>) {
//~^ ERROR parent_of_fragments: `$(local p)`
//~| ERROR assigned_leaf_path: `($(local p) as Zero)`
//~| ERROR parent_of_fragments: `($(local p) as One)`
//~| ERROR moved_leaf_path: `($(local p) as One).#0`
//~| ERROR assigned_leaf_path: `($(local p) as Two)`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Zero)`
//~| ERROR parent_of_fragments: `($(local p) as Lonely::One)`
//~| ERROR moved_leaf_path: `($(local p) as Lonely::One).#0`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Two)`
//~| ERROR assigned_leaf_path: `$(local data)`
match p {
Zero(..) => {}
@ -68,13 +68,13 @@ pub fn test_match_bind_one(p: Lonely<D, D>) {
#[rustc_move_fragments]
pub fn test_match_bind_many(p: Lonely<D, D>) {
//~^ ERROR parent_of_fragments: `$(local p)`
//~| ERROR assigned_leaf_path: `($(local p) as Zero)`
//~| ERROR parent_of_fragments: `($(local p) as One)`
//~| ERROR moved_leaf_path: `($(local p) as One).#0`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Zero)`
//~| ERROR parent_of_fragments: `($(local p) as Lonely::One)`
//~| ERROR moved_leaf_path: `($(local p) as Lonely::One).#0`
//~| ERROR assigned_leaf_path: `$(local data)`
//~| ERROR parent_of_fragments: `($(local p) as Two)`
//~| ERROR moved_leaf_path: `($(local p) as Two).#0`
//~| ERROR moved_leaf_path: `($(local p) as Two).#1`
//~| ERROR parent_of_fragments: `($(local p) as Lonely::Two)`
//~| ERROR moved_leaf_path: `($(local p) as Lonely::Two).#0`
//~| ERROR moved_leaf_path: `($(local p) as Lonely::Two).#1`
//~| ERROR assigned_leaf_path: `$(local left)`
//~| ERROR assigned_leaf_path: `$(local right)`
match p {

View file

@ -1,4 +1,4 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
@ -30,11 +30,11 @@ pub enum Lonely<X,Y> { Zero, One(X), Two(X, Y) }
#[rustc_move_fragments]
pub fn test_match_bind_and_underscore(p: Lonely<D, D>) {
//~^ ERROR parent_of_fragments: `$(local p)`
//~| ERROR assigned_leaf_path: `($(local p) as Zero)`
//~| ERROR assigned_leaf_path: `($(local p) as One)`
//~| ERROR parent_of_fragments: `($(local p) as Two)`
//~| ERROR moved_leaf_path: `($(local p) as Two).#0`
//~| ERROR unmoved_fragment: `($(local p) as Two).#1`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::Zero)`
//~| ERROR assigned_leaf_path: `($(local p) as Lonely::One)`
//~| ERROR parent_of_fragments: `($(local p) as Lonely::Two)`
//~| ERROR moved_leaf_path: `($(local p) as Lonely::Two).#0`
//~| ERROR unmoved_fragment: `($(local p) as Lonely::Two).#1`
//~| ERROR assigned_leaf_path: `$(local left)`
match p {