summary refs log tree commit diff
path: root/src/test/compile-fail/derived-errors/issue-30580.rs
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2016-03-15 04:49:10 -0400
committerNiko Matsakis <niko@alum.mit.edu>2016-04-12 13:29:46 -0400
commitccaa2f855e34028ff9be745ecc9803e720d34b5e (patch)
tree24c4a76994194c9b8554bf2b2c7bc8443f8655de /src/test/compile-fail/derived-errors/issue-30580.rs
parent933000613b7774727dd7f1bfe766e2bee71c5747 (diff)
downloadrust-ccaa2f855e34028ff9be745ecc9803e720d34b5e.tar.gz
rust-ccaa2f855e34028ff9be745ecc9803e720d34b5e.zip
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.
Diffstat (limited to 'src/test/compile-fail/derived-errors/issue-30580.rs')
-rw-r--r--src/test/compile-fail/derived-errors/issue-30580.rs27
1 files changed, 27 insertions, 0 deletions
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 <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.
+
+// 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() {}