about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-09-18 15:52:21 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-09-18 15:53:04 -0700
commite653d493fb8df74bd0583c4f32c882a590135ef1 (patch)
tree7ad343dc1a74bd369331f6d38ce25b968745ebaa
parentd53cfd225a4e2b671b2b40b71725394c24fb1761 (diff)
rustc: Remove legacy mode inference, unless #[legacy_modes] is used
-rw-r--r--src/fuzzer/fuzzer.rc2
-rw-r--r--src/libcore/core.rc2
-rw-r--r--src/libstd/std.rc2
-rw-r--r--src/libsyntax/syntax.rc2
-rw-r--r--src/rustc/driver/driver.rs2
-rw-r--r--src/rustc/driver/rustc.rs1
-rw-r--r--src/rustc/middle/lint.rs9
-rw-r--r--src/rustc/middle/ty.rs27
-rw-r--r--src/rustc/middle/typeck/astconv.rs3
-rw-r--r--src/rustc/middle/typeck/check/writeback.rs2
-rw-r--r--src/rustc/rustc.rc2
-rw-r--r--src/rustc/util/ppaux.rs2
-rw-r--r--src/rustdoc/rustdoc.rc2
-rw-r--r--src/test/auxiliary/cci_iter_lib.rs1
-rw-r--r--src/test/auxiliary/cci_nested_lib.rs4
-rw-r--r--src/test/bench/graph500-bfs.rs2
-rw-r--r--src/test/bench/msgsend-pipes-shared.rs2
-rw-r--r--src/test/bench/msgsend-pipes.rs2
-rw-r--r--src/test/bench/shootout-k-nucleotide-pipes.rs2
-rw-r--r--src/test/bench/shootout-mandelbrot.rs2
-rw-r--r--src/test/bench/shootout-pfib.rs2
-rw-r--r--src/test/bench/task-perf-word-count-generic.rs2
-rw-r--r--src/test/compile-fail/borrowck-unchecked-with-borrow.rs4
-rw-r--r--src/test/compile-fail/fn-variance-1.rs2
-rw-r--r--src/test/compile-fail/issue-2587-2.rs2
-rw-r--r--src/test/compile-fail/mode-inference-fail.rs2
-rw-r--r--src/test/compile-fail/pure-higher-order.rs4
-rw-r--r--src/test/compile-fail/regions-creating-enums.rs4
-rw-r--r--src/test/run-pass-fulldeps/qquote.rs2
-rw-r--r--src/test/run-pass/argument-passing.rs2
-rw-r--r--src/test/run-pass/assignability-trait.rs2
-rw-r--r--src/test/run-pass/auto_serialize.rs2
-rw-r--r--src/test/run-pass/block-iter-1.rs2
-rw-r--r--src/test/run-pass/block-iter-2.rs2
-rw-r--r--src/test/run-pass/cci_iter_exe.rs2
-rw-r--r--src/test/run-pass/cci_nested_exe.rs2
-rw-r--r--src/test/run-pass/class-impl-very-parameterized-trait.rs2
-rw-r--r--src/test/run-pass/class-implement-traits.rs4
-rw-r--r--src/test/run-pass/closure-inference.rs2
-rw-r--r--src/test/run-pass/expr-alt-generic-box2.rs4
-rw-r--r--src/test/run-pass/expr-alt-generic-unique2.rs4
-rw-r--r--src/test/run-pass/expr-alt-generic.rs5
-rw-r--r--src/test/run-pass/expr-block-generic-box2.rs5
-rw-r--r--src/test/run-pass/expr-block-generic-unique2.rs5
-rw-r--r--src/test/run-pass/expr-block-generic.rs5
-rw-r--r--src/test/run-pass/expr-copy.rs2
-rw-r--r--src/test/run-pass/expr-if-generic-box2.rs5
-rw-r--r--src/test/run-pass/expr-if-generic.rs4
-rw-r--r--src/test/run-pass/fixed-point-bind-box.rs2
-rw-r--r--src/test/run-pass/fixed-point-bind-unique.rs2
-rw-r--r--src/test/run-pass/fn-bare-spawn.rs3
-rw-r--r--src/test/run-pass/generic-temporary.rs2
-rw-r--r--src/test/run-pass/intrinsic-frame-address.rs1
-rw-r--r--src/test/run-pass/issue-2185.rs2
-rw-r--r--src/test/run-pass/issue-2611.rs4
-rw-r--r--src/test/run-pass/last-use-corner-cases.rs2
-rw-r--r--src/test/run-pass/monad.rs2
-rw-r--r--src/test/run-pass/operator-overloading.rs2
-rw-r--r--src/test/run-pass/reflect-visit-data.rs1
-rw-r--r--src/test/run-pass/regions-params.rs4
-rw-r--r--src/test/run-pass/resource-generic.rs2
-rw-r--r--src/test/run-pass/ret-break-cont-in-block.rs2
-rw-r--r--src/test/run-pass/sendfn-generic-fn.rs2
-rw-r--r--src/test/run-pass/sendfn-is-a-block.rs4
-rw-r--r--src/test/run-pass/static-impl.rs2
-rw-r--r--src/test/run-pass/static-method-test.rs1
-rw-r--r--src/test/run-pass/task-comm-0.rs2
-rw-r--r--src/test/run-pass/task-comm-10.rs2
-rw-r--r--src/test/run-pass/task-comm-11.rs2
-rw-r--r--src/test/run-pass/task-comm-13.rs2
-rw-r--r--src/test/run-pass/task-comm-14.rs1
-rw-r--r--src/test/run-pass/task-comm-15.rs2
-rw-r--r--src/test/run-pass/task-comm-3.rs2
-rw-r--r--src/test/run-pass/task-comm-7.rs2
-rw-r--r--src/test/run-pass/task-comm-9.rs2
-rw-r--r--src/test/run-pass/trait-generic.rs2
-rw-r--r--src/test/run-pass/type-param-constraints.rs2
77 files changed, 179 insertions, 40 deletions
diff --git a/src/fuzzer/fuzzer.rc b/src/fuzzer/fuzzer.rc
index da1003b026b..82c18f6976f 100644
--- a/src/fuzzer/fuzzer.rc
+++ b/src/fuzzer/fuzzer.rc
@@ -4,6 +4,8 @@
 
 #[no_core];
 
