Skip to content

Commit 76d0a13

Browse files
committed
resolve type variables with no constraints to bot
1 parent f452973 commit 76d0a13

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

src/rustc/middle/infer.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ impl resolve_methods for infer_ctxt {
707707

708708
fn resolve_var<T:copy to_str>(
709709
vb: vals_and_bindings<T>, bot_guard: fn(T)->bool,
710-
vid: int) -> fres<T> {
710+
vid: int, unbound: fn() -> fres<T>) -> fres<T> {
711711

712712
let {root:_, bounds} = self.get(vb, vid as uint);
713713

@@ -724,16 +724,24 @@ impl resolve_methods for infer_ctxt {
724724
{ ub:_, lb:some(t) } if !bot_guard(t) { ok(t) }
725725
{ ub:some(t), lb:_ } { ok(t) }
726726
{ ub:_, lb:some(t) } { ok(t) }
727-
{ ub:none, lb:none } { self.rerr(vid) }
727+
{ ub:none, lb:none } { unbound() }
728728
}
729729
}
730730

731731
fn resolve_ty_var(vid: int) -> fres<ty::t> {
732-
ret self.resolve_var(self.vb, {|t| type_is_bot(t)}, vid);
732+
ret self.resolve_var(
733+
self.vb,
734+
{|t| type_is_bot(t) },
735+
vid,
736+
{|| ok(ty::mk_bot(self.tcx)) });
733737
}
734738

735739
fn resolve_region_var(rid: int) -> fres<ty::region> {
736-
ret self.resolve_var(self.rb, {|_t| false}, rid);
740+
ret self.resolve_var(
741+
self.rb,
742+
{|_t| false },
743+
rid,
744+
{|| err(rid) });
737745
}
738746

739747
fn resolve_ty(typ: ty::t) -> fres<ty::t> {

src/test/compile-fail/vector-no-ann.rs

Lines changed: 0 additions & 2 deletions
This file was deleted.

src/test/run-pass/vector-no-ann.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fn main() {
2+
// We will infer this to have the type vec[bot]
3+
let _foo = [];
4+
}

src/test/run-pass/weird-exprs.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Just a grab bag of stuff that you wouldn't want to actually write.
22

3-
fn strange() -> bool { let _x: bool = ret true; }
3+
fn strange() -> bool { let _x = ret true; }
44

55
fn funny() {
66
fn f(_x: ()) { }
@@ -19,8 +19,8 @@ fn zombiejesus() {
1919
do {
2020
while (ret) {
2121
if (ret) {
22-
alt check (ret) {
23-
1 {
22+
alt (ret) {
23+
_ {
2424
if (ret) {
2525
ret
2626
} else {
@@ -51,7 +51,7 @@ fn canttouchthis() -> uint {
5151
pure fn p() -> bool { true }
5252
let _a = (assert (true)) == (check (p()));
5353
let _c = (check (p())) == ();
54-
let _b: bool = (log(debug, 0) == (ret 0u));
54+
let _b = (log(debug, 0) == (ret 0u));
5555
}
5656

5757
fn angrydome() {

0 commit comments

Comments
 (0)