diff options
| author | P1start <rewi-github@whanau.org> | 2014-10-05 12:18:04 +1300 |
|---|---|---|
| committer | P1start <rewi-github@whanau.org> | 2014-10-05 14:16:32 +1300 |
| commit | a29df44f51f950549957128ad1b65b2576a48383 (patch) | |
| tree | 52463b204a4ba3f5bd62b03470e8419a773d412f | |
| parent | 88baca7486607bb9799ab338afdf088b4cf9e2bd (diff) | |
| download | rust-a29df44f51f950549957128ad1b65b2576a48383.tar.gz rust-a29df44f51f950549957128ad1b65b2576a48383.zip | |
Tweak ‘discriminant value already exists’ error message
Closes #15524.
| -rw-r--r-- | src/librustc/middle/typeck/check/mod.rs | 11 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-15524.rs | 24 | ||||
| -rw-r--r-- | src/test/compile-fail/tag-variant-disr-dup.rs | 2 |
3 files changed, 33 insertions, 4 deletions
diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index ca5d711d360..315074e19c3 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -5004,9 +5004,14 @@ pub fn check_enum_variants(ccx: &CrateCtxt, }; // Check for duplicate discriminant values - if disr_vals.contains(¤t_disr_val) { - span_err!(ccx.tcx.sess, v.span, E0081, - "discriminant value already exists"); + match disr_vals.iter().position(|&x| x == current_disr_val) { + Some(i) => { + span_err!(ccx.tcx.sess, v.span, E0081, + "discriminant value `{}` already exists", disr_vals[i]); + span_note!(ccx.tcx.sess, ccx.tcx().map.span(variants[i].id.node), + "conflicting discriminant here") + } + None => {} } // Check for unrepresentable discriminant values match hint { diff --git a/src/test/compile-fail/issue-15524.rs b/src/test/compile-fail/issue-15524.rs new file mode 100644 index 00000000000..1e7bd6fc623 --- /dev/null +++ b/src/test/compile-fail/issue-15524.rs @@ -0,0 +1,24 @@ +// Copyright 2014 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. + +static N: int = 1; + +enum Foo { + A = 1, + B = 1, //~ ERROR discriminant value `1` already exists + //~^^ NOTE conflicting + C = 0, + D, //~ ERROR discriminant value `1` already exists + //~^^^^^ NOTE conflicting + E = N, //~ ERROR discriminant value `1` already exists + //~^^^^^^^ NOTE conflicting +} + +fn main() {} diff --git a/src/test/compile-fail/tag-variant-disr-dup.rs b/src/test/compile-fail/tag-variant-disr-dup.rs index d0608ec4c19..5da5bb85409 100644 --- a/src/test/compile-fail/tag-variant-disr-dup.rs +++ b/src/test/compile-fail/tag-variant-disr-dup.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -//error-pattern:discriminant value already exists +//error-pattern:discriminant value // black and white have the same discriminator value ... |
