about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSean Bowe <ewillbefull@gmail.com>2015-09-14 15:52:48 -0600
committerSean Bowe <ewillbefull@gmail.com>2015-09-14 15:52:48 -0600
commit01872f7b917f5bbb45826c45606832e427c94eec (patch)
treea81e90baa2e924c264d820be146a570301584739
parentc8ded9a14f16a4b5ce3facc3bedfd957dbe433fe (diff)
downloadrust-01872f7b917f5bbb45826c45606832e427c94eec.tar.gz
rust-01872f7b917f5bbb45826c45606832e427c94eec.zip
Do not return the result from sub/equate routines, just return a.
-rw-r--r--src/librustc/middle/infer/equate.rs3
-rw-r--r--src/librustc/middle/infer/sub.rs3
-rw-r--r--src/test/run-pass/issue-28279.rs30
3 files changed, 34 insertions, 2 deletions
diff --git a/src/librustc/middle/infer/equate.rs b/src/librustc/middle/infer/equate.rs
index cbbf73d9420..6c6b1358a15 100644
--- a/src/librustc/middle/infer/equate.rs
+++ b/src/librustc/middle/infer/equate.rs
@@ -68,7 +68,8 @@ impl<'a, 'tcx> TypeRelation<'a,'tcx> for Equate<'a, 'tcx> {
             }
 
             _ => {
-                combine::super_combine_tys(self.fields.infcx, self, a, b)
+                try!(combine::super_combine_tys(self.fields.infcx, self, a, b));
+                Ok(a)
             }
         }
     }
diff --git a/src/librustc/middle/infer/sub.rs b/src/librustc/middle/infer/sub.rs
index 4d76d613392..7ff778d470f 100644
--- a/src/librustc/middle/infer/sub.rs
+++ b/src/librustc/middle/infer/sub.rs
@@ -90,7 +90,8 @@ impl<'a, 'tcx> TypeRelation<'a, 'tcx> for Sub<'a, 'tcx> {
             }
 
             _ => {
-                combine::super_combine_tys(self.fields.infcx, self, a, b)
+                try!(combine::super_combine_tys(self.fields.infcx, self, a, b));
+                Ok(a)
             }
         }
     }
diff --git a/src/test/run-pass/issue-28279.rs b/src/test/run-pass/issue-28279.rs
new file mode 100644
index 00000000000..ae40ce44d17
--- /dev/null
+++ b/src/test/run-pass/issue-28279.rs
@@ -0,0 +1,30 @@
+// 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 std::rc::Rc;
+
+fn test1() -> Rc<for<'a> Fn(&'a usize) + 'static> {
+    if let Some(_) = Some(1) {
+        loop{}
+    } else {
+        loop{}
+    }
+}
+
+fn test2() -> *mut for<'a> Fn(&'a usize) + 'static {
+    if let Some(_) = Some(1) {
+        loop{}
+    } else {
+        loop{}
+    }
+}
+
+fn main() {}
+