From ccaa2f855e34028ff9be745ecc9803e720d34b5e Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 15 Mar 2016 04:49:10 -0400 Subject: Suppress fallback and ambiguity errors If the infcx has observed other errors, then suppress both default type parameter fallback (which can be unreliable, as the full constraint set is not available) and errors related to unresovled variables (annoyingly, integer type variables cannot currently be unified with error, so that has to be a separate mechanism). Also add a flag to `infcx` to allow us to independently indicate when we have observed an error and hence should trigger this suppression mode. --- src/test/compile-fail/cast-rfc0401-2.rs | 20 ++++++++++++++++ src/test/compile-fail/cast-rfc0401.rs | 2 +- .../compile-fail/derived-errors/issue-30580.rs | 27 ++++++++++++++++++++++ .../compile-fail/derived-errors/issue-31997.rs | 27 ++++++++++++++++++++++ src/test/compile-fail/issue-26480.rs | 2 -- src/test/compile-fail/issue-30580.rs | 27 ---------------------- 6 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 src/test/compile-fail/cast-rfc0401-2.rs create mode 100644 src/test/compile-fail/derived-errors/issue-30580.rs create mode 100644 src/test/compile-fail/derived-errors/issue-31997.rs delete mode 100644 src/test/compile-fail/issue-30580.rs (limited to 'src/test') diff --git a/src/test/compile-fail/cast-rfc0401-2.rs b/src/test/compile-fail/cast-rfc0401-2.rs new file mode 100644 index 00000000000..fdc250f9946 --- /dev/null +++ b/src/test/compile-fail/cast-rfc0401-2.rs @@ -0,0 +1,20 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// RFC 401 test extracted into distinct file. This is because some the +// change to suppress "derived" errors wound up suppressing this error +// message, since the fallback for `3` doesn't occur. + +fn main() { + let _ = 3 as bool; + //~^ ERROR cannot cast as `bool` + //~| HELP see a detailed explanation + //~| HELP compare with zero +} diff --git a/src/test/compile-fail/cast-rfc0401.rs b/src/test/compile-fail/cast-rfc0401.rs index dcd49e34bb2..fcfb5706e5d 100644 --- a/src/test/compile-fail/cast-rfc0401.rs +++ b/src/test/compile-fail/cast-rfc0401.rs @@ -58,7 +58,7 @@ fn main() let _ = f as *const u8; //~^ ERROR casting //~^^ HELP through a usize first - let _ = 3 as bool; + let _ = 3_i32 as bool; //~^ ERROR cannot cast as `bool` //~^^ HELP compare with zero //~^^^ HELP run `rustc --explain E0054` to see a detailed explanation diff --git a/src/test/compile-fail/derived-errors/issue-30580.rs b/src/test/compile-fail/derived-errors/issue-30580.rs new file mode 100644 index 00000000000..88d4aef6d9d --- /dev/null +++ b/src/test/compile-fail/derived-errors/issue-30580.rs @@ -0,0 +1,27 @@ +// Copyright 2012 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. + +// Test that we do not see uninformative region-related errors +// when we get some basic type-checking failure. See #30580. + +pub struct Foo { a: u32 } +pub struct Pass<'a, 'tcx: 'a>(&'a mut &'a (), &'a &'tcx ()); + +impl<'a, 'tcx> Pass<'a, 'tcx> +{ + pub fn tcx(&self) -> &'a &'tcx () { self.1 } + fn lol(&mut self, b: &Foo) + { + b.c; //~ ERROR no field with that name was found + self.tcx(); + } +} + +fn main() {} diff --git a/src/test/compile-fail/derived-errors/issue-31997.rs b/src/test/compile-fail/derived-errors/issue-31997.rs new file mode 100644 index 00000000000..cf283f6d3e4 --- /dev/null +++ b/src/test/compile-fail/derived-errors/issue-31997.rs @@ -0,0 +1,27 @@ +// Copyright 2012 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. + +// Test that the resolve failure does not lead to downstream type errors. +// See issue #31997. + +trait TheTrait { } + +fn closure(x: F) -> Result + where F: FnMut() -> T, T: TheTrait, +{ + unimplemented!() +} + +fn foo() -> Result<(), ()> { + try!(closure(|| bar(0 as *mut _))); //~ ERROR unresolved name `bar` + Ok(()) +} + +fn main() { } diff --git a/src/test/compile-fail/issue-26480.rs b/src/test/compile-fail/issue-26480.rs index 903df42291c..44aff623860 100644 --- a/src/test/compile-fail/issue-26480.rs +++ b/src/test/compile-fail/issue-26480.rs @@ -31,7 +31,6 @@ macro_rules! write { macro_rules! cast { ($x:expr) => ($x as ()) - //~^ ERROR non-scalar cast: `i32` as `()` } fn main() { @@ -40,5 +39,4 @@ fn main() { //~^ NOTE in this expansion of write! cast!(2); - //~^ NOTE in this expansion of cast! } diff --git a/src/test/compile-fail/issue-30580.rs b/src/test/compile-fail/issue-30580.rs deleted file mode 100644 index 88d4aef6d9d..00000000000 --- a/src/test/compile-fail/issue-30580.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012 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. - -// Test that we do not see uninformative region-related errors -// when we get some basic type-checking failure. See #30580. - -pub struct Foo { a: u32 } -pub struct Pass<'a, 'tcx: 'a>(&'a mut &'a (), &'a &'tcx ()); - -impl<'a, 'tcx> Pass<'a, 'tcx> -{ - pub fn tcx(&self) -> &'a &'tcx () { self.1 } - fn lol(&mut self, b: &Foo) - { - b.c; //~ ERROR no field with that name was found - self.tcx(); - } -} - -fn main() {} -- cgit 1.4.1-3-g733a5