+#[legacy_modes];
+
 #[allow(vecs_implicitly_copyable)];
 #[allow(non_camel_case_types)];
 
diff --git a/src/libcore/core.rc b/src/libcore/core.rc
index 48c61e82cb0..971f8b57170 100644
--- a/src/libcore/core.rc
+++ b/src/libcore/core.rc
@@ -31,6 +31,8 @@
 // Don't link to core. We are core.
 #[no_core];
 
+#[legacy_modes];
+
 #[warn(vecs_implicitly_copyable)];
 #[deny(non_camel_case_types)];
 
diff --git a/src/libstd/std.rc b/src/libstd/std.rc
index c43faa1fd6c..9b4d937a533 100644
--- a/src/libstd/std.rc
+++ b/src/libstd/std.rc
@@ -10,6 +10,8 @@
 
 #[no_core];
 
+#[legacy_modes];
+
 #[allow(vecs_implicitly_copyable)];
 #[deny(non_camel_case_types)];
 
diff --git a/src/libsyntax/syntax.rc b/src/libsyntax/syntax.rc
index 63c3fa89b75..6ce8ef11d91 100644
--- a/src/libsyntax/syntax.rc
+++ b/src/libsyntax/syntax.rc
@@ -8,6 +8,8 @@
 
 #[no_core];
 
+#[legacy_modes];
+
 #[allow(vecs_implicitly_copyable)];
 #[allow(non_camel_case_types)];
 
