diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2013-12-12 00:02:26 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2013-12-14 22:56:33 -0800 |
| commit | 6747d0738a88e7a94171ec7b3f42c837352bc5be (patch) | |
| tree | e4c3d977e230937ec91a09b4ac8c9d3e63c18fb6 | |
| parent | 0f6537fed4417134d72200ab3d46b124a4f2a34c (diff) | |
| download | rust-6747d0738a88e7a94171ec7b3f42c837352bc5be.tar.gz rust-6747d0738a88e7a94171ec7b3f42c837352bc5be.zip | |
Handle more cases in the heap lints
| -rw-r--r-- | src/librustc/middle/lint.rs | 18 | ||||
| -rw-r--r-- | src/test/compile-fail/lint-heap-memory.rs | 16 | ||||
| -rw-r--r-- | src/test/debug-info/borrowed-struct.rs | 1 | ||||
| -rw-r--r-- | src/test/debug-info/box.rs | 1 | ||||
| -rw-r--r-- | src/test/debug-info/boxed-struct.rs | 1 | ||||
| -rw-r--r-- | src/test/debug-info/destructured-local.rs | 1 | ||||
| -rw-r--r-- | src/test/debug-info/generic-method-on-generic-struct.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/managed-enum.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/method-on-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debug-info/method-on-generic-struct.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/method-on-struct.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/method-on-trait.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/method-on-tuple-struct.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/self-in-default-method.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/self-in-generic-default-method.rs | 2 | ||||
| -rw-r--r-- | src/test/debug-info/var-captured-in-nested-closure.rs | 1 | ||||
| -rw-r--r-- | src/test/debug-info/var-captured-in-stack-closure.rs | 1 | ||||
| -rw-r--r-- | src/test/pretty/block-disambig.rs | 2 |
18 files changed, 54 insertions, 5 deletions
diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index feee3583f71..5128f90a0a5 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -770,9 +770,21 @@ fn check_heap_type(cx: &Context, span: Span, ty: ty::t) { let mut n_uniq = 0; ty::fold_ty(cx.tcx, ty, |t| { match ty::get(t).sty { - ty::ty_box(_) => n_box += 1, - ty::ty_uniq(_) => n_uniq += 1, - _ => () + ty::ty_box(_) | ty::ty_estr(ty::vstore_box) | + ty::ty_evec(_, ty::vstore_box) | + ty::ty_trait(_, _, ty::BoxTraitStore, _, _) => { + n_box += 1; + } + ty::ty_uniq(_) | ty::ty_estr(ty::vstore_uniq) | + ty::ty_evec(_, ty::vstore_uniq) | + ty::ty_trait(_, _, ty::UniqTraitStore, _, _) => { + n_uniq += 1; + } + ty::ty_closure(ref c) if c.sigil == ast::OwnedSigil => { + n_uniq += 1; + } + + _ => () }; t }); diff --git a/src/test/compile-fail/lint-heap-memory.rs b/src/test/compile-fail/lint-heap-memory.rs index b550c227898..c02da1beeb7 100644 --- a/src/test/compile-fail/lint-heap-memory.rs +++ b/src/test/compile-fail/lint-heap-memory.rs @@ -19,6 +19,20 @@ struct Foo { struct Bar { x: ~int } //~ ERROR type uses owned fn main() { - let _x : Bar = Bar {x : ~10}; + let _x : Bar = Bar {x : ~10}; //~ ERROR type uses owned + + @2; //~ ERROR type uses managed + @[1]; //~ ERROR type uses managed + //~^ ERROR type uses managed + fn f(_: @Clone) {} //~ ERROR type uses managed + @""; //~ ERROR type uses managed + //~^ ERROR type uses managed + + ~2; //~ ERROR type uses owned + ~[1]; //~ ERROR type uses owned + //~^ ERROR type uses owned + fn g(_: ~Clone) {} //~ ERROR type uses owned + ~""; //~ ERROR type uses owned //~^ ERROR type uses owned + proc() {}; //~ ERROR type uses owned } diff --git a/src/test/debug-info/borrowed-struct.rs b/src/test/debug-info/borrowed-struct.rs index 42f7ffd8777..85b6fd03a27 100644 --- a/src/test/debug-info/borrowed-struct.rs +++ b/src/test/debug-info/borrowed-struct.rs @@ -43,6 +43,7 @@ // debugger:print *unique_val_interior_ref_2 // check:$10 = 26.5 +#[feature(managed_boxes)]; #[allow(unused_variable)]; struct SomeStruct { diff --git a/src/test/debug-info/box.rs b/src/test/debug-info/box.rs index 60ff5f789a8..b760126207b 100644 --- a/src/test/debug-info/box.rs +++ b/src/test/debug-info/box.rs @@ -22,6 +22,7 @@ // debugger:print d->val // check:$4 = false +#[feature(managed_boxes)]; #[allow(unused_variable)]; fn main() { diff --git a/src/test/debug-info/boxed-struct.rs b/src/test/debug-info/boxed-struct.rs index 47c9bd469d4..5a7eacb3eea 100644 --- a/src/test/debug-info/boxed-struct.rs +++ b/src/test/debug-info/boxed-struct.rs @@ -25,6 +25,7 @@ // debugger:print managed_dtor->val // check:$4 = {x = 33, y = 333, z = 3333, w = 33333} +#[feature(managed_boxes)]; #[allow(unused_variable)]; struct StructWithSomePadding { diff --git a/src/test/debug-info/destructured-local.rs b/src/test/debug-info/destructured-local.rs index cd17906623e..16498952f28 100644 --- a/src/test/debug-info/destructured-local.rs +++ b/src/test/debug-info/destructured-local.rs @@ -123,6 +123,7 @@ // debugger:print *nn // check:$43 = 56 +#[feature(managed_boxes)]; #[allow(unused_variable)]; struct Struct { diff --git a/src/test/debug-info/generic-method-on-generic-struct.rs b/src/test/debug-info/generic-method-on-generic-struct.rs index 8eafef5ab10..80f2031b92e 100644 --- a/src/test/debug-info/generic-method-on-generic-struct.rs +++ b/src/test/debug-info/generic-method-on-generic-struct.rs @@ -94,6 +94,8 @@ // check:$21 = {-16, 16.5} // debugger:continue +#[feature(managed_boxes)]; + struct Struct<T> { x: T } diff --git a/src/test/debug-info/managed-enum.rs b/src/test/debug-info/managed-enum.rs index 7be42872570..8c94f2ea970 100644 --- a/src/test/debug-info/managed-enum.rs +++ b/src/test/debug-info/managed-enum.rs @@ -23,7 +23,7 @@ // check:$3 = {-9747455} #[allow(unused_variable)]; -#[feature(struct_variant)]; +#[feature(struct_variant, managed_boxes)]; // The first element is to ensure proper alignment, irrespective of the machines word size. Since // the size of the discriminant value is machine dependent, this has be taken into account when diff --git a/src/test/debug-info/method-on-enum.rs b/src/test/debug-info/method-on-enum.rs index c7e60289b22..622786fcb53 100644 --- a/src/test/debug-info/method-on-enum.rs +++ b/src/test/debug-info/method-on-enum.rs @@ -94,6 +94,7 @@ // check:$21 = -16 // debugger:continue +#[feature(managed_boxes)]; #[feature(struct_variant)]; enum Enum { diff --git a/src/test/debug-info/method-on-generic-struct.rs b/src/test/debug-info/method-on-generic-struct.rs index e4524aaffd2..99ed66cc03b 100644 --- a/src/test/debug-info/method-on-generic-struct.rs +++ b/src/test/debug-info/method-on-generic-struct.rs @@ -94,6 +94,8 @@ // check:$21 = -16 // debugger:continue +#[feature(managed_boxes)]; + struct Struct<T> { x: T } diff --git a/src/test/debug-info/method-on-struct.rs b/src/test/debug-info/method-on-struct.rs index 654f1db559b..9c2afadaef3 100644 --- a/src/test/debug-info/method-on-struct.rs +++ b/src/test/debug-info/method-on-struct.rs @@ -94,6 +94,8 @@ // check:$21 = -16 // debugger:continue +#[feature(managed_boxes)]; + struct Struct { x: int } diff --git a/src/test/debug-info/method-on-trait.rs b/src/test/debug-info/method-on-trait.rs index e6e024323c3..6b67dcc18a9 100644 --- a/src/test/debug-info/method-on-trait.rs +++ b/src/test/debug-info/method-on-trait.rs @@ -94,6 +94,8 @@ // check:$21 = -16 // debugger:continue +#[feature(managed_boxes)]; + struct Struct { x: int } diff --git a/src/test/debug-info/method-on-tuple-struct.rs b/src/test/debug-info/method-on-tuple-struct.rs index 0d19cf21514..46177664a11 100644 --- a/src/test/debug-info/method-on-tuple-struct.rs +++ b/src/test/debug-info/method-on-tuple-struct.rs @@ -94,6 +94,8 @@ // check:$21 = -16 // debugger:continue +#[feature(managed_boxes)]; + struct TupleStruct(int, f64); impl TupleStruct { diff --git a/src/test/debug-info/self-in-default-method.rs b/src/test/debug-info/self-in-default-method.rs index d1b275c9ec0..f9726c5329b 100644 --- a/src/test/debug-info/self-in-default-method.rs +++ b/src/test/debug-info/self-in-default-method.rs @@ -94,6 +94,8 @@ // check:$21 = -16 // debugger:continue +#[feature(managed_boxes)]; + struct Struct { x: int } diff --git a/src/test/debug-info/self-in-generic-default-method.rs b/src/test/debug-info/self-in-generic-default-method.rs index f09953487bc..1b1e0ccf652 100644 --- a/src/test/debug-info/self-in-generic-default-method.rs +++ b/src/test/debug-info/self-in-generic-default-method.rs @@ -94,6 +94,8 @@ // check:$21 = {-16, 16.5} // debugger:continue +#[feature(managed_boxes)]; + struct Struct { x: int } diff --git a/src/test/debug-info/var-captured-in-nested-closure.rs b/src/test/debug-info/var-captured-in-nested-closure.rs index c10697df899..1032356689f 100644 --- a/src/test/debug-info/var-captured-in-nested-closure.rs +++ b/src/test/debug-info/var-captured-in-nested-closure.rs @@ -49,6 +49,7 @@ // check:$14 = 8 // debugger:continue +#[feature(managed_boxes)]; #[allow(unused_variable)]; struct Struct { diff --git a/src/test/debug-info/var-captured-in-stack-closure.rs b/src/test/debug-info/var-captured-in-stack-closure.rs index cbbb8cbbb12..53287a8511b 100644 --- a/src/test/debug-info/var-captured-in-stack-closure.rs +++ b/src/test/debug-info/var-captured-in-stack-closure.rs @@ -28,6 +28,7 @@ // debugger:print managed->val // check:$6 = 7 +#[feature(managed_boxes)]; #[allow(unused_variable)]; struct Struct { diff --git a/src/test/pretty/block-disambig.rs b/src/test/pretty/block-disambig.rs index 5cc8f6e6edc..8d6eaef8b34 100644 --- a/src/test/pretty/block-disambig.rs +++ b/src/test/pretty/block-disambig.rs @@ -12,6 +12,8 @@ // previously ambiguous (e.g. 'if true { } *val;' gets parsed as a // binop) +#[feature(managed_boxes)]; + fn test1() { let val = @0; { } *val; } fn test2() -> int { let val = @0; { } *val } |
