about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libsyntax/parse/obsolete.rs8
-rw-r--r--src/libsyntax/parse/parser.rs6
-rw-r--r--src/test/compile-fail/issue-8615.rs14
-rw-r--r--src/test/compile-fail/once-cant-call-twice-on-heap.rs2
-rw-r--r--src/test/run-pass/once-move-out-on-heap.rs2
5 files changed, 13 insertions, 19 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs
index 2af6d141aa1..189cc8e827c 100644
--- a/src/libsyntax/parse/obsolete.rs
+++ b/src/libsyntax/parse/obsolete.rs
@@ -41,7 +41,8 @@ pub enum ObsoleteSyntax {
     ObsoleteLoopAsContinue,
     ObsoleteEnumWildcard,
     ObsoleteStructWildcard,
-    ObsoleteVecDotDotWildcard
+    ObsoleteVecDotDotWildcard,
+    ObsoleteBoxedClosure,
 }
 
 impl to_bytes::IterBytes for ObsoleteSyntax {
@@ -128,6 +129,11 @@ impl ParserObsoleteMethods for Parser {
                 "vec slice wildcard",
                 "use `..` instead of `.._` for matching slices"
             ),
+            ObsoleteBoxedClosure => (
+                "managed or owned closure",
+                "managed closures have been removed and owned closures are \
+                 now written `proc()`"
+            ),
         };
 
         self.report(sp, kind, kind_str, desc);
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 1b2e18f3ca5..2ea6878f4a3 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -1273,15 +1273,17 @@ impl Parser {
     pub fn parse_box_or_uniq_pointee(&self,
                                      sigil: ast::Sigil,
                                      ctor: &fn(v: mt) -> ty_) -> ty_ {
-        // ~'foo fn() or ~fn() are parsed directly as fn types:
+        // ~'foo fn() or ~fn() are parsed directly as obsolete fn types:
         match *self.token {
             token::LIFETIME(*) => {
                 let lifetime = self.parse_lifetime();
+                self.obsolete(*self.last_span, ObsoleteBoxedClosure);
                 return self.parse_ty_closure(Some(sigil), Some(lifetime));
             }
 
-            token::IDENT(*) => {
+            token::IDENT(*) if sigil == ast::BorrowedSigil => {
                 if self.token_is_old_style_closure_keyword() {
+                    self.obsolete(*self.last_span, ObsoleteBoxedClosure);
                     return self.parse_ty_closure(Some(sigil), None);
                 }
             }
diff --git a/src/test/compile-fail/issue-8615.rs b/src/test/compile-fail/issue-8615.rs
deleted file mode 100644
index 10d3e9ed3f1..00000000000
--- a/src/test/compile-fail/issue-8615.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2013 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.
-
-fn main() {
-    let _: @'static whatever fn(); //~ ERROR expected `fn`, found `whatever`
-    let _: @'static fn();
-}
diff --git a/src/test/compile-fail/once-cant-call-twice-on-heap.rs b/src/test/compile-fail/once-cant-call-twice-on-heap.rs
index e266a56ded4..81e140567e4 100644
--- a/src/test/compile-fail/once-cant-call-twice-on-heap.rs
+++ b/src/test/compile-fail/once-cant-call-twice-on-heap.rs
@@ -16,7 +16,7 @@ extern mod extra;
 use extra::arc;
 use std::util;
 
-fn foo(blk: ~once fn()) {
+fn foo(blk: proc()) {
     blk();
     blk(); //~ ERROR use of moved value
 }
diff --git a/src/test/run-pass/once-move-out-on-heap.rs b/src/test/run-pass/once-move-out-on-heap.rs
index 858f8ec07c4..bf0af534597 100644
--- a/src/test/run-pass/once-move-out-on-heap.rs
+++ b/src/test/run-pass/once-move-out-on-heap.rs
@@ -17,7 +17,7 @@ extern mod extra;
 use extra::arc;
 use std::util;
 
-fn foo(blk: ~once fn()) {
+fn foo(blk: proc()) {
     blk();
 }