diff --git a/src/rustc/driver/driver.rs b/src/rustc/driver/driver.rs
index 44d62e8d926..abaee09790e 100644
--- a/src/rustc/driver/driver.rs
+++ b/src/rustc/driver/driver.rs
@@ -206,7 +206,7 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg,
         middle::region::determine_rp_in_crate(sess, ast_map, def_map, crate));
 
     let ty_cx = ty::mk_ctxt(sess, def_map, ast_map, freevars,
-                            region_map, rp_set, move lang_items);
+                            region_map, rp_set, move lang_items, crate);
 
     let (method_map, vtable_map) = time(time_passes, ~"typechecking", ||
                                         typeck::check_crate(ty_cx,
diff --git a/src/rustc/driver/rustc.rs b/src/rustc/driver/rustc.rs
index 79df5b596cd..56eb6fe762c 100644
--- a/src/rustc/driver/rustc.rs
+++ b/src/rustc/driver/rustc.rs
@@ -1,6 +1,7 @@
 #[no_core];
 #[allow(vecs_implicitly_copyable)];
 #[allow(non_camel_case_types)];
+#[legacy_modes];
 
 extern mod core(vers = "0.4");
 extern mod std(vers = "0.4");
diff --git a/src/rustc/middle/lint.rs b/src/rustc/middle/lint.rs
index 889bd085e33..8e22315ef6b 100644
--- a/src/rustc/middle/lint.rs
+++ b/src/rustc/middle/lint.rs
@@ -13,7 +13,7 @@ use syntax::ast_util::{path_to_ident};
 use syntax::print::pprust::{expr_to_str, mode_to_str, pat_to_str};
 export lint, ctypes, unused_imports, while_true, path_statement, old_vecs;
 export unrecognized_lint, non_implicitly_copyable_typarams;
-export vecs_implicitly_copyable, implicit_copies;
+export vecs_implicitly_copyable, implicit_copies, legacy_modes;
 export level, allow, warn, deny, forbid;
 export lint_dict, get_lint_dict, level_to_str;
 export get_lint_level, get_lint_settings_level;
@@ -59,6 +59,8 @@ enum lint {
     owned_heap_memory,
     heap_memory,
 
+    legacy_modes,
+
     // FIXME(#3266)--make liveness warnings lintable
     // unused_variable,
     // dead_assignment
@@ -179,6 +181,11 @@ fn get_lint_dict() -> lint_dict {
            desc: ~"use of any structural records",
            default: allow}),
 
+        (~"legacy modes",
+         @{lint: legacy_modes,
+           desc: ~"allow legacy modes",
+           default: forbid}),
+
         /* FIXME(#3266)--make liveness warnings lintable
         (~"unused_variable",
          @{lint: unused_variable,
diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs
index a31d5568fa1..b3450b922bb 100644
--- a/src/rustc/middle/ty.rs
+++ b/src/rustc/middle/ty.rs
@@ -319,6 +319,7 @@ type ctxt =
       interner: HashMap<intern_key, t_box>,
       mut next_id: uint,
       vecs_implicitly_copyable: bool,
+      legacy_modes: bool,
       cstore: metadata::cstore::cstore,
       sess: session::session,
       def_map: resolve::DefMap,
@@ -827,7 +828,19 @@ fn mk_ctxt(s: session::session,
            freevars: freevars::freevar_map,
            region_map: middle::region::region_map,
            region_paramd_items: middle::region::region_paramd_items,
-           +lang_items: middle::lang_items::LanguageItems) -> ctxt {
+           +lang_items: middle::lang_items::LanguageItems,
+           crate: @ast::crate) -> ctxt {
+    let mut legacy_modes = false;
+    for crate.node.attrs.each |attribute| {
+        match attribute.node.value.node {
+            ast::meta_word(w) if w == ~"legacy_modes" => {
+                legacy_modes = true;
+                break;
+            }
+            _ => {}
+        }
+    }
+
     let interner = map::HashMap();
     let vecs_implicitly_copyable =
         get_lint_level(s.lint_settings.default_settings,
@@ -836,6 +849,7 @@ fn mk_ctxt(s: session::session,
       interner: interner,
       mut next_id: 0u,
       vecs_implicitly_copyable: vecs_implicitly_copyable,
+      legacy_modes: legacy_modes,
       cstore: s.cstore,
       sess: s,
       def_map: dm,
@@ -1075,9 +1089,14 @@ pure fn mach_sty(cfg: @session::config, t: t) -> sty {
     }
 }
 
-fn default_arg_mode_for_ty(ty: ty::t) -> ast::rmode {
-    if ty::type_is_immediate(ty) { ast::by_val }
-    else { ast::by_ref }
+fn default_arg_mode_for_ty(tcx: ctxt, ty: ty::t) -> ast::rmode {
+    if ty::type_is_immediate(ty) {
+        ast::by_val
+    } else if tcx.legacy_modes {
+        ast::by_ref
+    } else {
+        ast::by_copy
+    }
 }
 
 // Returns the narrowest lifetime enclosing the evaluation of the expression
diff --git a/src/rustc/middle/typeck/astconv.rs b/src/rustc/middle/typeck/astconv.rs
index 620f3cad570..b38a4b22675 100644
--- a/src/rustc/middle/typeck/astconv.rs
+++ b/src/rustc/middle/typeck/astconv.rs
@@ -432,7 +432,8 @@ fn ty_of_arg<AC: ast_conv, RS: region_scope Copy Owned>(
               // tables in tcx but should never fail, because nothing else
               // will have been unified with m yet:
               _ => {
-                let m1 = ast::expl(ty::default_arg_mode_for_ty(ty));
+                let m1 = ast::expl(ty::default_arg_mode_for_ty(self.tcx(),
+                                                               ty));
                 result::get(ty::unify_mode(
                     self.tcx(),
                     ty::expected_found {expected: m1,
diff --git a/src/rustc/middle/typeck/check/writeback.rs b/src/rustc/middle/typeck/check/writeback.rs
index d57b012503b..d12095babb8 100644
--- a/src/rustc/middle/typeck/check/writeback.rs
+++ b/src/rustc/middle/typeck/check/writeback.rs
@@ -145,7 +145,7 @@ fn visit_expr(e: @ast::expr, wbcx: wb_ctxt, v: wb_vt) {
             match (r_ty, input.mode) {
               (Some(t), ast::infer(_)) => {
                 let tcx = wbcx.fcx.ccx.tcx;
-                let m_def = ty::default_arg_mode_for_ty(t);
+                let m_def = ty::default_arg_mode_for_ty(tcx, t);
                 ty::set_default_mode(tcx, input.mode, m_def);
               }
               _ => ()
diff --git a/src/rustc/rustc.rc b/src/rustc/rustc.rc
index 501192d3ced..67f36e3f249 100644
--- a/src/rustc/rustc.rc
+++ b/src/rustc/rustc.rc
@@ -11,6 +11,8 @@
 
 #[no_core];
 
+#[legacy_modes];
+
 #[allow(vecs_implicitly_copyable)];
 #[allow(non_camel_case_types)];
 // #[warn(deprecated_pattern)];
diff --git a/src/rustc/util/ppaux.rs b/src/rustc/util/ppaux.rs
index 6dc6440350a..e67aba71eae 100644
--- a/src/rustc/util/ppaux.rs
+++ b/src/rustc/util/ppaux.rs
@@ -258,7 +258,7 @@ fn ty_to_str(cx: ctxt, typ: t) -> ~str {
           ast::infer(_) => ~"",
           ast::expl(m) => {
             if !ty::type_needs_infer(ty) &&
-                m == ty::default_arg_mode_for_ty(ty) {
+                m == ty::default_arg_mode_for_ty(cx, ty) {
                 ~""
             } else {
                 mode_to_str(ast::expl(m))
diff --git a/src/rustdoc/rustdoc.rc b/src/rustdoc/rustdoc.rc
index b50defeb99d..b68efef69a5 100644
--- a/src/rustdoc/rustdoc.rc
+++ b/src/rustdoc/rustdoc.rc
@@ -11,6 +11,8 @@
 
 #[no_core];
 
+#[legacy_modes];
+
 #[allow(vecs_implicitly_copyable,
         non_implicitly_copyable_typarams)];
 #[allow(non_camel_case_types)];
diff --git a/src/test/auxiliary/cci_iter_lib.rs b/src/test/auxiliary/cci_iter_lib.rs
index ca7140f4504..8d1c3e99a13 100644
--- a/src/test/auxiliary/cci_iter_lib.rs
+++ b/src/test/auxiliary/cci_iter_lib.rs
@@ -1,4 +1,5 @@
 #[link(name="cci_iter_lib", vers="0.0")];
+#[legacy_modes];
 
 #[inline]
 fn iter<T>(v: ~[T], f: fn(T)) {
diff --git a/src/test/auxiliary/cci_nested_lib.rs b/src/test/auxiliary/cci_nested_lib.rs
index 6ead738753e..ed924f01d33 100644
--- a/src/test/auxiliary/cci_nested_lib.rs
+++ b/src/test/auxiliary/cci_nested_lib.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 use dvec::DVec;
 
 type entry<A,B> = {key: A, value: B};
@@ -26,4 +28,4 @@ fn new_int_alist_2<B: Copy>() -> alist<int, B> {
     #[inline]
     fn eq_int(&&a: int, &&b: int) -> bool { a == b }
     return {eq_fn: eq_int, data: DVec()};
-}
\ No newline at end of file
+}
diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs
index ddd900aa382..3729f1d31f7 100644
--- a/src/test/bench/graph500-bfs.rs
+++ b/src/test/bench/graph500-bfs.rs
@@ -4,6 +4,8 @@ An implementation of the Graph500 Breadth First Search problem in Rust.
 
 */
 
+#[legacy_modes];
+
 extern mod std;
 use std::arc;
 use std::time;
diff --git a/src/test/bench/msgsend-pipes-shared.rs b/src/test/bench/msgsend-pipes-shared.rs
index a8c51b2502b..5d459f97a25 100644
--- a/src/test/bench/msgsend-pipes-shared.rs
+++ b/src/test/bench/msgsend-pipes-shared.rs
@@ -10,6 +10,8 @@
 
 // xfail-pretty
 
+#[legacy_modes];
+
 extern mod std;
 use io::Writer;
 use io::WriterUtil;
diff --git a/src/test/bench/msgsend-pipes.rs b/src/test/bench/msgsend-pipes.rs
index 52a30861b62..f6da3296a03 100644
--- a/src/test/bench/msgsend-pipes.rs
+++ b/src/test/bench/msgsend-pipes.rs
@@ -6,6 +6,8 @@
 
 // xfail-pretty
 
+#[legacy_modes];
+
 extern mod std;
 use io::Writer;
 use io::WriterUtil;
diff --git a/src/test/bench/shootout-k-nucleotide-pipes.rs b/src/test/bench/shootout-k-nucleotide-pipes.rs
index da4a226d9c0..4915a19f878 100644
--- a/src/test/bench/shootout-k-nucleotide-pipes.rs
+++ b/src/test/bench/shootout-k-nucleotide-pipes.rs
@@ -2,6 +2,8 @@
 
 // multi tasking k-nucleotide
 
+#[legacy_modes];
+
 extern mod std;
 use std::map;
 use std::map::HashMap;
diff --git a/src/test/bench/shootout-mandelbrot.rs b/src/test/bench/shootout-mandelbrot.rs
index 167bbe7dc7d..44ba7eaf0c9 100644
--- a/src/test/bench/shootout-mandelbrot.rs
+++ b/src/test/bench/shootout-mandelbrot.rs
@@ -12,6 +12,8 @@
 //
 //  writes pbm image to output path
 
+#[legacy_modes];
+
 extern mod std;
 use io::WriterUtil;
 use std::map::HashMap;
diff --git a/src/test/bench/shootout-pfib.rs b/src/test/bench/shootout-pfib.rs
index e929690ccfa..57f64760745 100644
--- a/src/test/bench/shootout-pfib.rs
+++ b/src/test/bench/shootout-pfib.rs
@@ -10,6 +10,8 @@
 
 */
 
+#[legacy_modes];
+
 extern mod std;
 
 use std::{time, getopts};
diff --git a/src/test/bench/task-perf-word-count-generic.rs b/src/test/bench/task-perf-word-count-generic.rs
index 37407881674..4aeaf26fb1a 100644
--- a/src/test/bench/task-perf-word-count-generic.rs
+++ b/src/test/bench/task-perf-word-count-generic.rs
@@ -10,6 +10,8 @@
 
 // xfail-pretty
 
+#[legacy_modes];
+
 extern mod std;
 
 use option = option;
diff --git a/src/test/compile-fail/borrowck-unchecked-with-borrow.rs b/src/test/compile-fail/borrowck-unchecked-with-borrow.rs
index 22a1c15986c..0c5bcdd6ac1 100644
--- a/src/test/compile-fail/borrowck-unchecked-with-borrow.rs
+++ b/src/test/compile-fail/borrowck-unchecked-with-borrow.rs
@@ -1,3 +1,7 @@
+// xfail-test
+// xfail-fast
+#[legacy_modes];
+
 fn impure(_i: int) {}
 
 // check that unchecked alone does not override borrowck:
diff --git a/src/test/compile-fail/fn-variance-1.rs b/src/test/compile-fail/fn-variance-1.rs
index 01abd73bb47..2e7ea89bfc3 100644
--- a/src/test/compile-fail/fn-variance-1.rs
+++ b/src/test/compile-fail/fn-variance-1.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn takes_mut(&&x: @mut int) { }
 fn takes_const(&&x: @const int) { }
 fn takes_imm(&&x: @int) { }
diff --git a/src/test/compile-fail/issue-2587-2.rs b/src/test/compile-fail/issue-2587-2.rs
index 36cf99b321c..a8381f223af 100644
--- a/src/test/compile-fail/issue-2587-2.rs
+++ b/src/test/compile-fail/issue-2587-2.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn foo<T: Copy>(+_t: T) { fail; }
 
 fn bar<T>(+_t: T) { fail; }
diff --git a/src/test/compile-fail/mode-inference-fail.rs b/src/test/compile-fail/mode-inference-fail.rs
index 9f9eabab44a..d87c04f6cb4 100644
--- a/src/test/compile-fail/mode-inference-fail.rs
+++ b/src/test/compile-fail/mode-inference-fail.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 // In this test, the mode gets inferred to ++ due to the apply_int(),
 // but then we get a failure in the generic apply().
 
diff --git a/src/test/compile-fail/pure-higher-order.rs b/src/test/compile-fail/pure-higher-order.rs
index 9737b195cfa..b08004b182d 100644
--- a/src/test/compile-fail/pure-higher-order.rs
+++ b/src/test/compile-fail/pure-higher-order.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 // Test rules governing higher-order pure fns.
 
 pure fn range(from: uint, to: uint, f: fn(uint)) {
@@ -45,4 +47,4 @@ fn print(i: uint) { error!("i=%u", i); }
 pure fn noop(_i: uint) {}
 
 fn main() {
-}
\ No newline at end of file
+}
diff --git a/src/test/compile-fail/regions-creating-enums.rs b/src/test/compile-fail/regions-creating-enums.rs
index 6cacf49300d..e226b9b6589 100644
--- a/src/test/compile-fail/regions-creating-enums.rs
+++ b/src/test/compile-fail/regions-creating-enums.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 enum ast {
     num(uint),
     add(&ast, &ast)
@@ -30,4 +32,4 @@ fn map_nums(x: &ast, f: fn(uint) -> uint) -> &ast {
     }
 }
 
-fn main() {}
\ No newline at end of file
+fn main() {}
diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs
index 66299089df9..a5a061bc25c 100644
--- a/src/test/run-pass-fulldeps/qquote.rs
+++ b/src/test/run-pass-fulldeps/qquote.rs
@@ -1,5 +1,7 @@
 // xfail-pretty
 
+#[legacy_modes];
+
 extern mod std;
 extern mod syntax;
 
diff --git a/src/test/run-pass/argument-passing.rs b/src/test/run-pass/argument-passing.rs
index 1d1ae9c785f..baad882d2f4 100644
--- a/src/test/run-pass/argument-passing.rs
+++ b/src/test/run-pass/argument-passing.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn f1(a: {mut x: int}, &b: int, -c: int) -> int {
     let r = a.x + b + c;
     a.x = 0;
diff --git a/src/test/run-pass/assignability-trait.rs b/src/test/run-pass/assignability-trait.rs
index 3f53525a5ba..37c7f36445c 100644
--- a/src/test/run-pass/assignability-trait.rs
+++ b/src/test/run-pass/assignability-trait.rs
@@ -2,6 +2,8 @@
 // making method calls, but only if there aren't any matches without
 // it.
 
+#[legacy_modes];
+
 trait iterable<A> {
     fn iterate(blk: fn(A) -> bool);
 }
diff --git a/src/test/run-pass/auto_serialize.rs b/src/test/run-pass/auto_serialize.rs
index 034d906741f..aada71e13cc 100644
--- a/src/test/run-pass/auto_serialize.rs
+++ b/src/test/run-pass/auto_serialize.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 // These tests used to be separate files, but I wanted to refactor all
diff --git a/src/test/run-pass/block-iter-1.rs b/src/test/run-pass/block-iter-1.rs
index e9d548dd6ef..dcf43c0e86a 100644
--- a/src/test/run-pass/block-iter-1.rs
+++ b/src/test/run-pass/block-iter-1.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn iter_vec<T>(v: ~[T], f: fn(T)) { for v.each |x| { f(x); } }
 
 fn main() {
diff --git a/src/test/run-pass/block-iter-2.rs b/src/test/run-pass/block-iter-2.rs
index 125e003a3f5..2c8d693e0f2 100644
--- a/src/test/run-pass/block-iter-2.rs
+++ b/src/test/run-pass/block-iter-2.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn iter_vec<T>(v: ~[T], f: fn(T)) { for v.each |x| { f(x); } }
 
 fn main() {
diff --git a/src/test/run-pass/cci_iter_exe.rs b/src/test/run-pass/cci_iter_exe.rs
index 973732b18c2..8bd4b03db2a 100644
--- a/src/test/run-pass/cci_iter_exe.rs
+++ b/src/test/run-pass/cci_iter_exe.rs
@@ -1,6 +1,8 @@
 // xfail-fast - check-fast doesn't understand aux-build
 // aux-build:cci_iter_lib.rs
 
+#[legacy_modes];
+
 extern mod cci_iter_lib;
 
 fn main() {
diff --git a/src/test/run-pass/cci_nested_exe.rs b/src/test/run-pass/cci_nested_exe.rs
index a5d62b95712..11f0d3a5c94 100644
--- a/src/test/run-pass/cci_nested_exe.rs
+++ b/src/test/run-pass/cci_nested_exe.rs
@@ -1,6 +1,8 @@
 // xfail-fast - check-fast doesn't understand aux-build
 // aux-build:cci_nested_lib.rs
 
+#[legacy_modes];
+
 extern mod cci_nested_lib;
 use cci_nested_lib::*;
 
diff --git a/src/test/run-pass/class-impl-very-parameterized-trait.rs b/src/test/run-pass/class-impl-very-parameterized-trait.rs
index b304eb677a3..97ed4487e70 100644
--- a/src/test/run-pass/class-impl-very-parameterized-trait.rs
+++ b/src/test/run-pass/class-impl-very-parameterized-trait.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 use std::map::*;
 
diff --git a/src/test/run-pass/class-implement-traits.rs b/src/test/run-pass/class-implement-traits.rs
index aa8e52e3351..c39ab16d744 100644
--- a/src/test/run-pass/class-implement-traits.rs
+++ b/src/test/run-pass/class-implement-traits.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 trait noisy {
   fn speak();
 }
@@ -56,4 +58,4 @@ fn main() {
   assert(!nyan.eat());
   for uint::range(1u, 10u) |_i| { make_speak(nyan); };
   assert(nyan.eat());
-}
\ No newline at end of file
+}
diff --git a/src/test/run-pass/closure-inference.rs b/src/test/run-pass/closure-inference.rs
index 72d08a5fd20..d02f420b6c0 100644
--- a/src/test/run-pass/closure-inference.rs
+++ b/src/test/run-pass/closure-inference.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn foo(i: int) -> int { i + 1 }
 
 fn apply<A>(f: fn(A) -> A, v: A) -> A { f(v) }
diff --git a/src/test/run-pass/expr-alt-generic-box2.rs b/src/test/run-pass/expr-alt-generic-box2.rs
index ef0b2c2078d..97806131b7b 100644
--- a/src/test/run-pass/expr-alt-generic-box2.rs
+++ b/src/test/run-pass/expr-alt-generic-box2.rs
@@ -1,7 +1,7 @@
+// -*- rust -*-
 
+#[legacy_modes];
 
-
-// -*- rust -*-
 type compare<T> = fn@(T, T) -> bool;
 
 fn test_generic<T: Copy>(expected: T, eq: compare<T>) {
diff --git a/src/test/run-pass/expr-alt-generic-unique2.rs b/src/test/run-pass/expr-alt-generic-unique2.rs
index e5c8d2acd87..122b999c068 100644
--- a/src/test/run-pass/expr-alt-generic-unique2.rs
+++ b/src/test/run-pass/expr-alt-generic-unique2.rs
@@ -1,7 +1,7 @@
+// -*- rust -*-
 
+#[legacy_modes];
 
-
-// -*- rust -*-
 type compare<T> = fn@(T, T) -> bool;
 
 fn test_generic<T: Copy>(expected: T, eq: compare<T>) {
diff --git a/src/test/run-pass/expr-alt-generic.rs b/src/test/run-pass/expr-alt-generic.rs
index d17d7db9038..931c65827f8 100644
--- a/src/test/run-pass/expr-alt-generic.rs
+++ b/src/test/run-pass/expr-alt-generic.rs
@@ -1,7 +1,6 @@
-
-
-
 // -*- rust -*-
+#[legacy_modes];
+
 type compare<T> = fn@(T, T) -> bool;
 
 fn test_generic<T: Copy>(expected: T, eq: compare<T>) {
diff --git a/src/test/run-pass/expr-block-generic-box2.rs b/src/test/run-pass/expr-block-generic-box2.rs
index 8fc566d5843..83a87892cbd 100644
--- a/src/test/run-pass/expr-block-generic-box2.rs
+++ b/src/test/run-pass/expr-block-generic-box2.rs
@@ -1,7 +1,6 @@
-
-
-
 // -*- rust -*-
+#[legacy_modes];
+
 type compare<T> = fn@(T, T) -> bool;
 
 fn test_generic<T: Copy>(expected: T, eq: compare<T>) {
diff --git a/src/test/run-pass/expr-block-generic-unique2.rs b/src/test/run-pass/expr-block-generic-unique2.rs
index cda0148cfe8..40cba1bb294 100644
--- a/src/test/run-pass/expr-block-generic-unique2.rs
+++ b/src/test/run-pass/expr-block-generic-unique2.rs
@@ -1,7 +1,6 @@
-
-
-
 // -*- rust -*-
+#[legacy_modes];
+
 type compare<T> = fn@(T, T) -> bool;
 
 fn test_generic<T: Copy>(expected: T, eq: compare<T>) {
diff --git a/src/test/run-pass/expr-block-generic.rs b/src/test/run-pass/expr-block-generic.rs
index adb49f3142d..8618bba4bed 100644
--- a/src/test/run-pass/expr-block-generic.rs
+++ b/src/test/run-pass/expr-block-generic.rs
@@ -1,8 +1,7 @@
-
-
-
 // -*- rust -*-
 
+#[legacy_modes];
+
 // Tests for standalone blocks as expressions with dynamic type sizes
 type compare<T> = fn@(T, T) -> bool;
 
diff --git a/src/test/run-pass/expr-copy.rs b/src/test/run-pass/expr-copy.rs
index 279e916b75a..6aebd902194 100644
--- a/src/test/run-pass/expr-copy.rs
+++ b/src/test/run-pass/expr-copy.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn f(arg: {mut a: int}) {
     arg.a = 100;
 }
diff --git a/src/test/run-pass/expr-if-generic-box2.rs b/src/test/run-pass/expr-if-generic-box2.rs
index e5370db83d1..9550b22fb2f 100644
--- a/src/test/run-pass/expr-if-generic-box2.rs
+++ b/src/test/run-pass/expr-if-generic-box2.rs
@@ -1,7 +1,6 @@
-
-
-
 // -*- rust -*-
+#[legacy_modes];
+
 type compare<T> = fn@(T, T) -> bool;
 
 fn test_generic<T: Copy>(expected: T, not_expected: T, eq: compare<T>) {
diff --git a/src/test/run-pass/expr-if-generic.rs b/src/test/run-pass/expr-if-generic.rs
index 5d7730809d5..8ad7d480aad 100644
--- a/src/test/run-pass/expr-if-generic.rs
+++ b/src/test/run-pass/expr-if-generic.rs
@@ -1,7 +1,5 @@
-
-
-
 // -*- rust -*-
+#[legacy_modes];
 
 // Tests for if as expressions with dynamic type sizes
 type compare<T> = fn@(T, T) -> bool;
diff --git a/src/test/run-pass/fixed-point-bind-box.rs b/src/test/run-pass/fixed-point-bind-box.rs
index 7bf1b813e93..3ea976df27c 100644
--- a/src/test/run-pass/fixed-point-bind-box.rs
+++ b/src/test/run-pass/fixed-point-bind-box.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn fix_help<A, B>(f: extern fn(fn@(A) -> B, A) -> B, x: A) -> B {
     return f({|a|fix_help(f, a)}, x);
 }
diff --git a/src/test/run-pass/fixed-point-bind-unique.rs b/src/test/run-pass/fixed-point-bind-unique.rs
index 2c7ef7fb125..b70a6c4039f 100644
--- a/src/test/run-pass/fixed-point-bind-unique.rs
+++ b/src/test/run-pass/fixed-point-bind-unique.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn fix_help<A: Owned, B: Send>(f: extern fn(fn@(A) -> B, A) -> B, x: A) -> B {
     return f({|a|fix_help(f, a)}, x);
 }
diff --git a/src/test/run-pass/fn-bare-spawn.rs b/src/test/run-pass/fn-bare-spawn.rs
index cc57ba6a9af..ae0a754fc6d 100644
--- a/src/test/run-pass/fn-bare-spawn.rs
+++ b/src/test/run-pass/fn-bare-spawn.rs
@@ -1,4 +1,5 @@
 // This is what the signature to spawn should look like with bare functions
+#[legacy_modes];
 
 fn spawn<T: Send>(val: T, f: extern fn(T)) {
     f(val);
@@ -10,4 +11,4 @@ fn f(&&i: int) {
 
 fn main() {
     spawn(100, f);
-}
\ No newline at end of file
+}
diff --git a/src/test/run-pass/generic-temporary.rs b/src/test/run-pass/generic-temporary.rs
index f0a16e79fb0..37dc1e9fb57 100644
--- a/src/test/run-pass/generic-temporary.rs
+++ b/src/test/run-pass/generic-temporary.rs
@@ -1,4 +1,4 @@
-
+#[legacy_modes];
 
 fn mk() -> int { return 1; }
 
diff --git a/src/test/run-pass/intrinsic-frame-address.rs b/src/test/run-pass/intrinsic-frame-address.rs
index 31ea745d162..7ed6dd2946b 100644
--- a/src/test/run-pass/intrinsic-frame-address.rs
+++ b/src/test/run-pass/intrinsic-frame-address.rs
@@ -1,3 +1,4 @@
+#[legacy_modes];
 #[abi = "rust-intrinsic"]
 extern mod rusti {
     fn frame_address(f: fn(*u8));
diff --git a/src/test/run-pass/issue-2185.rs b/src/test/run-pass/issue-2185.rs
index 7bd5dab7d95..5491f7dfd7e 100644
--- a/src/test/run-pass/issue-2185.rs
+++ b/src/test/run-pass/issue-2185.rs
@@ -2,6 +2,8 @@
 // However, the condition it was testing seemed complex enough to
 // warrant still having a test, so I inlined the old definitions.
 
+#[legacy_modes];
+
 trait iterable<A> {
     fn iter(blk: fn(A));
 }
diff --git a/src/test/run-pass/issue-2611.rs b/src/test/run-pass/issue-2611.rs
index 0d5c244abcb..5f2248a3870 100644
--- a/src/test/run-pass/issue-2611.rs
+++ b/src/test/run-pass/issue-2611.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 use iter::BaseIter;
 
 trait FlatMapToVec<A> {
@@ -10,4 +12,4 @@ impl<A:Copy> BaseIter<A>: FlatMapToVec<A> {
    }
 }
 
-fn main() {}
\ No newline at end of file
+fn main() {}
diff --git a/src/test/run-pass/last-use-corner-cases.rs b/src/test/run-pass/last-use-corner-cases.rs
index 6963cdf5d16..b6fb3547bc9 100644
--- a/src/test/run-pass/last-use-corner-cases.rs
+++ b/src/test/run-pass/last-use-corner-cases.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn main() {
     // Make sure closing over can be a last use
     let q = ~10;
diff --git a/src/test/run-pass/monad.rs b/src/test/run-pass/monad.rs
index 36eea6e89d5..ae8797ce764 100644
--- a/src/test/run-pass/monad.rs
+++ b/src/test/run-pass/monad.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 trait vec_monad<A> {
     fn bind<B: Copy>(f: fn(A) -> ~[B]) -> ~[B];
 }
diff --git a/src/test/run-pass/operator-overloading.rs b/src/test/run-pass/operator-overloading.rs
index 79eef40bfeb..6956d8b653d 100644
--- a/src/test/run-pass/operator-overloading.rs
+++ b/src/test/run-pass/operator-overloading.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 struct Point {
     x: int,
     y: int
diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs
index 7ead5028956..8f48b44aa3b 100644
--- a/src/test/run-pass/reflect-visit-data.rs
+++ b/src/test/run-pass/reflect-visit-data.rs
@@ -1,3 +1,4 @@
+#[legacy_modes];
 
 use intrinsic::{TyDesc, get_tydesc, visit_tydesc, TyVisitor};
 use libc::c_void;
diff --git a/src/test/run-pass/regions-params.rs b/src/test/run-pass/regions-params.rs
index 5f2b2756fb0..75e3afc07d8 100644
--- a/src/test/run-pass/regions-params.rs
+++ b/src/test/run-pass/regions-params.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn region_identity(x: &r/uint) -> &r/uint { x }
 
 fn apply<T>(t: T, f: fn(T) -> T) -> T { f(t) }
@@ -12,4 +14,4 @@ fn parameterized(x: &uint) -> uint {
 fn main() {
     let x = 3u;
     assert parameterized(&x) == 3u;
-}
\ No newline at end of file
+}
diff --git a/src/test/run-pass/resource-generic.rs b/src/test/run-pass/resource-generic.rs
index 392d68d8763..a63ec8d154a 100644
--- a/src/test/run-pass/resource-generic.rs
+++ b/src/test/run-pass/resource-generic.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 struct finish<T: Copy> {
   arg: {val: T, fin: extern fn(T)},
   drop { self.arg.fin(self.arg.val); }
diff --git a/src/test/run-pass/ret-break-cont-in-block.rs b/src/test/run-pass/ret-break-cont-in-block.rs
index 90eddb794f4..12ad2d78929 100644
--- a/src/test/run-pass/ret-break-cont-in-block.rs
+++ b/src/test/run-pass/ret-break-cont-in-block.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 use cmp::Eq;
 
 fn iter<T>(v: ~[T], it: fn(T) -> bool) {
diff --git a/src/test/run-pass/sendfn-generic-fn.rs b/src/test/run-pass/sendfn-generic-fn.rs
index 194c3ada9ac..bc23e6734d2 100644
--- a/src/test/run-pass/sendfn-generic-fn.rs
+++ b/src/test/run-pass/sendfn-generic-fn.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 use comm::Chan;
diff --git a/src/test/run-pass/sendfn-is-a-block.rs b/src/test/run-pass/sendfn-is-a-block.rs
index 21af730caba..5e16a3de748 100644
--- a/src/test/run-pass/sendfn-is-a-block.rs
+++ b/src/test/run-pass/sendfn-is-a-block.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn test(f: fn(uint) -> uint) -> uint {
     return f(22u);
 }
@@ -5,4 +7,4 @@ fn test(f: fn(uint) -> uint) -> uint {
 fn main() {
     let y = test(fn~(x: uint) -> uint { return 4u * x; });
     assert y == 88u;
-}
\ No newline at end of file
+}
diff --git a/src/test/run-pass/static-impl.rs b/src/test/run-pass/static-impl.rs
index e29f3fdd5e4..ded9b1e6768 100644
--- a/src/test/run-pass/static-impl.rs
+++ b/src/test/run-pass/static-impl.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 use a::*;
 
 trait plus {
diff --git a/src/test/run-pass/static-method-test.rs b/src/test/run-pass/static-method-test.rs
index 1fc930a688e..80a2246e6e3 100644
--- a/src/test/run-pass/static-method-test.rs
+++ b/src/test/run-pass/static-method-test.rs
@@ -1,3 +1,4 @@
+#[legacy_modes];
 
 // A trait for objects that can be used to do an if-then-else
 // (No actual need for this to be static, but it is a simple test.)
diff --git a/src/test/run-pass/task-comm-0.rs b/src/test/run-pass/task-comm-0.rs
index 406c08cd3fb..4655792e216 100644
--- a/src/test/run-pass/task-comm-0.rs
+++ b/src/test/run-pass/task-comm-0.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 use pipes::Chan;
diff --git a/src/test/run-pass/task-comm-10.rs b/src/test/run-pass/task-comm-10.rs
index 9b52172cfc5..57942e23939 100644
--- a/src/test/run-pass/task-comm-10.rs
+++ b/src/test/run-pass/task-comm-10.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 fn start(c: pipes::Chan<pipes::Chan<~str>>) {
diff --git a/src/test/run-pass/task-comm-11.rs b/src/test/run-pass/task-comm-11.rs
index b90f8fed400..826436ff2a9 100644
--- a/src/test/run-pass/task-comm-11.rs
+++ b/src/test/run-pass/task-comm-11.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 fn start(c: pipes::Chan<pipes::Chan<int>>) {
diff --git a/src/test/run-pass/task-comm-13.rs b/src/test/run-pass/task-comm-13.rs
index 267d16852b9..de13722e238 100644
--- a/src/test/run-pass/task-comm-13.rs
+++ b/src/test/run-pass/task-comm-13.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 use pipes::send;
 
diff --git a/src/test/run-pass/task-comm-14.rs b/src/test/run-pass/task-comm-14.rs
index 9f4aac349d3..efb4f49b2b1 100644
--- a/src/test/run-pass/task-comm-14.rs
+++ b/src/test/run-pass/task-comm-14.rs
@@ -1,3 +1,4 @@
+#[legacy_modes];
 
 fn main() {
     let po = pipes::PortSet();
diff --git a/src/test/run-pass/task-comm-15.rs b/src/test/run-pass/task-comm-15.rs
index 15ed2d26aa2..22f40e784a7 100644
--- a/src/test/run-pass/task-comm-15.rs
+++ b/src/test/run-pass/task-comm-15.rs
@@ -1,4 +1,6 @@
 // xfail-win32
+#[legacy_modes];
+
 extern mod std;
 
 fn start(c: pipes::Chan<int>, i0: int) {
diff --git a/src/test/run-pass/task-comm-3.rs b/src/test/run-pass/task-comm-3.rs
index f232e9bf8c8..f54b1d173f3 100644
--- a/src/test/run-pass/task-comm-3.rs
+++ b/src/test/run-pass/task-comm-3.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 use pipes::Chan;
 use pipes::send;
diff --git a/src/test/run-pass/task-comm-7.rs b/src/test/run-pass/task-comm-7.rs
index f5778fcb6e3..025c1f35451 100644
--- a/src/test/run-pass/task-comm-7.rs
+++ b/src/test/run-pass/task-comm-7.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 fn main() { test00(); }
diff --git a/src/test/run-pass/task-comm-9.rs b/src/test/run-pass/task-comm-9.rs
index eefc7452969..bc553998e90 100644
--- a/src/test/run-pass/task-comm-9.rs
+++ b/src/test/run-pass/task-comm-9.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 extern mod std;
 
 fn main() { test00(); }
diff --git a/src/test/run-pass/trait-generic.rs b/src/test/run-pass/trait-generic.rs
index 4c7d0415d85..6e684cea403 100644
--- a/src/test/run-pass/trait-generic.rs
+++ b/src/test/run-pass/trait-generic.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 trait to_str {
     fn to_str() -> ~str;
 }
diff --git a/src/test/run-pass/type-param-constraints.rs b/src/test/run-pass/type-param-constraints.rs
index f96c2bede61..dc52a181daf 100644
--- a/src/test/run-pass/type-param-constraints.rs
+++ b/src/test/run-pass/type-param-constraints.rs
@@ -1,3 +1,5 @@
+#[legacy_modes];
+
 fn p_foo<T>(pinned: T) { }
 fn s_foo<T: Copy>(shared: T) { }
 fn u_foo<T: Send>(unique: T) { }