diff --git a/src/test/run-pass/alias-uninit-value.rs b/src/test/run-pass/alias-uninit-value.rs
index 888acf30b2a..ab395466afc 100644
--- a/src/test/run-pass/alias-uninit-value.rs
+++ b/src/test/run-pass/alias-uninit-value.rs
@@ -20,4 +20,4 @@ fn mk_raw_ty(st: sty, cname: Option<~str>) -> RawT {
     return RawT {struct_: st, cname: cname, hash: 0u};
 }
 
-fn main() { mk_raw_ty(ty_nil, None::<~str>); }
+pub fn main() { mk_raw_ty(ty_nil, None::<~str>); }
diff --git a/src/test/run-pass/alignment-gep-tup-like-1.rs b/src/test/run-pass/alignment-gep-tup-like-1.rs
index a880b50d628..64cc58c2af5 100644
--- a/src/test/run-pass/alignment-gep-tup-like-1.rs
+++ b/src/test/run-pass/alignment-gep-tup-like-1.rs
@@ -16,7 +16,7 @@ fn f<A:Copy &static>(a: A, b: u16) -> fn@() -> (A, u16) {
     fn@() -> (A, u16) { (a, b) }
 }
 
-fn main() {
+pub fn main() {
     let (a, b) = f(22_u64, 44u16)();
     debug!("a=%? b=%?", a, b);
     assert a == 22u64;
diff --git a/src/test/run-pass/alignment-gep-tup-like-2.rs b/src/test/run-pass/alignment-gep-tup-like-2.rs
index 2e0e3ea8f55..01dcd6a3647 100644
--- a/src/test/run-pass/alignment-gep-tup-like-2.rs
+++ b/src/test/run-pass/alignment-gep-tup-like-2.rs
@@ -27,7 +27,7 @@ fn f<A:Owned Copy, B:Owned Copy>(a: A, b: B) -> fn@() -> (A, B) {
     fn@() -> (A, B) { (a, b) }
 }
 
-fn main() {
+pub fn main() {
     let x = 22_u8;
     let y = 44_u64;
     let z = f(~x, y);
diff --git a/src/test/run-pass/alloca-from-derived-tydesc.rs b/src/test/run-pass/alloca-from-derived-tydesc.rs
index 2901754c8f2..37fdfca4468 100644
--- a/src/test/run-pass/alloca-from-derived-tydesc.rs
+++ b/src/test/run-pass/alloca-from-derived-tydesc.rs
@@ -14,4 +14,4 @@ struct R<T> {mut v: ~[option<T>]}
 
 fn f<T>() -> ~[T] { return ~[]; }
 
-fn main() { let r: R<int> = R {mut v: ~[]}; r.v = f(); }
+pub fn main() { let r: R<int> = R {mut v: ~[]}; r.v = f(); }
diff --git a/src/test/run-pass/alt-borrowed_str.rs b/src/test/run-pass/alt-borrowed_str.rs
index a1a02b99962..1a58174a3fb 100644
--- a/src/test/run-pass/alt-borrowed_str.rs
+++ b/src/test/run-pass/alt-borrowed_str.rs
@@ -33,7 +33,7 @@ fn g2(ref_1: &str, ref_2: &str) {
     }
 }
 
-fn main() {
+pub fn main() {
     f1(@"a");
     f1(~"b");
     f1(&"c");
diff --git a/src/test/run-pass/alt-bot-2.rs b/src/test/run-pass/alt-bot-2.rs
index ffa0b5e0cf1..2ca1881417e 100644
--- a/src/test/run-pass/alt-bot-2.rs
+++ b/src/test/run-pass/alt-bot-2.rs
@@ -10,4 +10,4 @@
 
 // n.b. This was only ever failing with optimization disabled.
 fn a() -> int { match return 1 { 2 => 3, _ => die!() } }
-fn main() { a(); }
+pub fn main() { a(); }
diff --git a/src/test/run-pass/alt-bot.rs b/src/test/run-pass/alt-bot.rs
index 1e5e541a1de..cb30c5e96a0 100644
--- a/src/test/run-pass/alt-bot.rs
+++ b/src/test/run-pass/alt-bot.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 
-fn main() {
+pub fn main() {
     let i: int =
         match Some::<int>(3) { None::<int> => { die!() } Some::<int>(_) => { 5 } };
     log(debug, i);
diff --git a/src/test/run-pass/alt-implicit-copy-unique.rs b/src/test/run-pass/alt-implicit-copy-unique.rs
index a30a0c64215..58076b59ceb 100644
--- a/src/test/run-pass/alt-implicit-copy-unique.rs
+++ b/src/test/run-pass/alt-implicit-copy-unique.rs
@@ -10,7 +10,7 @@
 
 struct Pair { mut a: ~int, mut b: ~int }
 
-fn main() {
+pub fn main() {
     let x = ~Pair {mut a: ~10, b: ~20};
     match x {
       ~Pair {a: ref mut a, b: ref b} => {
diff --git a/src/test/run-pass/alt-join.rs b/src/test/run-pass/alt-join.rs
index 2dfda0fcb34..b9f25396b32 100644
--- a/src/test/run-pass/alt-join.rs
+++ b/src/test/run-pass/alt-join.rs
@@ -28,4 +28,4 @@ fn foo<T>(y: Option<T>) {
     return;
 }
 
-fn main() { debug!("hello"); foo::<int>(Some::<int>(5)); }
+pub fn main() { debug!("hello"); foo::<int>(Some::<int>(5)); }
diff --git a/src/test/run-pass/alt-naked-record-expr.rs b/src/test/run-pass/alt-naked-record-expr.rs
index f23cf72cf1f..649bdd202df 100644
--- a/src/test/run-pass/alt-naked-record-expr.rs
+++ b/src/test/run-pass/alt-naked-record-expr.rs
@@ -10,7 +10,7 @@
 
 struct X { x: int }
 
-fn main() {
+pub fn main() {
     let x = match 0 {
       _ => X {
         x: 0
diff --git a/src/test/run-pass/alt-naked-record.rs b/src/test/run-pass/alt-naked-record.rs
index dbb8b07b8e8..4d89fdc6910 100644
--- a/src/test/run-pass/alt-naked-record.rs
+++ b/src/test/run-pass/alt-naked-record.rs
@@ -10,7 +10,7 @@
 
 struct X { x: int }
 
-fn main() {
+pub fn main() {
     let x = match 0 {
       _ => X {
         x: 0
diff --git a/src/test/run-pass/alt-path.rs b/src/test/run-pass/alt-path.rs
index 0d00dec6760..3da6bb93486 100644
--- a/src/test/run-pass/alt-path.rs
+++ b/src/test/run-pass/alt-path.rs
@@ -16,4 +16,4 @@ mod m1 {
 
 fn bar(x: m1::foo) { match x { m1::foo1 => { } m1::foo2 => { } } }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/alt-pattern-drop.rs b/src/test/run-pass/alt-pattern-drop.rs
index 02ebcdc34e4..53ec6e0ed85 100644
--- a/src/test/run-pass/alt-pattern-drop.rs
+++ b/src/test/run-pass/alt-pattern-drop.rs
@@ -29,7 +29,7 @@ fn foo(s: @int) {
     let _ = ::core::sys::refcount(s); // don't get bitten by last-use.
 }
 
-fn main() {
+pub fn main() {
     let s: @int = @0; // ref up
 
     let count = ::core::sys::refcount(s);
diff --git a/src/test/run-pass/alt-pattern-lit.rs b/src/test/run-pass/alt-pattern-lit.rs
index 89db197e116..91e2643dd75 100644
--- a/src/test/run-pass/alt-pattern-lit.rs
+++ b/src/test/run-pass/alt-pattern-lit.rs
@@ -18,4 +18,4 @@ fn altlit(f: int) -> int {
     }
 }
 
-fn main() { assert (altlit(10) == 20); assert (altlit(11) == 22); }
+pub fn main() { assert (altlit(10) == 20); assert (altlit(11) == 22); }
diff --git a/src/test/run-pass/alt-pattern-no-type-params.rs b/src/test/run-pass/alt-pattern-no-type-params.rs
index 1f1bd37f1a5..feabf7a8f4d 100644
--- a/src/test/run-pass/alt-pattern-no-type-params.rs
+++ b/src/test/run-pass/alt-pattern-no-type-params.rs
@@ -14,4 +14,4 @@ fn foo(x: maybe<int>) {
     match x { nothing => { error!("A"); } just(a) => { error!("B"); } }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/alt-pattern-simple.rs b/src/test/run-pass/alt-pattern-simple.rs
index 417978a0b46..f4056008103 100644
--- a/src/test/run-pass/alt-pattern-simple.rs
+++ b/src/test/run-pass/alt-pattern-simple.rs
@@ -12,4 +12,4 @@
 
 fn altsimple(f: int) { match f { x => () } }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/alt-phi.rs b/src/test/run-pass/alt-phi.rs
index 4ab30c79832..3702db8327e 100644
--- a/src/test/run-pass/alt-phi.rs
+++ b/src/test/run-pass/alt-phi.rs
@@ -14,7 +14,7 @@ enum thing { a, b, c, }
 
 fn foo(it: fn(int)) { it(10); }
 
-fn main() {
+pub fn main() {
     let mut x = true;
     match a {
       a => { x = true; foo(|_i| { } ) }
diff --git a/src/test/run-pass/alt-range.rs b/src/test/run-pass/alt-range.rs
index 6eec537b723..b4e40a7b7ab 100644
--- a/src/test/run-pass/alt-range.rs
+++ b/src/test/run-pass/alt-range.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     match 5u {
       1u..5u => {}
       _ => die!(~"should match range"),
diff --git a/src/test/run-pass/alt-ref-binding-in-guard-3256.rs b/src/test/run-pass/alt-ref-binding-in-guard-3256.rs
index f04706a0e3c..407d496236f 100644
--- a/src/test/run-pass/alt-ref-binding-in-guard-3256.rs
+++ b/src/test/run-pass/alt-ref-binding-in-guard-3256.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = Some(private::exclusive(true));
     match move x {
         Some(ref z) if z.with(|b| *b) => {
diff --git a/src/test/run-pass/alt-ref-binding-mut-option.rs b/src/test/run-pass/alt-ref-binding-mut-option.rs
index 5a86fff3190..50bcd3644ed 100644
--- a/src/test/run-pass/alt-ref-binding-mut-option.rs
+++ b/src/test/run-pass/alt-ref-binding-mut-option.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut v = Some(22);
     match v {
       None => {}
diff --git a/src/test/run-pass/alt-ref-binding-mut.rs b/src/test/run-pass/alt-ref-binding-mut.rs
index fc124041fd4..9f062f7b001 100644
--- a/src/test/run-pass/alt-ref-binding-mut.rs
+++ b/src/test/run-pass/alt-ref-binding-mut.rs
@@ -18,7 +18,7 @@ fn destructure(x: &mut Rec) {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut v = Rec {f: 22};
     destructure(&mut v);
     assert v.f == 23;
diff --git a/src/test/run-pass/alt-ref-binding.rs b/src/test/run-pass/alt-ref-binding.rs
index 05c40f7bb30..abb7aa30a01 100644
--- a/src/test/run-pass/alt-ref-binding.rs
+++ b/src/test/run-pass/alt-ref-binding.rs
@@ -15,6 +15,6 @@ fn destructure(x: Option<int>) -> int {
     }
 }
 
-fn main() {
+pub fn main() {
     assert destructure(Some(22)) == 22;
 }
diff --git a/src/test/run-pass/alt-str.rs b/src/test/run-pass/alt-str.rs
index 6801bda1f35..57e47854ce8 100644
--- a/src/test/run-pass/alt-str.rs
+++ b/src/test/run-pass/alt-str.rs
@@ -10,7 +10,7 @@
 
 // Issue #53
 
-fn main() {
+pub fn main() {
     match ~"test" { ~"not-test" => die!(), ~"test" => (), _ => die!() }
 
     enum t { tag1(~str), tag2, }
diff --git a/src/test/run-pass/alt-tag.rs b/src/test/run-pass/alt-tag.rs
index 76e688e37b0..624c57a614e 100644
--- a/src/test/run-pass/alt-tag.rs
+++ b/src/test/run-pass/alt-tag.rs
@@ -28,7 +28,7 @@ fn process(c: color) -> int {
     return x;
 }
 
-fn main() {
+pub fn main() {
     let gray: color = rgb(127, 127, 127);
     let clear: color = rgba(50, 150, 250, 0);
     let red: color = hsl(0, 255, 255);
diff --git a/src/test/run-pass/alt-type-simple.rs b/src/test/run-pass/alt-type-simple.rs
index 4881a6bba4a..dbe9ae7cba5 100644
--- a/src/test/run-pass/alt-type-simple.rs
+++ b/src/test/run-pass/alt-type-simple.rs
@@ -8,7 +8,7 @@ fn altsimple(any x) {
   }
 }
 
-fn main() {
+pub fn main() {
   altsimple(5);
   altsimple("asdfasdfsDF");
 }
diff --git a/src/test/run-pass/alt-unique-bind.rs b/src/test/run-pass/alt-unique-bind.rs
index e2e87de3af8..902f95e7ef1 100644
--- a/src/test/run-pass/alt-unique-bind.rs
+++ b/src/test/run-pass/alt-unique-bind.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     match ~100 {
       ~x => {
         debug!("%?", x);
diff --git a/src/test/run-pass/alt-value-binding-in-guard-3291.rs b/src/test/run-pass/alt-value-binding-in-guard-3291.rs
index a6ede8dcd1d..460e8873a17 100644
--- a/src/test/run-pass/alt-value-binding-in-guard-3291.rs
+++ b/src/test/run-pass/alt-value-binding-in-guard-3291.rs
@@ -16,7 +16,7 @@ fn foo(x: Option<~int>, b: bool) -> int {
     }
 }
 
-fn main() {
+pub fn main() {
     foo(Some(~22), true);
     foo(Some(~22), false);
     foo(None, true);
diff --git a/src/test/run-pass/alt-with-ret-arm.rs b/src/test/run-pass/alt-with-ret-arm.rs
index 45ddcffcfd9..29247e47fa5 100644
--- a/src/test/run-pass/alt-with-ret-arm.rs
+++ b/src/test/run-pass/alt-with-ret-arm.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     // sometimes we have had trouble finding
     // the right type for f, as we unified
     // bot and u32 here
diff --git a/src/test/run-pass/anon-extern-mod-cross-crate-2.rs b/src/test/run-pass/anon-extern-mod-cross-crate-2.rs
index 3eb4fd52b8f..939903b3b12 100644
--- a/src/test/run-pass/anon-extern-mod-cross-crate-2.rs
+++ b/src/test/run-pass/anon-extern-mod-cross-crate-2.rs
@@ -14,6 +14,6 @@ extern mod anonexternmod;
 
 use anonexternmod::*;
 
-fn main() {
+pub fn main() {
   last_os_error();
 }
diff --git a/src/test/run-pass/anon-extern-mod.rs b/src/test/run-pass/anon-extern-mod.rs
index fc624bdd031..525e6b9fbd6 100644
--- a/src/test/run-pass/anon-extern-mod.rs
+++ b/src/test/run-pass/anon-extern-mod.rs
@@ -14,7 +14,7 @@ extern {
     fn last_os_error() -> ~str;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let _ = last_os_error();
     }
diff --git a/src/test/run-pass/anon-trait-static-method.rs b/src/test/run-pass/anon-trait-static-method.rs
index 3682fd7d01d..4143c12cf67 100644
--- a/src/test/run-pass/anon-trait-static-method.rs
+++ b/src/test/run-pass/anon-trait-static-method.rs
@@ -18,7 +18,7 @@ impl Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = Foo::new();
     io::println(x.x.to_str());
 }
diff --git a/src/test/run-pass/anon_trait_static_method_exe.rs b/src/test/run-pass/anon_trait_static_method_exe.rs
index 5244f91a5a7..5d8b7983688 100644
--- a/src/test/run-pass/anon_trait_static_method_exe.rs
+++ b/src/test/run-pass/anon_trait_static_method_exe.rs
@@ -14,7 +14,7 @@
 extern mod anon_trait_static_method_lib;
 use anon_trait_static_method_lib::Foo;
 
-fn main() {
+pub fn main() {
     let x = Foo::new();
     io::println(x.x.to_str());
 }
diff --git a/src/test/run-pass/argument-passing.rs b/src/test/run-pass/argument-passing.rs
index 560a6cbb823..e58dc29578d 100644
--- a/src/test/run-pass/argument-passing.rs
+++ b/src/test/run-pass/argument-passing.rs
@@ -22,7 +22,7 @@ fn f1(a: X, b: &mut int, -c: int) -> int {
 
 fn f2(a: int, f: fn(int)) -> int { f(1); return a; }
 
-fn main() {
+pub fn main() {
     let mut a = X {mut x: 1}, b = 2, c = 3;
     assert (f1(a, &mut b, move c) == 6);
     assert (a.x == 0);
diff --git a/src/test/run-pass/arith-0.rs b/src/test/run-pass/arith-0.rs
index 0c780adecc5..6f5ef7837c3 100644
--- a/src/test/run-pass/arith-0.rs
+++ b/src/test/run-pass/arith-0.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let a: int = 10;
     log(debug, a);
     assert (a * (a - 1) == 90);
diff --git a/src/test/run-pass/arith-1.rs b/src/test/run-pass/arith-1.rs
index 667b6fddc53..652f433e33d 100644
--- a/src/test/run-pass/arith-1.rs
+++ b/src/test/run-pass/arith-1.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let i32_a: int = 10;
     assert (i32_a == 10);
     assert (i32_a - 10 == 0);
diff --git a/src/test/run-pass/arith-2.rs b/src/test/run-pass/arith-2.rs
index 2c36562c297..658f5d61bb8 100644
--- a/src/test/run-pass/arith-2.rs
+++ b/src/test/run-pass/arith-2.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let i32_c: int = 0x10101010;
     assert (i32_c + i32_c * 2 / 3 * 2 + (i32_c - 7 % 3) ==
                 i32_c + i32_c * 2 / 3 * 2 + (i32_c - 7 % 3));
diff --git a/src/test/run-pass/arith-unsigned.rs b/src/test/run-pass/arith-unsigned.rs
index a52336aec5f..651bf865eab 100644
--- a/src/test/run-pass/arith-unsigned.rs
+++ b/src/test/run-pass/arith-unsigned.rs
@@ -12,7 +12,7 @@
 
 
 // Unsigned integer operations
-fn main() {
+pub fn main() {
     assert (0u8 < 255u8);
     assert (0u8 <= 255u8);
     assert (255u8 > 0u8);
diff --git a/src/test/run-pass/artificial-block.rs b/src/test/run-pass/artificial-block.rs
index 17da95ab596..3911c2c76be 100644
--- a/src/test/run-pass/artificial-block.rs
+++ b/src/test/run-pass/artificial-block.rs
@@ -10,4 +10,4 @@
 
 fn f() -> int { { return 3; } }
 
-fn main() { assert (f() == 3); }
+pub fn main() { assert (f() == 3); }
diff --git a/src/test/run-pass/assign-assign.rs b/src/test/run-pass/assign-assign.rs
index bc2f7d85c2a..3f73d61090a 100644
--- a/src/test/run-pass/assign-assign.rs
+++ b/src/test/run-pass/assign-assign.rs
@@ -29,4 +29,4 @@ fn test_assign_op() {
     assert (x == 33);
 }
 
-fn main() { test_assign(); test_assign_op(); }
+pub fn main() { test_assign(); test_assign_op(); }
diff --git a/src/test/run-pass/assignability-trait.rs b/src/test/run-pass/assignability-trait.rs
index 2724684dea4..d0dc2638ee5 100644
--- a/src/test/run-pass/assignability-trait.rs
+++ b/src/test/run-pass/assignability-trait.rs
@@ -38,7 +38,7 @@ fn length<A, T: iterable<A>>(x: T) -> uint {
     return len;
 }
 
-fn main() {
+pub fn main() {
     let x = ~[0,1,2,3];
     // Call a method
     for x.iterate() |y| { assert x[*y] == *y; }
diff --git a/src/test/run-pass/attr-before-view-item.rs b/src/test/run-pass/attr-before-view-item.rs
index b46c56fa1c9..aa5c3bb22a3 100644
--- a/src/test/run-pass/attr-before-view-item.rs
+++ b/src/test/run-pass/attr-before-view-item.rs
@@ -13,5 +13,5 @@
 #[foo = "bar"]
 extern mod std;
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/attr-before-view-item2.rs b/src/test/run-pass/attr-before-view-item2.rs
index 072a0ebb0a7..e0d9a05b8aa 100644
--- a/src/test/run-pass/attr-before-view-item2.rs
+++ b/src/test/run-pass/attr-before-view-item2.rs
@@ -15,5 +15,5 @@ mod m {
     extern mod std;
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/attr-main-2.rs b/src/test/run-pass/attr-main-2.rs
index eaf8fd5ceaa..b343799e00a 100644
--- a/src/test/run-pass/attr-main-2.rs
+++ b/src/test/run-pass/attr-main-2.rs
@@ -10,7 +10,7 @@
 
 // xfail-fast
 
-fn main() {
+pub fn main() {
     die!()
 }
 
diff --git a/src/test/run-pass/auto-encode.rs b/src/test/run-pass/auto-encode.rs
index 28ae13896f0..316f5ed1950 100644
--- a/src/test/run-pass/auto-encode.rs
+++ b/src/test/run-pass/auto-encode.rs
@@ -158,7 +158,7 @@ enum Quark<T> {
 #[auto_decode]
 enum CLike { A, B, C }
 
-fn main() {
+pub fn main() {
     let a = &Plus(@Minus(@Val(3u), @Val(10u)), @Plus(@Val(22u), @Val(5u)));
     test_prettyprint(a, &~"Plus(@Minus(@Val(3u), @Val(10u)), \
                            @Plus(@Val(22u), @Val(5u)))");
diff --git a/src/test/run-pass/auto-instantiate.rs b/src/test/run-pass/auto-instantiate.rs
index a2031019a4d..8f7a88f19a7 100644
--- a/src/test/run-pass/auto-instantiate.rs
+++ b/src/test/run-pass/auto-instantiate.rs
@@ -18,7 +18,7 @@ struct Triple { x: int, y: int, z: int }
 
 fn f<T: Copy, U: Copy>(x: T, y: U) -> Pair<T, U> { return Pair {a: x, b: y}; }
 
-fn main() {
+pub fn main() {
     log(debug, f(Triple {x: 3, y: 4, z: 5}, 4).a.x);
     log(debug, f(5, 6).a);
 }
diff --git a/src/test/run-pass/auto-loop.rs b/src/test/run-pass/auto-loop.rs
index 4bd032cb93d..91dc9fde143 100644
--- a/src/test/run-pass/auto-loop.rs
+++ b/src/test/run-pass/auto-loop.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut sum = 0;
     for vec::each(~[1, 2, 3, 4, 5]) |x| {
         sum += *x;
diff --git a/src/test/run-pass/auto-ref-bounded-ty-param.rs b/src/test/run-pass/auto-ref-bounded-ty-param.rs
index bd0e91f153e..4b943e62fd2 100644
--- a/src/test/run-pass/auto-ref-bounded-ty-param.rs
+++ b/src/test/run-pass/auto-ref-bounded-ty-param.rs
@@ -32,7 +32,7 @@ impl Bar : Baz {
     }
 }
 
-fn main() {
+pub fn main() {
     let y = Bar { x: 42 };
     y.f();
 }
diff --git a/src/test/run-pass/auto-ref-newtype.rs b/src/test/run-pass/auto-ref-newtype.rs
index 6e69c487e06..80f20b13bdd 100644
--- a/src/test/run-pass/auto-ref-newtype.rs
+++ b/src/test/run-pass/auto-ref-newtype.rs
@@ -17,7 +17,7 @@ impl Foo {
     fn len(&self) -> uint { **self }
 }
 
-fn main() {
+pub fn main() {
     let m = Foo(3);
     assert m.len() == 3;
 }
diff --git a/src/test/run-pass/auto-ref-slice-plus-ref.rs b/src/test/run-pass/auto-ref-slice-plus-ref.rs
index 82c090e16b4..7c284bd8202 100644
--- a/src/test/run-pass/auto-ref-slice-plus-ref.rs
+++ b/src/test/run-pass/auto-ref-slice-plus-ref.rs
@@ -26,7 +26,7 @@ impl &str: MyIter {
     pure fn test_const(&const self) { assert *self == "test" }
 }
 
-fn main() {
+pub fn main() {
     // NB: Associativity of ~, etc. in this context is surprising. These must be parenthesized
 
     ([1]).test_imm();
diff --git a/src/test/run-pass/auto-ref-sliceable.rs b/src/test/run-pass/auto-ref-sliceable.rs
index d3dbb23f23b..8423ea8c2d8 100644
--- a/src/test/run-pass/auto-ref-sliceable.rs
+++ b/src/test/run-pass/auto-ref-sliceable.rs
@@ -18,7 +18,7 @@ impl<T> ~[T]: Pushable<T> {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut v = ~[1];
     v.push_val(2);
     v.push_val(3);
diff --git a/src/test/run-pass/auto-ref.rs b/src/test/run-pass/auto-ref.rs
index 59f0342780d..f3a1c824f80 100644
--- a/src/test/run-pass/auto-ref.rs
+++ b/src/test/run-pass/auto-ref.rs
@@ -22,7 +22,7 @@ impl &Foo : Stuff {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = Foo { x: 3 };
     x.printme();
 }
diff --git a/src/test/run-pass/autobind.rs b/src/test/run-pass/autobind.rs
index e82e6c2316b..0b969540d74 100644
--- a/src/test/run-pass/autobind.rs
+++ b/src/test/run-pass/autobind.rs
@@ -12,7 +12,7 @@ fn f<T: Copy>(x: ~[T]) -> T { return x[0]; }
 
 fn g(act: fn(~[int]) -> int) -> int { return act(~[1, 2, 3]); }
 
-fn main() {
+pub fn main() {
     assert (g(f) == 1);
     let f1: fn(~[~str]) -> ~str = f;
     assert (f1(~[~"x", ~"y", ~"z"]) == ~"x");
diff --git a/src/test/run-pass/autoderef-and-borrow-method-receiver.rs b/src/test/run-pass/autoderef-and-borrow-method-receiver.rs
index fccf2937021..6e6d289e90f 100644
--- a/src/test/run-pass/autoderef-and-borrow-method-receiver.rs
+++ b/src/test/run-pass/autoderef-and-borrow-method-receiver.rs
@@ -20,6 +20,6 @@ fn g(x: &mut Foo) {
     x.f();
 }
 
-fn main() {
+pub fn main() {
 }
 
diff --git a/src/test/run-pass/autoderef-method-newtype.rs b/src/test/run-pass/autoderef-method-newtype.rs
index b7010c620b3..cc45c75968c 100644
--- a/src/test/run-pass/autoderef-method-newtype.rs
+++ b/src/test/run-pass/autoderef-method-newtype.rs
@@ -18,7 +18,7 @@ impl uint: double {
 
 enum foo = uint;
 
-fn main() {
+pub fn main() {
     let x = foo(3u);
     assert x.double() == 6u;
 }
diff --git a/src/test/run-pass/autoderef-method-on-trait-monomorphized.rs b/src/test/run-pass/autoderef-method-on-trait-monomorphized.rs
index 7117ecfced3..d3377d196a4 100644
--- a/src/test/run-pass/autoderef-method-on-trait-monomorphized.rs
+++ b/src/test/run-pass/autoderef-method-on-trait-monomorphized.rs
@@ -20,7 +20,7 @@ fn is_equal<D: double>(x: @D, exp: uint) {
     assert x.double() == exp;
 }
 
-fn main() {
+pub fn main() {
     let x = @(3u as double);
     is_equal(x, 6);
 }
diff --git a/src/test/run-pass/autoderef-method-on-trait.rs b/src/test/run-pass/autoderef-method-on-trait.rs
index 200517abe96..0071cc5923a 100644
--- a/src/test/run-pass/autoderef-method-on-trait.rs
+++ b/src/test/run-pass/autoderef-method-on-trait.rs
@@ -16,7 +16,7 @@ impl uint: double {
     fn double() -> uint { self * 2u }
 }
 
-fn main() {
+pub fn main() {
     let x = @(3u as double);
     assert x.double() == 6u;
 }
diff --git a/src/test/run-pass/autoderef-method-priority.rs b/src/test/run-pass/autoderef-method-priority.rs
index 59c5f3b0ab0..aa487a52966 100644
--- a/src/test/run-pass/autoderef-method-priority.rs
+++ b/src/test/run-pass/autoderef-method-priority.rs
@@ -20,7 +20,7 @@ impl @uint: double {
     fn double() -> uint { *self * 2u }
 }
 
-fn main() {
+pub fn main() {
     let x = @3u;
     assert x.double() == 6u;
 }
diff --git a/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs b/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs
index e032c3aa478..cab69a243d4 100644
--- a/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs
+++ b/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs
@@ -16,7 +16,7 @@ impl @@uint: double {
     fn double() -> uint { **self * 2u }
 }
 
-fn main() {
+pub fn main() {
     let x = @@@@@3u;
     assert x.double() == 6u;
 }
diff --git a/src/test/run-pass/autoderef-method-twice.rs b/src/test/run-pass/autoderef-method-twice.rs
index fb985fac573..5b307478887 100644
--- a/src/test/run-pass/autoderef-method-twice.rs
+++ b/src/test/run-pass/autoderef-method-twice.rs
@@ -16,7 +16,7 @@ impl uint: double {
     fn double() -> uint { self * 2u }
 }
 
-fn main() {
+pub fn main() {
     let x = @@3u;
     assert x.double() == 6u;
 }
diff --git a/src/test/run-pass/autoderef-method.rs b/src/test/run-pass/autoderef-method.rs
index 6282bc72618..66372654701 100644
--- a/src/test/run-pass/autoderef-method.rs
+++ b/src/test/run-pass/autoderef-method.rs
@@ -16,7 +16,7 @@ impl uint: double {
     fn double() -> uint { self * 2u }
 }
 
-fn main() {
+pub fn main() {
     let x = @3u;
     assert x.double() == 6u;
 }
diff --git a/src/test/run-pass/autoref-intermediate-types-issue-3585.rs b/src/test/run-pass/autoref-intermediate-types-issue-3585.rs
index bad719a1f0d..1d7aa862a2a 100644
--- a/src/test/run-pass/autoref-intermediate-types-issue-3585.rs
+++ b/src/test/run-pass/autoref-intermediate-types-issue-3585.rs
@@ -24,7 +24,7 @@ impl uint: Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = @3u;
     assert x.foo() == ~"@3";
 }
\ No newline at end of file
diff --git a/src/test/run-pass/bare-static-string.rs b/src/test/run-pass/bare-static-string.rs
index d0db9abfba7..ceae1392d3b 100644
--- a/src/test/run-pass/bare-static-string.rs
+++ b/src/test/run-pass/bare-static-string.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x: &static/str = "foo";
     io::println(x);
 }
diff --git a/src/test/run-pass/big-literals.rs b/src/test/run-pass/big-literals.rs
index 5883ddba675..338c264b65b 100644
--- a/src/test/run-pass/big-literals.rs
+++ b/src/test/run-pass/big-literals.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     assert 0xffffffffu32 == (-1 as u32);
     assert 4294967295u32 == (-1 as u32);
     assert 0xffffffffffffffffu64 == (-1 as u64);
diff --git a/src/test/run-pass/binary-minus-without-space.rs b/src/test/run-pass/binary-minus-without-space.rs
index 03fa6779a56..5a7ac1042d3 100644
--- a/src/test/run-pass/binary-minus-without-space.rs
+++ b/src/test/run-pass/binary-minus-without-space.rs
@@ -10,7 +10,7 @@
 
 // Check that issue #954 stays fixed
 
-fn main() {
+pub fn main() {
     match -1 { -1 => {}, _ => die!(~"wat") }
     assert 1-1 == 0;
 }
diff --git a/src/test/run-pass/bind-by-move.rs b/src/test/run-pass/bind-by-move.rs
index ca11d8e7a33..4c30d1e00d9 100644
--- a/src/test/run-pass/bind-by-move.rs
+++ b/src/test/run-pass/bind-by-move.rs
@@ -14,7 +14,7 @@ extern mod std;
 use std::arc;
 fn dispose(+_x: arc::ARC<bool>) unsafe { }
 
-fn main() {
+pub fn main() {
     let p = arc::arc(true);
     let x = Some(p);
     match move x {
diff --git a/src/test/run-pass/binops.rs b/src/test/run-pass/binops.rs
index 04dc555e404..d27ca86c26a 100644
--- a/src/test/run-pass/binops.rs
+++ b/src/test/run-pass/binops.rs
@@ -121,7 +121,7 @@ fn test_class() {
   assert(q != r);
 }
 
-fn main() {
+pub fn main() {
     test_nil();
     test_bool();
     test_char();
diff --git a/src/test/run-pass/bitv-perf-test.rs b/src/test/run-pass/bitv-perf-test.rs
index ff0de7a4696..097db4436fd 100644
--- a/src/test/run-pass/bitv-perf-test.rs
+++ b/src/test/run-pass/bitv-perf-test.rs
@@ -20,6 +20,6 @@ fn bitv_test() -> bool {
     true
 }
 
-fn main() {
+pub fn main() {
     do iter::repeat(10000) || {bitv_test()};
 }
diff --git a/src/test/run-pass/bitwise.rs b/src/test/run-pass/bitwise.rs
index ae41c83afb3..680ffb73855 100644
--- a/src/test/run-pass/bitwise.rs
+++ b/src/test/run-pass/bitwise.rs
@@ -38,7 +38,7 @@ fn general() {
     assert (0b1010_1010 | 0b0101_0101 == 0xff);
 }
 
-fn main() {
+pub fn main() {
     general();
     target();
 }
diff --git a/src/test/run-pass/block-arg-call-as.rs b/src/test/run-pass/block-arg-call-as.rs
index cdef15758ab..fd5662bd46b 100644
--- a/src/test/run-pass/block-arg-call-as.rs
+++ b/src/test/run-pass/block-arg-call-as.rs
@@ -26,7 +26,7 @@ fn asAny( f : fn()->uint ) -> uint {
    return f();
 }
 
-fn main() {
+pub fn main() {
    let x = asSendfn(|| 22u);
    assert(x == 22u);
    let x = asLambda(|| 22u);
diff --git a/src/test/run-pass/block-arg-can-be-followed-by-binop.rs b/src/test/run-pass/block-arg-can-be-followed-by-binop.rs
index bbeb30971a0..09bfe1720f7 100644
--- a/src/test/run-pass/block-arg-can-be-followed-by-binop.rs
+++ b/src/test/run-pass/block-arg-can-be-followed-by-binop.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let v = ~[-1f, 0f, 1f, 2f, 3f];
 
     // Trailing expressions don't require parentheses:
diff --git a/src/test/run-pass/block-arg-can-be-followed-by-block-arg.rs b/src/test/run-pass/block-arg-can-be-followed-by-block-arg.rs
index da03b91fd33..f908bbf745a 100644
--- a/src/test/run-pass/block-arg-can-be-followed-by-block-arg.rs
+++ b/src/test/run-pass/block-arg-can-be-followed-by-block-arg.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     fn f(i: fn() -> uint) -> uint { i() }
     let v = ~[-1f, 0f, 1f, 2f, 3f];
     let z = do do vec::foldl(f, v) |x, _y| { x } { 22u };
diff --git a/src/test/run-pass/block-arg-can-be-followed-by-call.rs b/src/test/run-pass/block-arg-can-be-followed-by-call.rs
index a762d7f98a6..9fd3c76bd34 100644
--- a/src/test/run-pass/block-arg-can-be-followed-by-call.rs
+++ b/src/test/run-pass/block-arg-can-be-followed-by-call.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     fn f(i: uint) -> uint { i }
     let v = ~[-1f, 0f, 1f, 2f, 3f];
     let z = do vec::foldl(f, v) |x, _y| { x } (22u);
diff --git a/src/test/run-pass/block-arg-in-parentheses.rs b/src/test/run-pass/block-arg-in-parentheses.rs
index e433617c271..8eb0a8bef93 100644
--- a/src/test/run-pass/block-arg-in-parentheses.rs
+++ b/src/test/run-pass/block-arg-in-parentheses.rs
@@ -27,7 +27,7 @@ fn w_ret(v: ~[int]) -> int {
     return do vec::foldl(0, v) |x,y| { x+*y } - 10;
 }
 
-fn main() {
+pub fn main() {
     assert w_semi(~[0, 1, 2, 3]) == -10;
     assert w_paren1(~[0, 1, 2, 3]) == -4;
     assert w_paren2(~[0, 1, 2, 3]) == -4;
diff --git a/src/test/run-pass/block-arg-used-as-any.rs b/src/test/run-pass/block-arg-used-as-any.rs
index 6023b03cdeb..af2e6815e07 100644
--- a/src/test/run-pass/block-arg-used-as-any.rs
+++ b/src/test/run-pass/block-arg-used-as-any.rs
@@ -12,7 +12,7 @@ fn call_any(f: fn() -> uint) -> uint {
     return f();
 }
 
-fn main() {
+pub fn main() {
     let x_r = do call_any { 22u };
     assert x_r == 22u;
 }
diff --git a/src/test/run-pass/block-arg-used-as-lambda.rs b/src/test/run-pass/block-arg-used-as-lambda.rs
index 572d9a265db..20a1123ecf4 100644
--- a/src/test/run-pass/block-arg-used-as-lambda.rs
+++ b/src/test/run-pass/block-arg-used-as-lambda.rs
@@ -12,7 +12,7 @@ fn to_lambda(f: fn@(uint) -> uint) -> fn@(uint) -> uint {
     return f;
 }
 
-fn main() {
+pub fn main() {
     let x: fn@(uint) -> uint = to_lambda(|x| x * 2u );
     let y = to_lambda(x);
 
diff --git a/src/test/run-pass/block-arg.rs b/src/test/run-pass/block-arg.rs
index 309c387264c..e9c2eec510a 100644
--- a/src/test/run-pass/block-arg.rs
+++ b/src/test/run-pass/block-arg.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // Check usage and precedence of block arguments in expressions:
-fn main() {
+pub fn main() {
     let v = ~[-1f, 0f, 1f, 2f, 3f];
 
     // Statement form does not require parentheses:
diff --git a/src/test/run-pass/block-explicit-types.rs b/src/test/run-pass/block-explicit-types.rs
index 6721f590375..f6bbb94690f 100644
--- a/src/test/run-pass/block-explicit-types.rs
+++ b/src/test/run-pass/block-explicit-types.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     fn as_buf<T>(s: ~str, f: fn(~str) -> T) -> T { f(s) }
     as_buf(~"foo", |foo: ~str| -> () log(error, foo) );
 }
diff --git a/src/test/run-pass/block-expr-precedence.rs b/src/test/run-pass/block-expr-precedence.rs
index a87c8fab96f..7d56a6a46ff 100644
--- a/src/test/run-pass/block-expr-precedence.rs
+++ b/src/test/run-pass/block-expr-precedence.rs
@@ -54,7 +54,7 @@
  *
  */
 
-fn main() {
+pub fn main() {
 
   let num = 12;
 
diff --git a/src/test/run-pass/block-fn-coerce.rs b/src/test/run-pass/block-fn-coerce.rs
index 02c1d4ac298..3cd5f36fcb6 100644
--- a/src/test/run-pass/block-fn-coerce.rs
+++ b/src/test/run-pass/block-fn-coerce.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 fn force(f: fn() -> int) -> int { return f(); }
-fn main() {
+pub fn main() {
     fn f() -> int { return 7; }
     assert (force(f) == 7);
     let g = {||force(f)};
diff --git a/src/test/run-pass/block-iter-1.rs b/src/test/run-pass/block-iter-1.rs
index c702b46e9a7..6faf4129ba7 100644
--- a/src/test/run-pass/block-iter-1.rs
+++ b/src/test/run-pass/block-iter-1.rs
@@ -13,7 +13,7 @@
 
 fn iter_vec<T>(v: ~[T], f: fn(T)) { for v.each |x| { f(*x); } }
 
-fn main() {
+pub fn main() {
     let v = ~[1, 2, 3, 4, 5, 6, 7];
     let mut odds = 0;
     iter_vec(v, |i| {
diff --git a/src/test/run-pass/block-iter-2.rs b/src/test/run-pass/block-iter-2.rs
index 333933f750b..d57346a3299 100644
--- a/src/test/run-pass/block-iter-2.rs
+++ b/src/test/run-pass/block-iter-2.rs
@@ -13,7 +13,7 @@
 
 fn iter_vec<T>(v: ~[T], f: fn(T)) { for v.each |x| { f(*x); } }
 
-fn main() {
+pub fn main() {
     let v = ~[1, 2, 3, 4, 5];
     let mut sum = 0;
     iter_vec(copy v, |i| {
diff --git a/src/test/run-pass/block-vec-map2.rs b/src/test/run-pass/block-vec-map2.rs
index 53e98d779f6..cfc18d29e78 100644
--- a/src/test/run-pass/block-vec-map2.rs
+++ b/src/test/run-pass/block-vec-map2.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
     let v =
         vec::map2(~[1, 2, 3, 4, 5],
                   ~[true, false, false, true, true],
diff --git a/src/test/run-pass/bool-not.rs b/src/test/run-pass/bool-not.rs
index 47085b4874e..d79b6f73398 100644
--- a/src/test/run-pass/bool-not.rs
+++ b/src/test/run-pass/bool-not.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     if !false { assert (true); } else { assert (false); }
     if !true { assert (false); } else { assert (true); }
 }
diff --git a/src/test/run-pass/borrow-by-val-method-receiver.rs b/src/test/run-pass/borrow-by-val-method-receiver.rs
index e5133475a24..daed89033fc 100644
--- a/src/test/run-pass/borrow-by-val-method-receiver.rs
+++ b/src/test/run-pass/borrow-by-val-method-receiver.rs
@@ -16,7 +16,7 @@ impl &[int]: Foo {
     fn foo(self) {}
 }
 
-fn main() {
+pub fn main() {
     let items = ~[ 3, 5, 1, 2, 4 ];
     items.foo();
 }
diff --git a/src/test/run-pass/borrowck-binding-mutbl.rs b/src/test/run-pass/borrowck-binding-mutbl.rs
index 7a620d58481..6e8b35f7678 100644
--- a/src/test/run-pass/borrowck-binding-mutbl.rs
+++ b/src/test/run-pass/borrowck-binding-mutbl.rs
@@ -13,7 +13,7 @@ struct F { mut f: ~[int] }
 fn impure(_v: &[int]) {
 }
 
-fn main() {
+pub fn main() {
     let x = F {f: ~[3]};
 
     match x {
diff --git a/src/test/run-pass/borrowck-borrow-from-at-vec.rs b/src/test/run-pass/borrowck-borrow-from-at-vec.rs
index d3af2460fdd..88c06476243 100644
--- a/src/test/run-pass/borrowck-borrow-from-at-vec.rs
+++ b/src/test/run-pass/borrowck-borrow-from-at-vec.rs
@@ -14,7 +14,7 @@ fn sum_slice(x: &[int]) -> int {
     return sum;
 }
 
-fn main() {
+pub fn main() {
     let x = @[1, 2, 3];
     assert sum_slice(x) == 6;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/borrowck-borrow-from-expr-block.rs b/src/test/run-pass/borrowck-borrow-from-expr-block.rs
index f13d6eef136..4196527728a 100644
--- a/src/test/run-pass/borrowck-borrow-from-expr-block.rs
+++ b/src/test/run-pass/borrowck-borrow-from-expr-block.rs
@@ -20,6 +20,6 @@ fn test1(x: @~int) {
     }
 }
 
-fn main() {
+pub fn main() {
     test1(@~22);
 }
diff --git a/src/test/run-pass/borrowck-fixed-length-vecs.rs b/src/test/run-pass/borrowck-fixed-length-vecs.rs
index 7abe109d824..647c0b646cf 100644
--- a/src/test/run-pass/borrowck-fixed-length-vecs.rs
+++ b/src/test/run-pass/borrowck-fixed-length-vecs.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = [22];
     let y = &x[0];
     assert *y == 22;
diff --git a/src/test/run-pass/borrowck-lend-args.rs b/src/test/run-pass/borrowck-lend-args.rs
index 745f8f7f357..44be8f2724a 100644
--- a/src/test/run-pass/borrowck-lend-args.rs
+++ b/src/test/run-pass/borrowck-lend-args.rs
@@ -30,5 +30,5 @@ fn borrow_from_arg_val(++v: ~int) {
     borrow(v);
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs b/src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs
index 66abe7e905e..8db3bdd5e64 100644
--- a/src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs
+++ b/src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs
@@ -17,5 +17,5 @@ fn bar(x: *~int) -> ~int {
     }
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/borrowck-mut-uniq.rs b/src/test/run-pass/borrowck-mut-uniq.rs
index b6c205524a8..2cd445ee7af 100644
--- a/src/test/run-pass/borrowck-mut-uniq.rs
+++ b/src/test/run-pass/borrowck-mut-uniq.rs
@@ -23,7 +23,7 @@ fn iter_ints(x: &Ints, f: fn(x: &int) -> bool) {
     uint::range(0, l, |i| f(&x.values[i]))
 }
 
-fn main() {
+pub fn main() {
     let mut ints = ~Ints {sum: ~0, values: ~[]};
     add_int(ints, 22);
     add_int(ints, 44);
diff --git a/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs b/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs
index 7d6c0bf6a9d..22f46b8ff1e 100644
--- a/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs
+++ b/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs
@@ -18,6 +18,6 @@ fn has_mut_vec(+v: ~[mut int]) -> int {
     want_slice(v)
 }
 
-fn main() {
+pub fn main() {
     assert has_mut_vec(~[mut 1, 2, 3]) == 6;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/borrowck-newtype-issue-2573.rs b/src/test/run-pass/borrowck-newtype-issue-2573.rs
index d9d6efe6ad9..88ddf4e081a 100644
--- a/src/test/run-pass/borrowck-newtype-issue-2573.rs
+++ b/src/test/run-pass/borrowck-newtype-issue-2573.rs
@@ -27,4 +27,4 @@ fn really_impure(++bar: baz) {
     bar.baz = 3;
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/borrowck-pat-reassign-no-binding.rs b/src/test/run-pass/borrowck-pat-reassign-no-binding.rs
index 36b578aa6e9..d7551f792f3 100644
--- a/src/test/run-pass/borrowck-pat-reassign-no-binding.rs
+++ b/src/test/run-pass/borrowck-pat-reassign-no-binding.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut x = None;
     match x {
       None => {
diff --git a/src/test/run-pass/borrowck-preserve-box-in-arm-not-taken.rs b/src/test/run-pass/borrowck-preserve-box-in-arm-not-taken.rs
index ca72181b5fb..47bc6344bc2 100644
--- a/src/test/run-pass/borrowck-preserve-box-in-arm-not-taken.rs
+++ b/src/test/run-pass/borrowck-preserve-box-in-arm-not-taken.rs
@@ -10,7 +10,7 @@
 
 // exec-env:RUST_POISON_ON_FREE=1
 
-fn main() {
+pub fn main() {
     let x: @mut @Option<~int> = @mut @None;
     match x {
       @@Some(ref y) => {
diff --git a/src/test/run-pass/borrowck-preserve-box-in-discr.rs b/src/test/run-pass/borrowck-preserve-box-in-discr.rs
index 14757bfa3d8..c6fc92bd56d 100644
--- a/src/test/run-pass/borrowck-preserve-box-in-discr.rs
+++ b/src/test/run-pass/borrowck-preserve-box-in-discr.rs
@@ -12,7 +12,7 @@
 
 struct F { f: ~int }
 
-fn main() {
+pub fn main() {
     let mut x = @F {f: ~3};
     match x {
       @F {f: ref b_x} => {
diff --git a/src/test/run-pass/borrowck-preserve-box-in-field.rs b/src/test/run-pass/borrowck-preserve-box-in-field.rs
index 87592f54817..482673f9184 100644
--- a/src/test/run-pass/borrowck-preserve-box-in-field.rs
+++ b/src/test/run-pass/borrowck-preserve-box-in-field.rs
@@ -19,7 +19,7 @@ fn borrow(x: &int, f: fn(x: &int)) {
 
 struct F { f: ~int }
 
-fn main() {
+pub fn main() {
     let mut x = @F {f: ~3};
     do borrow(x.f) |b_x| {
         assert *b_x == 3;
diff --git a/src/test/run-pass/borrowck-preserve-box-in-pat.rs b/src/test/run-pass/borrowck-preserve-box-in-pat.rs
index ccf9be1d585..29d94a0e8ea 100644
--- a/src/test/run-pass/borrowck-preserve-box-in-pat.rs
+++ b/src/test/run-pass/borrowck-preserve-box-in-pat.rs
@@ -12,7 +12,7 @@
 
 struct F { f: ~int }
 
-fn main() {
+pub fn main() {
     let mut x = @mut @F {f: ~3};
     match x {
       @@F{f: ref b_x} => {
diff --git a/src/test/run-pass/borrowck-preserve-box-in-uniq.rs b/src/test/run-pass/borrowck-preserve-box-in-uniq.rs
index 1f6bfe20bb1..3f5708a8930 100644
--- a/src/test/run-pass/borrowck-preserve-box-in-uniq.rs
+++ b/src/test/run-pass/borrowck-preserve-box-in-uniq.rs
@@ -19,7 +19,7 @@ fn borrow(x: &int, f: fn(x: &int)) {
 
 struct F { f: ~int }
 
-fn main() {
+pub fn main() {
     let mut x = ~mut @F{f: ~3};
     do borrow(x.f) |b_x| {
         assert *b_x == 3;
diff --git a/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs b/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs
index e23626d7eea..b4b5a622408 100644
--- a/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs
+++ b/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs
@@ -18,7 +18,7 @@ fn switcher(x: Option<@int>) {
     }
 }
 
-fn main() {
+pub fn main() {
     switcher(None);
     switcher(Some(@3));
 }
\ No newline at end of file
diff --git a/src/test/run-pass/borrowck-preserve-box.rs b/src/test/run-pass/borrowck-preserve-box.rs
index c6521be04eb..37c598f01a7 100644
--- a/src/test/run-pass/borrowck-preserve-box.rs
+++ b/src/test/run-pass/borrowck-preserve-box.rs
@@ -17,7 +17,7 @@ fn borrow(x: &int, f: fn(x: &int)) {
     assert before == after;
 }
 
-fn main() {
+pub fn main() {
     let mut x = @3;
     do borrow(x) |b_x| {
         assert *b_x == 3;
diff --git a/src/test/run-pass/borrowck-preserve-cond-box.rs b/src/test/run-pass/borrowck-preserve-cond-box.rs
index 7bb7eeb6216..490db9c47f7 100644
--- a/src/test/run-pass/borrowck-preserve-cond-box.rs
+++ b/src/test/run-pass/borrowck-preserve-cond-box.rs
@@ -34,7 +34,7 @@ fn testfn(cond: bool) {
     assert *r == exp;
 }
 
-fn main() {
+pub fn main() {
     testfn(true);
     testfn(false);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/borrowck-preserve-expl-deref.rs b/src/test/run-pass/borrowck-preserve-expl-deref.rs
index 30250c26a9a..8e16565bf53 100644
--- a/src/test/run-pass/borrowck-preserve-expl-deref.rs
+++ b/src/test/run-pass/borrowck-preserve-expl-deref.rs
@@ -19,7 +19,7 @@ fn borrow(x: &int, f: fn(x: &int)) {
 
 struct F { f: ~int }
 
-fn main() {
+pub fn main() {
     let mut x = @F {f: ~3};
     do borrow((*x).f) |b_x| {
         assert *b_x == 3;
diff --git a/src/test/run-pass/borrowck-root-while-cond-2.rs b/src/test/run-pass/borrowck-root-while-cond-2.rs
index 0e4f15d49db..5b2232daa4a 100644
--- a/src/test/run-pass/borrowck-root-while-cond-2.rs
+++ b/src/test/run-pass/borrowck-root-while-cond-2.rs
@@ -11,7 +11,7 @@
 struct F { mut f: @G }
 struct G { g: ~[int] }
 
-fn main() {
+pub fn main() {
     let rec = @F {mut f: @G {g: ~[1, 2, 3]}};
     while rec.f.g.len() == 23 {}
 }
diff --git a/src/test/run-pass/borrowck-root-while-cond.rs b/src/test/run-pass/borrowck-root-while-cond.rs
index e8e3cf297ba..432847cc198 100644
--- a/src/test/run-pass/borrowck-root-while-cond.rs
+++ b/src/test/run-pass/borrowck-root-while-cond.rs
@@ -12,7 +12,7 @@ fn borrow<T>(x: &r/T) -> &r/T {x}
 
 struct Rec { mut f: @int }
 
-fn main() {
+pub fn main() {
     let rec = @Rec {mut f: @22};
     while *borrow(rec.f) == 23 {}
 }
diff --git a/src/test/run-pass/borrowck-univariant-enum.rs b/src/test/run-pass/borrowck-univariant-enum.rs
index 581e0e02423..531c49b82d7 100644
--- a/src/test/run-pass/borrowck-univariant-enum.rs
+++ b/src/test/run-pass/borrowck-univariant-enum.rs
@@ -12,7 +12,7 @@ enum newtype {
     newtype(int)
 }
 
-fn main() {
+pub fn main() {
 
     // Test that borrowck treats enums with a single variant
     // specially.
diff --git a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-2.rs b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-2.rs
index 12dc0c3a310..d721704ba55 100644
--- a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-2.rs
+++ b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-2.rs
@@ -7,7 +7,7 @@ fn foo(cat: &mut Cat) {
     bar(&*cat);
 }
 
-fn main() {
+pub fn main() {
     let mut mimi = ~Cat;
     foo(mimi);
 }
diff --git a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs
index 66e29f3af3d..748672ef050 100644
--- a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs
+++ b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs
@@ -10,7 +10,7 @@ impl Wizard {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut harry = Wizard {
         spells: ~[ "expelliarmus", "expecto patronum", "incendio" ]
     };
diff --git a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm.rs b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm.rs
index 36155a9d266..dea4ec4959b 100644
--- a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm.rs
+++ b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm.rs
@@ -6,7 +6,7 @@ fn f(x: &mut Option<int>) {
     g(&*x);
 }
 
-fn main() {
+pub fn main() {
     let mut x = ~Some(3);
     f(x);
 }
diff --git a/src/test/run-pass/borrowck-wg-simple.rs b/src/test/run-pass/borrowck-wg-simple.rs
index bc370b20d15..adf2403ec63 100644
--- a/src/test/run-pass/borrowck-wg-simple.rs
+++ b/src/test/run-pass/borrowck-wg-simple.rs
@@ -2,7 +2,7 @@ fn f(x: &int) {
     io::println(x.to_str());
 }
 
-fn main() {
+pub fn main() {
     let x = @mut 3;
     f(x);
 }
diff --git a/src/test/run-pass/borrowed-ptr-pattern-2.rs b/src/test/run-pass/borrowed-ptr-pattern-2.rs
index 631c376738e..48af01c6f55 100644
--- a/src/test/run-pass/borrowed-ptr-pattern-2.rs
+++ b/src/test/run-pass/borrowed-ptr-pattern-2.rs
@@ -15,7 +15,7 @@ fn foo(s: &~str) -> bool {
     }
 }
 
-fn main() {
+pub fn main() {
     assert foo(&~"kitty");
     assert !foo(&~"gata");
 }
diff --git a/src/test/run-pass/borrowed-ptr-pattern-3.rs b/src/test/run-pass/borrowed-ptr-pattern-3.rs
index a49e2aa59ac..138b224e3cb 100644
--- a/src/test/run-pass/borrowed-ptr-pattern-3.rs
+++ b/src/test/run-pass/borrowed-ptr-pattern-3.rs
@@ -15,7 +15,7 @@ fn foo(s: &r/uint) -> bool {
     }
 }
 
-fn main() {
+pub fn main() {
     assert foo(&3);
     assert !foo(&4);
 }
diff --git a/src/test/run-pass/borrowed-ptr-pattern-infallible.rs b/src/test/run-pass/borrowed-ptr-pattern-infallible.rs
index 8781ede6933..e28b4e425eb 100644
--- a/src/test/run-pass/borrowed-ptr-pattern-infallible.rs
+++ b/src/test/run-pass/borrowed-ptr-pattern-infallible.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let (&x, &y, &z) = (&3, &'a', &@"No pets!");
     assert x == 3;
     assert y == 'a';
diff --git a/src/test/run-pass/borrowed-ptr-pattern-option.rs b/src/test/run-pass/borrowed-ptr-pattern-option.rs
index 180d15017da..f709448d431 100644
--- a/src/test/run-pass/borrowed-ptr-pattern-option.rs
+++ b/src/test/run-pass/borrowed-ptr-pattern-option.rs
@@ -16,7 +16,7 @@ fn select(x: &r/Option<int>, y: &r/Option<int>) -> &r/Option<int> {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = None;
     let y = Some(3);
     assert select(&x, &y).get() == 3;
diff --git a/src/test/run-pass/borrowed-ptr-pattern.rs b/src/test/run-pass/borrowed-ptr-pattern.rs
index b9248cdd136..fdf4a161560 100644
--- a/src/test/run-pass/borrowed-ptr-pattern.rs
+++ b/src/test/run-pass/borrowed-ptr-pattern.rs
@@ -14,7 +14,7 @@ fn foo<T: Copy>(x: &T) -> T{
     }
 }
 
-fn main() {
+pub fn main() {
     assert foo(&3) == 3;
     assert foo(&'a') == 'a';
     assert foo(&@"Dogs rule, cats drool") == @"Dogs rule, cats drool";
diff --git a/src/test/run-pass/bounded-fn-type.rs b/src/test/run-pass/bounded-fn-type.rs
index 507bd347fef..5f4a88375a4 100644
--- a/src/test/run-pass/bounded-fn-type.rs
+++ b/src/test/run-pass/bounded-fn-type.rs
@@ -10,7 +10,7 @@
 
 fn ignore<T>(_x: T) {}
 
-fn main() {
+pub fn main() {
     let f: fn@:Owned() = ||();
     ignore(f);
 }
diff --git a/src/test/run-pass/box-compare.rs b/src/test/run-pass/box-compare.rs
index 157f9abe84a..4893040ff34 100644
--- a/src/test/run-pass/box-compare.rs
+++ b/src/test/run-pass/box-compare.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     assert (@1 < @3);
     assert (@@~"hello " > @@~"hello");
     assert (@@@~"hello" != @@@~"there");
diff --git a/src/test/run-pass/box-in-tup.rs b/src/test/run-pass/box-in-tup.rs
index 8e17884f855..22857aaefec 100644
--- a/src/test/run-pass/box-in-tup.rs
+++ b/src/test/run-pass/box-in-tup.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let i: (@int, int) = (@10, 10); let (a, _) = i; }
+pub fn main() { let i: (@int, int) = (@10, 10); let (a, _) = i; }
diff --git a/src/test/run-pass/box-inside-if.rs b/src/test/run-pass/box-inside-if.rs
index 6351dcf991f..e9838ec17ae 100644
--- a/src/test/run-pass/box-inside-if.rs
+++ b/src/test/run-pass/box-inside-if.rs
@@ -22,4 +22,4 @@ fn foo(acc: int, n: int) {
     if is_odd(n) && length_is_even(some_box(1)) { error!("bloop"); }
 }
 
-fn main() { foo(67, 5); }
+pub fn main() { foo(67, 5); }
diff --git a/src/test/run-pass/box-inside-if2.rs b/src/test/run-pass/box-inside-if2.rs
index 32230d7f498..bcadc69bb0a 100644
--- a/src/test/run-pass/box-inside-if2.rs
+++ b/src/test/run-pass/box-inside-if2.rs
@@ -22,4 +22,4 @@ fn foo(acc: int, n: int) {
     if is_odd(n) || length_is_even(some_box(1)) { error!("bloop"); }
 }
 
-fn main() { foo(67, 5); }
+pub fn main() { foo(67, 5); }
diff --git a/src/test/run-pass/box-pattern.rs b/src/test/run-pass/box-pattern.rs
index 91e416b72e1..ccdaeab3273 100644
--- a/src/test/run-pass/box-pattern.rs
+++ b/src/test/run-pass/box-pattern.rs
@@ -11,7 +11,7 @@
 struct Foo {a: int, b: uint}
 enum bar { u(@Foo), w(int), }
 
-fn main() {
+pub fn main() {
     assert (match u(@Foo{a: 10, b: 40u}) {
               u(@Foo{a: a, b: b}) => { a + (b as int) }
               _ => { 66 }
diff --git a/src/test/run-pass/box-unbox.rs b/src/test/run-pass/box-unbox.rs
index ad32ffc75c9..6889d764cbb 100644
--- a/src/test/run-pass/box-unbox.rs
+++ b/src/test/run-pass/box-unbox.rs
@@ -14,7 +14,7 @@ struct Box<T> {c: @T}
 
 fn unbox<T: Copy>(b: Box<T>) -> T { return *b.c; }
 
-fn main() {
+pub fn main() {
     let foo: int = 17;
     let bfoo: Box<int> = Box {c: @foo};
     debug!("see what's in our box");
diff --git a/src/test/run-pass/box.rs b/src/test/run-pass/box.rs
index f92be529048..05b32150e2d 100644
--- a/src/test/run-pass/box.rs
+++ b/src/test/run-pass/box.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let x: @int = @10; assert (*x == 10); }
+pub fn main() { let x: @int = @10; assert (*x == 10); }
diff --git a/src/test/run-pass/boxed-class-type-substitution.rs b/src/test/run-pass/boxed-class-type-substitution.rs
index 7eeb1b3ab76..9e6af13dca2 100644
--- a/src/test/run-pass/boxed-class-type-substitution.rs
+++ b/src/test/run-pass/boxed-class-type-substitution.rs
@@ -31,4 +31,4 @@ enum layout_data = {
     mut box: Option<@Box>
 };
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/boxed-trait-with-vstore.rs b/src/test/run-pass/boxed-trait-with-vstore.rs
index b7f5ffb896d..1347430e4a0 100644
--- a/src/test/run-pass/boxed-trait-with-vstore.rs
+++ b/src/test/run-pass/boxed-trait-with-vstore.rs
@@ -18,7 +18,7 @@ impl int : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = 3 as @Foo;
     x.foo();
 }
diff --git a/src/test/run-pass/break-value.rs b/src/test/run-pass/break-value.rs
index a3d11f04828..efc3ab32a1a 100644
--- a/src/test/run-pass/break-value.rs
+++ b/src/test/run-pass/break-value.rs
@@ -10,4 +10,4 @@
 
 fn int_id(x: int) -> int { return x; }
 
-fn main() { loop { int_id(break); } }
+pub fn main() { loop { int_id(break); } }
diff --git a/src/test/run-pass/break.rs b/src/test/run-pass/break.rs
index 1d373bda859..9d4b0dffdba 100644
--- a/src/test/run-pass/break.rs
+++ b/src/test/run-pass/break.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let mut i = 0;
     while i < 20 { i += 1; if i == 10 { break; } }
     assert (i == 10);
diff --git a/src/test/run-pass/by-val-and-by-move.rs b/src/test/run-pass/by-val-and-by-move.rs
index 1d3ad7c8577..d361b20e833 100644
--- a/src/test/run-pass/by-val-and-by-move.rs
+++ b/src/test/run-pass/by-val-and-by-move.rs
@@ -20,7 +20,7 @@ fn it_takes_two(x: @int, -y: @int) -> int {
 fn free<T>(-_t: T) {
 }
 
-fn main() {
+pub fn main() {
     let z = @3;
     assert 3 == it_takes_two(z, z);
 }
diff --git a/src/test/run-pass/c-stack-as-value.rs b/src/test/run-pass/c-stack-as-value.rs
index 5d435fa646a..9b1d6af0891 100644
--- a/src/test/run-pass/c-stack-as-value.rs
+++ b/src/test/run-pass/c-stack-as-value.rs
@@ -13,7 +13,7 @@ extern mod rustrt {
     pub fn get_task_id() -> libc::intptr_t;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let _foo = rustrt::get_task_id;
     }
diff --git a/src/test/run-pass/c-stack-returning-int64.rs b/src/test/run-pass/c-stack-returning-int64.rs
index aec0054a3c3..02c2ab92725 100644
--- a/src/test/run-pass/c-stack-returning-int64.rs
+++ b/src/test/run-pass/c-stack-returning-int64.rs
@@ -25,7 +25,7 @@ fn atoll(s: ~str) -> i64 {
     return str::as_buf(s, { |x, _len| unsafe { libc::atoll(x) } });
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         assert atol(~"1024") * 10 == atol(~"10240");
         assert (atoll(~"11111111111111111") * 10i64)
diff --git a/src/test/run-pass/call-closure-from-overloaded-op.rs b/src/test/run-pass/call-closure-from-overloaded-op.rs
index 3eaf273a578..5abf499937a 100644
--- a/src/test/run-pass/call-closure-from-overloaded-op.rs
+++ b/src/test/run-pass/call-closure-from-overloaded-op.rs
@@ -10,7 +10,7 @@
 
 fn foo() -> int { 22 }
 
-fn main() {
+pub fn main() {
     let x = dvec::DVec::<@fn() -> int>();
     x.push(foo);
     assert (x[0])() == 22;
diff --git a/src/test/run-pass/cap-clause-move.rs b/src/test/run-pass/cap-clause-move.rs
index a196593743f..dd4c7ba6a85 100644
--- a/src/test/run-pass/cap-clause-move.rs
+++ b/src/test/run-pass/cap-clause-move.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = ~1;
     let y = ptr::addr_of(&(*x)) as uint;
     let lam_move = fn@(move x) -> uint { ptr::addr_of(&(*x)) as uint };
diff --git a/src/test/run-pass/cap-clause-not-used.rs b/src/test/run-pass/cap-clause-not-used.rs
index 7236727f421..e26a8ae11fd 100644
--- a/src/test/run-pass/cap-clause-not-used.rs
+++ b/src/test/run-pass/cap-clause-not-used.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // error-pattern: warning: Captured variable 'y' not used in closure
-fn main() {
+pub fn main() {
     let x = 5;
     let _y = fn~(copy x) { };
 }
diff --git a/src/test/run-pass/capture_nil.rs b/src/test/run-pass/capture_nil.rs
index 6d57084f85a..6c052b95a2b 100644
--- a/src/test/run-pass/capture_nil.rs
+++ b/src/test/run-pass/capture_nil.rs
@@ -34,6 +34,6 @@ fn foo(&&x: ()) -> Port<()> {
     p
 }
 
-fn main() {
+pub fn main() {
     foo(()).recv()
 }
diff --git a/src/test/run-pass/cast-region-to-uint.rs b/src/test/run-pass/cast-region-to-uint.rs
index 2d2eba228b0..bd099f45e49 100644
--- a/src/test/run-pass/cast-region-to-uint.rs
+++ b/src/test/run-pass/cast-region-to-uint.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = 3;
     debug!("&x=%x", ptr::to_uint(&x));
 }
\ No newline at end of file
diff --git a/src/test/run-pass/cast.rs b/src/test/run-pass/cast.rs
index 77dcef8c2c1..b7d23c5176e 100644
--- a/src/test/run-pass/cast.rs
+++ b/src/test/run-pass/cast.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let i: int = 'Q' as int;
     assert (i == 0x51);
     let u: u32 = i as u32;
diff --git a/src/test/run-pass/cci_impl_exe.rs b/src/test/run-pass/cci_impl_exe.rs
index 2141d2b60de..2897ad24fd4 100644
--- a/src/test/run-pass/cci_impl_exe.rs
+++ b/src/test/run-pass/cci_impl_exe.rs
@@ -14,7 +14,7 @@
 extern mod cci_impl_lib;
 use cci_impl_lib::uint_helpers;
 
-fn main() {
+pub fn main() {
     //let bt0 = sys::frame_address();
     //debug!("%?", bt0);
 
diff --git a/src/test/run-pass/cci_iter_exe.rs b/src/test/run-pass/cci_iter_exe.rs
index f1f217030eb..01054ba44cf 100644
--- a/src/test/run-pass/cci_iter_exe.rs
+++ b/src/test/run-pass/cci_iter_exe.rs
@@ -15,7 +15,7 @@
 
 extern mod cci_iter_lib;
 
-fn main() {
+pub fn main() {
     //let bt0 = sys::rusti::frame_address(1u32);
     //debug!("%?", bt0);
     do cci_iter_lib::iter(~[1, 2, 3]) |i| {
diff --git a/src/test/run-pass/cfg-family.rs b/src/test/run-pass/cfg-family.rs
index dc6ad9929e7..d3a8dd53014 100644
--- a/src/test/run-pass/cfg-family.rs
+++ b/src/test/run-pass/cfg-family.rs
@@ -9,9 +9,9 @@
 // except according to those terms.
 
 #[cfg(windows)]
-fn main() {
+pub fn main() {
 }
 
 #[cfg(unix)]
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/cfg-target-family.rs b/src/test/run-pass/cfg-target-family.rs
index e10272e37d4..ddf58d310cf 100644
--- a/src/test/run-pass/cfg-target-family.rs
+++ b/src/test/run-pass/cfg-target-family.rs
@@ -9,9 +9,9 @@
 // except according to those terms.
 
 #[cfg(target_family = "windows")]
-fn main() {
+pub fn main() {
 }
 
 #[cfg(target_family = "unix")]
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/char.rs b/src/test/run-pass/char.rs
index 5f5fc0502d7..7900b2ffa7c 100644
--- a/src/test/run-pass/char.rs
+++ b/src/test/run-pass/char.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let c: char = 'x';
     let d: char = 'x';
     assert (c == 'x');
diff --git a/src/test/run-pass/child-outlives-parent.rs b/src/test/run-pass/child-outlives-parent.rs
index 62542b29685..50c6b821143 100644
--- a/src/test/run-pass/child-outlives-parent.rs
+++ b/src/test/run-pass/child-outlives-parent.rs
@@ -14,4 +14,4 @@ extern mod std;
 
 fn child2(&&s: ~str) { }
 
-fn main() { let x = task::spawn(|| child2(~"hi") ); }
+pub fn main() { let x = task::spawn(|| child2(~"hi") ); }
diff --git a/src/test/run-pass/class-attributes-1.rs b/src/test/run-pass/class-attributes-1.rs
index ef3a82d1e2b..9382cc8ac34 100644
--- a/src/test/run-pass/class-attributes-1.rs
+++ b/src/test/run-pass/class-attributes-1.rs
@@ -23,4 +23,4 @@ impl cat: Drop {
 #[cat_maker]
 fn cat(name: ~str) -> cat { cat{name: name,} }
 
-fn main() { let _kitty = cat(~"Spotty"); }
+pub fn main() { let _kitty = cat(~"Spotty"); }
diff --git a/src/test/run-pass/class-attributes-2.rs b/src/test/run-pass/class-attributes-2.rs
index c062f793b42..471f830c3e2 100644
--- a/src/test/run-pass/class-attributes-2.rs
+++ b/src/test/run-pass/class-attributes-2.rs
@@ -32,6 +32,6 @@ fn cat(name: ~str) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let _kitty = cat(~"Spotty");
 }
diff --git a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs
index 5d53453ffc0..1d1b07ae324 100644
--- a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs
+++ b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs
@@ -20,7 +20,7 @@ fn print_out<T: ToStr>(thing: T, expected: ~str) {
   assert(actual == expected);
 }
 
-fn main() {
+pub fn main() {
   let nyan : ToStr  = cat(0u, 2, ~"nyan") as ToStr;
   print_out(nyan, ~"nyan");
 }
diff --git a/src/test/run-pass/class-cast-to-trait-cross-crate.rs b/src/test/run-pass/class-cast-to-trait-cross-crate.rs
index a421d050363..36e6c6b487d 100644
--- a/src/test/run-pass/class-cast-to-trait-cross-crate.rs
+++ b/src/test/run-pass/class-cast-to-trait-cross-crate.rs
@@ -54,7 +54,7 @@ fn print_out<T: to_str>(thing: T, expected: str) {
   assert(actual == expected);
 }
 
-fn main() {
+pub fn main() {
   let nyan : to_str  = cat(0u, 2, "nyan") as to_str;
   print_out(nyan, "nyan");
 }
diff --git a/src/test/run-pass/class-cast-to-trait-multiple-types.rs b/src/test/run-pass/class-cast-to-trait-multiple-types.rs
index c32b63b8f70..2f7ede7e59e 100644
--- a/src/test/run-pass/class-cast-to-trait-multiple-types.rs
+++ b/src/test/run-pass/class-cast-to-trait-multiple-types.rs
@@ -83,7 +83,7 @@ fn annoy_neighbors<T: noisy>(critter: T) {
   for uint::range(0u, 10u) |i| { critter.speak(); }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat  = cat(0u, 2, ~"nyan");
   let whitefang : dog = dog();
   annoy_neighbors((copy nyan) as noisy);
diff --git a/src/test/run-pass/class-cast-to-trait.rs b/src/test/run-pass/class-cast-to-trait.rs
index 845ff78ad91..014b5441cc2 100644
--- a/src/test/run-pass/class-cast-to-trait.rs
+++ b/src/test/run-pass/class-cast-to-trait.rs
@@ -55,7 +55,7 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat {
 }
 
 
-fn main() {
+pub fn main() {
   let nyan : noisy  = cat(0u, 2, ~"nyan") as noisy;
   nyan.speak();
 }
\ No newline at end of file
diff --git a/src/test/run-pass/class-dtor.rs b/src/test/run-pass/class-dtor.rs
index 6f458fe580c..07193400c6a 100644
--- a/src/test/run-pass/class-dtor.rs
+++ b/src/test/run-pass/class-dtor.rs
@@ -26,4 +26,4 @@ fn cat(done: extern fn(uint)) -> cat {
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/class-exports.rs b/src/test/run-pass/class-exports.rs
index 184d2788329..f0044f8d17c 100644
--- a/src/test/run-pass/class-exports.rs
+++ b/src/test/run-pass/class-exports.rs
@@ -33,6 +33,6 @@ mod kitty {
     }
 }
 
-fn main() {
+pub fn main() {
   assert(cat(~"Spreckles").get_name() == ~"Spreckles");
 }
diff --git a/src/test/run-pass/class-impl-parameterized-trait.rs b/src/test/run-pass/class-impl-parameterized-trait.rs
index 0bf5b7de75d..57ebb594af2 100644
--- a/src/test/run-pass/class-impl-parameterized-trait.rs
+++ b/src/test/run-pass/class-impl-parameterized-trait.rs
@@ -73,7 +73,7 @@ class cat : map<int, bool> {
   fn clear() { }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(0, 2, "nyan");
   for uint::range(1u, 5u) |_i| { nyan.speak(); }
   // cat returns true if uint input is greater than
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 9a6d137d3e5..344f6230203 100644
--- a/src/test/run-pass/class-impl-very-parameterized-trait.rs
+++ b/src/test/run-pass/class-impl-very-parameterized-trait.rs
@@ -135,7 +135,7 @@ fn cat<T: Copy>(in_x : int, in_y : int, in_name: T) -> cat<T> {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat<~str> = cat(0, 2, ~"nyan");
   for uint::range(1u, 5u) |_i| { nyan.speak(); }
   assert(nyan.find(1) == Some(~"nyan"));
diff --git a/src/test/run-pass/class-implement-trait-cross-crate.rs b/src/test/run-pass/class-implement-trait-cross-crate.rs
index 3125913ba48..ff052259a76 100644
--- a/src/test/run-pass/class-implement-trait-cross-crate.rs
+++ b/src/test/run-pass/class-implement-trait-cross-crate.rs
@@ -59,7 +59,7 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat {
 }
 
 
-fn main() {
+pub fn main() {
   let nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert(!nyan.eat());
diff --git a/src/test/run-pass/class-implement-traits.rs b/src/test/run-pass/class-implement-traits.rs
index 1047f632c0f..4679abe21d7 100644
--- a/src/test/run-pass/class-implement-traits.rs
+++ b/src/test/run-pass/class-implement-traits.rs
@@ -63,7 +63,7 @@ fn make_speak<C: noisy>(c: C) {
     c.speak();
 }
 
-fn main() {
+pub fn main() {
   let nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert(!nyan.eat());
diff --git a/src/test/run-pass/class-implements-multiple-traits.rs b/src/test/run-pass/class-implements-multiple-traits.rs
index f80e3956eda..9b2e349e66c 100644
--- a/src/test/run-pass/class-implements-multiple-traits.rs
+++ b/src/test/run-pass/class-implements-multiple-traits.rs
@@ -122,7 +122,7 @@ fn scratched_something<T: scratchy>(critter: T) -> bool {
   option::is_some(critter.scratch())
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat  = cat(0u, 2, "nyan");
   annoy_neighbors(nyan as noisy);
   assert(nyan.meow_count() == 10u);
diff --git a/src/test/run-pass/class-method-cross-crate.rs b/src/test/run-pass/class-method-cross-crate.rs
index abed2e5fb73..bfa61c2f264 100644
--- a/src/test/run-pass/class-method-cross-crate.rs
+++ b/src/test/run-pass/class-method-cross-crate.rs
@@ -13,7 +13,7 @@
 extern mod cci_class_2;
 use cci_class_2::kitties::*;
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   let kitty = cat(1000u, 2);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/class-methods-cross-crate.rs b/src/test/run-pass/class-methods-cross-crate.rs
index b7394405c20..b555abb6ec5 100644
--- a/src/test/run-pass/class-methods-cross-crate.rs
+++ b/src/test/run-pass/class-methods-cross-crate.rs
@@ -13,7 +13,7 @@
 extern mod cci_class_3;
 use cci_class_3::kitties::*;
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   let kitty = cat(1000u, 2);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/class-methods.rs b/src/test/run-pass/class-methods.rs
index 37e2c9a9116..fa43968da0a 100644
--- a/src/test/run-pass/class-methods.rs
+++ b/src/test/run-pass/class-methods.rs
@@ -27,7 +27,7 @@ fn cat(in_x : uint, in_y : int) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   let kitty = cat(1000u, 2);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/class-poly-methods-cross-crate.rs b/src/test/run-pass/class-poly-methods-cross-crate.rs
index 018b8cc3706..b0f5b916dd4 100644
--- a/src/test/run-pass/class-poly-methods-cross-crate.rs
+++ b/src/test/run-pass/class-poly-methods-cross-crate.rs
@@ -13,7 +13,7 @@
 extern mod cci_class_6;
 use cci_class_6::kitties::*;
 
-fn main() {
+pub fn main() {
   let nyan : cat<char> = cat::<char>(52u, 99, ~['p']);
   let kitty = cat(1000u, 2, ~[~"tabby"]);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/class-poly-methods.rs b/src/test/run-pass/class-poly-methods.rs
index a91b263d3ec..b7e638f40e8 100644
--- a/src/test/run-pass/class-poly-methods.rs
+++ b/src/test/run-pass/class-poly-methods.rs
@@ -30,7 +30,7 @@ fn cat<U>(in_x : uint, in_y : int, -in_info: ~[U]) -> cat<U> {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat<int> = cat::<int>(52u, 99, ~[9]);
   let kitty = cat(1000u, 2, ~[~"tabby"]);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/class-separate-impl.rs b/src/test/run-pass/class-separate-impl.rs
index eb3728f2c6f..56430678b05 100644
--- a/src/test/run-pass/class-separate-impl.rs
+++ b/src/test/run-pass/class-separate-impl.rs
@@ -63,7 +63,7 @@ fn print_out<T: ToStr>(thing: T, expected: ~str) {
   assert(actual == expected);
 }
 
-fn main() {
+pub fn main() {
   let nyan : ToStr = cat(0u, 2, ~"nyan") as ToStr;
   print_out(nyan, ~"nyan");
 }
diff --git a/src/test/run-pass/class-str-field.rs b/src/test/run-pass/class-str-field.rs
index a8d980fc8aa..060ad2b4beb 100644
--- a/src/test/run-pass/class-str-field.rs
+++ b/src/test/run-pass/class-str-field.rs
@@ -20,6 +20,6 @@ fn cat(in_name: ~str) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan = cat(~"nyan");
 }
\ No newline at end of file
diff --git a/src/test/run-pass/class-trait-bounded-param.rs b/src/test/run-pass/class-trait-bounded-param.rs
index b6e9d66ec72..6e09ac22b3d 100644
--- a/src/test/run-pass/class-trait-bounded-param.rs
+++ b/src/test/run-pass/class-trait-bounded-param.rs
@@ -27,7 +27,7 @@ class keys<K: Copy, V: Copy, M: Copy map<K,V>>
     fn eachi(blk: fn(uint, K) -> bool) { iter::eachi(self, blk) }
 }
 
-fn main() {
+pub fn main() {
     let m = int_hash();
     m.insert(1, 2);
     m.insert(3, 4);
diff --git a/src/test/run-pass/class-typarams.rs b/src/test/run-pass/class-typarams.rs
index a64b33e11d3..b8d0e593286 100644
--- a/src/test/run-pass/class-typarams.rs
+++ b/src/test/run-pass/class-typarams.rs
@@ -29,7 +29,7 @@ fn cat<U>(in_x : uint, in_y : int) -> cat<U> {
 }
 
 
-fn main() {
+pub fn main() {
   let _nyan : cat<int> = cat::<int>(52u, 99);
   //  let kitty = cat(1000u, 2);
 }
diff --git a/src/test/run-pass/classes-cross-crate.rs b/src/test/run-pass/classes-cross-crate.rs
index e41879e5f38..1b68e6c519a 100644
--- a/src/test/run-pass/classes-cross-crate.rs
+++ b/src/test/run-pass/classes-cross-crate.rs
@@ -13,7 +13,7 @@
 extern mod cci_class_4;
 use cci_class_4::kitties::*;
 
-fn main() {
+pub fn main() {
   let nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert(!nyan.eat());
diff --git a/src/test/run-pass/classes-self-referential.rs b/src/test/run-pass/classes-self-referential.rs
index 075d10e742d..4f2499eced4 100644
--- a/src/test/run-pass/classes-self-referential.rs
+++ b/src/test/run-pass/classes-self-referential.rs
@@ -20,4 +20,4 @@ fn kitten(cat: Option<cat>) -> kitten {
 
 type cat = @kitten;
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/classes-simple-cross-crate.rs b/src/test/run-pass/classes-simple-cross-crate.rs
index 345e661d536..74f4b0aac69 100644
--- a/src/test/run-pass/classes-simple-cross-crate.rs
+++ b/src/test/run-pass/classes-simple-cross-crate.rs
@@ -13,7 +13,7 @@
 extern mod cci_class;
 use cci_class::kitties::*;
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   let kitty = cat(1000u, 2);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/classes-simple-method.rs b/src/test/run-pass/classes-simple-method.rs
index a0b2f900e7f..f44ee4bd502 100644
--- a/src/test/run-pass/classes-simple-method.rs
+++ b/src/test/run-pass/classes-simple-method.rs
@@ -25,7 +25,7 @@ fn cat(in_x : uint, in_y : int) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   let kitty = cat(1000u, 2);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/classes-simple.rs b/src/test/run-pass/classes-simple.rs
index 2f0ae25f1ab..3520719d499 100644
--- a/src/test/run-pass/classes-simple.rs
+++ b/src/test/run-pass/classes-simple.rs
@@ -22,7 +22,7 @@ fn cat(in_x : uint, in_y : int) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   let kitty = cat(1000u, 2);
   assert(nyan.how_hungry == 99);
diff --git a/src/test/run-pass/classes.rs b/src/test/run-pass/classes.rs
index 41af1f2d741..c3bc2f096ba 100644
--- a/src/test/run-pass/classes.rs
+++ b/src/test/run-pass/classes.rs
@@ -50,7 +50,7 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert(!nyan.eat());
diff --git a/src/test/run-pass/cleanup-copy-mode.rs b/src/test/run-pass/cleanup-copy-mode.rs
index cabd8ee298d..c7c42c7fcac 100644
--- a/src/test/run-pass/cleanup-copy-mode.rs
+++ b/src/test/run-pass/cleanup-copy-mode.rs
@@ -11,7 +11,7 @@
 // xfail-win32
 fn adder(+x: @int, +y: @int) -> int { return *x + *y; }
 fn failer() -> @int { die!(); }
-fn main() {
+pub fn main() {
     assert(result::is_err(&task::try(|| {
         adder(@2, failer()); ()
     })));
diff --git a/src/test/run-pass/clone-with-exterior.rs b/src/test/run-pass/clone-with-exterior.rs
index a2d739a2584..09b57ebd617 100644
--- a/src/test/run-pass/clone-with-exterior.rs
+++ b/src/test/run-pass/clone-with-exterior.rs
@@ -17,7 +17,7 @@ fn f(x : @{a:int, b:int}) {
     assert (x.b == 12);
 }
 
-fn main() {
+pub fn main() {
     let z : @{a:int, b:int} = @{ a : 10, b : 12};
     let p = task::_spawn(bind f(z));
     task::join_id(p);
diff --git a/src/test/run-pass/close-over-big-then-small-data.rs b/src/test/run-pass/close-over-big-then-small-data.rs
index a2a97f531de..d218519a4f3 100644
--- a/src/test/run-pass/close-over-big-then-small-data.rs
+++ b/src/test/run-pass/close-over-big-then-small-data.rs
@@ -20,7 +20,7 @@ fn f<A:Copy &static>(a: A, b: u16) -> fn@() -> (A, u16) {
     fn@() -> (A, u16) { (a, b) }
 }
 
-fn main() {
+pub fn main() {
     let (a, b) = f(22_u64, 44u16)();
     debug!("a=%? b=%?", a, b);
     assert a == 22u64;
diff --git a/src/test/run-pass/closure-inference.rs b/src/test/run-pass/closure-inference.rs
index df71bd76747..99c8fd6e2d3 100644
--- a/src/test/run-pass/closure-inference.rs
+++ b/src/test/run-pass/closure-inference.rs
@@ -15,7 +15,7 @@ fn foo(i: int) -> int { i + 1 }
 
 fn apply<A>(f: fn(A) -> A, v: A) -> A { f(v) }
 
-fn main() {
+pub fn main() {
     let f = {|i| foo(i)};
     assert apply(f, 2) == 3;
 }
diff --git a/src/test/run-pass/closure-inference2.rs b/src/test/run-pass/closure-inference2.rs
index f449880521a..ed86326cb38 100644
--- a/src/test/run-pass/closure-inference2.rs
+++ b/src/test/run-pass/closure-inference2.rs
@@ -10,7 +10,7 @@
 
 // Test a rather underspecified example:
 
-fn main() {
+pub fn main() {
     let f = {|i| i};
     assert f(2) == 2;
     assert f(5) == 5;
diff --git a/src/test/run-pass/coerce-reborrow-imm-ptr-arg.rs b/src/test/run-pass/coerce-reborrow-imm-ptr-arg.rs
index 3c9748f29d9..37770f4d59b 100644
--- a/src/test/run-pass/coerce-reborrow-imm-ptr-arg.rs
+++ b/src/test/run-pass/coerce-reborrow-imm-ptr-arg.rs
@@ -14,4 +14,4 @@ fn negate_const(y: &const int) -> int {
     negate(y)
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs b/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs
index 0d8f40677f8..268e540c10e 100644
--- a/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs
+++ b/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs
@@ -10,7 +10,7 @@ fn foo(speaker: &const SpeechMaker) -> uint {
     speaker.how_many() + 33
 }
 
-fn main() {
+pub fn main() {
     let mut lincoln = SpeechMaker {speeches: 22};
     assert foo(&const lincoln) == 55;
 }
diff --git a/src/test/run-pass/coerce-reborrow-imm-vec-arg.rs b/src/test/run-pass/coerce-reborrow-imm-vec-arg.rs
index 54a6b35b8ba..cc93aba46f4 100644
--- a/src/test/run-pass/coerce-reborrow-imm-vec-arg.rs
+++ b/src/test/run-pass/coerce-reborrow-imm-vec-arg.rs
@@ -16,4 +16,4 @@ fn sum_const(y: &[const int]) -> int {
     sum(y)
 }
 
-fn main() {}
\ No newline at end of file
+pub fn main() {}
\ No newline at end of file
diff --git a/src/test/run-pass/coerce-reborrow-imm-vec-rcvr.rs b/src/test/run-pass/coerce-reborrow-imm-vec-rcvr.rs
index 24fb5cbd883..5e93c34d197 100644
--- a/src/test/run-pass/coerce-reborrow-imm-vec-rcvr.rs
+++ b/src/test/run-pass/coerce-reborrow-imm-vec-rcvr.rs
@@ -10,7 +10,7 @@ fn bip(v: &[uint]) -> ~[uint] {
     v.to_vec()
 }
 
-fn main() {
+pub fn main() {
     let mut the_vec = ~[1, 2, 3, 100];
     assert the_vec == foo(the_vec);
     assert the_vec == bar(the_vec);
diff --git a/src/test/run-pass/coerce-reborrow-mut-ptr-arg.rs b/src/test/run-pass/coerce-reborrow-mut-ptr-arg.rs
index 4579907dfbd..f8650c856c6 100644
--- a/src/test/run-pass/coerce-reborrow-mut-ptr-arg.rs
+++ b/src/test/run-pass/coerce-reborrow-mut-ptr-arg.rs
@@ -16,7 +16,7 @@ fn give_a_few_speeches(speaker: &mut SpeechMaker) {
     talk(speaker);
 }
 
-fn main() {
+pub fn main() {
     let mut lincoln = SpeechMaker {speeches: 22};
     give_a_few_speeches(&mut lincoln);
 }
diff --git a/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs b/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs
index c915c01416e..a2ba4ddb827 100644
--- a/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs
+++ b/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs
@@ -18,7 +18,7 @@ fn give_a_few_speeches(speaker: &mut SpeechMaker) {
     speaker.talk();
 }
 
-fn main() {
+pub fn main() {
     let mut lincoln = SpeechMaker {speeches: 22};
     give_a_few_speeches(&mut lincoln);
 }
diff --git a/src/test/run-pass/coerce-reborrow-mut-vec-arg.rs b/src/test/run-pass/coerce-reborrow-mut-vec-arg.rs
index 0cce52e7dc8..6346c6588f9 100644
--- a/src/test/run-pass/coerce-reborrow-mut-vec-arg.rs
+++ b/src/test/run-pass/coerce-reborrow-mut-vec-arg.rs
@@ -8,7 +8,7 @@ fn bar(v: &[mut uint]) {
     vec::reverse(v);
 }
 
-fn main() {
+pub fn main() {
     let mut the_vec = ~[1, 2, 3, 100];
     bar(the_vec);
     assert the_vec == ~[100, 3, 2, 1];
diff --git a/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs b/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs
index 9fb748f049f..c944444b56e 100644
--- a/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs
+++ b/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs
@@ -14,7 +14,7 @@ fn bar(v: &[mut uint]) {
     v.reverse();
 }
 
-fn main() {
+pub fn main() {
     let mut the_vec = ~[1, 2, 3, 100];
     bar(the_vec);
     assert the_vec == ~[100, 3, 2, 1];
diff --git a/src/test/run-pass/coherence-copy-bound.rs b/src/test/run-pass/coherence-copy-bound.rs
index fc6c1592119..7435096c275 100644
--- a/src/test/run-pass/coherence-copy-bound.rs
+++ b/src/test/run-pass/coherence-copy-bound.rs
@@ -9,5 +9,5 @@ struct S {
 
 impl S : X {}
 
-fn main(){}
+pub fn main(){}
 
diff --git a/src/test/run-pass/coherence-impl-in-fn.rs b/src/test/run-pass/coherence-impl-in-fn.rs
index e014ffe4bef..561187d1934 100644
--- a/src/test/run-pass/coherence-impl-in-fn.rs
+++ b/src/test/run-pass/coherence-impl-in-fn.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     enum x { foo }
     impl x : ::core::cmp::Eq {
         pure fn eq(&self, other: &x) -> bool {
diff --git a/src/test/run-pass/comm.rs b/src/test/run-pass/comm.rs
index 4197a63107c..1af0bb003f2 100644
--- a/src/test/run-pass/comm.rs
+++ b/src/test/run-pass/comm.rs
@@ -11,7 +11,7 @@
 
 use core::pipes::*;
 
-fn main() {
+pub fn main() {
     let (p, ch) = stream();
     let t = task::spawn(|| child(&ch) );
     let y = p.recv();
diff --git a/src/test/run-pass/common-fields-trivial.rs b/src/test/run-pass/common-fields-trivial.rs
index b0fac593ca4..fd5079b8f54 100644
--- a/src/test/run-pass/common-fields-trivial.rs
+++ b/src/test/run-pass/common-fields-trivial.rs
@@ -18,7 +18,7 @@ enum Foo {
     Baz(int)
 }
 
-fn main() {
+pub fn main() {
     let x = Bar(3);
 }
 
diff --git a/src/test/run-pass/compare-generic-enums.rs b/src/test/run-pass/compare-generic-enums.rs
index c8b4945c719..e73e1e97555 100644
--- a/src/test/run-pass/compare-generic-enums.rs
+++ b/src/test/run-pass/compare-generic-enums.rs
@@ -14,7 +14,7 @@ fn cmp(x: Option<an_int>, y: Option<int>) -> bool {
     x == y
 }
 
-fn main() {
+pub fn main() {
     assert !cmp(Some(3), None);
     assert !cmp(Some(3), Some(4));
     assert cmp(Some(3), Some(3));
diff --git a/src/test/run-pass/complex.rs b/src/test/run-pass/complex.rs
index 57835b8b7a8..de60a56ba4a 100644
--- a/src/test/run-pass/complex.rs
+++ b/src/test/run-pass/complex.rs
@@ -35,7 +35,7 @@ fn foo(x: int) -> int {
     return 0;
 }
 
-fn main() {
+pub fn main() {
     let x: int = 2 + 2;
     log(debug, x);
     debug!("hello, world");
diff --git a/src/test/run-pass/conditional-compile-arch.rs b/src/test/run-pass/conditional-compile-arch.rs
index 959805bd911..a47e9d9ea81 100644
--- a/src/test/run-pass/conditional-compile-arch.rs
+++ b/src/test/run-pass/conditional-compile-arch.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 #[cfg(target_arch = "x86")]
-fn main() { }
+pub fn main() { }
 
 #[cfg(target_arch = "x86_64")]
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/conditional-compile.rs b/src/test/run-pass/conditional-compile.rs
index 826a85804f7..33b5d275a45 100644
--- a/src/test/run-pass/conditional-compile.rs
+++ b/src/test/run-pass/conditional-compile.rs
@@ -81,9 +81,9 @@ mod m {
 // Since the bogus configuration isn't defined main will just be
 // parsed, but nothing further will be done with it
 #[cfg(bogus)]
-fn main() { die!() }
+pub fn main() { die!() }
 
-fn main() {
+pub fn main() {
     // Exercise some of the configured items in ways that wouldn't be possible
     // if they had the bogus definition
     assert (b);
diff --git a/src/test/run-pass/const-big-enum.rs b/src/test/run-pass/const-big-enum.rs
index 44fe0692681..1a41efd41d1 100644
--- a/src/test/run-pass/const-big-enum.rs
+++ b/src/test/run-pass/const-big-enum.rs
@@ -16,7 +16,7 @@ enum Foo {
 
 const X: Foo = Baz;
 
-fn main() {
+pub fn main() {
     match X {
         Baz => {}
         _ => die!()
diff --git a/src/test/run-pass/const-bound.rs b/src/test/run-pass/const-bound.rs
index 3c55409dde8..2320a5b1aa3 100644
--- a/src/test/run-pass/const-bound.rs
+++ b/src/test/run-pass/const-bound.rs
@@ -16,7 +16,7 @@ fn foo<T: Copy Const>(x: T) -> T { x }
 
 struct F { field: int }
 
-fn main() {
+pub fn main() {
     foo(1);
     foo(~"hi");
     foo(~[1, 2, 3]);
diff --git a/src/test/run-pass/const-const.rs b/src/test/run-pass/const-const.rs
index 7fec4011af4..b3498b4dc58 100644
--- a/src/test/run-pass/const-const.rs
+++ b/src/test/run-pass/const-const.rs
@@ -11,6 +11,6 @@
 const a: int = 1;
 const b: int = a + 2;
 
-fn main() {
+pub fn main() {
     assert b == 3;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/const-contents.rs b/src/test/run-pass/const-contents.rs
index 7ad7795ba3b..512ecc6d351 100644
--- a/src/test/run-pass/const-contents.rs
+++ b/src/test/run-pass/const-contents.rs
@@ -17,7 +17,7 @@ const not : int = !0;
 const notb : bool = !true;
 const neg : int = -(1);
 
-fn main() {
+pub fn main() {
     assert(lsl == 4);
     assert(add == 3);
     assert(addf == 3.0f);
diff --git a/src/test/run-pass/const-enum-byref-self.rs b/src/test/run-pass/const-enum-byref-self.rs
index 848e6b20521..6751a0787e4 100644
--- a/src/test/run-pass/const-enum-byref-self.rs
+++ b/src/test/run-pass/const-enum-byref-self.rs
@@ -20,6 +20,6 @@ impl E {
     }
 }
 
-fn main() {
+pub fn main() {
     C.method()
 }
diff --git a/src/test/run-pass/const-enum-byref.rs b/src/test/run-pass/const-enum-byref.rs
index 83e27009959..f3ea9e08343 100644
--- a/src/test/run-pass/const-enum-byref.rs
+++ b/src/test/run-pass/const-enum-byref.rs
@@ -18,6 +18,6 @@ fn f(a: &E) {
     }
 }
 
-fn main() {
+pub fn main() {
     f(&C)
 }
diff --git a/src/test/run-pass/const-extern-function.rs b/src/test/run-pass/const-extern-function.rs
index e8fd09137a5..4d7dc6bac9d 100644
--- a/src/test/run-pass/const-extern-function.rs
+++ b/src/test/run-pass/const-extern-function.rs
@@ -17,7 +17,7 @@ struct S {
     f: *u8
 }
 
-fn main() {
+pub fn main() {
     assert foopy == f;
     assert f == s.f;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/const-fields-and-indexing.rs b/src/test/run-pass/const-fields-and-indexing.rs
index 6dccecb5aa8..a417ad3ca6e 100644
--- a/src/test/run-pass/const-fields-and-indexing.rs
+++ b/src/test/run-pass/const-fields-and-indexing.rs
@@ -25,7 +25,7 @@ const k : K = K {a: 10, b: 20, c: D {d: 30,
                                      e: 40}};
 const m : int = k.c.e;
 
-fn main() {
+pub fn main() {
     io::println(fmt!("%?", p));
     io::println(fmt!("%?", q));
     io::println(fmt!("%?", t));
diff --git a/src/test/run-pass/const-fn-val.rs b/src/test/run-pass/const-fn-val.rs
index 21a39805ac3..17c66b354a1 100644
--- a/src/test/run-pass/const-fn-val.rs
+++ b/src/test/run-pass/const-fn-val.rs
@@ -16,6 +16,6 @@ struct Bar { f: &fn() -> int }
 
 const b : Bar = Bar { f: foo };
 
-fn main() {
+pub fn main() {
     assert (b.f)() == 0xca7f000d;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/const-negative.rs b/src/test/run-pass/const-negative.rs
index dd795966376..44917e23293 100644
--- a/src/test/run-pass/const-negative.rs
+++ b/src/test/run-pass/const-negative.rs
@@ -12,6 +12,6 @@
 
 const toplevel_mod: int = -1;
 
-fn main() {
+pub fn main() {
     assert toplevel_mod == -1;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/const-newtype-enum.rs b/src/test/run-pass/const-newtype-enum.rs
index 069565aa4f8..5e1bc7561d9 100644
--- a/src/test/run-pass/const-newtype-enum.rs
+++ b/src/test/run-pass/const-newtype-enum.rs
@@ -12,7 +12,7 @@ enum Foo = u32;
 
 const X: Foo = Foo(17);
 
-fn main() {
+pub fn main() {
     assert(*X == 17);
     assert(*Y == 23);
 }
diff --git a/src/test/run-pass/const-nullary-enum.rs b/src/test/run-pass/const-nullary-enum.rs
index 0f6363b4908..5a266e4c15a 100644
--- a/src/test/run-pass/const-nullary-enum.rs
+++ b/src/test/run-pass/const-nullary-enum.rs
@@ -16,7 +16,7 @@ enum Foo {
 
 const X: Foo = Bar;
 
-fn main() {
+pub fn main() {
     match X {
         Bar => {}
         Baz | Boo => die!()
diff --git a/src/test/run-pass/const-nullary-univariant-enum.rs b/src/test/run-pass/const-nullary-univariant-enum.rs
index 2fa5a7760f6..2709d0d8a56 100644
--- a/src/test/run-pass/const-nullary-univariant-enum.rs
+++ b/src/test/run-pass/const-nullary-univariant-enum.rs
@@ -14,7 +14,7 @@ enum Foo {
 
 const X: Foo = Bar;
 
-fn main() {
+pub fn main() {
     assert((X as uint) == 0xDEADBEE);
     assert((Y as uint) == 0xDEADBEE);
 }
diff --git a/src/test/run-pass/const-rec-and-tup.rs b/src/test/run-pass/const-rec-and-tup.rs
index b3d971a2cef..04d1aa11478 100644
--- a/src/test/run-pass/const-rec-and-tup.rs
+++ b/src/test/run-pass/const-rec-and-tup.rs
@@ -18,7 +18,7 @@ const y : AnotherPair = AnotherPair{ x: (0xf0f0f0f0_f0f0f0f0,
                            y: Pair { a: 3.14159265358979323846,
                                      b: 2.7182818284590452354 }};
 
-fn main() {
+pub fn main() {
     let (p, _) = y.x;
     assert p == 0xf0f0f0f0_f0f0f0f0;
     io::println(fmt!("0x%x", p as uint));
diff --git a/src/test/run-pass/const-region-ptrs.rs b/src/test/run-pass/const-region-ptrs.rs
index c8b08b1e35a..ce626cf612f 100644
--- a/src/test/run-pass/const-region-ptrs.rs
+++ b/src/test/run-pass/const-region-ptrs.rs
@@ -15,7 +15,7 @@ const x: &int = &10;
 
 const y: &Pair = &Pair {a: 15, b: x};
 
-fn main() {
+pub fn main() {
     io::println(fmt!("x = %?", *x));
     io::println(fmt!("y = {a: %?, b: %?}", y.a, *(y.b)));
     assert *x == 10;
diff --git a/src/test/run-pass/const-struct.rs b/src/test/run-pass/const-struct.rs
index 8a7b5b474ec..58c09ccce92 100644
--- a/src/test/run-pass/const-struct.rs
+++ b/src/test/run-pass/const-struct.rs
@@ -24,7 +24,7 @@ const x : foo = foo { a:1, b:2, c: 3 };
 const y : foo = foo { b:2, c:3, a: 1 };
 const z : &foo = &foo { a: 10, b: 22, c: 12 };
 
-fn main() {
+pub fn main() {
     assert x.b == 2;
     assert x == y;
     assert z.b == 22;
diff --git a/src/test/run-pass/const-tuple-struct.rs b/src/test/run-pass/const-tuple-struct.rs
index 91dc2576f8a..9f8618d82ca 100644
--- a/src/test/run-pass/const-tuple-struct.rs
+++ b/src/test/run-pass/const-tuple-struct.rs
@@ -12,7 +12,7 @@ struct Bar(int, int);
 
 const X: Bar = Bar(1, 2);
 
-fn main() {
+pub fn main() {
     match X {
         Bar(x, y) => {
             assert x == 1;
diff --git a/src/test/run-pass/const-unit-struct.rs b/src/test/run-pass/const-unit-struct.rs
index ebad469088d..bc996314e03 100644
--- a/src/test/run-pass/const-unit-struct.rs
+++ b/src/test/run-pass/const-unit-struct.rs
@@ -12,7 +12,7 @@ struct Foo;
 
 const X: Foo = Foo;
 
-fn main() {
+pub fn main() {
     match X {
         Foo => {}
     }
diff --git a/src/test/run-pass/const-vecs-and-slices.rs b/src/test/run-pass/const-vecs-and-slices.rs
index c4e406d9adc..a0ac67288cf 100644
--- a/src/test/run-pass/const-vecs-and-slices.rs
+++ b/src/test/run-pass/const-vecs-and-slices.rs
@@ -11,7 +11,7 @@
 const x : [int * 4] = [1,2,3,4];
 const y : &[int] = &[1,2,3,4];
 
-fn main() {
+pub fn main() {
     io::println(fmt!("%?", x[1]));
     io::println(fmt!("%?", y[1]));
     assert x[1] == 2;
diff --git a/src/test/run-pass/const.rs b/src/test/run-pass/const.rs
index 38835873cc5..28cca2f413b 100644
--- a/src/test/run-pass/const.rs
+++ b/src/test/run-pass/const.rs
@@ -12,4 +12,4 @@
 
 const i: int = 10;
 
-fn main() { log(debug, i); }
+pub fn main() { log(debug, i); }
diff --git a/src/test/run-pass/consts-in-patterns.rs b/src/test/run-pass/consts-in-patterns.rs
index 31968ccc244..1356ff0a043 100644
--- a/src/test/run-pass/consts-in-patterns.rs
+++ b/src/test/run-pass/consts-in-patterns.rs
@@ -11,7 +11,7 @@
 const FOO: int = 10;
 const BAR: int = 3;
 
-fn main() {
+pub fn main() {
     let x: int = 3;
     let y = match x {
         FOO => 1,
diff --git a/src/test/run-pass/core-export-f64-sqrt.rs b/src/test/run-pass/core-export-f64-sqrt.rs
index 9b080206fcd..37f605d9320 100644
--- a/src/test/run-pass/core-export-f64-sqrt.rs
+++ b/src/test/run-pass/core-export-f64-sqrt.rs
@@ -10,7 +10,7 @@
 
 // Regression test that f64 exports things properly
 
-fn main() {
+pub fn main() {
 
     let digits: uint = 10 as uint;
 
diff --git a/src/test/run-pass/crate-method-reexport-grrrrrrr.rs b/src/test/run-pass/crate-method-reexport-grrrrrrr.rs
index 6f0ee563d6e..ac79a2256fd 100644
--- a/src/test/run-pass/crate-method-reexport-grrrrrrr.rs
+++ b/src/test/run-pass/crate-method-reexport-grrrrrrr.rs
@@ -17,7 +17,7 @@
 
 extern mod crate_method_reexport_grrrrrrr2;
 
-fn main() {
+pub fn main() {
     use crate_method_reexport_grrrrrrr2::rust::add;
     use crate_method_reexport_grrrrrrr2::rust::cx;
     let x = @();
diff --git a/src/test/run-pass/crateresolve1.rs b/src/test/run-pass/crateresolve1.rs
index aceac3a12c1..4b037919154 100644
--- a/src/test/run-pass/crateresolve1.rs
+++ b/src/test/run-pass/crateresolve1.rs
@@ -15,6 +15,6 @@
 
 extern mod crateresolve1(vers = "0.2");
 
-fn main() {
+pub fn main() {
     assert crateresolve1::f() == 20;
 }
diff --git a/src/test/run-pass/crateresolve2.rs b/src/test/run-pass/crateresolve2.rs
index 407c8792d88..dd9f60687b3 100644
--- a/src/test/run-pass/crateresolve2.rs
+++ b/src/test/run-pass/crateresolve2.rs
@@ -28,7 +28,7 @@ mod c {
     pub fn f() { assert crateresolve2::f() == 30; }
 }
 
-fn main() {
+pub fn main() {
     a::f();
     b::f();
     c::f();
diff --git a/src/test/run-pass/crateresolve3.rs b/src/test/run-pass/crateresolve3.rs
index e92febf9637..71f0fa8adfa 100644
--- a/src/test/run-pass/crateresolve3.rs
+++ b/src/test/run-pass/crateresolve3.rs
@@ -25,7 +25,7 @@ mod b {
     pub fn f() { assert crateresolve3::g() == 20; }
 }
 
-fn main() {
+pub fn main() {
     a::f();
     b::f();
 }
diff --git a/src/test/run-pass/crateresolve5.rs b/src/test/run-pass/crateresolve5.rs
index 0b0d9a839ce..d6a4ab210ed 100644
--- a/src/test/run-pass/crateresolve5.rs
+++ b/src/test/run-pass/crateresolve5.rs
@@ -15,7 +15,7 @@
 extern mod cr5_1 (name = "crateresolve5", vers = "0.1");
 extern mod cr5_2 (name = "crateresolve5", vers = "0.2");
 
-fn main() {
+pub fn main() {
     // Structural types can be used between two versions of the same crate
     assert cr5_1::struct_nameval().name == cr5_2::struct_nameval().name;
     assert cr5_1::struct_nameval().val == cr5_2::struct_nameval().val;
diff --git a/src/test/run-pass/crateresolve6.rs b/src/test/run-pass/crateresolve6.rs
index 6aadb2805db..cabc60a00ee 100644
--- a/src/test/run-pass/crateresolve6.rs
+++ b/src/test/run-pass/crateresolve6.rs
@@ -17,7 +17,7 @@
 extern mod cr6_1 (name = "crateresolve_calories", vers = "0.1", calories="100");
 extern mod cr6_2 (name = "crateresolve_calories", vers = "0.1", calories="200");
 
-fn main() {
+pub fn main() {
     assert cr6_1::f() == 100;
     assert cr6_2::f() == 200;
 }
diff --git a/src/test/run-pass/crateresolve7.rs b/src/test/run-pass/crateresolve7.rs
index 1dca6813732..f6dccdbfd70 100644
--- a/src/test/run-pass/crateresolve7.rs
+++ b/src/test/run-pass/crateresolve7.rs
@@ -15,7 +15,7 @@
 
 extern mod crateresolve7x;
 
-fn main() {
+pub fn main() {
     assert crateresolve7x::a::f() == 100;
     assert crateresolve7x::b::f() == 200;
 }
diff --git a/src/test/run-pass/cycle-collection.rs b/src/test/run-pass/cycle-collection.rs
index e3965b64e6a..0512b8a1267 100644
--- a/src/test/run-pass/cycle-collection.rs
+++ b/src/test/run-pass/cycle-collection.rs
@@ -18,7 +18,7 @@ fn f() {
     *box = cons(box);
 }
 
-fn main() {
+pub fn main() {
     f();
 }
 
diff --git a/src/test/run-pass/cycle-collection2.rs b/src/test/run-pass/cycle-collection2.rs
index 69f2995df30..8eaad5c08b2 100644
--- a/src/test/run-pass/cycle-collection2.rs
+++ b/src/test/run-pass/cycle-collection2.rs
@@ -13,7 +13,7 @@ struct foo { mut z : fn@() }
 fn nop() { }
 fn nop_foo(_x : @foo) { }
 
-fn main() {
+pub fn main() {
     let w = @foo{ mut z: || nop() };
     let x : fn@() = || nop_foo(w);
     w.z = x;
diff --git a/src/test/run-pass/cycle-collection4.rs b/src/test/run-pass/cycle-collection4.rs
index f7c7cdc76f5..b34ff10b531 100644
--- a/src/test/run-pass/cycle-collection4.rs
+++ b/src/test/run-pass/cycle-collection4.rs
@@ -13,7 +13,7 @@ struct foo { mut z : fn@() }
 fn nop() { }
 fn nop_foo(_y: ~[int], _x : @foo) { }
 
-fn main() {
+pub fn main() {
     let w = @foo{ z: || nop() };
     let x : fn@() = || nop_foo(~[], w);
     w.z = x;
diff --git a/src/test/run-pass/cycle-collection5.rs b/src/test/run-pass/cycle-collection5.rs
index 2d05de2d4fd..9a5d776bacc 100644
--- a/src/test/run-pass/cycle-collection5.rs
+++ b/src/test/run-pass/cycle-collection5.rs
@@ -15,7 +15,7 @@ fn nop_foo(_y: @int, _x : @foo) { }
 
 fn o() -> @int { @10 }
 
-fn main() {
+pub fn main() {
     let w = @foo { mut z: || nop() };
     let x : fn@() = || nop_foo(o(), w);
     w.z = x;
diff --git a/src/test/run-pass/dead-code-one-arm-if.rs b/src/test/run-pass/dead-code-one-arm-if.rs
index d705f5b3d06..eb30b36e48a 100644
--- a/src/test/run-pass/dead-code-one-arm-if.rs
+++ b/src/test/run-pass/dead-code-one-arm-if.rs
@@ -12,4 +12,4 @@
 
 
 // -*- rust -*-
-fn main() { if 1 == 1 { return; } debug!("Paul is dead"); }
+pub fn main() { if 1 == 1 { return; } debug!("Paul is dead"); }
diff --git a/src/test/run-pass/deep-vector.rs b/src/test/run-pass/deep-vector.rs
index 548b0a33f99..d2d8181e114 100644
--- a/src/test/run-pass/deep-vector.rs
+++ b/src/test/run-pass/deep-vector.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let _x = ~[
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/src/test/run-pass/deep-vector2.rs b/src/test/run-pass/deep-vector2.rs
index 91af56c2555..e66cf1bbea6 100644
--- a/src/test/run-pass/deep-vector2.rs
+++ b/src/test/run-pass/deep-vector2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = ~[
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/src/test/run-pass/deep.rs b/src/test/run-pass/deep.rs
index 860a49031da..2f51ec4a7dc 100644
--- a/src/test/run-pass/deep.rs
+++ b/src/test/run-pass/deep.rs
@@ -16,4 +16,4 @@ fn f(x: int) -> int {
     if x == 1 { return 1; } else { let y: int = 1 + f(x - 1); return y; }
 }
 
-fn main() { assert (f(5000) == 5000); }
+pub fn main() { assert (f(5000) == 5000); }
diff --git a/src/test/run-pass/default-method-simple.rs b/src/test/run-pass/default-method-simple.rs
index 5d3dc42c41e..41ab5b1d3c8 100644
--- a/src/test/run-pass/default-method-simple.rs
+++ b/src/test/run-pass/default-method-simple.rs
@@ -28,7 +28,7 @@ impl A : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let a = A { x: 1 };
     a.f();
 }
diff --git a/src/test/run-pass/deref-lval.rs b/src/test/run-pass/deref-lval.rs
index 5638a905256..ec5cc6293e4 100644
--- a/src/test/run-pass/deref-lval.rs
+++ b/src/test/run-pass/deref-lval.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let x = @mut 5; *x = 1000; log(debug, *x); }
+pub fn main() { let x = @mut 5; *x = 1000; log(debug, *x); }
diff --git a/src/test/run-pass/deref.rs b/src/test/run-pass/deref.rs
index 31a354bb226..01a7792ce88 100644
--- a/src/test/run-pass/deref.rs
+++ b/src/test/run-pass/deref.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let x: @int = @10; let y: int = *x; }
+pub fn main() { let x: @int = @10; let y: int = *x; }
diff --git a/src/test/run-pass/deriving-enum-single-variant.rs b/src/test/run-pass/deriving-enum-single-variant.rs
index 40055a61380..7b86a6299f6 100644
--- a/src/test/run-pass/deriving-enum-single-variant.rs
+++ b/src/test/run-pass/deriving-enum-single-variant.rs
@@ -5,4 +5,4 @@ pub enum Task {
     TaskHandle(task_id)
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/deriving-via-extension-c-enum.rs b/src/test/run-pass/deriving-via-extension-c-enum.rs
index 1e7afc80b7d..22c12e7f795 100644
--- a/src/test/run-pass/deriving-via-extension-c-enum.rs
+++ b/src/test/run-pass/deriving-via-extension-c-enum.rs
@@ -15,7 +15,7 @@ enum Foo {
     Boo
 }
 
-fn main() {
+pub fn main() {
     let a = Bar;
     let b = Bar;
     assert a == b;
diff --git a/src/test/run-pass/deriving-via-extension-enum.rs b/src/test/run-pass/deriving-via-extension-enum.rs
index 04d585fe906..22cee722bb3 100644
--- a/src/test/run-pass/deriving-via-extension-enum.rs
+++ b/src/test/run-pass/deriving-via-extension-enum.rs
@@ -14,7 +14,7 @@ enum Foo {
     Baz(float, float)
 }
 
-fn main() {
+pub fn main() {
     let a = Bar(1, 2);
     let b = Bar(1, 2);
     assert a == b;
diff --git a/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs b/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs
index 849ad64270d..b41d41192fe 100644
--- a/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs
+++ b/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs
@@ -24,5 +24,5 @@ enum A {
     E
 }
 
-fn main(){}
+pub fn main(){}
 
diff --git a/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs b/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs
index 5855b1a530b..18336d74c7e 100644
--- a/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs
+++ b/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs
@@ -17,6 +17,6 @@ struct Foo {
     z: int
 }
 
-fn main() {}
+pub fn main() {}
 
 
diff --git a/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs b/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs
index c5e41826a35..e2bb4c446e3 100644
--- a/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs
+++ b/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs
@@ -4,7 +4,7 @@ enum S {
     Y
 }
 
-fn main() {
+pub fn main() {
     let x = X { x: 1, y: 2 };
     assert x == x;
     assert !(x != x);
diff --git a/src/test/run-pass/deriving-via-extension-struct.rs b/src/test/run-pass/deriving-via-extension-struct.rs
index 23d7f9bacb1..cdd0f544626 100644
--- a/src/test/run-pass/deriving-via-extension-struct.rs
+++ b/src/test/run-pass/deriving-via-extension-struct.rs
@@ -15,7 +15,7 @@ struct Foo {
     z: int,
 }
 
-fn main() {
+pub fn main() {
     let a = Foo { x: 1, y: 2, z: 3 };
     let b = Foo { x: 1, y: 2, z: 3 };
     assert a == b;
diff --git a/src/test/run-pass/deriving-via-extension-type-params.rs b/src/test/run-pass/deriving-via-extension-type-params.rs
index b1b196e6986..5040b08d003 100644
--- a/src/test/run-pass/deriving-via-extension-type-params.rs
+++ b/src/test/run-pass/deriving-via-extension-type-params.rs
@@ -18,7 +18,7 @@ struct Foo<T> {
     z: int
 }
 
-fn main() {
+pub fn main() {
     let a = Foo { x: 1, y: 2.0, z: 3 };
     let b = Foo { x: 1, y: 2.0, z: 3 };
     assert a == b;
diff --git a/src/test/run-pass/die-macro.rs b/src/test/run-pass/die-macro.rs
index 59d297473fe..1174cb5df92 100644
--- a/src/test/run-pass/die-macro.rs
+++ b/src/test/run-pass/die-macro.rs
@@ -6,6 +6,6 @@ fn f() {
     let x: int = die!();
 }
 
-fn main() {
+pub fn main() {
 
 }
diff --git a/src/test/run-pass/div-mod.rs b/src/test/run-pass/div-mod.rs
index 8624d063fd6..dfe8c3f9730 100644
--- a/src/test/run-pass/div-mod.rs
+++ b/src/test/run-pass/div-mod.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let x: int = 15;
     let y: int = 5;
     assert (x / 5 == 3);
diff --git a/src/test/run-pass/do-for-empty-args.rs b/src/test/run-pass/do-for-empty-args.rs
index 1ebfb3c39ad..2a7091cb163 100644
--- a/src/test/run-pass/do-for-empty-args.rs
+++ b/src/test/run-pass/do-for-empty-args.rs
@@ -14,7 +14,7 @@
 fn f(f: fn() -> bool) {
 }
 
-fn main() {
+pub fn main() {
     do f() || { true }
     do f() { true }
     do f || { true }
diff --git a/src/test/run-pass/do-for-no-args.rs b/src/test/run-pass/do-for-no-args.rs
index e61088f8a28..5c5cec1fac1 100644
--- a/src/test/run-pass/do-for-no-args.rs
+++ b/src/test/run-pass/do-for-no-args.rs
@@ -14,7 +14,7 @@ fn f(f: fn@() -> bool) { }
 
 fn d(f: fn@()) { }
 
-fn main() {
+pub fn main() {
     for f { }
     do d { }
 }
\ No newline at end of file
diff --git a/src/test/run-pass/do-pure.rs b/src/test/run-pass/do-pure.rs
index 52e8fc0cc7a..5cad9235af8 100644
--- a/src/test/run-pass/do-pure.rs
+++ b/src/test/run-pass/do-pure.rs
@@ -16,5 +16,5 @@ pure fn g() {
     do f { }
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/do-stack.rs b/src/test/run-pass/do-stack.rs
index 06d89d1b209..c42a0dc5739 100644
--- a/src/test/run-pass/do-stack.rs
+++ b/src/test/run-pass/do-stack.rs
@@ -10,6 +10,6 @@
 
 fn f(f: fn&(int)) { f(10) }
 
-fn main() {
+pub fn main() {
     do f() |i| { assert i == 10 }
 }
diff --git a/src/test/run-pass/do1.rs b/src/test/run-pass/do1.rs
index 814a19ae282..f6b00ce7881 100644
--- a/src/test/run-pass/do1.rs
+++ b/src/test/run-pass/do1.rs
@@ -10,6 +10,6 @@
 
 fn f(f: fn@(int)) { f(10) }
 
-fn main() {
+pub fn main() {
     do f() |i| { assert i == 10 }
 }
diff --git a/src/test/run-pass/do2.rs b/src/test/run-pass/do2.rs
index 881bfb0506c..1f0d82ec7b5 100644
--- a/src/test/run-pass/do2.rs
+++ b/src/test/run-pass/do2.rs
@@ -10,6 +10,6 @@
 
 fn f(f: fn@(int) -> int) -> int { f(10) }
 
-fn main() {
+pub fn main() {
     assert do f() |i| { i } == 10;
 }
diff --git a/src/test/run-pass/do3.rs b/src/test/run-pass/do3.rs
index 717c553cc47..f7660e35f59 100644
--- a/src/test/run-pass/do3.rs
+++ b/src/test/run-pass/do3.rs
@@ -10,6 +10,6 @@
 
 fn f(f: fn@(int) -> int) -> int { f(10) }
 
-fn main() {
+pub fn main() {
     assert do f |i| { i } == 10;
 }
diff --git a/src/test/run-pass/double-unbox.rs b/src/test/run-pass/double-unbox.rs
index a3415562920..2dc246d6c33 100644
--- a/src/test/run-pass/double-unbox.rs
+++ b/src/test/run-pass/double-unbox.rs
@@ -13,4 +13,4 @@ type quux = {bar: int};
 fn g(i: int) { }
 fn f(foo: @@quux) { g(foo.bar); }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/drop-on-empty-block-exit.rs b/src/test/run-pass/drop-on-empty-block-exit.rs
index 4a1d32c4bfc..246306e4c47 100644
--- a/src/test/run-pass/drop-on-empty-block-exit.rs
+++ b/src/test/run-pass/drop-on-empty-block-exit.rs
@@ -12,4 +12,4 @@
 
 enum t { foo(@int), }
 
-fn main() { let tt = foo(@10); match tt { foo(z) => { } } }
+pub fn main() { let tt = foo(@10); match tt { foo(z) => { } } }
diff --git a/src/test/run-pass/drop-on-ret.rs b/src/test/run-pass/drop-on-ret.rs
index 2f6f862f054..932da027b70 100644
--- a/src/test/run-pass/drop-on-ret.rs
+++ b/src/test/run-pass/drop-on-ret.rs
@@ -14,4 +14,4 @@
 // -*- rust -*-
 fn f() -> int { if true { let s: ~str = ~"should not leak"; return 1; } return 0; }
 
-fn main() { f(); }
+pub fn main() { f(); }
diff --git a/src/test/run-pass/drop-trait-generic.rs b/src/test/run-pass/drop-trait-generic.rs
index 238f3b8b587..256461b61bd 100644
--- a/src/test/run-pass/drop-trait-generic.rs
+++ b/src/test/run-pass/drop-trait-generic.rs
@@ -18,7 +18,7 @@ impl<T> S<T> : ::core::ops::Drop {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = S { x: 1 };
 }
 
diff --git a/src/test/run-pass/drop-trait.rs b/src/test/run-pass/drop-trait.rs
index 12b2c5e67ab..084bff63743 100644
--- a/src/test/run-pass/drop-trait.rs
+++ b/src/test/run-pass/drop-trait.rs
@@ -18,7 +18,7 @@ impl Foo : Drop {
     }
 }
 
-fn main() {
+pub fn main() {
     let x: Foo = Foo { x: 3 };
 }
 
diff --git a/src/test/run-pass/duplicate-use.rs b/src/test/run-pass/duplicate-use.rs
index 45207215789..3bfd4a7dc46 100644
--- a/src/test/run-pass/duplicate-use.rs
+++ b/src/test/run-pass/duplicate-use.rs
@@ -14,6 +14,6 @@ extern mod std;
 use list = std::map::chained;
 use std::list;
 
-fn main() {
+pub fn main() {
     let _x: list::T<int, int> = list::mk();
 }
diff --git a/src/test/run-pass/dvec-index-op.rs b/src/test/run-pass/dvec-index-op.rs
index 797901e9a8d..e061464c7b2 100644
--- a/src/test/run-pass/dvec-index-op.rs
+++ b/src/test/run-pass/dvec-index-op.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = dvec::DVec();
     x.push(1);
     io::println(fmt!("%d", x[0]));
diff --git a/src/test/run-pass/dvec-test.rs b/src/test/run-pass/dvec-test.rs
index f569e9116e3..a0c6b666554 100644
--- a/src/test/run-pass/dvec-test.rs
+++ b/src/test/run-pass/dvec-test.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let d = dvec::DVec();
     d.push(3);
     d.push(4);
diff --git a/src/test/run-pass/early-ret-binop-add.rs b/src/test/run-pass/early-ret-binop-add.rs
index 6f6db719551..97e873e9aff 100644
--- a/src/test/run-pass/early-ret-binop-add.rs
+++ b/src/test/run-pass/early-ret-binop-add.rs
@@ -9,4 +9,4 @@
 // except according to those terms.
 
 fn wsucc(n: int) -> int { 0 + { return n + 1 } }
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/early-vtbl-resolution.rs b/src/test/run-pass/early-vtbl-resolution.rs
index 2e647d25c74..d71edb66098 100644
--- a/src/test/run-pass/early-vtbl-resolution.rs
+++ b/src/test/run-pass/early-vtbl-resolution.rs
@@ -19,7 +19,7 @@ fn foo_func<A, B: thing<A>>(x: B) -> Option<A> { x.foo() }
 
 struct A { a: int }
 
-fn main() {
+pub fn main() {
 
     for iter::eachi(&(Some(A {a: 0}))) |i, a| { 
         debug!("%u %d", i, a.a);
diff --git a/src/test/run-pass/else-if.rs b/src/test/run-pass/else-if.rs
index 10aebc8c6a8..6fc2b7d2a1b 100644
--- a/src/test/run-pass/else-if.rs
+++ b/src/test/run-pass/else-if.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     if 1 == 2 {
         assert (false);
     } else if 2 == 3 {
diff --git a/src/test/run-pass/empty-mutable-vec.rs b/src/test/run-pass/empty-mutable-vec.rs
index 71271e874da..58db60dd723 100644
--- a/src/test/run-pass/empty-mutable-vec.rs
+++ b/src/test/run-pass/empty-mutable-vec.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let v: ~[mut int] = ~[mut]; }
+pub fn main() { let v: ~[mut int] = ~[mut]; }
diff --git a/src/test/run-pass/empty-tag.rs b/src/test/run-pass/empty-tag.rs
index fb72a53d5a6..0dd6c2773ce 100644
--- a/src/test/run-pass/empty-tag.rs
+++ b/src/test/run-pass/empty-tag.rs
@@ -21,7 +21,7 @@ fn wrapper3(i: chan) {
     assert i == chan_t;
 }
 
-fn main() {
+pub fn main() {
     let wrapped = {||wrapper3(chan_t)};
     wrapped();
 }
diff --git a/src/test/run-pass/enum-disr-val-pretty.rs b/src/test/run-pass/enum-disr-val-pretty.rs
index dfabda56ea2..19045500cf2 100644
--- a/src/test/run-pass/enum-disr-val-pretty.rs
+++ b/src/test/run-pass/enum-disr-val-pretty.rs
@@ -12,7 +12,7 @@
 
 enum color { red = 1, green, blue, imaginary = -1, }
 
-fn main() {
+pub fn main() {
     test_color(red, 1, ~"red");
     test_color(green, 2, ~"green");
     test_color(blue, 3, ~"blue");
diff --git a/src/test/run-pass/enum-export-inheritance.rs b/src/test/run-pass/enum-export-inheritance.rs
index b54e7be1fef..c3beebdb8ae 100644
--- a/src/test/run-pass/enum-export-inheritance.rs
+++ b/src/test/run-pass/enum-export-inheritance.rs
@@ -16,7 +16,7 @@ mod a {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = a::Bar;
 }
 
diff --git a/src/test/run-pass/enum-variants.rs b/src/test/run-pass/enum-variants.rs
index 26fae68e158..a8a0a72dd3c 100644
--- a/src/test/run-pass/enum-variants.rs
+++ b/src/test/run-pass/enum-variants.rs
@@ -3,7 +3,7 @@ enum Animal {
     Cat { name: ~str, weight: float }
 }
 
-fn main() {
+pub fn main() {
     let mut a: Animal = Dog(~"Cocoa", 37.2);
     a = Cat{ name: ~"Spotty", weight: 2.7 };
     // permuting the fields should work too
diff --git a/src/test/run-pass/estr-shared.rs b/src/test/run-pass/estr-shared.rs
index 241a416cf74..5668c18e95b 100644
--- a/src/test/run-pass/estr-shared.rs
+++ b/src/test/run-pass/estr-shared.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 // xfail-test
-fn main() {
+pub fn main() {
     let x : @str = @"hello";
 }
diff --git a/src/test/run-pass/estr-slice.rs b/src/test/run-pass/estr-slice.rs
index 82bd613be66..ca6928556fa 100644
--- a/src/test/run-pass/estr-slice.rs
+++ b/src/test/run-pass/estr-slice.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 
-fn main() {
+pub fn main() {
     let x = &"hello";
     let v = &"hello";
     let mut y : &str = &"there";
diff --git a/src/test/run-pass/estr-uniq.rs b/src/test/run-pass/estr-uniq.rs
index 4e0803e0a83..c6b8cc9fab9 100644
--- a/src/test/run-pass/estr-uniq.rs
+++ b/src/test/run-pass/estr-uniq.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x : ~str = ~"hello";
     let _y : ~str = ~"there";
     let mut z = ~"thing";
diff --git a/src/test/run-pass/evec-internal-boxes.rs b/src/test/run-pass/evec-internal-boxes.rs
index 8d4a9b7c0d2..5357bcc6ab0 100644
--- a/src/test/run-pass/evec-internal-boxes.rs
+++ b/src/test/run-pass/evec-internal-boxes.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x : [@int * 5] = [@1,@2,@3,@4,@5];
     let _y : [@int * 5] = [@1,@2,@3,@4,@5];
     let mut z = [@1,@2,@3,@4,@5];
diff --git a/src/test/run-pass/evec-internal.rs b/src/test/run-pass/evec-internal.rs
index 64d12f548f9..a97eacfee88 100644
--- a/src/test/run-pass/evec-internal.rs
+++ b/src/test/run-pass/evec-internal.rs
@@ -13,7 +13,7 @@
 
 // Doesn't work; needs a design decision.
 
-fn main() {
+pub fn main() {
     let x : [int * 5] = [1,2,3,4,5];
     let _y : [int * 5] = [1,2,3,4,5];
     let mut z = [1,2,3,4,5];
diff --git a/src/test/run-pass/evec-slice.rs b/src/test/run-pass/evec-slice.rs
index eef47ca29ca..e8e4f64a9cd 100644
--- a/src/test/run-pass/evec-slice.rs
+++ b/src/test/run-pass/evec-slice.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x : &[int] = &[1,2,3,4,5];
     let mut z = &[1,2,3,4,5];
     z = x;
diff --git a/src/test/run-pass/exec-env.rs b/src/test/run-pass/exec-env.rs
index 263913c0a32..67cc820ac5d 100644
--- a/src/test/run-pass/exec-env.rs
+++ b/src/test/run-pass/exec-env.rs
@@ -11,6 +11,6 @@
 // xfail-fast (exec-env not supported in fast mode)
 // exec-env:TEST_EXEC_ENV=22
 
-fn main() {
+pub fn main() {
     assert os::getenv(~"TEST_EXEC_ENV") == Some(~"22");
 }
diff --git a/src/test/run-pass/explicit-i-suffix.rs b/src/test/run-pass/explicit-i-suffix.rs
index fa5ff20bcf8..45cfee76fb8 100644
--- a/src/test/run-pass/explicit-i-suffix.rs
+++ b/src/test/run-pass/explicit-i-suffix.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x: int = 8i;
     let y = 9i;
     x + y;
diff --git a/src/test/run-pass/explicit-self-closures.rs b/src/test/run-pass/explicit-self-closures.rs
index 9743fbc79da..4c12b6ad47c 100644
--- a/src/test/run-pass/explicit-self-closures.rs
+++ b/src/test/run-pass/explicit-self-closures.rs
@@ -26,4 +26,4 @@ impl Box {
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/explicit-self-generic.rs b/src/test/run-pass/explicit-self-generic.rs
index bb57710969f..d03893367b4 100644
--- a/src/test/run-pass/explicit-self-generic.rs
+++ b/src/test/run-pass/explicit-self-generic.rs
@@ -36,7 +36,7 @@ impl<K,V> LinearMap<K,V> {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut m = ~linear_map::<(),()>();
     assert m.len() == 0;
 }
diff --git a/src/test/run-pass/explicit-self-objects-box.rs b/src/test/run-pass/explicit-self-objects-box.rs
index a92a70934f9..8d081c16830 100644
--- a/src/test/run-pass/explicit-self-objects-box.rs
+++ b/src/test/run-pass/explicit-self-objects-box.rs
@@ -22,7 +22,7 @@ impl S : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = @S { x: 3 };
     let y = x as @Foo;
     y.f();
diff --git a/src/test/run-pass/explicit-self-objects-ext-1.rs b/src/test/run-pass/explicit-self-objects-ext-1.rs
index 52a880eb103..e6258338628 100644
--- a/src/test/run-pass/explicit-self-objects-ext-1.rs
+++ b/src/test/run-pass/explicit-self-objects-ext-1.rs
@@ -32,7 +32,7 @@ impl S: Reader {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = S { x: 1, y: 2 };
     let x = x as @Reader;
     x.read_bytes(0);
diff --git a/src/test/run-pass/explicit-self-objects-ext-2.rs b/src/test/run-pass/explicit-self-objects-ext-2.rs
index 52a880eb103..e6258338628 100644
--- a/src/test/run-pass/explicit-self-objects-ext-2.rs
+++ b/src/test/run-pass/explicit-self-objects-ext-2.rs
@@ -32,7 +32,7 @@ impl S: Reader {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = S { x: 1, y: 2 };
     let x = x as @Reader;
     x.read_bytes(0);
diff --git a/src/test/run-pass/explicit-self-objects-ext-3.rs b/src/test/run-pass/explicit-self-objects-ext-3.rs
index 521d5a75701..a517bbd9d06 100644
--- a/src/test/run-pass/explicit-self-objects-ext-3.rs
+++ b/src/test/run-pass/explicit-self-objects-ext-3.rs
@@ -32,7 +32,7 @@ impl S: Reader {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = S { x: 1, y: 2 };
     let x = x as @Reader;
     x.read_bytes(0);
diff --git a/src/test/run-pass/explicit-self-objects-ext-4.rs b/src/test/run-pass/explicit-self-objects-ext-4.rs
index 759097a771b..a5c4536c1e2 100644
--- a/src/test/run-pass/explicit-self-objects-ext-4.rs
+++ b/src/test/run-pass/explicit-self-objects-ext-4.rs
@@ -32,7 +32,7 @@ impl S: Reader {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = S { x: 1, y: 2 };
     let x = x as @Reader;
     x.read_bytes(0);
diff --git a/src/test/run-pass/explicit-self-objects-simple.rs b/src/test/run-pass/explicit-self-objects-simple.rs
index 51c2a9ad53d..79d5d7791f4 100644
--- a/src/test/run-pass/explicit-self-objects-simple.rs
+++ b/src/test/run-pass/explicit-self-objects-simple.rs
@@ -22,7 +22,7 @@ impl S : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = @S { x: 3 };
     let y = x as @Foo;
     y.f();
diff --git a/src/test/run-pass/explicit-self-objects-uniq.rs b/src/test/run-pass/explicit-self-objects-uniq.rs
index 49979559644..bf1776e598e 100644
--- a/src/test/run-pass/explicit-self-objects-uniq.rs
+++ b/src/test/run-pass/explicit-self-objects-uniq.rs
@@ -22,7 +22,7 @@ impl S : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = ~S { x: 3 };
     let y = x as ~Foo;
     y.f();
diff --git a/src/test/run-pass/explicit-self.rs b/src/test/run-pass/explicit-self.rs
index b4a80906b33..ebffa131fb6 100644
--- a/src/test/run-pass/explicit-self.rs
+++ b/src/test/run-pass/explicit-self.rs
@@ -65,7 +65,7 @@ impl thing {
 trait Nus { fn f(&self); }
 impl thing: Nus { fn f(&self) {} }
 
-fn main() {
+pub fn main() {
 
     let x = @thing(A {mut a: @10});
     assert x.foo() == 10;
diff --git a/src/test/run-pass/explicit_self_xcrate_exe.rs b/src/test/run-pass/explicit_self_xcrate_exe.rs
index f38774934d0..e217e6ebd41 100644
--- a/src/test/run-pass/explicit_self_xcrate_exe.rs
+++ b/src/test/run-pass/explicit_self_xcrate_exe.rs
@@ -14,7 +14,7 @@
 extern mod explicit_self_xcrate;
 use explicit_self_xcrate::{Foo, Bar};
 
-fn main() {
+pub fn main() {
     let x = Bar { x: ~"hello" };
     x.f();
 }
diff --git a/src/test/run-pass/export-abstract-tag.rs b/src/test/run-pass/export-abstract-tag.rs
index cc7793fdf28..209dbb3741a 100644
--- a/src/test/run-pass/export-abstract-tag.rs
+++ b/src/test/run-pass/export-abstract-tag.rs
@@ -17,4 +17,4 @@ mod foo {
     pub fn f() -> t { return t1; }
 }
 
-fn main() { let v: foo::t = foo::f(); }
+pub fn main() { let v: foo::t = foo::f(); }
diff --git a/src/test/run-pass/export-glob-imports-target.rs b/src/test/run-pass/export-glob-imports-target.rs
index 33a54b85ea8..ae17d6ca8b3 100644
--- a/src/test/run-pass/export-glob-imports-target.rs
+++ b/src/test/run-pass/export-glob-imports-target.rs
@@ -25,4 +25,4 @@ mod foo {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/export-multi.rs b/src/test/run-pass/export-multi.rs
index d19f7c0d31c..396e4e6b250 100644
--- a/src/test/run-pass/export-multi.rs
+++ b/src/test/run-pass/export-multi.rs
@@ -18,4 +18,4 @@ mod m {
     pub fn g() { }
 }
 
-fn main() { f(); g(); m::f(); m::g(); }
+pub fn main() { f(); g(); m::f(); m::g(); }
diff --git a/src/test/run-pass/export-non-interference2.rs b/src/test/run-pass/export-non-interference2.rs
index dae4e15fee0..9889b559bca 100644
--- a/src/test/run-pass/export-non-interference2.rs
+++ b/src/test/run-pass/export-non-interference2.rs
@@ -16,4 +16,4 @@ mod foo {
     pub fn x() { debug!("x"); }
 }
 
-fn main() { self::foo::bar::y(); }
+pub fn main() { self::foo::bar::y(); }
diff --git a/src/test/run-pass/export-non-interference3.rs b/src/test/run-pass/export-non-interference3.rs
index 5f8a74203e4..36c9fe6cf42 100644
--- a/src/test/run-pass/export-non-interference3.rs
+++ b/src/test/run-pass/export-non-interference3.rs
@@ -18,4 +18,4 @@ pub mod bar {
     pub fn x() { debug!("x"); }
 }
 
-fn main() { foo::x(); }
+pub fn main() { foo::x(); }
diff --git a/src/test/run-pass/export-tag-variant.rs b/src/test/run-pass/export-tag-variant.rs
index 06b513c4ad9..47ac4bd4a9a 100644
--- a/src/test/run-pass/export-tag-variant.rs
+++ b/src/test/run-pass/export-tag-variant.rs
@@ -12,4 +12,4 @@ mod foo {
     pub enum t { t1, }
 }
 
-fn main() { let v = foo::t1; }
+pub fn main() { let v = foo::t1; }
diff --git a/src/test/run-pass/export-unexported-dep.rs b/src/test/run-pass/export-unexported-dep.rs
index 1119bfde2fc..16f24674226 100644
--- a/src/test/run-pass/export-unexported-dep.rs
+++ b/src/test/run-pass/export-unexported-dep.rs
@@ -27,4 +27,4 @@ mod foo {
     pub fn g(v: t) { assert (v == t1); }
 }
 
-fn main() { foo::g(foo::f()); }
+pub fn main() { foo::g(foo::f()); }
diff --git a/src/test/run-pass/expr-alt-box.rs b/src/test/run-pass/expr-alt-box.rs
index 82b51cd5fae..fd1a5ad4969 100644
--- a/src/test/run-pass/expr-alt-box.rs
+++ b/src/test/run-pass/expr-alt-box.rs
@@ -25,4 +25,4 @@ fn test_str() {
     assert (res == ~"happy");
 }
 
-fn main() { test_box(); test_str(); }
+pub fn main() { test_box(); test_str(); }
diff --git a/src/test/run-pass/expr-alt-fail-all.rs b/src/test/run-pass/expr-alt-fail-all.rs
index 160fcfe2245..e806907129f 100644
--- a/src/test/run-pass/expr-alt-fail-all.rs
+++ b/src/test/run-pass/expr-alt-fail-all.rs
@@ -13,7 +13,7 @@
 
 // When all branches of an match expression result in fail, the entire
 // match expression results in fail.
-fn main() {
+pub fn main() {
     let x =
         match true {
           true => { 10 }
diff --git a/src/test/run-pass/expr-alt-fail.rs b/src/test/run-pass/expr-alt-fail.rs
index 7666e4b90e5..f26f1f1e6f7 100644
--- a/src/test/run-pass/expr-alt-fail.rs
+++ b/src/test/run-pass/expr-alt-fail.rs
@@ -18,4 +18,4 @@ fn test_box() {
     assert (r[0] == 10);
 }
 
-fn main() { test_simple(); test_box(); }
+pub fn main() { test_simple(); test_box(); }
diff --git a/src/test/run-pass/expr-alt-generic-box1.rs b/src/test/run-pass/expr-alt-generic-box1.rs
index f23107a7db8..ecb2bf91702 100644
--- a/src/test/run-pass/expr-alt-generic-box1.rs
+++ b/src/test/run-pass/expr-alt-generic-box1.rs
@@ -24,4 +24,4 @@ fn test_box() {
     test_generic::<bool>(@true, compare_box);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-alt-generic-box2.rs b/src/test/run-pass/expr-alt-generic-box2.rs
index 18e5f39a81f..6962f4b5e0f 100644
--- a/src/test/run-pass/expr-alt-generic-box2.rs
+++ b/src/test/run-pass/expr-alt-generic-box2.rs
@@ -25,4 +25,4 @@ fn test_vec() {
     test_generic::<@int>(@1, compare_box);
 }
 
-fn main() { test_vec(); }
+pub fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-alt-generic-unique1.rs b/src/test/run-pass/expr-alt-generic-unique1.rs
index 04f2a8ec02b..b0a5af1cd53 100644
--- a/src/test/run-pass/expr-alt-generic-unique1.rs
+++ b/src/test/run-pass/expr-alt-generic-unique1.rs
@@ -26,4 +26,4 @@ fn test_box() {
     test_generic::<bool>(~true, compare_box);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-alt-generic-unique2.rs b/src/test/run-pass/expr-alt-generic-unique2.rs
index 7263540102d..02bc248fc4f 100644
--- a/src/test/run-pass/expr-alt-generic-unique2.rs
+++ b/src/test/run-pass/expr-alt-generic-unique2.rs
@@ -28,4 +28,4 @@ fn test_vec() {
     test_generic::<~int>(~1, compare_box);
 }
 
-fn main() { test_vec(); }
+pub fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-alt-generic.rs b/src/test/run-pass/expr-alt-generic.rs
index 4fa2bf1913a..a3281ba57f1 100644
--- a/src/test/run-pass/expr-alt-generic.rs
+++ b/src/test/run-pass/expr-alt-generic.rs
@@ -33,4 +33,4 @@ fn test_rec() {
     test_generic::<Pair>(Pair {a: 1, b: 2}, compare_rec);
 }
 
-fn main() { test_bool(); test_rec(); }
+pub fn main() { test_bool(); test_rec(); }
diff --git a/src/test/run-pass/expr-alt-struct.rs b/src/test/run-pass/expr-alt-struct.rs
index f2887f2a691..bcf07586f24 100644
--- a/src/test/run-pass/expr-alt-struct.rs
+++ b/src/test/run-pass/expr-alt-struct.rs
@@ -35,4 +35,4 @@ fn test_tag() {
     assert (rs == happy);
 }
 
-fn main() { test_rec(); test_tag(); }
+pub fn main() { test_rec(); test_tag(); }
diff --git a/src/test/run-pass/expr-alt-unique.rs b/src/test/run-pass/expr-alt-unique.rs
index 8dd0da344a3..1ce8e2d7624 100644
--- a/src/test/run-pass/expr-alt-unique.rs
+++ b/src/test/run-pass/expr-alt-unique.rs
@@ -19,4 +19,4 @@ fn test_box() {
     assert (*res == 100);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-alt.rs b/src/test/run-pass/expr-alt.rs
index 24ba6f622b0..c10f922e880 100644
--- a/src/test/run-pass/expr-alt.rs
+++ b/src/test/run-pass/expr-alt.rs
@@ -46,7 +46,7 @@ fn test_alt_as_block_result() {
     assert (rs);
 }
 
-fn main() {
+pub fn main() {
     test_basic();
     test_inferrence();
     test_alt_as_alt_head();
diff --git a/src/test/run-pass/expr-block-box.rs b/src/test/run-pass/expr-block-box.rs
index 075020a10b8..f1fa9d8e2d5 100644
--- a/src/test/run-pass/expr-block-box.rs
+++ b/src/test/run-pass/expr-block-box.rs
@@ -12,4 +12,4 @@
 
 
 // -*- rust -*-
-fn main() { let x = { @100 }; assert (*x == 100); }
+pub fn main() { let x = { @100 }; assert (*x == 100); }
diff --git a/src/test/run-pass/expr-block-fn.rs b/src/test/run-pass/expr-block-fn.rs
index d24273991b3..fd69a702f1b 100644
--- a/src/test/run-pass/expr-block-fn.rs
+++ b/src/test/run-pass/expr-block-fn.rs
@@ -17,4 +17,4 @@ fn test_fn() {
     //assert (rs() == 10);
 }
 
-fn main() { test_fn(); }
+pub fn main() { test_fn(); }
diff --git a/src/test/run-pass/expr-block-generic-box1.rs b/src/test/run-pass/expr-block-generic-box1.rs
index 81936c1fbd1..440a25b59cd 100644
--- a/src/test/run-pass/expr-block-generic-box1.rs
+++ b/src/test/run-pass/expr-block-generic-box1.rs
@@ -28,4 +28,4 @@ fn test_box() {
     test_generic::<bool>(@true, compare_box);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-block-generic-box2.rs b/src/test/run-pass/expr-block-generic-box2.rs
index 66edbdab8e6..94627082eb4 100644
--- a/src/test/run-pass/expr-block-generic-box2.rs
+++ b/src/test/run-pass/expr-block-generic-box2.rs
@@ -24,4 +24,4 @@ fn test_vec() {
     test_generic::<@int>(@1, compare_vec);
 }
 
-fn main() { test_vec(); }
+pub fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-block-generic-unique1.rs b/src/test/run-pass/expr-block-generic-unique1.rs
index d95e7fe1c0e..b3637f80535 100644
--- a/src/test/run-pass/expr-block-generic-unique1.rs
+++ b/src/test/run-pass/expr-block-generic-unique1.rs
@@ -27,4 +27,4 @@ fn test_box() {
     test_generic::<bool>(~true, compare_box);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-block-generic-unique2.rs b/src/test/run-pass/expr-block-generic-unique2.rs
index 210b4c5afb1..39585f7cc67 100644
--- a/src/test/run-pass/expr-block-generic-unique2.rs
+++ b/src/test/run-pass/expr-block-generic-unique2.rs
@@ -24,4 +24,4 @@ fn test_vec() {
     test_generic::<~int>(~1, compare_vec);
 }
 
-fn main() { test_vec(); }
+pub fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-block-generic.rs b/src/test/run-pass/expr-block-generic.rs
index 6cfc06307c4..dca3030df14 100644
--- a/src/test/run-pass/expr-block-generic.rs
+++ b/src/test/run-pass/expr-block-generic.rs
@@ -35,4 +35,4 @@ fn test_rec() {
     test_generic::<Pair>(Pair {a: 1, b: 2}, compare_rec);
 }
 
-fn main() { test_bool(); test_rec(); }
+pub fn main() { test_bool(); test_rec(); }
diff --git a/src/test/run-pass/expr-block-ref.rs b/src/test/run-pass/expr-block-ref.rs
index c70faf935ba..8b10bd7c51c 100644
--- a/src/test/run-pass/expr-block-ref.rs
+++ b/src/test/run-pass/expr-block-ref.rs
@@ -9,4 +9,4 @@
 // except according to those terms.
 
 // Regression test for issue #388
-fn main() { let x = { { @10 } }; }
+pub fn main() { let x = { { @10 } }; }
diff --git a/src/test/run-pass/expr-block-slot.rs b/src/test/run-pass/expr-block-slot.rs
index 8c173ae5d76..1e3a91ae2ce 100644
--- a/src/test/run-pass/expr-block-slot.rs
+++ b/src/test/run-pass/expr-block-slot.rs
@@ -13,7 +13,7 @@
 struct A { a: int }
 struct V { v: int }
 
-fn main() {
+pub fn main() {
     let a = { let b = A {a: 3}; b };
     assert (a.a == 3);
     let c = { let d = V {v: 3}; d };
diff --git a/src/test/run-pass/expr-block-unique.rs b/src/test/run-pass/expr-block-unique.rs
index e9c971e5435..f6b31ee3733 100644
--- a/src/test/run-pass/expr-block-unique.rs
+++ b/src/test/run-pass/expr-block-unique.rs
@@ -12,4 +12,4 @@
 
 
 // -*- rust -*-
-fn main() { let x = { ~100 }; assert (*x == 100); }
+pub fn main() { let x = { ~100 }; assert (*x == 100); }
diff --git a/src/test/run-pass/expr-block.rs b/src/test/run-pass/expr-block.rs
index 490f3950f9f..fb3d3efd650 100644
--- a/src/test/run-pass/expr-block.rs
+++ b/src/test/run-pass/expr-block.rs
@@ -25,4 +25,4 @@ fn test_filled_with_stuff() {
     assert (rs == 10);
 }
 
-fn main() { test_basic(); test_rec(); test_filled_with_stuff(); }
+pub fn main() { test_basic(); test_rec(); test_filled_with_stuff(); }
diff --git a/src/test/run-pass/expr-copy.rs b/src/test/run-pass/expr-copy.rs
index 69dcac9f03a..56cc5204b0a 100644
--- a/src/test/run-pass/expr-copy.rs
+++ b/src/test/run-pass/expr-copy.rs
@@ -17,7 +17,7 @@ fn f(arg: A) {
 
 struct A { mut a: int }
 
-fn main() {
+pub fn main() {
     let x = A {a: 10};
     f(x);
     assert x.a == 100;
diff --git a/src/test/run-pass/expr-elseif-ref.rs b/src/test/run-pass/expr-elseif-ref.rs
index a1973334e47..ffcfe6448bc 100644
--- a/src/test/run-pass/expr-elseif-ref.rs
+++ b/src/test/run-pass/expr-elseif-ref.rs
@@ -10,7 +10,7 @@
 
 // Make sure we drop the refs of the temporaries needed to return the
 // values from the else if branch
-fn main() {
+pub fn main() {
     let y: @uint = @10u;
     let x = if false { y } else if true { y } else { y };
     assert (*y == 10u);
diff --git a/src/test/run-pass/expr-elseif-ref2.rs b/src/test/run-pass/expr-elseif-ref2.rs
index 8f593bf4acf..2832e4a760c 100644
--- a/src/test/run-pass/expr-elseif-ref2.rs
+++ b/src/test/run-pass/expr-elseif-ref2.rs
@@ -9,4 +9,4 @@
 // except according to those terms.
 
 // Regression test for issue #388
-fn main() { let x = if false { @0u } else if true { @10u } else { @0u }; }
+pub fn main() { let x = if false { @0u } else if true { @10u } else { @0u }; }
diff --git a/src/test/run-pass/expr-empty-ret.rs b/src/test/run-pass/expr-empty-ret.rs
index 5366499a25a..fa84e81f775 100644
--- a/src/test/run-pass/expr-empty-ret.rs
+++ b/src/test/run-pass/expr-empty-ret.rs
@@ -12,4 +12,4 @@
 
 fn f() { let x = match true { true => { 10 } false => { return } }; }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/expr-fn.rs b/src/test/run-pass/expr-fn.rs
index 6f6c48c7994..727524f5677 100644
--- a/src/test/run-pass/expr-fn.rs
+++ b/src/test/run-pass/expr-fn.rs
@@ -55,7 +55,7 @@ fn test_372() {
 
 fn test_nil() { () }
 
-fn main() {
+pub fn main() {
     test_int();
     test_vec();
     test_generic();
diff --git a/src/test/run-pass/expr-if-box.rs b/src/test/run-pass/expr-if-box.rs
index e1b4c9c1033..7ca8c8f88c8 100644
--- a/src/test/run-pass/expr-if-box.rs
+++ b/src/test/run-pass/expr-if-box.rs
@@ -24,4 +24,4 @@ fn test_str() {
     assert (rs == ~"happy");
 }
 
-fn main() { test_box(); test_str(); }
+pub fn main() { test_box(); test_str(); }
diff --git a/src/test/run-pass/expr-if-fail-all.rs b/src/test/run-pass/expr-if-fail-all.rs
index b56878dec63..a4c5799f445 100644
--- a/src/test/run-pass/expr-if-fail-all.rs
+++ b/src/test/run-pass/expr-if-fail-all.rs
@@ -10,4 +10,4 @@
 
 // When all branches of an if expression result in fail, the entire if
 // expression results in fail.
-fn main() { let x = if true { 10 } else { if true { die!() } else { die!() } }; }
+pub fn main() { let x = if true { 10 } else { if true { die!() } else { die!() } }; }
diff --git a/src/test/run-pass/expr-if-fail.rs b/src/test/run-pass/expr-if-fail.rs
index 3130b26ac58..698db97407c 100644
--- a/src/test/run-pass/expr-if-fail.rs
+++ b/src/test/run-pass/expr-if-fail.rs
@@ -20,4 +20,4 @@ fn test_elseif_fail() {
     assert (x == 10);
 }
 
-fn main() { test_if_fail(); test_else_fail(); test_elseif_fail(); }
+pub fn main() { test_if_fail(); test_else_fail(); test_elseif_fail(); }
diff --git a/src/test/run-pass/expr-if-generic-box1.rs b/src/test/run-pass/expr-if-generic-box1.rs
index 99c63f3e6dc..16677886d09 100644
--- a/src/test/run-pass/expr-if-generic-box1.rs
+++ b/src/test/run-pass/expr-if-generic-box1.rs
@@ -24,4 +24,4 @@ fn test_box() {
     test_generic::<bool>(@true, @false, compare_box);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-if-generic-box2.rs b/src/test/run-pass/expr-if-generic-box2.rs
index bb382d13833..c1bd2589301 100644
--- a/src/test/run-pass/expr-if-generic-box2.rs
+++ b/src/test/run-pass/expr-if-generic-box2.rs
@@ -24,4 +24,4 @@ fn test_vec() {
     test_generic::<@int>(@1, @2, compare_box);
 }
 
-fn main() { test_vec(); }
+pub fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-if-generic.rs b/src/test/run-pass/expr-if-generic.rs
index 92f9117dde8..537f6039af8 100644
--- a/src/test/run-pass/expr-if-generic.rs
+++ b/src/test/run-pass/expr-if-generic.rs
@@ -34,4 +34,4 @@ fn test_rec() {
     test_generic::<Pair>(Pair{a: 1, b: 2}, Pair{a: 2, b: 3}, compare_rec);
 }
 
-fn main() { test_bool(); test_rec(); }
+pub fn main() { test_bool(); test_rec(); }
diff --git a/src/test/run-pass/expr-if-struct.rs b/src/test/run-pass/expr-if-struct.rs
index 506d607e7e8..2f222c2d08e 100644
--- a/src/test/run-pass/expr-if-struct.rs
+++ b/src/test/run-pass/expr-if-struct.rs
@@ -36,4 +36,4 @@ fn test_tag() {
     assert (rs == happy);
 }
 
-fn main() { test_rec(); test_tag(); }
+pub fn main() { test_rec(); test_tag(); }
diff --git a/src/test/run-pass/expr-if-unique.rs b/src/test/run-pass/expr-if-unique.rs
index 443847bfd50..4cf99f83039 100644
--- a/src/test/run-pass/expr-if-unique.rs
+++ b/src/test/run-pass/expr-if-unique.rs
@@ -19,4 +19,4 @@ fn test_box() {
     assert (*rs == 100);
 }
 
-fn main() { test_box(); }
+pub fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-if.rs b/src/test/run-pass/expr-if.rs
index 6fc5a1c38c2..b75c633671b 100644
--- a/src/test/run-pass/expr-if.rs
+++ b/src/test/run-pass/expr-if.rs
@@ -53,7 +53,7 @@ fn test_if_as_block_result() {
     assert (rs);
 }
 
-fn main() {
+pub fn main() {
     test_if();
     test_else();
     test_elseif1();
diff --git a/src/test/run-pass/expr-scope.rs b/src/test/run-pass/expr-scope.rs
index 35e3ff60243..942147f1eba 100644
--- a/src/test/run-pass/expr-scope.rs
+++ b/src/test/run-pass/expr-scope.rs
@@ -12,4 +12,4 @@
 // xfail-fast
 
 pub fn f() { }
-fn main() { return ::f(); }
+pub fn main() { return ::f(); }
diff --git a/src/test/run-pass/exterior.rs b/src/test/run-pass/exterior.rs
index 2d77a775f34..f7faf26bc4c 100644
--- a/src/test/run-pass/exterior.rs
+++ b/src/test/run-pass/exterior.rs
@@ -16,7 +16,7 @@ struct Point {x: int, y: int, mut z: int}
 
 fn f(p: @Point) { assert (p.z == 12); p.z = 13; assert (p.z == 13); }
 
-fn main() {
+pub fn main() {
     let a: Point = Point {x: 10, y: 11, mut z: 12};
     let b: @Point = @copy a;
     assert (b.z == 12);
diff --git a/src/test/run-pass/extern-1.rs b/src/test/run-pass/extern-1.rs
index 93da915f669..3aaa514eea2 100644
--- a/src/test/run-pass/extern-1.rs
+++ b/src/test/run-pass/extern-1.rs
@@ -11,5 +11,5 @@
 extern fn f() {
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/extern-call-deep.rs b/src/test/run-pass/extern-call-deep.rs
index da09dd02be3..c0032cb055a 100644
--- a/src/test/run-pass/extern-call-deep.rs
+++ b/src/test/run-pass/extern-call-deep.rs
@@ -28,7 +28,7 @@ fn count(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     let result = count(1000u);
     debug!("result = %?", result);
     assert result == 1000u;
diff --git a/src/test/run-pass/extern-call-deep2.rs b/src/test/run-pass/extern-call-deep2.rs
index 52753e2549f..970bc935227 100644
--- a/src/test/run-pass/extern-call-deep2.rs
+++ b/src/test/run-pass/extern-call-deep2.rs
@@ -28,7 +28,7 @@ fn count(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     // Make sure we're on a task with small Rust stacks (main currently
     // has a large stack)
     do task::spawn {
diff --git a/src/test/run-pass/extern-call-scrub.rs b/src/test/run-pass/extern-call-scrub.rs
index 1db40fbcc21..3067707019b 100644
--- a/src/test/run-pass/extern-call-scrub.rs
+++ b/src/test/run-pass/extern-call-scrub.rs
@@ -32,7 +32,7 @@ fn count(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     // Make sure we're on a task with small Rust stacks (main currently
     // has a large stack)
     do task::spawn {
diff --git a/src/test/run-pass/extern-call.rs b/src/test/run-pass/extern-call.rs
index 2c92202992d..44051b8074a 100644
--- a/src/test/run-pass/extern-call.rs
+++ b/src/test/run-pass/extern-call.rs
@@ -28,7 +28,7 @@ fn fact(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     let result = fact(10u);
     debug!("result = %?", result);
     assert result == 3628800u;
diff --git a/src/test/run-pass/extern-crosscrate.rs b/src/test/run-pass/extern-crosscrate.rs
index 3ce4aa741ca..b95074c6f88 100644
--- a/src/test/run-pass/extern-crosscrate.rs
+++ b/src/test/run-pass/extern-crosscrate.rs
@@ -20,7 +20,7 @@ fn fact(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     let result = fact(10u);
     debug!("result = %?", result);
     assert result == 3628800u;
diff --git a/src/test/run-pass/extern-mod-abi.rs b/src/test/run-pass/extern-mod-abi.rs
index baf19150ad4..7eada51b7c7 100644
--- a/src/test/run-pass/extern-mod-abi.rs
+++ b/src/test/run-pass/extern-mod-abi.rs
@@ -12,5 +12,5 @@ extern "C" {
     fn pow(x: f64, y: f64) -> f64;
 }
 
-fn main() {}
+pub fn main() {}
 
diff --git a/src/test/run-pass/extern-mod-syntax.rs b/src/test/run-pass/extern-mod-syntax.rs
index badff7bdfd6..fdd2c62e01f 100644
--- a/src/test/run-pass/extern-mod-syntax.rs
+++ b/src/test/run-pass/extern-mod-syntax.rs
@@ -13,7 +13,7 @@
 extern mod std;
 use std::map::HashMap;
 
-fn main() {
+pub fn main() {
     io::println("Hello world!");
 }
 
diff --git a/src/test/run-pass/extern-pub.rs b/src/test/run-pass/extern-pub.rs
index 92e580253a8..9bfeec8c7d6 100644
--- a/src/test/run-pass/extern-pub.rs
+++ b/src/test/run-pass/extern-pub.rs
@@ -4,7 +4,7 @@ extern {
                                             ++n: libc::size_t);
 }
 
-fn main() {
+pub fn main() {
 }
 
 
diff --git a/src/test/run-pass/extern-stress.rs b/src/test/run-pass/extern-stress.rs
index bd6d597c74c..80b234e84ec 100644
--- a/src/test/run-pass/extern-stress.rs
+++ b/src/test/run-pass/extern-stress.rs
@@ -31,7 +31,7 @@ fn count(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     for iter::repeat(100u) {
         do task::spawn {
             assert count(5u) == 16u;
diff --git a/src/test/run-pass/extern-take-value.rs b/src/test/run-pass/extern-take-value.rs
index 4f2ca4a657a..d3d99f0fffc 100644
--- a/src/test/run-pass/extern-take-value.rs
+++ b/src/test/run-pass/extern-take-value.rs
@@ -14,7 +14,7 @@ extern fn f() {
 extern fn g() {
 }
 
-fn main() {
+pub fn main() {
     // extern functions are *u8 types
     let a: *u8 = f;
     let b: *u8 = f;
diff --git a/src/test/run-pass/extern-yield.rs b/src/test/run-pass/extern-yield.rs
index 1ec8f8ab8a3..aa8f8ab82cc 100644
--- a/src/test/run-pass/extern-yield.rs
+++ b/src/test/run-pass/extern-yield.rs
@@ -28,7 +28,7 @@ fn count(n: uint) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     for iter::repeat(10u) {
         do task::spawn {
             let result = count(5u);
diff --git a/src/test/run-pass/fact.rs b/src/test/run-pass/fact.rs
index e9839711770..93f4dd43959 100644
--- a/src/test/run-pass/fact.rs
+++ b/src/test/run-pass/fact.rs
@@ -31,7 +31,7 @@ fn f(x: int) -> int {
     }
 }
 
-fn main() {
+pub fn main() {
     assert (f(5) == 120);
     // debug!("all done");
 
diff --git a/src/test/run-pass/fat-arrow-alt.rs b/src/test/run-pass/fat-arrow-alt.rs
index b6882e65e7f..0c19655c9f5 100644
--- a/src/test/run-pass/fat-arrow-alt.rs
+++ b/src/test/run-pass/fat-arrow-alt.rs
@@ -16,7 +16,7 @@ enum color {
     blue
 }
 
-fn main() {
+pub fn main() {
     log(error, match red {
         red => { 1 }
         green => { 2 }
diff --git a/src/test/run-pass/fixed-point-bind-box.rs b/src/test/run-pass/fixed-point-bind-box.rs
index d906ea6f91e..48772aa7889 100644
--- a/src/test/run-pass/fixed-point-bind-box.rs
+++ b/src/test/run-pass/fixed-point-bind-box.rs
@@ -24,7 +24,7 @@ fn fact_(f: fn@(&&v: int) -> int, &&n: int) -> int {
     return if n == 0 { 1 } else { n * f(n - 1) };
 }
 
-fn main() {
+pub fn main() {
     let fact = fix(fact_);
     assert (fact(5) == 120);
     assert (fact(2) == 2);
diff --git a/src/test/run-pass/fixed-point-bind-unique.rs b/src/test/run-pass/fixed-point-bind-unique.rs
index 06f01a67453..e41fa1af90f 100644
--- a/src/test/run-pass/fixed-point-bind-unique.rs
+++ b/src/test/run-pass/fixed-point-bind-unique.rs
@@ -24,7 +24,7 @@ fn fact_(f: fn@(&&v: int) -> int, &&n: int) -> int {
     return if n == 0 { 1 } else { n * f(n - 1) };
 }
 
-fn main() {
+pub fn main() {
     let fact = fix(fact_);
     assert (fact(5) == 120);
     assert (fact(2) == 2);
diff --git a/src/test/run-pass/fixed_length_copy.rs b/src/test/run-pass/fixed_length_copy.rs
index 176d3024619..54a7c9959ff 100644
--- a/src/test/run-pass/fixed_length_copy.rs
+++ b/src/test/run-pass/fixed_length_copy.rs
@@ -12,7 +12,7 @@
 // error on implicit copies to check fixed length vectors
 // are implicitly copyable 
 #[deny(implicit_copies)]
-fn main() {
+pub fn main() {
     let arr = [1,2,3];
     let arr2 = arr;
     assert(arr[1] == 2);
diff --git a/src/test/run-pass/fixed_length_vec_glue.rs b/src/test/run-pass/fixed_length_vec_glue.rs
index 3d6e781c512..1ee1ad02201 100644
--- a/src/test/run-pass/fixed_length_vec_glue.rs
+++ b/src/test/run-pass/fixed_length_vec_glue.rs
@@ -10,7 +10,7 @@
 
 struct Struc { a: u8, b: [int * 3], c: int }
 
-fn main() {
+pub fn main() {
     let arr = [1,2,3];
     let struc = Struc {a: 13u8, b: arr, c: 42};
     let s = sys::log_str(&struc);
diff --git a/src/test/run-pass/float-literal-inference.rs b/src/test/run-pass/float-literal-inference.rs
index 6ae66fd442c..2b59d7bfcee 100644
--- a/src/test/run-pass/float-literal-inference.rs
+++ b/src/test/run-pass/float-literal-inference.rs
@@ -12,7 +12,7 @@ struct S {
     z: f64
 }
 
-fn main() {
+pub fn main() {
     let x: f32 = 4.0;
     io::println(x.to_str());
     let y: float = 64.0;
diff --git a/src/test/run-pass/float-nan.rs b/src/test/run-pass/float-nan.rs
index e80e2ae17b4..daab9684cf4 100644
--- a/src/test/run-pass/float-nan.rs
+++ b/src/test/run-pass/float-nan.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
   let nan = float::NaN;
   assert(float::is_NaN(nan));
 
diff --git a/src/test/run-pass/float-signature.rs b/src/test/run-pass/float-signature.rs
index 3116c6e4d83..aeb94760e63 100644
--- a/src/test/run-pass/float-signature.rs
+++ b/src/test/run-pass/float-signature.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     fn foo(n: float) -> float { return n + 0.12345; }
     let n: float = 0.1;
     let m: float = foo(n);
diff --git a/src/test/run-pass/float.rs b/src/test/run-pass/float.rs
index 47097928c8b..53e19b62a28 100644
--- a/src/test/run-pass/float.rs
+++ b/src/test/run-pass/float.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let pi = 3.1415927;
     log(debug, -pi * (pi + 2.0 / pi) - pi * 5.0);
     if pi == 5.0 || pi < 10.0 || pi <= 2.0 || pi != 22.0 / 7.0 || pi >= 10.0
diff --git a/src/test/run-pass/float2.rs b/src/test/run-pass/float2.rs
index bf2b38e72b2..12d2dbafc4b 100644
--- a/src/test/run-pass/float2.rs
+++ b/src/test/run-pass/float2.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let a = 1.5e6;
     let b = 1.5E6;
     let c = 1e6;
diff --git a/src/test/run-pass/floatlits.rs b/src/test/run-pass/floatlits.rs
index eb97402e481..573c5302698 100644
--- a/src/test/run-pass/floatlits.rs
+++ b/src/test/run-pass/floatlits.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let f = 4.999999999999;
     assert (f > 4.90);
     assert (f < 5.0);
diff --git a/src/test/run-pass/fn-assign-managed-to-bare-1.rs b/src/test/run-pass/fn-assign-managed-to-bare-1.rs
index 17becfb4ee3..6561708192b 100644
--- a/src/test/run-pass/fn-assign-managed-to-bare-1.rs
+++ b/src/test/run-pass/fn-assign-managed-to-bare-1.rs
@@ -12,7 +12,7 @@ fn add(n: int) -> fn@(int) -> int {
       fn@(m: int) -> int { m + n }
 }
 
-fn main()
+pub fn main()
 {
       assert add(3)(4) == 7;
       let add3 : fn(int)->int = add(3);
diff --git a/src/test/run-pass/fn-assign-managed-to-bare-2.rs b/src/test/run-pass/fn-assign-managed-to-bare-2.rs
index 2f98cf68d96..013b8ba4adb 100644
--- a/src/test/run-pass/fn-assign-managed-to-bare-2.rs
+++ b/src/test/run-pass/fn-assign-managed-to-bare-2.rs
@@ -12,7 +12,7 @@ fn add(n: int) -> fn@(int) -> int {
     fn@(m: int) -> int { m + n }
 }
 
-fn main()
+pub fn main()
 {
     assert add(3)(4) == 7;
 
diff --git a/src/test/run-pass/fn-bare-assign.rs b/src/test/run-pass/fn-bare-assign.rs
index f879c72cd18..1d523e180ff 100644
--- a/src/test/run-pass/fn-bare-assign.rs
+++ b/src/test/run-pass/fn-bare-assign.rs
@@ -17,7 +17,7 @@ fn g(f: extern fn(int, v: &mut bool), called: &mut bool) {
     f(10, called);
 }
 
-fn main() {
+pub fn main() {
     let mut called = false;
     let h = f;
     g(h, &mut called);
diff --git a/src/test/run-pass/fn-bare-coerce-to-block.rs b/src/test/run-pass/fn-bare-coerce-to-block.rs
index 9bd67ee1aa4..b243ce63e18 100644
--- a/src/test/run-pass/fn-bare-coerce-to-block.rs
+++ b/src/test/run-pass/fn-bare-coerce-to-block.rs
@@ -12,6 +12,6 @@ fn bare() {}
 
 fn likes_block(f: fn()) { f() }
 
-fn main() {
+pub fn main() {
     likes_block(bare);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/fn-bare-coerce-to-shared.rs b/src/test/run-pass/fn-bare-coerce-to-shared.rs
index 80617605bba..91b0abbb3ec 100644
--- a/src/test/run-pass/fn-bare-coerce-to-shared.rs
+++ b/src/test/run-pass/fn-bare-coerce-to-shared.rs
@@ -12,6 +12,6 @@ fn bare() {}
 
 fn likes_shared(f: fn@()) { f() }
 
-fn main() {
+pub fn main() {
     likes_shared(bare);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/fn-bare-item.rs b/src/test/run-pass/fn-bare-item.rs
index 1765947ee68..c224f48cbc3 100644
--- a/src/test/run-pass/fn-bare-item.rs
+++ b/src/test/run-pass/fn-bare-item.rs
@@ -12,6 +12,6 @@ fn f() {
     debug!("This is a bare function");
 }
 
-fn main() {
+pub fn main() {
     f();
 }
\ No newline at end of file
diff --git a/src/test/run-pass/fn-bare-size.rs b/src/test/run-pass/fn-bare-size.rs
index 596bd048577..499dc6a4a2b 100644
--- a/src/test/run-pass/fn-bare-size.rs
+++ b/src/test/run-pass/fn-bare-size.rs
@@ -12,7 +12,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
     // Bare functions should just be a pointer
     assert sys::rustrt::size_of::<fn()>() ==
         sys::rustrt::size_of::<int>();
diff --git a/src/test/run-pass/fn-bare-spawn.rs b/src/test/run-pass/fn-bare-spawn.rs
index 53e66f950d3..163063ab745 100644
--- a/src/test/run-pass/fn-bare-spawn.rs
+++ b/src/test/run-pass/fn-bare-spawn.rs
@@ -18,6 +18,6 @@ fn f(+i: int) {
     assert i == 100;
 }
 
-fn main() {
+pub fn main() {
     spawn(100, f);
 }
diff --git a/src/test/run-pass/fn-coerce-field.rs b/src/test/run-pass/fn-coerce-field.rs
index 0e7d90e2fd8..028fb0f4440 100644
--- a/src/test/run-pass/fn-coerce-field.rs
+++ b/src/test/run-pass/fn-coerce-field.rs
@@ -12,7 +12,7 @@ struct r {
     field: fn@()
 }
 
-fn main() {
+pub fn main() {
     fn f() {}
     let i: r = r {field: f};
 }
\ No newline at end of file
diff --git a/src/test/run-pass/fn-lval.rs b/src/test/run-pass/fn-lval.rs
index ae646150bb6..2754fdea4d4 100644
--- a/src/test/run-pass/fn-lval.rs
+++ b/src/test/run-pass/fn-lval.rs
@@ -16,4 +16,4 @@ fn foo(f: extern fn(int) -> int) { }
 
 fn id(x: int) -> int { return x; }
 
-fn main() { foo(id); }
+pub fn main() { foo(id); }
diff --git a/src/test/run-pass/fn-pattern-expected-type-2.rs b/src/test/run-pass/fn-pattern-expected-type-2.rs
index 2442af5a402..f9bf9b5915e 100644
--- a/src/test/run-pass/fn-pattern-expected-type-2.rs
+++ b/src/test/run-pass/fn-pattern-expected-type-2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let v : &[(int,int)] = &[ (1, 2), (3, 4), (5, 6) ];
     for v.each |&(x, y)| {
         io::println(y.to_str());
diff --git a/src/test/run-pass/fn-pattern-expected-type.rs b/src/test/run-pass/fn-pattern-expected-type.rs
index 6f8db90289b..28ac3f88b24 100644
--- a/src/test/run-pass/fn-pattern-expected-type.rs
+++ b/src/test/run-pass/fn-pattern-expected-type.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let f: fn((int,int)) = |(x, y)| {
         assert x == 1;
         assert y == 2;
diff --git a/src/test/run-pass/fn-type-infer.rs b/src/test/run-pass/fn-type-infer.rs
index 055aa268f20..4fd78286e33 100644
--- a/src/test/run-pass/fn-type-infer.rs
+++ b/src/test/run-pass/fn-type-infer.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     // We should be able to type infer inside of fn@s.
     let f = fn@() { let i = 10; };
 }
diff --git a/src/test/run-pass/for-destruct.rs b/src/test/run-pass/for-destruct.rs
index 47da343764c..6a91c5b0ee8 100644
--- a/src/test/run-pass/for-destruct.rs
+++ b/src/test/run-pass/for-destruct.rs
@@ -10,7 +10,7 @@
 
 struct Pair { x: int, y: int }
 
-fn main() {
+pub fn main() {
     for vec::each(~[Pair {x: 10, y: 20}, Pair {x: 30, y: 0}]) |elt| {
         assert (elt.x + elt.y == 30);
     }
diff --git a/src/test/run-pass/for-loop-fail.rs b/src/test/run-pass/for-loop-fail.rs
index d7ef8cb63ce..55ffc3d0258 100644
--- a/src/test/run-pass/for-loop-fail.rs
+++ b/src/test/run-pass/for-loop-fail.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let x: ~[int] = ~[]; for x.each |_i| { die!(~"moop"); } }
+pub fn main() { let x: ~[int] = ~[]; for x.each |_i| { die!(~"moop"); } }
diff --git a/src/test/run-pass/foreach-nested.rs b/src/test/run-pass/foreach-nested.rs
index 13da4306ab3..96c9740d9e1 100644
--- a/src/test/run-pass/foreach-nested.rs
+++ b/src/test/run-pass/foreach-nested.rs
@@ -14,7 +14,7 @@
 // -*- rust -*-
 fn two(it: fn(int)) { it(0); it(1); }
 
-fn main() {
+pub fn main() {
     let a: ~[mut int] = ~[mut -1, -1, -1, -1];
     let mut p: int = 0;
     do two |i| {
diff --git a/src/test/run-pass/foreach-put-structured.rs b/src/test/run-pass/foreach-put-structured.rs
index 71da4638c09..d1fe6fab63c 100644
--- a/src/test/run-pass/foreach-put-structured.rs
+++ b/src/test/run-pass/foreach-put-structured.rs
@@ -16,7 +16,7 @@ fn pairs(it: fn((int, int))) {
     while i < 10 { it((i, j)); i += 1; j += i; }
 }
 
-fn main() {
+pub fn main() {
     let mut i: int = 10;
     let mut j: int = 0;
     do pairs() |p| {
diff --git a/src/test/run-pass/foreach-simple-outer-slot.rs b/src/test/run-pass/foreach-simple-outer-slot.rs
index 20e00d57e1a..86456321e80 100644
--- a/src/test/run-pass/foreach-simple-outer-slot.rs
+++ b/src/test/run-pass/foreach-simple-outer-slot.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let mut sum: int = 0;
     do first_ten |i| { debug!("main"); log(debug, i); sum = sum + i; }
     debug!("sum");
diff --git a/src/test/run-pass/foreign-dupe.rs b/src/test/run-pass/foreign-dupe.rs
index b06afbfe55e..77ed95a8099 100644
--- a/src/test/run-pass/foreign-dupe.rs
+++ b/src/test/run-pass/foreign-dupe.rs
@@ -23,7 +23,7 @@ extern mod rustrt2 {
     pub fn last_os_error() -> ~str;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         rustrt1::last_os_error();
         rustrt2::last_os_error();
diff --git a/src/test/run-pass/foreign-fn-linkname.rs b/src/test/run-pass/foreign-fn-linkname.rs
index ffadd4bd41b..a17a5c3c723 100644
--- a/src/test/run-pass/foreign-fn-linkname.rs
+++ b/src/test/run-pass/foreign-fn-linkname.rs
@@ -26,7 +26,7 @@ fn strlen(str: ~str) -> uint {
     }
 }
 
-fn main() {
+pub fn main() {
     let len = strlen(~"Rust");
     assert(len == 4u);
 }
diff --git a/src/test/run-pass/foreign-lib-path.rs b/src/test/run-pass/foreign-lib-path.rs
index b2935ba9f10..2974f46bf08 100644
--- a/src/test/run-pass/foreign-lib-path.rs
+++ b/src/test/run-pass/foreign-lib-path.rs
@@ -19,6 +19,6 @@ extern mod WHATGOESHERE {
     pub fn IDONTKNOW() -> u32;
 }
 
-fn main() {
+pub fn main() {
     assert IDONTKNOW() == 0x_BAD_DOOD_u32;
 }
diff --git a/src/test/run-pass/foreign-mod-src/inner.rs b/src/test/run-pass/foreign-mod-src/inner.rs
index 8488b20a50b..8f92cb95187 100644
--- a/src/test/run-pass/foreign-mod-src/inner.rs
+++ b/src/test/run-pass/foreign-mod-src/inner.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let f = "Makefile";
     let s = rustrt.str_buf(f);
     let buf = libc.malloc(1024);
diff --git a/src/test/run-pass/foreign-mod-unused-const.rs b/src/test/run-pass/foreign-mod-unused-const.rs
index f05d40ad1d6..ece201bc3a2 100644
--- a/src/test/run-pass/foreign-mod-unused-const.rs
+++ b/src/test/run-pass/foreign-mod-unused-const.rs
@@ -13,6 +13,6 @@ extern mod foo {
     pub const errno: int;
 }
 
-fn main() {
+pub fn main() {
 }
 
diff --git a/src/test/run-pass/foreign-no-abi.rs b/src/test/run-pass/foreign-no-abi.rs
index 1782778e5d7..9c1ffd5e9e4 100644
--- a/src/test/run-pass/foreign-no-abi.rs
+++ b/src/test/run-pass/foreign-no-abi.rs
@@ -14,7 +14,7 @@ extern mod rustrt {
     pub fn get_task_id() -> libc::intptr_t;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         rustrt::get_task_id();
     }
diff --git a/src/test/run-pass/foreign-src/foreign.rs b/src/test/run-pass/foreign-src/foreign.rs
index f560d779741..df0d1bcd4b9 100644
--- a/src/test/run-pass/foreign-src/foreign.rs
+++ b/src/test/run-pass/foreign-src/foreign.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     libc.puts(rustrt.str_buf("hello, extern world 1"));
     libc.puts(rustrt.str_buf("hello, extern world 2"));
     libc.puts(rustrt.str_buf("hello, extern world 3"));
diff --git a/src/test/run-pass/foreign-struct.rs b/src/test/run-pass/foreign-struct.rs
index 3adc983a062..aef96b84619 100644
--- a/src/test/run-pass/foreign-struct.rs
+++ b/src/test/run-pass/foreign-struct.rs
@@ -18,4 +18,4 @@ extern mod bindgen {
     pub fn printf(++v: void);
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/foreign2.rs b/src/test/run-pass/foreign2.rs
index 9a5d747521b..c09bfc22171 100644
--- a/src/test/run-pass/foreign2.rs
+++ b/src/test/run-pass/foreign2.rs
@@ -27,4 +27,4 @@ extern mod libc {
 #[nolink]
 extern mod baz {}
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/fun-call-variants.rs b/src/test/run-pass/fun-call-variants.rs
index 5ee05ff34d3..88bd1653861 100644
--- a/src/test/run-pass/fun-call-variants.rs
+++ b/src/test/run-pass/fun-call-variants.rs
@@ -13,7 +13,7 @@ fn ho(f: fn@(int) -> int) -> int { let n: int = f(3); return n; }
 
 fn direct(x: int) -> int { return x + 1; }
 
-fn main() {
+pub fn main() {
     let a: int = direct(3); // direct
     let b: int = ho(direct); // indirect unbound
 
diff --git a/src/test/run-pass/fun-indirect-call.rs b/src/test/run-pass/fun-indirect-call.rs
index 1ee7b0c3a29..a200d5f6559 100644
--- a/src/test/run-pass/fun-indirect-call.rs
+++ b/src/test/run-pass/fun-indirect-call.rs
@@ -14,7 +14,7 @@
 // -*- rust -*-
 fn f() -> int { return 42; }
 
-fn main() {
+pub fn main() {
     let g: extern fn() -> int = f;
     let i: int = g();
     assert (i == 42);
diff --git a/src/test/run-pass/functional-struct-update.rs b/src/test/run-pass/functional-struct-update.rs
index 5109e0658fb..f1db6db417a 100644
--- a/src/test/run-pass/functional-struct-update.rs
+++ b/src/test/run-pass/functional-struct-update.rs
@@ -13,7 +13,7 @@ struct Foo {
     y: int
 }
 
-fn main() {
+pub fn main() {
     let a = Foo { x: 1, y: 2 };
     let c = Foo { x: 4, .. a};
     io::println(fmt!("%?", c));
diff --git a/src/test/run-pass/generic-alias-box.rs b/src/test/run-pass/generic-alias-box.rs
index b3dcc1031b0..3830d89616c 100644
--- a/src/test/run-pass/generic-alias-box.rs
+++ b/src/test/run-pass/generic-alias-box.rs
@@ -12,7 +12,7 @@
 
 fn id<T: Copy>(t: T) -> T { return t; }
 
-fn main() {
+pub fn main() {
     let expected = @100;
     let actual = id::<@int>(expected);
     log(debug, *actual);
diff --git a/src/test/run-pass/generic-alias-unique.rs b/src/test/run-pass/generic-alias-unique.rs
index 6537be69a1d..0aa1b4dd651 100644
--- a/src/test/run-pass/generic-alias-unique.rs
+++ b/src/test/run-pass/generic-alias-unique.rs
@@ -12,7 +12,7 @@
 
 fn id<T: Copy Owned>(t: T) -> T { return t; }
 
-fn main() {
+pub fn main() {
     let expected = ~100;
     let actual = id::<~int>(copy expected);
     log(debug, *actual);
diff --git a/src/test/run-pass/generic-box.rs b/src/test/run-pass/generic-box.rs
index f68cf1676c7..05f4908b3b2 100644
--- a/src/test/run-pass/generic-box.rs
+++ b/src/test/run-pass/generic-box.rs
@@ -14,7 +14,7 @@ fn box<T: Copy>(x: Box<T>) -> @Box<T> { return @x; }
 
 struct Box<T> {x: T, y: T, z: T}
 
-fn main() {
+pub fn main() {
     let x: @Box<int> = box::<int>(Box{x: 1, y: 2, z: 3});
     assert (x.y == 2);
 }
diff --git a/src/test/run-pass/generic-derived-type.rs b/src/test/run-pass/generic-derived-type.rs
index 03f5a84de69..3667e549745 100644
--- a/src/test/run-pass/generic-derived-type.rs
+++ b/src/test/run-pass/generic-derived-type.rs
@@ -20,7 +20,7 @@ fn f<T: Copy>(t: T) -> Pair<T> {
     return g::<Pair<T>>(x);
 }
 
-fn main() {
+pub fn main() {
     let b = f::<int>(10);
     log(debug, b.a);
     log(debug, b.b);
diff --git a/src/test/run-pass/generic-drop-glue.rs b/src/test/run-pass/generic-drop-glue.rs
index aad24e99058..b8de3e0b5e3 100644
--- a/src/test/run-pass/generic-drop-glue.rs
+++ b/src/test/run-pass/generic-drop-glue.rs
@@ -13,4 +13,4 @@ struct Pair { x: @int, y: @int }
 
 fn f<T: Copy>(t: T) { let t1: T = t; }
 
-fn main() { let x = Pair {x: @10, y: @12}; f(x); }
+pub fn main() { let x = Pair {x: @10, y: @12}; f(x); }
diff --git a/src/test/run-pass/generic-exterior-box.rs b/src/test/run-pass/generic-exterior-box.rs
index c2abcc75283..4c8de2fbffc 100644
--- a/src/test/run-pass/generic-exterior-box.rs
+++ b/src/test/run-pass/generic-exterior-box.rs
@@ -14,7 +14,7 @@ struct Recbox<T> {x: @T}
 
 fn reclift<T: Copy>(t: T) -> Recbox<T> { return Recbox {x: @t}; }
 
-fn main() {
+pub fn main() {
     let foo: int = 17;
     let rbfoo: Recbox<int> = reclift::<int>(foo);
     assert (*rbfoo.x == foo);
diff --git a/src/test/run-pass/generic-exterior-unique.rs b/src/test/run-pass/generic-exterior-unique.rs
index a4a576abc75..741d9f0e179 100644
--- a/src/test/run-pass/generic-exterior-unique.rs
+++ b/src/test/run-pass/generic-exterior-unique.rs
@@ -12,7 +12,7 @@ struct Recbox<T> {x: ~T}
 
 fn reclift<T: Copy>(t: T) -> Recbox<T> { return Recbox {x: ~t}; }
 
-fn main() {
+pub fn main() {
     let foo: int = 17;
     let rbfoo: Recbox<int> = reclift::<int>(foo);
     assert (*rbfoo.x == foo);
diff --git a/src/test/run-pass/generic-fn-box.rs b/src/test/run-pass/generic-fn-box.rs
index 5c4cee2c182..0a496b2bcf5 100644
--- a/src/test/run-pass/generic-fn-box.rs
+++ b/src/test/run-pass/generic-fn-box.rs
@@ -12,4 +12,4 @@
 
 fn f<T>(x: @T) -> @T { return x; }
 
-fn main() { let x = f(@3); log(debug, *x); }
+pub fn main() { let x = f(@3); log(debug, *x); }
diff --git a/src/test/run-pass/generic-fn-infer.rs b/src/test/run-pass/generic-fn-infer.rs
index 1f4ab0db835..88130af2ccc 100644
--- a/src/test/run-pass/generic-fn-infer.rs
+++ b/src/test/run-pass/generic-fn-infer.rs
@@ -16,4 +16,4 @@
 // Issue #45: infer type parameters in function applications
 fn id<T: Copy>(x: T) -> T { return x; }
 
-fn main() { let x: int = 42; let y: int = id(x); assert (x == y); }
+pub fn main() { let x: int = 42; let y: int = id(x); assert (x == y); }
diff --git a/src/test/run-pass/generic-fn-twice.rs b/src/test/run-pass/generic-fn-twice.rs
index 2316ca61a3c..aace9571a09 100644
--- a/src/test/run-pass/generic-fn-twice.rs
+++ b/src/test/run-pass/generic-fn-twice.rs
@@ -16,4 +16,4 @@ mod foomod {
     pub fn foo<T>() { }
 }
 
-fn main() { foomod::foo::<int>(); foomod::foo::<int>(); }
+pub fn main() { foomod::foo::<int>(); foomod::foo::<int>(); }
diff --git a/src/test/run-pass/generic-fn-unique.rs b/src/test/run-pass/generic-fn-unique.rs
index 3ca56428706..b58b68ee5ae 100644
--- a/src/test/run-pass/generic-fn-unique.rs
+++ b/src/test/run-pass/generic-fn-unique.rs
@@ -11,4 +11,4 @@
 
 fn f<T: Copy>(x: ~T) -> ~T { return x; }
 
-fn main() { let x = f(~3); log(debug, *x); }
+pub fn main() { let x = f(~3); log(debug, *x); }
diff --git a/src/test/run-pass/generic-fn.rs b/src/test/run-pass/generic-fn.rs
index 13ed32e0c2d..551fe221eda 100644
--- a/src/test/run-pass/generic-fn.rs
+++ b/src/test/run-pass/generic-fn.rs
@@ -16,7 +16,7 @@ fn id<T: Copy>(x: T) -> T { return x; }
 
 struct Triple {x: int, y: int, z: int}
 
-fn main() {
+pub fn main() {
     let mut x = 62;
     let mut y = 63;
     let a = 'a';
diff --git a/src/test/run-pass/generic-ivec-leak.rs b/src/test/run-pass/generic-ivec-leak.rs
index e6eef56d10e..8d9b0fa6ddb 100644
--- a/src/test/run-pass/generic-ivec-leak.rs
+++ b/src/test/run-pass/generic-ivec-leak.rs
@@ -10,5 +10,5 @@
 
 enum wrapper<T> { wrapped(T), }
 
-fn main() { let w = wrapped(~[1, 2, 3, 4, 5]); }
+pub fn main() { let w = wrapped(~[1, 2, 3, 4, 5]); }
 
diff --git a/src/test/run-pass/generic-ivec.rs b/src/test/run-pass/generic-ivec.rs
index 8ea4c1ff74c..031821d9909 100644
--- a/src/test/run-pass/generic-ivec.rs
+++ b/src/test/run-pass/generic-ivec.rs
@@ -9,5 +9,5 @@
 // except according to those terms.
 
 fn f<T>(v: @T) { }
-fn main() { f(@~[1, 2, 3, 4, 5]); }
+pub fn main() { f(@~[1, 2, 3, 4, 5]); }
 
diff --git a/src/test/run-pass/generic-newtype-struct.rs b/src/test/run-pass/generic-newtype-struct.rs
index 8b9d6479ed3..7c7d73eda10 100644
--- a/src/test/run-pass/generic-newtype-struct.rs
+++ b/src/test/run-pass/generic-newtype-struct.rs
@@ -1,6 +1,6 @@
 struct S<T>(T);
 
-fn main() {
+pub fn main() {
     let s = S(2i);
     io::println(s.to_str());
 }
diff --git a/src/test/run-pass/generic-object.rs b/src/test/run-pass/generic-object.rs
index 2318f166873..497739471d8 100644
--- a/src/test/run-pass/generic-object.rs
+++ b/src/test/run-pass/generic-object.rs
@@ -22,7 +22,7 @@ impl S : Foo<int> {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = @S { x: 1 };
     let y = x as @Foo<int>;
     assert y.get() == 1;
diff --git a/src/test/run-pass/generic-recursive-tag.rs b/src/test/run-pass/generic-recursive-tag.rs
index 4d725f638b5..af92bb4c8d8 100644
--- a/src/test/run-pass/generic-recursive-tag.rs
+++ b/src/test/run-pass/generic-recursive-tag.rs
@@ -12,7 +12,7 @@
 
 enum list<T> { cons(@T, @list<T>), nil, }
 
-fn main() {
+pub fn main() {
     let a: list<int> =
         cons::<int>(@10, @cons::<int>(@12, @cons::<int>(@13, @nil::<int>)));
 }
diff --git a/src/test/run-pass/generic-tag-alt.rs b/src/test/run-pass/generic-tag-alt.rs
index 172eeea454f..020111d55ac 100644
--- a/src/test/run-pass/generic-tag-alt.rs
+++ b/src/test/run-pass/generic-tag-alt.rs
@@ -18,4 +18,4 @@ fn altfoo<T>(f: foo<T>) {
     assert (hit);
 }
 
-fn main() { altfoo::<int>(arm::<int>(10)); }
+pub fn main() { altfoo::<int>(arm::<int>(10)); }
diff --git a/src/test/run-pass/generic-tag-corruption.rs b/src/test/run-pass/generic-tag-corruption.rs
index f8da08e87d2..5cf56b8083d 100644
--- a/src/test/run-pass/generic-tag-corruption.rs
+++ b/src/test/run-pass/generic-tag-corruption.rs
@@ -14,4 +14,4 @@
 // This causes memory corruption in stage0.
 enum thing<K> { some(K), }
 
-fn main() { let x = some(~"hi"); }
+pub fn main() { let x = some(~"hi"); }
diff --git a/src/test/run-pass/generic-tag-local.rs b/src/test/run-pass/generic-tag-local.rs
index 58656c908cd..21e113f40a5 100644
--- a/src/test/run-pass/generic-tag-local.rs
+++ b/src/test/run-pass/generic-tag-local.rs
@@ -12,4 +12,4 @@
 
 enum clam<T> { a(T), }
 
-fn main() { let c = a(3); }
+pub fn main() { let c = a(3); }
diff --git a/src/test/run-pass/generic-tag-values.rs b/src/test/run-pass/generic-tag-values.rs
index 9fd5f4fadff..c9024756328 100644
--- a/src/test/run-pass/generic-tag-values.rs
+++ b/src/test/run-pass/generic-tag-values.rs
@@ -16,7 +16,7 @@ enum noption<T> { some(T), }
 
 struct Pair { x: int, y: int }
 
-fn main() {
+pub fn main() {
     let nop: noption<int> = some::<int>(5);
     match nop { some::<int>(n) => { log(debug, n); assert (n == 5); } }
     let nop2: noption<Pair> = some(Pair{x: 17, y: 42});
diff --git a/src/test/run-pass/generic-tag.rs b/src/test/run-pass/generic-tag.rs
index c8566735b9c..b38c494662f 100644
--- a/src/test/run-pass/generic-tag.rs
+++ b/src/test/run-pass/generic-tag.rs
@@ -12,4 +12,4 @@
 
 enum option<T> { some(@T), none, }
 
-fn main() { let mut a: option<int> = some::<int>(@10); a = none::<int>; }
+pub fn main() { let mut a: option<int> = some::<int>(@10); a = none::<int>; }
diff --git a/src/test/run-pass/generic-temporary.rs b/src/test/run-pass/generic-temporary.rs
index 25c27e4b262..d2100e8d065 100644
--- a/src/test/run-pass/generic-temporary.rs
+++ b/src/test/run-pass/generic-temporary.rs
@@ -20,7 +20,7 @@ fn apply<T>(produce: extern fn() -> T,
     consume(produce());
 }
 
-fn main() {
+pub fn main() {
     let produce: extern fn() -> int = mk;
     let consume: extern fn(&&v: int) = chk;
     apply::<int>(produce, consume);
diff --git a/src/test/run-pass/generic-tup.rs b/src/test/run-pass/generic-tup.rs
index d64e10a09af..8db1c4673bd 100644
--- a/src/test/run-pass/generic-tup.rs
+++ b/src/test/run-pass/generic-tup.rs
@@ -10,7 +10,7 @@
 
 fn get_third<T: Copy>(t: (T, T, T)) -> T { let (_, _, x) = t; return x; }
 
-fn main() {
+pub fn main() {
     log(debug, get_third((1, 2, 3)));
     assert (get_third((1, 2, 3)) == 3);
     assert (get_third((5u8, 6u8, 7u8)) == 7u8);
diff --git a/src/test/run-pass/generic-type-synonym.rs b/src/test/run-pass/generic-type-synonym.rs
index 25da97a854f..662cfa110c4 100644
--- a/src/test/run-pass/generic-type-synonym.rs
+++ b/src/test/run-pass/generic-type-synonym.rs
@@ -16,4 +16,4 @@ type bar<T> = foo<T>;
 
 fn takebar<T>(b: bar<T>) { }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/generic-type.rs b/src/test/run-pass/generic-type.rs
index e0f6363eb6b..bc62b23bc48 100644
--- a/src/test/run-pass/generic-type.rs
+++ b/src/test/run-pass/generic-type.rs
@@ -12,7 +12,7 @@
 
 struct Pair<T> {x: T, y: T}
 
-fn main() {
+pub fn main() {
     let x: Pair<int> = Pair {x: 10, y: 12};
     assert (x.x == 10);
     assert (x.y == 12);
diff --git a/src/test/run-pass/generic-unique.rs b/src/test/run-pass/generic-unique.rs
index 01e899db23a..0ae417e711e 100644
--- a/src/test/run-pass/generic-unique.rs
+++ b/src/test/run-pass/generic-unique.rs
@@ -12,7 +12,7 @@ struct Triple<T> { x: T, y: T, z: T }
 
 fn box<T: Copy>(x: Triple<T>) -> ~Triple<T> { return ~x; }
 
-fn main() {
+pub fn main() {
     let x: ~Triple<int> = box::<int>(Triple{x: 1, y: 2, z: 3});
     assert (x.y == 2);
 }
diff --git a/src/test/run-pass/getopts_ref.rs b/src/test/run-pass/getopts_ref.rs
index a97b748a8a0..baed91df020 100644
--- a/src/test/run-pass/getopts_ref.rs
+++ b/src/test/run-pass/getopts_ref.rs
@@ -14,7 +14,7 @@ extern mod std;
 
 use std::getopts::*;
 
-fn main() {
+pub fn main() {
     let args = ~[];
     let opts = ~[optopt(~"b")];
 
diff --git a/src/test/run-pass/global-scope.rs b/src/test/run-pass/global-scope.rs
index 0da95be3106..8af3cf75a00 100644
--- a/src/test/run-pass/global-scope.rs
+++ b/src/test/run-pass/global-scope.rs
@@ -17,5 +17,5 @@ pub mod foo {
     pub fn g() { assert (f() == 2); assert (::f() == 1); }
 }
 
-fn main() { return foo::g(); }
+pub fn main() { return foo::g(); }
 
diff --git a/src/test/run-pass/guards-not-exhaustive.rs b/src/test/run-pass/guards-not-exhaustive.rs
index 66e48d1e7a9..5aac0ab3fed 100644
--- a/src/test/run-pass/guards-not-exhaustive.rs
+++ b/src/test/run-pass/guards-not-exhaustive.rs
@@ -8,6 +8,6 @@ fn xyzzy(q: Q) -> uint {
 }
 
 
-fn main() {
+pub fn main() {
     assert xyzzy(R(Some(5))) == 0;
 }
diff --git a/src/test/run-pass/guards.rs b/src/test/run-pass/guards.rs
index 2ba0660cc70..7aba929d626 100644
--- a/src/test/run-pass/guards.rs
+++ b/src/test/run-pass/guards.rs
@@ -10,7 +10,7 @@
 
 struct Pair { x: int, y: int }
 
-fn main() {
+pub fn main() {
     let a =
         match 10 { x if x < 7 => { 1 } x if x < 11 => { 2 } 10 => { 3 } _ => { 4 } };
     assert (a == 2);
diff --git a/src/test/run-pass/hashmap-memory.rs b/src/test/run-pass/hashmap-memory.rs
index 2f4d69ee856..93056358de4 100644
--- a/src/test/run-pass/hashmap-memory.rs
+++ b/src/test/run-pass/hashmap-memory.rs
@@ -99,6 +99,6 @@ mod map_reduce {
     }
 }
 
-fn main() {
+pub fn main() {
     map_reduce::map_reduce(~[~"../src/test/run-pass/hashmap-memory.rs"]);
 }
diff --git a/src/test/run-pass/hello.rs b/src/test/run-pass/hello.rs
index 522e6c488b4..84d525dd0e6 100644
--- a/src/test/run-pass/hello.rs
+++ b/src/test/run-pass/hello.rs
@@ -10,6 +10,6 @@
 // except according to those terms.
 
 
-fn main() {
+pub fn main() {
     io::println("hello, world");
 }
diff --git a/src/test/run-pass/html-literals.rs b/src/test/run-pass/html-literals.rs
index 84f23e57796..42a4075d411 100644
--- a/src/test/run-pass/html-literals.rs
+++ b/src/test/run-pass/html-literals.rs
@@ -84,7 +84,7 @@ macro_rules! parse_node (
     ( []; [:$e:expr]; ) => ( $e );
 )
 
-fn main() {
+pub fn main() {
     let page = html! (
         <html>
             <head><title>This is the title.</title></head>
diff --git a/src/test/run-pass/i32-sub.rs b/src/test/run-pass/i32-sub.rs
index 28065febefe..a7364d7cf65 100644
--- a/src/test/run-pass/i32-sub.rs
+++ b/src/test/run-pass/i32-sub.rs
@@ -12,4 +12,4 @@
 
 
 // -*- rust -*-
-fn main() { let mut x: i32 = -400_i32; x = 0_i32 - x; assert (x == 400_i32); }
+pub fn main() { let mut x: i32 = -400_i32; x = 0_i32 - x; assert (x == 400_i32); }
diff --git a/src/test/run-pass/i8-incr.rs b/src/test/run-pass/i8-incr.rs
index 7ea68e17b79..9f1a75dbf23 100644
--- a/src/test/run-pass/i8-incr.rs
+++ b/src/test/run-pass/i8-incr.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let mut x: i8 = -12i8;
     let y: i8 = -12i8;
     x = x + 1i8;
diff --git a/src/test/run-pass/if-bot.rs b/src/test/run-pass/if-bot.rs
index c7c61cf8e42..c830ff1e3eb 100644
--- a/src/test/run-pass/if-bot.rs
+++ b/src/test/run-pass/if-bot.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let i: int = if false { die!() } else { 5 };
     log(debug, i);
 }
diff --git a/src/test/run-pass/if-check.rs b/src/test/run-pass/if-check.rs
index bb16b22c1e3..b4170fa6acc 100644
--- a/src/test/run-pass/if-check.rs
+++ b/src/test/run-pass/if-check.rs
@@ -22,4 +22,4 @@ fn foo(x: uint) {
     }
 }
 
-fn main() { foo(2u); }
+pub fn main() { foo(2u); }
diff --git a/src/test/run-pass/if-ret.rs b/src/test/run-pass/if-ret.rs
index 80e2236a6d8..b589c083a97 100644
--- a/src/test/run-pass/if-ret.rs
+++ b/src/test/run-pass/if-ret.rs
@@ -10,4 +10,4 @@
 
 fn foo() { if (return) { } }
 
-fn main() { foo(); }
+pub fn main() { foo(); }
diff --git a/src/test/run-pass/impl-implicit-trait.rs b/src/test/run-pass/impl-implicit-trait.rs
index 56c5db747dc..8afa762c0a3 100644
--- a/src/test/run-pass/impl-implicit-trait.rs
+++ b/src/test/run-pass/impl-implicit-trait.rs
@@ -26,5 +26,5 @@ impl option__ {
     fn foo() -> bool { true }
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/impl-variance.rs b/src/test/run-pass/impl-variance.rs
index 69e0a120865..812b1ea7be7 100644
--- a/src/test/run-pass/impl-variance.rs
+++ b/src/test/run-pass/impl-variance.rs
@@ -16,7 +16,7 @@ impl<T> ~[const T]: foo {
     fn foo() -> uint { vec::len(self) }
 }
 
-fn main() {
+pub fn main() {
     let v = ~[const 0];
     assert v.foo() == 1u;
     let v = ~[0];
diff --git a/src/test/run-pass/import-from-foreign.rs b/src/test/run-pass/import-from-foreign.rs
index 11affd7f9e6..37447fe1408 100644
--- a/src/test/run-pass/import-from-foreign.rs
+++ b/src/test/run-pass/import-from-foreign.rs
@@ -20,4 +20,4 @@ extern mod rustrt {
     pub use spam::{ham, eggs};
 }
 
-fn main() { rustrt::ham(); rustrt::eggs(); }
+pub fn main() { rustrt::ham(); rustrt::eggs(); }
diff --git a/src/test/run-pass/import-from.rs b/src/test/run-pass/import-from.rs
index 7b739fa9d66..5cc51a6461c 100644
--- a/src/test/run-pass/import-from.rs
+++ b/src/test/run-pass/import-from.rs
@@ -17,4 +17,4 @@ mod spam {
     pub fn eggs() { }
 }
 
-fn main() { ham(); eggs(); }
+pub fn main() { ham(); eggs(); }
diff --git a/src/test/run-pass/import-glob-0.rs b/src/test/run-pass/import-glob-0.rs
index 6e3d995ed41..5576824e13a 100644
--- a/src/test/run-pass/import-glob-0.rs
+++ b/src/test/run-pass/import-glob-0.rs
@@ -36,4 +36,4 @@ mod dug {
 }
 
 
-fn main() { f1(); f2(); f4(); nameless_fear(); also_redstone(); }
+pub fn main() { f1(); f2(); f4(); nameless_fear(); also_redstone(); }
diff --git a/src/test/run-pass/import-glob-crate.rs b/src/test/run-pass/import-glob-crate.rs
index eba69134c4f..ed532fab544 100644
--- a/src/test/run-pass/import-glob-crate.rs
+++ b/src/test/run-pass/import-glob-crate.rs
@@ -14,7 +14,7 @@
 extern mod std;
 use core::vec::*;
 
-fn main() {
+pub fn main() {
     let mut v = from_elem(0u, 0);
     v = vec::append(v, ~[4, 2]);
     assert (reversed(v) == ~[2, 4]);
diff --git a/src/test/run-pass/import-in-block.rs b/src/test/run-pass/import-in-block.rs
index 56756086a26..a41633c0b82 100644
--- a/src/test/run-pass/import-in-block.rs
+++ b/src/test/run-pass/import-in-block.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     use vec::cast_to_mut;
     log(debug, vec::len(cast_to_mut(~[1, 2])));
     {
diff --git a/src/test/run-pass/import-trailing-comma.rs b/src/test/run-pass/import-trailing-comma.rs
index d04212155a8..dcd843e9b12 100644
--- a/src/test/run-pass/import-trailing-comma.rs
+++ b/src/test/run-pass/import-trailing-comma.rs
@@ -19,4 +19,4 @@ mod foo {
     }
 }
 
-fn main() { baz(); quux(); }
+pub fn main() { baz(); quux(); }
diff --git a/src/test/run-pass/import.rs b/src/test/run-pass/import.rs
index 2379cca3111..be515172de1 100644
--- a/src/test/run-pass/import.rs
+++ b/src/test/run-pass/import.rs
@@ -20,4 +20,4 @@ mod bar {
     pub fn thing() { x(10); z(10); }
 }
 
-fn main() { bar::thing(); }
+pub fn main() { bar::thing(); }
diff --git a/src/test/run-pass/import2.rs b/src/test/run-pass/import2.rs
index 37c11b81b4a..7383d818ee7 100644
--- a/src/test/run-pass/import2.rs
+++ b/src/test/run-pass/import2.rs
@@ -17,4 +17,4 @@ mod zed {
     pub fn bar() { debug!("bar"); }
 }
 
-fn main() { bar(); }
+pub fn main() { bar(); }
diff --git a/src/test/run-pass/import3.rs b/src/test/run-pass/import3.rs
index 757034d4b41..dedb2f2a99d 100644
--- a/src/test/run-pass/import3.rs
+++ b/src/test/run-pass/import3.rs
@@ -20,4 +20,4 @@ mod baz {
     }
 }
 
-fn main() { bar(); }
+pub fn main() { bar(); }
diff --git a/src/test/run-pass/import4.rs b/src/test/run-pass/import4.rs
index 4ea180a1e25..41ed3549684 100644
--- a/src/test/run-pass/import4.rs
+++ b/src/test/run-pass/import4.rs
@@ -17,4 +17,4 @@ mod zed {
     pub fn bar() { debug!("bar"); }
 }
 
-fn main() { let zed = 42; bar(); }
+pub fn main() { let zed = 42; bar(); }
diff --git a/src/test/run-pass/import5.rs b/src/test/run-pass/import5.rs
index ab94fea0971..14061edc166 100644
--- a/src/test/run-pass/import5.rs
+++ b/src/test/run-pass/import5.rs
@@ -18,4 +18,4 @@ mod foo {
     }
 }
 
-fn main() { bar(); }
+pub fn main() { bar(); }
diff --git a/src/test/run-pass/import6.rs b/src/test/run-pass/import6.rs
index 2a789969bcb..88b839c0c08 100644
--- a/src/test/run-pass/import6.rs
+++ b/src/test/run-pass/import6.rs
@@ -20,4 +20,4 @@ mod foo {
 mod bar {
     pub use zed::baz;
 }
-fn main() { baz(); }
+pub fn main() { baz(); }
diff --git a/src/test/run-pass/import7.rs b/src/test/run-pass/import7.rs
index 91b0943a833..d5e15ea48e9 100644
--- a/src/test/run-pass/import7.rs
+++ b/src/test/run-pass/import7.rs
@@ -23,4 +23,4 @@ mod bar {
         pub mod zed {}
     }
 }
-fn main() { baz(); }
+pub fn main() { baz(); }
diff --git a/src/test/run-pass/import8.rs b/src/test/run-pass/import8.rs
index 4572f59aeea..229374c861e 100644
--- a/src/test/run-pass/import8.rs
+++ b/src/test/run-pass/import8.rs
@@ -18,4 +18,4 @@ mod foo {
     pub fn x(y: int) { log(debug, y); }
 }
 
-fn main() { x(10); z(10); }
+pub fn main() { x(10); z(10); }
diff --git a/src/test/run-pass/infer-fn-tail-expr.rs b/src/test/run-pass/infer-fn-tail-expr.rs
index 18f7d6d3793..eb8601361cd 100644
--- a/src/test/run-pass/infer-fn-tail-expr.rs
+++ b/src/test/run-pass/infer-fn-tail-expr.rs
@@ -12,4 +12,4 @@
 
 fn f() -> ~[int] { ~[] }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/infer-with-expected.rs b/src/test/run-pass/infer-with-expected.rs
index c87987aac3a..bbb094d0cad 100644
--- a/src/test/run-pass/infer-with-expected.rs
+++ b/src/test/run-pass/infer-with-expected.rs
@@ -19,7 +19,7 @@ fn eat_rec(_r: @~Rec) {}
 struct Rec { a: int, b: fn(Pair) -> int }
 struct Pair { x: int, y: int }
 
-fn main() {
+pub fn main() {
     eat_tup(~@(10, |a| a.x ));
     eat_rec(@~Rec{a: 10, b: |a| a.x });
 }
diff --git a/src/test/run-pass/inferred-suffix-in-pattern-range.rs b/src/test/run-pass/inferred-suffix-in-pattern-range.rs
index de6ad9bc68c..c72df610210 100644
--- a/src/test/run-pass/inferred-suffix-in-pattern-range.rs
+++ b/src/test/run-pass/inferred-suffix-in-pattern-range.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = 2;
     let x_message = match x {
       0 .. 1     => { ~"not many" }
diff --git a/src/test/run-pass/infinite-loops.rs b/src/test/run-pass/infinite-loops.rs
index 7a549183546..70a4cecf47a 100644
--- a/src/test/run-pass/infinite-loops.rs
+++ b/src/test/run-pass/infinite-loops.rs
@@ -27,4 +27,4 @@ fn loop(n: int) {
     loop { }
 }
 
-fn main() { let t: task = spawn loop(5); join(t); }
\ No newline at end of file
+pub fn main() { let t: task = spawn loop(5); join(t); }
\ No newline at end of file
diff --git a/src/test/run-pass/init-res-into-things.rs b/src/test/run-pass/init-res-into-things.rs
index 11efd61072c..965c14f7315 100644
--- a/src/test/run-pass/init-res-into-things.rs
+++ b/src/test/run-pass/init-res-into-things.rs
@@ -83,7 +83,7 @@ fn test_box_rec() {
     assert *i == 1;
 }
 
-fn main() {
+pub fn main() {
     test_box();
     test_rec();
     test_tag();
diff --git a/src/test/run-pass/inner-module.rs b/src/test/run-pass/inner-module.rs
index 1754eddb2ca..042988c916f 100644
--- a/src/test/run-pass/inner-module.rs
+++ b/src/test/run-pass/inner-module.rs
@@ -19,4 +19,4 @@ mod inner {
     pub fn hello() { inner2::hello(); }
 }
 
-fn main() { inner::hello(); inner::inner2::hello(); }
+pub fn main() { inner::hello(); inner::inner2::hello(); }
diff --git a/src/test/run-pass/instantiable.rs b/src/test/run-pass/instantiable.rs
index 57065ec44a5..2230c2df9fc 100644
--- a/src/test/run-pass/instantiable.rs
+++ b/src/test/run-pass/instantiable.rs
@@ -15,7 +15,7 @@ enum foo = X;
 
 struct X { x: uint, nxt: *foo }
 
-fn main() {
+pub fn main() {
     let x = foo(X {x: 0, nxt: ptr::null()});
 }
 
diff --git a/src/test/run-pass/int-conversion-coherence.rs b/src/test/run-pass/int-conversion-coherence.rs
index 75ae976d63d..d4d765dfc1d 100644
--- a/src/test/run-pass/int-conversion-coherence.rs
+++ b/src/test/run-pass/int-conversion-coherence.rs
@@ -20,7 +20,7 @@ trait plus {
 impl foo of plus for uint { fn plus() -> int { self as int + 20 } }
 impl foo of plus for int { fn plus() -> int { self + 10 } }
 
-fn main() {
+pub fn main() {
     assert 10.plus() == 20;
 }
 
diff --git a/src/test/run-pass/int.rs b/src/test/run-pass/int.rs
index 11f3c92c0a5..33239a1441c 100644
--- a/src/test/run-pass/int.rs
+++ b/src/test/run-pass/int.rs
@@ -12,4 +12,4 @@
 
 
 // -*- rust -*-
-fn main() { let x: int = 10; }
+pub fn main() { let x: int = 10; }
diff --git a/src/test/run-pass/integer-literal-suffix-inference.rs b/src/test/run-pass/integer-literal-suffix-inference.rs
index dd40e0af29b..542efe33459 100644
--- a/src/test/run-pass/integer-literal-suffix-inference.rs
+++ b/src/test/run-pass/integer-literal-suffix-inference.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     fn id_i8(n: i8) -> i8 { n }
     fn id_i16(n: i16) -> i16 { n }
     fn id_i32(n: i32) -> i32 { n }
diff --git a/src/test/run-pass/integral-indexing.rs b/src/test/run-pass/integral-indexing.rs
index 0f5705e826f..7673cc034d1 100644
--- a/src/test/run-pass/integral-indexing.rs
+++ b/src/test/run-pass/integral-indexing.rs
@@ -12,7 +12,7 @@
 
 
 // This is a testcase for issue #94.
-fn main() {
+pub fn main() {
     let v: ~[int] = ~[0, 1, 2, 3, 4, 5];
     let s: ~str = ~"abcdef";
     assert (v[3u] == 3);
diff --git a/src/test/run-pass/intrinsic-atomics-cc.rs b/src/test/run-pass/intrinsic-atomics-cc.rs
index 86b120ca273..24a4de89b45 100644
--- a/src/test/run-pass/intrinsic-atomics-cc.rs
+++ b/src/test/run-pass/intrinsic-atomics-cc.rs
@@ -14,7 +14,7 @@
 extern mod cci_intrinsic;
 use cci_intrinsic::atomic_xchg;
 
-fn main() {
+pub fn main() {
     unsafe {
         let mut x = 1;
         atomic_xchg(&mut x, 5);
diff --git a/src/test/run-pass/intrinsic-atomics.rs b/src/test/run-pass/intrinsic-atomics.rs
index bee9e1dd1dd..eb10a51c0bd 100644
--- a/src/test/run-pass/intrinsic-atomics.rs
+++ b/src/test/run-pass/intrinsic-atomics.rs
@@ -27,7 +27,7 @@ extern mod rusti {
     pub fn atomic_xsub_rel(dst: &mut int, src: int) -> int;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let x = ~mut 1;
 
diff --git a/src/test/run-pass/intrinsic-frame-address.rs b/src/test/run-pass/intrinsic-frame-address.rs
index 603f3d7dc81..36fbc87ccdb 100644
--- a/src/test/run-pass/intrinsic-frame-address.rs
+++ b/src/test/run-pass/intrinsic-frame-address.rs
@@ -15,7 +15,7 @@ extern mod rusti {
     pub fn frame_address(f: &once fn(*u8));
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         do rusti::frame_address |addr| {
             assert addr.is_not_null();
diff --git a/src/test/run-pass/intrinsic-move-val.rs b/src/test/run-pass/intrinsic-move-val.rs
index 3761d873fe2..b17eb37438a 100644
--- a/src/test/run-pass/intrinsic-move-val.rs
+++ b/src/test/run-pass/intrinsic-move-val.rs
@@ -14,7 +14,7 @@ extern mod rusti {
     pub fn move_val<T>(dst: &mut T, -src: T);
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let mut x = @1;
         let mut y = @2;
diff --git a/src/test/run-pass/intrinsics-integer.rs b/src/test/run-pass/intrinsics-integer.rs
index 08b976a9096..6a9d66e16a2 100644
--- a/src/test/run-pass/intrinsics-integer.rs
+++ b/src/test/run-pass/intrinsics-integer.rs
@@ -34,7 +34,7 @@ extern mod rusti {
     fn bswap64(x: i64) -> i64;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         use rusti::*;
 
diff --git a/src/test/run-pass/intrinsics-math.rs b/src/test/run-pass/intrinsics-math.rs
index 61594d19a6d..6b80da4afff 100644
--- a/src/test/run-pass/intrinsics-math.rs
+++ b/src/test/run-pass/intrinsics-math.rs
@@ -48,7 +48,7 @@ extern mod rusti {
     fn truncf64(x: f64) -> f64;
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         use rusti::*;
 
diff --git a/src/test/run-pass/invoke-external-foreign.rs b/src/test/run-pass/invoke-external-foreign.rs
index 17da3de7d55..cc50e06199d 100644
--- a/src/test/run-pass/invoke-external-foreign.rs
+++ b/src/test/run-pass/invoke-external-foreign.rs
@@ -17,6 +17,6 @@
 
 extern mod foreign_lib;
 
-fn main() {
+pub fn main() {
     let foo = foreign_lib::rustrt::last_os_error();
 }
diff --git a/src/test/run-pass/irrefutable-unit.rs b/src/test/run-pass/irrefutable-unit.rs
index 102338dcbc0..51adeea394c 100644
--- a/src/test/run-pass/irrefutable-unit.rs
+++ b/src/test/run-pass/irrefutable-unit.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let ((),()) = ((),());
 }
diff --git a/src/test/run-pass/issue-1112.rs b/src/test/run-pass/issue-1112.rs
index a29d6d1e3e4..e2a91910975 100644
--- a/src/test/run-pass/issue-1112.rs
+++ b/src/test/run-pass/issue-1112.rs
@@ -21,7 +21,7 @@ struct X<T> {
     g: u8
 }
 
-fn main() {
+pub fn main() {
     let x: X<int> = X {
         a: 12345678,
         b: 9u8,
diff --git a/src/test/run-pass/issue-1251.rs b/src/test/run-pass/issue-1251.rs
index bc330902b76..27b41c510d6 100644
--- a/src/test/run-pass/issue-1251.rs
+++ b/src/test/run-pass/issue-1251.rs
@@ -14,4 +14,4 @@ extern mod rustrt {
     pub fn get_task_id() -> libc::intptr_t;
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-1458.rs b/src/test/run-pass/issue-1458.rs
index 15d809e8208..b5c8a0d3138 100644
--- a/src/test/run-pass/issue-1458.rs
+++ b/src/test/run-pass/issue-1458.rs
@@ -16,7 +16,7 @@ fn ret_plus_one() -> extern fn(fn() -> int) -> int {
   return plus_one;
 }
 
-fn main() {
+pub fn main() {
     let z = do (ret_plus_one()) || { 2 };
     assert z == 3;
 }
diff --git a/src/test/run-pass/issue-1460.rs b/src/test/run-pass/issue-1460.rs
index 216093cd7aa..44465fe5f80 100644
--- a/src/test/run-pass/issue-1460.rs
+++ b/src/test/run-pass/issue-1460.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 
-fn main() {
+pub fn main() {
     {|i| if 1 == i { }};
 }
diff --git a/src/test/run-pass/issue-1466.rs b/src/test/run-pass/issue-1466.rs
index b719f4f3df7..1915f1b3a41 100644
--- a/src/test/run-pass/issue-1466.rs
+++ b/src/test/run-pass/issue-1466.rs
@@ -11,7 +11,7 @@
 // exec-env:RUST_CC_ZEAL=1
 // xfail-test
 
-fn main() {
+pub fn main() {
     error!("%?", os::getenv(~"RUST_CC_ZEAL"));
     let _x = @{a: @10, b: ~true};
 }
diff --git a/src/test/run-pass/issue-1516.rs b/src/test/run-pass/issue-1516.rs
index c83b52727e1..d36cb993092 100644
--- a/src/test/run-pass/issue-1516.rs
+++ b/src/test/run-pass/issue-1516.rs
@@ -9,5 +9,5 @@
 // except according to those terms.
 
 // xfail-test
-fn main() {  let early_error: fn@(str) -> !  = {|msg| die!() }; }
+pub fn main() {  let early_error: fn@(str) -> !  = {|msg| die!() }; }
 
diff --git a/src/test/run-pass/issue-1660.rs b/src/test/run-pass/issue-1660.rs
index 8d55fe36d68..da8dfbf6792 100644
--- a/src/test/run-pass/issue-1660.rs
+++ b/src/test/run-pass/issue-1660.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     const _x: int = 1<<2;
 }
diff --git a/src/test/run-pass/issue-1696.rs b/src/test/run-pass/issue-1696.rs
index 72ce678cd23..a10edcddbad 100644
--- a/src/test/run-pass/issue-1696.rs
+++ b/src/test/run-pass/issue-1696.rs
@@ -14,7 +14,7 @@ extern mod std;
 use std::map;
 use std::map::HashMap;
 
-fn main() {
+pub fn main() {
     let m = map::HashMap();
     m.insert(str::to_bytes(~"foo"), str::to_bytes(~"bar"));
     log(error, m);
diff --git a/src/test/run-pass/issue-1701.rs b/src/test/run-pass/issue-1701.rs
index 0e0ab115327..33caaf1b53f 100644
--- a/src/test/run-pass/issue-1701.rs
+++ b/src/test/run-pass/issue-1701.rs
@@ -23,7 +23,7 @@ fn noise(a: animal) -> Option<~str> {
     }
 }
 
-fn main() {
+pub fn main() {
     assert noise(cat(tabby)) == Some(~"meow");
     assert noise(dog(pug)) == Some(~"woof");
     assert noise(rabbit(~"Hilbert", upright)) == None;
diff --git a/src/test/run-pass/issue-1821.rs b/src/test/run-pass/issue-1821.rs
index f0f9eb5014f..092d2b05cb7 100644
--- a/src/test/run-pass/issue-1821.rs
+++ b/src/test/run-pass/issue-1821.rs
@@ -12,4 +12,4 @@
 enum t {
     foo(~[t])
 }
-fn main() {}
\ No newline at end of file
+pub fn main() {}
\ No newline at end of file
diff --git a/src/test/run-pass/issue-1866.rs b/src/test/run-pass/issue-1866.rs
index 72fc38e9a0f..9fa8aa39fda 100644
--- a/src/test/run-pass/issue-1866.rs
+++ b/src/test/run-pass/issue-1866.rs
@@ -23,4 +23,4 @@ mod b {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-1895.rs b/src/test/run-pass/issue-1895.rs
index 4557d063e1b..3d20eb813d8 100644
--- a/src/test/run-pass/issue-1895.rs
+++ b/src/test/run-pass/issue-1895.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
   let x = 1;
   let y = fn@(move x) -> int {
              x
diff --git a/src/test/run-pass/issue-1974.rs b/src/test/run-pass/issue-1974.rs
index c41e14a16de..a28d5a205e9 100644
--- a/src/test/run-pass/issue-1974.rs
+++ b/src/test/run-pass/issue-1974.rs
@@ -10,7 +10,7 @@
 
 // Issue 1974
 // Don't double free the condition allocation
-fn main() {
+pub fn main() {
     let s = ~"hej";
     while s != ~"" {
         return;
diff --git a/src/test/run-pass/issue-1989.rs b/src/test/run-pass/issue-1989.rs
index ab0e0aa1aba..f941a9002ef 100644
--- a/src/test/run-pass/issue-1989.rs
+++ b/src/test/run-pass/issue-1989.rs
@@ -27,7 +27,7 @@ fn empty_pointy() -> @Pointy {
     }
 }
 
-fn main()
+pub fn main()
 {
     let v = ~[empty_pointy(), empty_pointy()];
     v[0].a = p(v[0]);
diff --git a/src/test/run-pass/issue-2101.rs b/src/test/run-pass/issue-2101.rs
index c9df6fcd3e0..4564e089147 100644
--- a/src/test/run-pass/issue-2101.rs
+++ b/src/test/run-pass/issue-2101.rs
@@ -19,7 +19,7 @@ fn init(ar: &a.arena::Arena, str: str) -> &a.hold {
     new(*ar) s(str)
 }
 
-fn main(args: ~[str]) {
+pub fn main(args: ~[str]) {
     let ar = arena::Arena();
     let leak = init(&ar, args[0]);
     match *leak {
diff --git a/src/test/run-pass/issue-2185.rs b/src/test/run-pass/issue-2185.rs
index 8e34936384b..e24defbf40c 100644
--- a/src/test/run-pass/issue-2185.rs
+++ b/src/test/run-pass/issue-2185.rs
@@ -50,7 +50,7 @@ fn range(lo: uint, hi: uint, it: fn(uint)) {
     }
 }
 
-fn main() {
+pub fn main() {
     let range: fn@(fn&(uint)) = |a| range(0u, 1000u, a);
     let filt: fn@(fn&(&&v: uint)) = |a| filter(
         range,
diff --git a/src/test/run-pass/issue-2190-1.rs b/src/test/run-pass/issue-2190-1.rs
index 16231009620..82d4eea3af4 100644
--- a/src/test/run-pass/issue-2190-1.rs
+++ b/src/test/run-pass/issue-2190-1.rs
@@ -19,6 +19,6 @@ fn child_no(x: uint) -> fn~() {
     }
 }
 
-fn main() {
+pub fn main() {
     task::spawn(child_no(0));
 }
diff --git a/src/test/run-pass/issue-2190-2.rs b/src/test/run-pass/issue-2190-2.rs
index 831fe086a02..b28055eca27 100644
--- a/src/test/run-pass/issue-2190-2.rs
+++ b/src/test/run-pass/issue-2190-2.rs
@@ -12,20 +12,20 @@
 mod a {
 fn foo(f: fn&()) { f() }
 fn bar() {}
-fn main() { foo(||bar()); }
+pub fn main() { foo(||bar()); }
 }
 
 mod b {
 fn foo(f: Option<fn&()>) { f.iter(|x|x()) }
 fn bar() {}
-fn main() { foo(Some(bar)); }
+pub fn main() { foo(Some(bar)); }
 }
 
 mod c {
 fn foo(f: Option<fn&()>) { f.iter(|x|x()) }
 fn bar() {}
-fn main() { foo(Some(||bar())); }
+pub fn main() { foo(Some(||bar())); }
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/issue-2190.rs b/src/test/run-pass/issue-2190.rs
index 3e07efe544a..2e956e0be5e 100644
--- a/src/test/run-pass/issue-2190.rs
+++ b/src/test/run-pass/issue-2190.rs
@@ -13,6 +13,6 @@ type t = {
     f: fn~()
 };
 
-fn main() {
+pub fn main() {
     let _t: t = { f: {||()} };
 }
diff --git a/src/test/run-pass/issue-2196.rs b/src/test/run-pass/issue-2196.rs
index 18a5be1e4a9..3fce821561a 100644
--- a/src/test/run-pass/issue-2196.rs
+++ b/src/test/run-pass/issue-2196.rs
@@ -16,4 +16,4 @@
 use c(name = "issue2196c");
 use c::t;
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-2214.rs b/src/test/run-pass/issue-2214.rs
index e8d07b4b2ad..8abe49dd45c 100644
--- a/src/test/run-pass/issue-2214.rs
+++ b/src/test/run-pass/issue-2214.rs
@@ -38,7 +38,7 @@ extern mod m {
 
 }
 
-fn main() {
+pub fn main() {
   let mut y: int = 5;
   let x: &mut int = &mut y;
   assert (lgamma(1.0 as c_double, x) == 0.0 as c_double);
diff --git a/src/test/run-pass/issue-2216.rs b/src/test/run-pass/issue-2216.rs
index 858f4ccc920..730646e4075 100644
--- a/src/test/run-pass/issue-2216.rs
+++ b/src/test/run-pass/issue-2216.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut x = 0;
     
     loop foo: {
diff --git a/src/test/run-pass/issue-2284.rs b/src/test/run-pass/issue-2284.rs
index 36009957239..e2484433448 100644
--- a/src/test/run-pass/issue-2284.rs
+++ b/src/test/run-pass/issue-2284.rs
@@ -16,5 +16,5 @@ fn f<T: Send>(t: T) {
     t.f();
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/issue-2288.rs b/src/test/run-pass/issue-2288.rs
index 0fa06e2f212..a77bbe150ab 100644
--- a/src/test/run-pass/issue-2288.rs
+++ b/src/test/run-pass/issue-2288.rs
@@ -30,7 +30,7 @@ fn f<A: Copy>(x: clam<A>, a: A) {
   x.chowder(a);
 }
 
-fn main() {
+pub fn main() {
 
   let c = foo(42);
   let d: clam<int> = c as clam::<int>;
diff --git a/src/test/run-pass/issue-2311-2.rs b/src/test/run-pass/issue-2311-2.rs
index 9618ed96646..0e974a8e6a8 100644
--- a/src/test/run-pass/issue-2311-2.rs
+++ b/src/test/run-pass/issue-2311-2.rs
@@ -25,4 +25,4 @@ fn foo<A: Copy>(b: A) -> foo<A> {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-2311.rs b/src/test/run-pass/issue-2311.rs
index 9e0e6041e14..f3ced02c122 100644
--- a/src/test/run-pass/issue-2311.rs
+++ b/src/test/run-pass/issue-2311.rs
@@ -13,4 +13,4 @@ trait foo<A> {
    fn bar<B,C:clam<A>>(c: C) -> B;
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-2312.rs b/src/test/run-pass/issue-2312.rs
index 8b6925b1a16..f491d5f86fa 100644
--- a/src/test/run-pass/issue-2312.rs
+++ b/src/test/run-pass/issue-2312.rs
@@ -18,4 +18,4 @@ impl foo {
     fn bar<B,C:clam<B>>(c: C) -> B { die!(); }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-2316-c.rs b/src/test/run-pass/issue-2316-c.rs
index a42557ea129..4a12440040c 100644
--- a/src/test/run-pass/issue-2316-c.rs
+++ b/src/test/run-pass/issue-2316-c.rs
@@ -15,6 +15,6 @@
 extern mod issue_2316_b;
 use issue_2316_b::cloth;
 
-fn main() {
+pub fn main() {
   let _c: cloth::fabric = cloth::calico;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/issue-2380-b.rs b/src/test/run-pass/issue-2380-b.rs
index 8ea26f41b21..d61622e6b0f 100644
--- a/src/test/run-pass/issue-2380-b.rs
+++ b/src/test/run-pass/issue-2380-b.rs
@@ -13,6 +13,6 @@
 
 extern mod a;
 
-fn main() {
+pub fn main() {
     a::f::<()>();
 }
diff --git a/src/test/run-pass/issue-2383.rs b/src/test/run-pass/issue-2383.rs
index eb7506aa3d2..e45d9d60555 100644
--- a/src/test/run-pass/issue-2383.rs
+++ b/src/test/run-pass/issue-2383.rs
@@ -14,7 +14,7 @@ extern mod std;
 use std::deque;
 use std::deque::Deque;
 
-fn main() {
+pub fn main() {
     let Q = deque::create();
     Q.add_back(10);
 }
diff --git a/src/test/run-pass/issue-2414-c.rs b/src/test/run-pass/issue-2414-c.rs
index 5bb43e2d9db..1bc88e74f7f 100644
--- a/src/test/run-pass/issue-2414-c.rs
+++ b/src/test/run-pass/issue-2414-c.rs
@@ -14,4 +14,4 @@
 
 extern mod b;
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2428.rs b/src/test/run-pass/issue-2428.rs
index d4f131f06e7..d8b11dc0113 100644
--- a/src/test/run-pass/issue-2428.rs
+++ b/src/test/run-pass/issue-2428.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let foo = 100;
     const quux: int = 5;
 
diff --git a/src/test/run-pass/issue-2445-b.rs b/src/test/run-pass/issue-2445-b.rs
index f1b7d45e440..2fce24c0670 100644
--- a/src/test/run-pass/issue-2445-b.rs
+++ b/src/test/run-pass/issue-2445-b.rs
@@ -29,7 +29,7 @@ impl<T: Copy> c1<T> {
 }
 
 
-fn main() {
+pub fn main() {
     c1::<int>(3).f1(4);
     c1::<int>(3).f2(4);
 }
diff --git a/src/test/run-pass/issue-2445.rs b/src/test/run-pass/issue-2445.rs
index fada6a7b02e..ea1cec61867 100644
--- a/src/test/run-pass/issue-2445.rs
+++ b/src/test/run-pass/issue-2445.rs
@@ -27,7 +27,7 @@ impl<T: Copy> c1<T> {
 }
 
 
-fn main() {
+pub fn main() {
     c1::<int>(3).f1(4);
     c1::<int>(3).f2(4);
 }
diff --git a/src/test/run-pass/issue-2463.rs b/src/test/run-pass/issue-2463.rs
index b787677db68..9b774ed5243 100644
--- a/src/test/run-pass/issue-2463.rs
+++ b/src/test/run-pass/issue-2463.rs
@@ -10,7 +10,7 @@
 
 struct Pair { f: int, g: int }
 
-fn main() {
+pub fn main() {
 
     let x = Pair {
         f: 0,
diff --git a/src/test/run-pass/issue-2472.rs b/src/test/run-pass/issue-2472.rs
index dc5bc42295b..db116cded11 100644
--- a/src/test/run-pass/issue-2472.rs
+++ b/src/test/run-pass/issue-2472.rs
@@ -15,7 +15,7 @@ extern mod issue_2472_b;
 
 use issue_2472_b::{S, T};
 
-fn main() {
+pub fn main() {
     let s = S(());
     s.foo();
     s.bar();
diff --git a/src/test/run-pass/issue-2487-a.rs b/src/test/run-pass/issue-2487-a.rs
index 8a35894ae09..62fef8202aa 100644
--- a/src/test/run-pass/issue-2487-a.rs
+++ b/src/test/run-pass/issue-2487-a.rs
@@ -36,4 +36,4 @@ fn closure(f: fn()) { f() }
 
 fn setsockopt_bytes(_sock: int) { }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2502.rs b/src/test/run-pass/issue-2502.rs
index d6385ccb378..7696ec37217 100644
--- a/src/test/run-pass/issue-2502.rs
+++ b/src/test/run-pass/issue-2502.rs
@@ -24,4 +24,4 @@ fn font(fontbuf: &r/~[u8]) -> font/&r {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-2526-a.rs b/src/test/run-pass/issue-2526-a.rs
index 739c5a04692..c91b5dd303c 100644
--- a/src/test/run-pass/issue-2526-a.rs
+++ b/src/test/run-pass/issue-2526-a.rs
@@ -14,5 +14,5 @@
 extern mod issue_2526;
 use issue_2526::*;
 
-fn main() {}
+pub fn main() {}
 
diff --git a/src/test/run-pass/issue-2550.rs b/src/test/run-pass/issue-2550.rs
index 4e9e21b29bf..f5977713890 100644
--- a/src/test/run-pass/issue-2550.rs
+++ b/src/test/run-pass/issue-2550.rs
@@ -22,6 +22,6 @@ fn f<T:Copy>(_x: T) {
 }
 
 #[deny(non_implicitly_copyable_typarams)]
-fn main() {
+pub fn main() {
     f(C(1u));
 }
diff --git a/src/test/run-pass/issue-2611.rs b/src/test/run-pass/issue-2611.rs
index 0a8bd250bb5..de03e3382a6 100644
--- a/src/test/run-pass/issue-2611.rs
+++ b/src/test/run-pass/issue-2611.rs
@@ -20,4 +20,4 @@ impl<A:Copy> BaseIter<A>: FlatMapToVec<A> {
    }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2631-b.rs b/src/test/run-pass/issue-2631-b.rs
index 810ac8efaf7..351a5a69aca 100644
--- a/src/test/run-pass/issue-2631-b.rs
+++ b/src/test/run-pass/issue-2631-b.rs
@@ -18,7 +18,7 @@ use req::*;
 use std::map::*;
 use std::map::HashMap;
 
-fn main() {
+pub fn main() {
   let v = ~[@~"hi"];
   let m: req::header_map = HashMap();
   m.insert(~"METHOD", @dvec::from_vec(v));
diff --git a/src/test/run-pass/issue-2633-2.rs b/src/test/run-pass/issue-2633-2.rs
index a676e6d83e0..5c3a2f0a4f6 100644
--- a/src/test/run-pass/issue-2633-2.rs
+++ b/src/test/run-pass/issue-2633-2.rs
@@ -12,7 +12,7 @@ fn a_val(&&x: ~int, +y: ~int) -> int {
     *x + *y
 }
 
-fn main() {
+pub fn main() {
     let z = ~22;
     a_val(copy z, copy z);
 }
diff --git a/src/test/run-pass/issue-2633.rs b/src/test/run-pass/issue-2633.rs
index e209a9a03ed..8ff51b0c28e 100644
--- a/src/test/run-pass/issue-2633.rs
+++ b/src/test/run-pass/issue-2633.rs
@@ -25,7 +25,7 @@ fn nyan(kitty: cat, _kitty_info: KittyInfo) {
     (kitty.meow)();
 }
 
-fn main() {
+pub fn main() {
     let mut kitty = cat();
     nyan(copy kitty, KittyInfo {kitty: copy kitty});
 }
diff --git a/src/test/run-pass/issue-2642.rs b/src/test/run-pass/issue-2642.rs
index e43fad50be9..dc601554542 100644
--- a/src/test/run-pass/issue-2642.rs
+++ b/src/test/run-pass/issue-2642.rs
@@ -12,5 +12,5 @@ fn f() {
    let _x: uint = loop { loop { break; } };
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/issue-2708.rs b/src/test/run-pass/issue-2708.rs
index 45f9eabcf2f..f16a65c9309 100644
--- a/src/test/run-pass/issue-2708.rs
+++ b/src/test/run-pass/issue-2708.rs
@@ -27,6 +27,6 @@ fn Font() -> Font {
     }
 }
 
-fn main() {
+pub fn main() {
     let _f = @Font();
 }
diff --git a/src/test/run-pass/issue-2718.rs b/src/test/run-pass/issue-2718.rs
index 135bc08c21d..0827d280cf7 100644
--- a/src/test/run-pass/issue-2718.rs
+++ b/src/test/run-pass/issue-2718.rs
@@ -311,7 +311,7 @@ fn server(-chan: pingpong::server::ping) {
     log(error, ~"Sent pong");
 }
 
-fn main() {
+pub fn main() {
   /*
 //    Commented out because of option::get error
 
diff --git a/src/test/run-pass/issue-2723-b.rs b/src/test/run-pass/issue-2723-b.rs
index 9a0fbdfb77a..2ca56ae0b7a 100644
--- a/src/test/run-pass/issue-2723-b.rs
+++ b/src/test/run-pass/issue-2723-b.rs
@@ -14,7 +14,7 @@
 extern mod issue_2723_a;
 use issue_2723_a::*;
 
-fn main() {
+pub fn main() {
     unsafe {
         f(~[2]);
     }
diff --git a/src/test/run-pass/issue-2734.rs b/src/test/run-pass/issue-2734.rs
index 0ab6c630ac8..d389ff34abe 100644
--- a/src/test/run-pass/issue-2734.rs
+++ b/src/test/run-pass/issue-2734.rs
@@ -19,6 +19,6 @@ fn deadcode() {
     perform_hax(@~"deadcode");
 }
 
-fn main() {
+pub fn main() {
     let _ = perform_hax(@42);
 }
diff --git a/src/test/run-pass/issue-2735-2.rs b/src/test/run-pass/issue-2735-2.rs
index 3f9a27c6b78..21bd5e2ebc1 100644
--- a/src/test/run-pass/issue-2735-2.rs
+++ b/src/test/run-pass/issue-2735-2.rs
@@ -25,7 +25,7 @@ fn defer(b: &r/mut bool) -> defer/&r {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut dtor_ran = false;
     let _  = defer(&mut dtor_ran);
     assert(dtor_ran);
diff --git a/src/test/run-pass/issue-2735-3.rs b/src/test/run-pass/issue-2735-3.rs
index e7f986bf7fe..6a706404e33 100644
--- a/src/test/run-pass/issue-2735-3.rs
+++ b/src/test/run-pass/issue-2735-3.rs
@@ -25,7 +25,7 @@ fn defer(b: &r/mut bool) -> defer/&r {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut dtor_ran = false;
     defer(&mut dtor_ran);
     assert(dtor_ran);
diff --git a/src/test/run-pass/issue-2735.rs b/src/test/run-pass/issue-2735.rs
index 675397a0881..709227c83e3 100644
--- a/src/test/run-pass/issue-2735.rs
+++ b/src/test/run-pass/issue-2735.rs
@@ -19,6 +19,6 @@ fn deadcode() {
     perform_hax(@~"deadcode");
 }
 
-fn main() {
+pub fn main() {
     perform_hax(@42);
 }
diff --git a/src/test/run-pass/issue-2748-a.rs b/src/test/run-pass/issue-2748-a.rs
index b08d3ce686a..bdf9109abd9 100644
--- a/src/test/run-pass/issue-2748-a.rs
+++ b/src/test/run-pass/issue-2748-a.rs
@@ -18,4 +18,4 @@ fn CMap(buf: &r/[u8]) -> CMap/&r {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-2748-b.rs b/src/test/run-pass/issue-2748-b.rs
index dc1d7c4056f..f5720881221 100644
--- a/src/test/run-pass/issue-2748-b.rs
+++ b/src/test/run-pass/issue-2748-b.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 fn thing(x: &r/[int]) -> &r/[int] { x }
-fn main() {
+pub fn main() {
     let x = &[1,2,3];
     let y = x;
     let z = thing(x);
diff --git a/src/test/run-pass/issue-2804-2.rs b/src/test/run-pass/issue-2804-2.rs
index c79b59f7cd9..6d9cb3069e9 100644
--- a/src/test/run-pass/issue-2804-2.rs
+++ b/src/test/run-pass/issue-2804-2.rs
@@ -19,4 +19,4 @@ fn add_interfaces(managed_ip: ~str, device: std::map::HashMap<~str, int>)  {
      error!("%s, %?", managed_ip, device[~"interfaces"]);
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2804.rs b/src/test/run-pass/issue-2804.rs
index 4ea59fc4b69..e242763e90b 100644
--- a/src/test/run-pass/issue-2804.rs
+++ b/src/test/run-pass/issue-2804.rs
@@ -78,4 +78,4 @@ fn add_interfaces(store: int, managed_ip: ~str, device: std::map::HashMap<~str,
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2834.rs b/src/test/run-pass/issue-2834.rs
index dad0427adcc..b78cefe1c95 100644
--- a/src/test/run-pass/issue-2834.rs
+++ b/src/test/run-pass/issue-2834.rs
@@ -24,7 +24,7 @@ fn rendezvous() {
     error!("%?", streams[0]);
 }
 
-fn main() {
+pub fn main() {
     //os::getenv("FOO");
     rendezvous();
 }
diff --git a/src/test/run-pass/issue-2869.rs b/src/test/run-pass/issue-2869.rs
index fddc41a3761..619f4b4d7db 100644
--- a/src/test/run-pass/issue-2869.rs
+++ b/src/test/run-pass/issue-2869.rs
@@ -21,4 +21,4 @@ fn num_bindings(pat: pat) -> uint {
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2895.rs b/src/test/run-pass/issue-2895.rs
index a21cad8fd39..be1cb3bef8f 100644
--- a/src/test/run-pass/issue-2895.rs
+++ b/src/test/run-pass/issue-2895.rs
@@ -21,13 +21,13 @@ impl Kitty : Drop {
 }
 
 #[cfg(target_arch = "x86_64")]
-fn main() {
+pub fn main() {
     assert (sys::size_of::<Cat>() == 8 as uint);
     assert (sys::size_of::<Kitty>() == 16 as uint);
 }
 
 #[cfg(target_arch = "x86")]
-fn main() {
+pub fn main() {
     assert (sys::size_of::<Cat>() == 4 as uint);
     assert (sys::size_of::<Kitty>() == 8 as uint);
 }
diff --git a/src/test/run-pass/issue-2904.rs b/src/test/run-pass/issue-2904.rs
index 4aa66b48fbe..d150cff304a 100644
--- a/src/test/run-pass/issue-2904.rs
+++ b/src/test/run-pass/issue-2904.rs
@@ -87,4 +87,4 @@ mod test {
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-2930.rs b/src/test/run-pass/issue-2930.rs
index 1ad51582067..4b6985f057e 100644
--- a/src/test/run-pass/issue-2930.rs
+++ b/src/test/run-pass/issue-2930.rs
@@ -14,7 +14,7 @@ proto! stream (
     }
 )
 
-fn main() {
+pub fn main() {
     let (bc, _bp) = stream::init();
 
     stream::client::send(move bc, ~"abc");
diff --git a/src/test/run-pass/issue-2935.rs b/src/test/run-pass/issue-2935.rs
index cac60676be8..e30d8997b3b 100644
--- a/src/test/run-pass/issue-2935.rs
+++ b/src/test/run-pass/issue-2935.rs
@@ -20,7 +20,7 @@ impl t: it {
     fn f() { }
 }
 
-fn main() {
+pub fn main() {
   //    let x = ({a: 4i} as it);
   //   let y = @({a: 4i});
   //    let z = @({a: 4i} as it);
diff --git a/src/test/run-pass/issue-2936.rs b/src/test/run-pass/issue-2936.rs
index 00c18f2e5c9..3a024c73791 100644
--- a/src/test/run-pass/issue-2936.rs
+++ b/src/test/run-pass/issue-2936.rs
@@ -32,7 +32,7 @@ fn cbar(x: int) -> cbar {
     }
 }
 
-fn main() {
+pub fn main() {
     let x: int = foo::<int, cbar>(cbar(5));
     assert x == 5;
 }
diff --git a/src/test/run-pass/issue-2989.rs b/src/test/run-pass/issue-2989.rs
index d77a0817b82..40a78d7114a 100644
--- a/src/test/run-pass/issue-2989.rs
+++ b/src/test/run-pass/issue-2989.rs
@@ -33,7 +33,7 @@ fn to_bools(bitv: Storage) -> ~[bool] {
 
 struct Storage { storage: ~[u64] }
 
-fn main() {
+pub fn main() {
     let bools = ~[false, false, true, false, false, true, true, false];
     let bools2 = to_bools(Storage{storage: ~[0b01100100]});
 
diff --git a/src/test/run-pass/issue-3012-2.rs b/src/test/run-pass/issue-3012-2.rs
index 84a98bf91db..ef115c5c02c 100644
--- a/src/test/run-pass/issue-3012-2.rs
+++ b/src/test/run-pass/issue-3012-2.rs
@@ -13,7 +13,7 @@
 extern mod socketlib;
 use socketlib::socket;
 
-fn main() {
+pub fn main() {
     let fd: libc::c_int = 1 as libc::c_int;
     let sock = @socket::socket_handle(fd);
 }
diff --git a/src/test/run-pass/issue-3026.rs b/src/test/run-pass/issue-3026.rs
index 8a7ebb8d129..8731df5a33b 100644
--- a/src/test/run-pass/issue-3026.rs
+++ b/src/test/run-pass/issue-3026.rs
@@ -14,7 +14,7 @@ extern mod std;
 use std::map::HashMap;
 use std::map;
 
-fn main() {
+pub fn main() {
     let buggy_map :HashMap<uint, &uint> = HashMap::<uint, &uint>();
     let x = ~1;
     buggy_map.insert(42, &*x);
diff --git a/src/test/run-pass/issue-3037.rs b/src/test/run-pass/issue-3037.rs
index 33956a97d0b..ef403a6c9cb 100644
--- a/src/test/run-pass/issue-3037.rs
+++ b/src/test/run-pass/issue-3037.rs
@@ -16,6 +16,6 @@ fn what_to_str(x: what) -> ~str
     }
 }
 
-fn main()
+pub fn main()
 {
 }
diff --git a/src/test/run-pass/issue-3052.rs b/src/test/run-pass/issue-3052.rs
index 74f67ff9280..f01ef370e2a 100644
--- a/src/test/run-pass/issue-3052.rs
+++ b/src/test/run-pass/issue-3052.rs
@@ -15,5 +15,5 @@ fn f() -> Option<Connection> {
     Some(mock_connection)
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/issue-3091.rs b/src/test/run-pass/issue-3091.rs
index e06acc8cca3..5a38da1f1d2 100644
--- a/src/test/run-pass/issue-3091.rs
+++ b/src/test/run-pass/issue-3091.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = 1;
     let y = 1;
     assert &x == &y;
diff --git a/src/test/run-pass/issue-3109.rs b/src/test/run-pass/issue-3109.rs
index dfb529dcd1d..be38e9080e5 100644
--- a/src/test/run-pass/issue-3109.rs
+++ b/src/test/run-pass/issue-3109.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     log(error, ("hi there!", "you"));
 }
diff --git a/src/test/run-pass/issue-3121.rs b/src/test/run-pass/issue-3121.rs
index c61e222d789..522a68856b6 100644
--- a/src/test/run-pass/issue-3121.rs
+++ b/src/test/run-pass/issue-3121.rs
@@ -23,6 +23,6 @@ fn foo(m: @meal, cond: bool) {
     }
 }
 
-fn main() {
+pub fn main() {
     foo(@for_here(hamburger), true)
 }
diff --git a/src/test/run-pass/issue-3149.rs b/src/test/run-pass/issue-3149.rs
index c578f1144a7..805aac92937 100644
--- a/src/test/run-pass/issue-3149.rs
+++ b/src/test/run-pass/issue-3149.rs
@@ -29,4 +29,4 @@ struct Matrix4<T> {
     m41: T, m42: T, m43: T, m44: T,
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3168.rs b/src/test/run-pass/issue-3168.rs
index 844619c676d..a2c181569ce 100644
--- a/src/test/run-pass/issue-3168.rs
+++ b/src/test/run-pass/issue-3168.rs
@@ -10,7 +10,7 @@
 
 // xfail-fast
 
-fn main() {
+pub fn main() {
     let (p,c) = pipes::stream();
     do task::try |move c| {
         let (p2,c2) = pipes::stream();
diff --git a/src/test/run-pass/issue-3176.rs b/src/test/run-pass/issue-3176.rs
index 3cd52be70b0..911e50a0ed7 100644
--- a/src/test/run-pass/issue-3176.rs
+++ b/src/test/run-pass/issue-3176.rs
@@ -12,7 +12,7 @@
 
 use pipes::{Select2, Selectable};
 
-fn main() {
+pub fn main() {
     let (p,c) = pipes::stream();
     do task::try |move c| {
         let (p2,c2) = pipes::stream();
diff --git a/src/test/run-pass/issue-3186.rs b/src/test/run-pass/issue-3186.rs
index f582e905451..6b35cd7e0c9 100644
--- a/src/test/run-pass/issue-3186.rs
+++ b/src/test/run-pass/issue-3186.rs
@@ -12,4 +12,4 @@ enum y { x }
 
 enum x {}
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3211.rs b/src/test/run-pass/issue-3211.rs
index ecdd0a2c2a7..2bb57d6c95a 100644
--- a/src/test/run-pass/issue-3211.rs
+++ b/src/test/run-pass/issue-3211.rs
@@ -1,4 +1,4 @@
-fn main() {
+pub fn main() {
     let mut x = 0;
     for 4096.times {
         x += 1;
diff --git a/src/test/run-pass/issue-3220.rs b/src/test/run-pass/issue-3220.rs
index 33161adc4af..561a1925a97 100644
--- a/src/test/run-pass/issue-3220.rs
+++ b/src/test/run-pass/issue-3220.rs
@@ -21,7 +21,7 @@ fn thing() -> thing {
 }
 impl thing { fn f(self) {} }
 
-fn main() {
+pub fn main() {
     let z = thing();
     (move z).f();
 }
diff --git a/src/test/run-pass/issue-3250.rs b/src/test/run-pass/issue-3250.rs
index 086f94b2f62..a563544b5c7 100644
--- a/src/test/run-pass/issue-3250.rs
+++ b/src/test/run-pass/issue-3250.rs
@@ -4,4 +4,4 @@ type t = (uint, uint);
 
  
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/issue-3305.rs b/src/test/run-pass/issue-3305.rs
index 7117ecfced3..d3377d196a4 100644
--- a/src/test/run-pass/issue-3305.rs
+++ b/src/test/run-pass/issue-3305.rs
@@ -20,7 +20,7 @@ fn is_equal<D: double>(x: @D, exp: uint) {
     assert x.double() == exp;
 }
 
-fn main() {
+pub fn main() {
     let x = @(3u as double);
     is_equal(x, 6);
 }
diff --git a/src/test/run-pass/issue-333.rs b/src/test/run-pass/issue-333.rs
index a3fef098c88..8b863bd90b6 100644
--- a/src/test/run-pass/issue-333.rs
+++ b/src/test/run-pass/issue-333.rs
@@ -12,4 +12,4 @@ fn quux<T: Copy>(x: T) -> T { let f = id::<T>; return f(x); }
 
 fn id<T: Copy>(x: T) -> T { return x; }
 
-fn main() { assert (quux(10) == 10); }
+pub fn main() { assert (quux(10) == 10); }
diff --git a/src/test/run-pass/issue-3389.rs b/src/test/run-pass/issue-3389.rs
index 37882ad4241..b25e6ae2d2d 100644
--- a/src/test/run-pass/issue-3389.rs
+++ b/src/test/run-pass/issue-3389.rs
@@ -19,7 +19,7 @@ fn print_str_vector(vector: ~[~str]) {
     }
 }
 
-fn main() {
+pub fn main() {
     let node: trie_node = trie_node {
         content: ~[],
         children: ~[]
diff --git a/src/test/run-pass/issue-3424.rs b/src/test/run-pass/issue-3424.rs
index 6064713b295..5d6367df3b6 100644
--- a/src/test/run-pass/issue-3424.rs
+++ b/src/test/run-pass/issue-3424.rs
@@ -25,4 +25,4 @@ fn tester()
     assert loader(&path).is_ok();
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3447.rs b/src/test/run-pass/issue-3447.rs
index eaba3b16d3e..18b47e2925d 100644
--- a/src/test/run-pass/issue-3447.rs
+++ b/src/test/run-pass/issue-3447.rs
@@ -24,7 +24,7 @@ impl<T> list<T>{
     }
 }
 
-fn main() {
+pub fn main() {
     let s = @"str";
     let ls = list {
         element: &s,
diff --git a/src/test/run-pass/issue-3461.rs b/src/test/run-pass/issue-3461.rs
index 0823395945f..f285479df20 100644
--- a/src/test/run-pass/issue-3461.rs
+++ b/src/test/run-pass/issue-3461.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // xfail-test
-fn main() {
+pub fn main() {
 
     fn foo() { }
     
diff --git a/src/test/run-pass/issue-3480.rs b/src/test/run-pass/issue-3480.rs
index d2e84036fba..8e4f3446953 100644
--- a/src/test/run-pass/issue-3480.rs
+++ b/src/test/run-pass/issue-3480.rs
@@ -24,4 +24,4 @@ impl<K: Copy, V: Copy> IMap<K, V> : ImmutableMap<K, V>
     }
 }
 
-fn main() {}
\ No newline at end of file
+pub fn main() {}
\ No newline at end of file
diff --git a/src/test/run-pass/issue-3500.rs b/src/test/run-pass/issue-3500.rs
index 5ee7f499d1c..99def5476f9 100644
--- a/src/test/run-pass/issue-3500.rs
+++ b/src/test/run-pass/issue-3500.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = &Some(1);
     match x {
         &Some(_) => (),
diff --git a/src/test/run-pass/issue-3559.rs b/src/test/run-pass/issue-3559.rs
index da7746681f2..d5f165263c9 100644
--- a/src/test/run-pass/issue-3559.rs
+++ b/src/test/run-pass/issue-3559.rs
@@ -36,4 +36,4 @@ fn tester()
     assert check_strs(table.to_str(), ~"xxx");   // not sure what expected should be
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3563-2.rs b/src/test/run-pass/issue-3563-2.rs
index aa4598fc90b..332127d0204 100644
--- a/src/test/run-pass/issue-3563-2.rs
+++ b/src/test/run-pass/issue-3563-2.rs
@@ -19,4 +19,4 @@ trait Canvas {
 
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3563-3.rs b/src/test/run-pass/issue-3563-3.rs
index 50ca15cbd1d..5196536db62 100644
--- a/src/test/run-pass/issue-3563-3.rs
+++ b/src/test/run-pass/issue-3563-3.rs
@@ -204,7 +204,7 @@ fn test_shapes()
     assert check_strs(art.to_str(), "****\n*..*\n*.**\n****");
 }
 
-fn main() {
+pub fn main() {
     test_ascii_art_ctor();
     test_add_pt();
     test_shapes();
diff --git a/src/test/run-pass/issue-3574.rs b/src/test/run-pass/issue-3574.rs
index 3744b857dc1..1b666fd5649 100644
--- a/src/test/run-pass/issue-3574.rs
+++ b/src/test/run-pass/issue-3574.rs
@@ -20,7 +20,7 @@ fn compare(x: &str, y: &str) -> bool
     }
 }
 
-fn main()
+pub fn main()
 {
     assert compare("foo", "foo");
     assert compare(@"foo", @"foo");
diff --git a/src/test/run-pass/issue-3609.rs b/src/test/run-pass/issue-3609.rs
index 9eff98ff424..0eacb34b1ef 100644
--- a/src/test/run-pass/issue-3609.rs
+++ b/src/test/run-pass/issue-3609.rs
@@ -24,5 +24,5 @@ fn foo(name: ~str, samples_chan: Chan<Msg>) {
     };
 }
 
-fn main() {}
+pub fn main() {}
 
diff --git a/src/test/run-pass/issue-3656.rs b/src/test/run-pass/issue-3656.rs
index 66c2a4672b4..edb9278781f 100644
--- a/src/test/run-pass/issue-3656.rs
+++ b/src/test/run-pass/issue-3656.rs
@@ -27,5 +27,5 @@ extern {
     pub fn malloc(++data: KEYGEN);
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/issue-3683.rs b/src/test/run-pass/issue-3683.rs
index d4b343a88b7..729f91760b1 100644
--- a/src/test/run-pass/issue-3683.rs
+++ b/src/test/run-pass/issue-3683.rs
@@ -23,6 +23,6 @@ impl int: Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     assert(3.b() == 5);
 }
diff --git a/src/test/run-pass/issue-3702.rs b/src/test/run-pass/issue-3702.rs
index 9045e3aecda..eaa2ac4c4ba 100644
--- a/src/test/run-pass/issue-3702.rs
+++ b/src/test/run-pass/issue-3702.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
   trait Text {
     fn to_str(&self) -> ~str;
   }
diff --git a/src/test/run-pass/issue-3753.rs b/src/test/run-pass/issue-3753.rs
index dcd85916918..39d3e20ae2f 100644
--- a/src/test/run-pass/issue-3753.rs
+++ b/src/test/run-pass/issue-3753.rs
@@ -31,7 +31,7 @@ pub impl Shape {
     }
 }
 
-fn main(){
+pub fn main(){
     let s = Circle(Point { x: 1f, y: 2f }, 3f);
     io::println(fmt!("%f", s.area(s)));
 }
\ No newline at end of file
diff --git a/src/test/run-pass/issue-3794.rs b/src/test/run-pass/issue-3794.rs
index 9d39d59b24f..47373e5490a 100644
--- a/src/test/run-pass/issue-3794.rs
+++ b/src/test/run-pass/issue-3794.rs
@@ -31,7 +31,7 @@ fn print_s(s: &S) {
     s.print();
 }
 
-fn main() {
+pub fn main() {
     let s: @S = @S { s: 5 };
     print_s(s);
     let t: @T = s as @T;
diff --git a/src/test/run-pass/issue-3847.rs b/src/test/run-pass/issue-3847.rs
index 878f6c6ccb1..4d1b042661c 100644
--- a/src/test/run-pass/issue-3847.rs
+++ b/src/test/run-pass/issue-3847.rs
@@ -12,7 +12,7 @@ mod buildings {
     pub struct Tower { height: uint }
 }
 
-fn main() {
+pub fn main() {
     let sears = buildings::Tower { height: 1451 };
     let h: uint = match sears {
         buildings::Tower { height: h } => { h }
diff --git a/src/test/run-pass/issue-3860.rs b/src/test/run-pass/issue-3860.rs
index 7a7c307e23d..ba519fe5812 100644
--- a/src/test/run-pass/issue-3860.rs
+++ b/src/test/run-pass/issue-3860.rs
@@ -16,7 +16,7 @@ impl Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut x = @mut Foo { x: 3 };
     // Neither of the next two lines should cause an error
     let _ = x.stuff(); 
diff --git a/src/test/run-pass/issue-3874.rs b/src/test/run-pass/issue-3874.rs
index 03f0a98092b..d709757adb0 100644
--- a/src/test/run-pass/issue-3874.rs
+++ b/src/test/run-pass/issue-3874.rs
@@ -16,4 +16,4 @@ pure fn each(self: PureCounter, blk: fn(v: &uint)) {
     blk(x);
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3878.rs b/src/test/run-pass/issue-3878.rs
index 2b058fbedb7..dd41d696b3a 100644
--- a/src/test/run-pass/issue-3878.rs
+++ b/src/test/run-pass/issue-3878.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main()
+pub fn main()
 {
     let y = ~1;
     move y;
diff --git a/src/test/run-pass/issue-3888-2.rs b/src/test/run-pass/issue-3888-2.rs
index f3a7840dce0..19f05c61ba4 100644
--- a/src/test/run-pass/issue-3888-2.rs
+++ b/src/test/run-pass/issue-3888-2.rs
@@ -14,4 +14,4 @@ fn vec_peek<T>(v: &r/[T]) -> &r/[T] {
     vec::view(v, 1, 5)
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-3895.rs b/src/test/run-pass/issue-3895.rs
index 9296df58fec..e12d2cbae4d 100644
--- a/src/test/run-pass/issue-3895.rs
+++ b/src/test/run-pass/issue-3895.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // xfail-test
-fn main() {
+pub fn main() {
     enum State { BadChar, BadSyntax }
     
     match BadChar {
diff --git a/src/test/run-pass/issue-3904.rs b/src/test/run-pass/issue-3904.rs
index 047791a0e89..885b8da9325 100644
--- a/src/test/run-pass/issue-3904.rs
+++ b/src/test/run-pass/issue-3904.rs
@@ -29,7 +29,7 @@ impl X {
     }
 }
 
-fn main(){
+pub fn main(){
     let val = &X{
         err: example_err,
     };
diff --git a/src/test/run-pass/issue-3979-2.rs b/src/test/run-pass/issue-3979-2.rs
index 9401b24abb8..c485590f4aa 100644
--- a/src/test/run-pass/issue-3979-2.rs
+++ b/src/test/run-pass/issue-3979-2.rs
@@ -23,5 +23,5 @@ trait C: B {
     }
 }
 
-fn main() {}
+pub fn main() {}
 
diff --git a/src/test/run-pass/issue-3979-generics.rs b/src/test/run-pass/issue-3979-generics.rs
index 7261b74a7fa..0f349473096 100644
--- a/src/test/run-pass/issue-3979-generics.rs
+++ b/src/test/run-pass/issue-3979-generics.rs
@@ -34,7 +34,7 @@ impl Point: Positioned<int> {
 
 impl Point: Movable<int, int>;
 
-fn main() {
+pub fn main() {
     let p = Point{ x: 1, y: 2};
     p.translate(3);
     assert p.X() == 4;
diff --git a/src/test/run-pass/issue-3979-xcrate.rs b/src/test/run-pass/issue-3979-xcrate.rs
index bd48950534a..888fee6317d 100644
--- a/src/test/run-pass/issue-3979-xcrate.rs
+++ b/src/test/run-pass/issue-3979-xcrate.rs
@@ -26,7 +26,7 @@ impl Point: Positioned {
 
 impl Point: Movable;
 
-fn main() {
+pub fn main() {
     let p = Point{ x: 1, y: 2};
     p.translate(3);
     assert p.X() == 4;
diff --git a/src/test/run-pass/issue-3979.rs b/src/test/run-pass/issue-3979.rs
index 2c680d178b2..3a112de5503 100644
--- a/src/test/run-pass/issue-3979.rs
+++ b/src/test/run-pass/issue-3979.rs
@@ -33,7 +33,7 @@ impl Point: Positioned {
 
 impl Point: Movable;
 
-fn main() {
+pub fn main() {
     let p = Point{ x: 1, y: 2};
     p.translate(3);
     assert p.X() == 4;
diff --git a/src/test/run-pass/issue-4016.rs b/src/test/run-pass/issue-4016.rs
index 8612252d5b6..a8204d56f45 100644
--- a/src/test/run-pass/issue-4016.rs
+++ b/src/test/run-pass/issue-4016.rs
@@ -24,4 +24,4 @@ fn exec<T: JD>() {
     die!()
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/issue-4092.rs b/src/test/run-pass/issue-4092.rs
index 4cccd28590f..326dade15d9 100644
--- a/src/test/run-pass/issue-4092.rs
+++ b/src/test/run-pass/issue-4092.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
     let x = std::map::HashMap();
     x.insert((@"abc", 0), 0);
 }
diff --git a/src/test/run-pass/issue-4401.rs b/src/test/run-pass/issue-4401.rs
index 0fc2e4f1695..2af0246fb37 100644
--- a/src/test/run-pass/issue-4401.rs
+++ b/src/test/run-pass/issue-4401.rs
@@ -1,4 +1,4 @@
-fn main() {
+pub fn main() {
     let mut count = 0;
     for 999_999.times() {
         count += 1;
diff --git a/src/test/run-pass/issue-4541.rs b/src/test/run-pass/issue-4541.rs
index 2d4a210f4f9..fdc2cc1b013 100644
--- a/src/test/run-pass/issue-4541.rs
+++ b/src/test/run-pass/issue-4541.rs
@@ -26,6 +26,6 @@ fn parse_args() -> ~str {
     return ~""
 }
 
-fn main() {
+pub fn main() {
     io::println(parse_args());
 }
diff --git a/src/test/run-pass/issue-4542.rs b/src/test/run-pass/issue-4542.rs
index 37508d8fa23..329e3647fae 100644
--- a/src/test/run-pass/issue-4542.rs
+++ b/src/test/run-pass/issue-4542.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // xfail-test
-fn main() {
+pub fn main() {
     for os::args().each |arg| {
         match copy *arg {
             s => { }
diff --git a/src/test/run-pass/issue-868.rs b/src/test/run-pass/issue-868.rs
index 743e2a8e238..55c5dcb4e07 100644
--- a/src/test/run-pass/issue-868.rs
+++ b/src/test/run-pass/issue-868.rs
@@ -10,7 +10,7 @@
 
 fn f<T>(g: fn() -> T) -> T { g() }
 
-fn main() {
+pub fn main() {
   let _x = f( | | { 10 });
     // used to be: cannot determine a type for this expression
     f(| | { });
diff --git a/src/test/run-pass/issue-912.rs b/src/test/run-pass/issue-912.rs
index 688535a15c0..dddcb8b957f 100644
--- a/src/test/run-pass/issue-912.rs
+++ b/src/test/run-pass/issue-912.rs
@@ -11,7 +11,7 @@
 // xfail-test
 fn find<T>(_f: fn(@T) -> bool, _v: [@T]) {}
 
-fn main() {
+pub fn main() {
     let x = 10, arr = [];
     find({|f| f.id == x}, arr);
     arr += [{id: 20}]; // This assigns a type to arr
diff --git a/src/test/run-pass/issue-979.rs b/src/test/run-pass/issue-979.rs
index f0b57c50bd5..38fbc44e851 100644
--- a/src/test/run-pass/issue-979.rs
+++ b/src/test/run-pass/issue-979.rs
@@ -24,7 +24,7 @@ fn r(b: @mut int) -> r {
     }
 }
 
-fn main() {
+pub fn main() {
     let b = @mut 0;
     {
         let p = Some(r(b));
diff --git a/src/test/run-pass/issue-980.rs b/src/test/run-pass/issue-980.rs
index f29231b53d0..842eabf8fc5 100644
--- a/src/test/run-pass/issue-980.rs
+++ b/src/test/run-pass/issue-980.rs
@@ -17,7 +17,7 @@ struct Pointy {
     mut x : maybe_pointy
 }
 
-fn main() {
+pub fn main() {
     let m = @Pointy { mut x : no_pointy };
     m.x = yes_pointy(m);
 }
diff --git a/src/test/run-pass/issue2170exe.rs b/src/test/run-pass/issue2170exe.rs
index e51ec46021d..64b6593723b 100644
--- a/src/test/run-pass/issue2170exe.rs
+++ b/src/test/run-pass/issue2170exe.rs
@@ -12,6 +12,6 @@
 // aux-build:issue2170lib.rs
 extern mod issue2170lib;
 
-fn main() {
+pub fn main() {
    // let _ = issue2170lib::rsrc(2i32);
 }
diff --git a/src/test/run-pass/issue2378c.rs b/src/test/run-pass/issue2378c.rs
index 2e2bb5471b9..572cf69e1d9 100644
--- a/src/test/run-pass/issue2378c.rs
+++ b/src/test/run-pass/issue2378c.rs
@@ -18,7 +18,7 @@ use issue2378b;
 use issue2378a::{just, methods};
 use issue2378b::{methods};
 
-fn main() {
+pub fn main() {
     let x = {a: just(3), b: just(5)};
     assert x[0u] == (3, 5);
 }
diff --git a/src/test/run-pass/issue4516_ty_param.rs b/src/test/run-pass/issue4516_ty_param.rs
index 279766d9bbf..35df47df036 100644
--- a/src/test/run-pass/issue4516_ty_param.rs
+++ b/src/test/run-pass/issue4516_ty_param.rs
@@ -20,6 +20,6 @@
 
 extern mod issue4516_ty_param_lib;
 use issue4516_ty_param_lib::to_closure;
-fn main() {
+pub fn main() {
     to_closure(22)();
 }
diff --git a/src/test/run-pass/issue_3136_b.rs b/src/test/run-pass/issue_3136_b.rs
index 4a762a6c4d3..c5b6b6b220c 100644
--- a/src/test/run-pass/issue_3136_b.rs
+++ b/src/test/run-pass/issue_3136_b.rs
@@ -12,5 +12,5 @@
 // aux-build:issue_3136_a.rc
 
 extern mod issue_3136_a;
-fn main() {}
+pub fn main() {}
 
diff --git a/src/test/run-pass/issue_3882.rs b/src/test/run-pass/issue_3882.rs
index b56884622da..7b1af0d151f 100644
--- a/src/test/run-pass/issue_3882.rs
+++ b/src/test/run-pass/issue_3882.rs
@@ -14,4 +14,4 @@
 extern mod linenoise;
 use linenoise::issue_3882::*;
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/istr.rs b/src/test/run-pass/istr.rs
index 184987afeec..943d87a5222 100644
--- a/src/test/run-pass/istr.rs
+++ b/src/test/run-pass/istr.rs
@@ -60,7 +60,7 @@ fn test_append() {
     assert (s == ~"coffee&tea");
 }
 
-fn main() {
+pub fn main() {
     test_stack_assign();
     test_heap_lit();
     test_heap_assign();
diff --git a/src/test/run-pass/item-attributes.rs b/src/test/run-pass/item-attributes.rs
index d949516a257..2be072bb242 100644
--- a/src/test/run-pass/item-attributes.rs
+++ b/src/test/run-pass/item-attributes.rs
@@ -184,7 +184,7 @@ fn test_fn_inner() {
     #[inner_fn_attr];
 }
 
-fn main() { }
+pub fn main() { }
 
 //
 // Local Variables:
diff --git a/src/test/run-pass/item-name-overload.rs b/src/test/run-pass/item-name-overload.rs
index fd3ba938b1c..c6b777d3d8a 100644
--- a/src/test/run-pass/item-name-overload.rs
+++ b/src/test/run-pass/item-name-overload.rs
@@ -20,4 +20,4 @@ mod bar {
     pub fn baz() { }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/iter-all.rs b/src/test/run-pass/iter-all.rs
index 00f566c817f..3da5c01d197 100644
--- a/src/test/run-pass/iter-all.rs
+++ b/src/test/run-pass/iter-all.rs
@@ -10,7 +10,7 @@
 
 fn is_even(x: &uint) -> bool { (*x % 2) == 0 }
 
-fn main() {
+pub fn main() {
     assert ![1u, 2u].all(is_even);
     assert [2u, 4u].all(is_even);
     assert [].all(is_even);
diff --git a/src/test/run-pass/iter-any.rs b/src/test/run-pass/iter-any.rs
index 38b5b7c0a42..eb0b09327bb 100644
--- a/src/test/run-pass/iter-any.rs
+++ b/src/test/run-pass/iter-any.rs
@@ -10,7 +10,7 @@
 
 fn is_even(x: &uint) -> bool { (*x % 2) == 0 }
 
-fn main() {
+pub fn main() {
     assert ![1u, 3u].any(is_even);
     assert [1u, 2u].any(is_even);
     assert ![].any(is_even);
diff --git a/src/test/run-pass/iter-contains.rs b/src/test/run-pass/iter-contains.rs
index 3042a1e62e8..6e1fd498119 100644
--- a/src/test/run-pass/iter-contains.rs
+++ b/src/test/run-pass/iter-contains.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     assert [].contains(&22u) == false;
     assert [1u, 3u].contains(&22u) == false;
     assert [22u, 1u, 3u].contains(&22u) == true;
diff --git a/src/test/run-pass/iter-count.rs b/src/test/run-pass/iter-count.rs
index c2359606e77..1bc6155dce3 100644
--- a/src/test/run-pass/iter-count.rs
+++ b/src/test/run-pass/iter-count.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     assert [].count(&22u) == 0u;
     assert [1u, 3u].count(&22u) == 0u;
     assert [22u, 1u, 3u].count(&22u) == 1u;
diff --git a/src/test/run-pass/iter-eachi.rs b/src/test/run-pass/iter-eachi.rs
index 73732dae394..b96d017eb9e 100644
--- a/src/test/run-pass/iter-eachi.rs
+++ b/src/test/run-pass/iter-eachi.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut c = 0u;
     for [1u, 2u, 3u, 4u, 5u].eachi |i, v| {
         assert (i + 1u) == *v;
diff --git a/src/test/run-pass/iter-filter-to-vec.rs b/src/test/run-pass/iter-filter-to-vec.rs
index e3f8790e302..8f286ae9049 100644
--- a/src/test/run-pass/iter-filter-to-vec.rs
+++ b/src/test/run-pass/iter-filter-to-vec.rs
@@ -10,7 +10,7 @@
 
 fn is_even(x: &uint) -> bool { (*x % 2) == 0 }
 
-fn main() {
+pub fn main() {
     assert [1, 3].filter_to_vec(is_even) == ~[];
     assert [1, 2, 3].filter_to_vec(is_even) == ~[2];
     assert None.filter_to_vec(is_even) == ~[];
diff --git a/src/test/run-pass/iter-flat-map-to-vec.rs b/src/test/run-pass/iter-flat-map-to-vec.rs
index a90206188e3..c8df707ce97 100644
--- a/src/test/run-pass/iter-flat-map-to-vec.rs
+++ b/src/test/run-pass/iter-flat-map-to-vec.rs
@@ -14,7 +14,7 @@ fn incd_if_even(x: &uint) -> Option<uint> {
     if (*x % 2u) == 0u {Some(*x + 1u)} else {None}
 }
 
-fn main() {
+pub fn main() {
     assert (~[1u, 3u]).flat_map_to_vec(repeat) == ~[1u, 1u, 3u, 3u];
     assert (~[]).flat_map_to_vec(repeat) == ~[];
     assert None.flat_map_to_vec(repeat) == ~[];
diff --git a/src/test/run-pass/iter-foldl.rs b/src/test/run-pass/iter-foldl.rs
index 8c6d5a9ed60..ef1e83235a5 100644
--- a/src/test/run-pass/iter-foldl.rs
+++ b/src/test/run-pass/iter-foldl.rs
@@ -10,7 +10,7 @@
 
 fn add(x: &float, y: &uint) -> float { *x + ((*y) as float) }
 
-fn main() {
+pub fn main() {
     assert [1u, 3u].foldl(20f, add) == 24f;
     assert [].foldl(20f, add) == 20f;
     assert None.foldl(20f, add) == 20f;
diff --git a/src/test/run-pass/iter-map-to-vec.rs b/src/test/run-pass/iter-map-to-vec.rs
index ffd7afe923d..4277ce77762 100644
--- a/src/test/run-pass/iter-map-to-vec.rs
+++ b/src/test/run-pass/iter-map-to-vec.rs
@@ -10,7 +10,7 @@
 
 fn inc(x: &uint) -> uint { *x + 1 }
 
-fn main() {
+pub fn main() {
     assert [1, 3].map_to_vec(inc) == ~[2, 4];
     assert [1, 2, 3].map_to_vec(inc) == ~[2, 3, 4];
     assert None.map_to_vec(inc) == ~[];
diff --git a/src/test/run-pass/iter-min-max.rs b/src/test/run-pass/iter-min-max.rs
index 2b8023cb502..7c75d80bd0f 100644
--- a/src/test/run-pass/iter-min-max.rs
+++ b/src/test/run-pass/iter-min-max.rs
@@ -10,7 +10,7 @@
 
 fn is_even(&&x: uint) -> bool { (x % 2u) == 0u }
 
-fn main() {
+pub fn main() {
     assert [1u, 3u].min() == 1u;
     assert [3u, 1u].min() == 1u;
     assert Some(1u).min() == 1u;
diff --git a/src/test/run-pass/iter-range.rs b/src/test/run-pass/iter-range.rs
index 4754bf243b3..16f27db7bf2 100644
--- a/src/test/run-pass/iter-range.rs
+++ b/src/test/run-pass/iter-range.rs
@@ -16,7 +16,7 @@ fn range(a: int, b: int, it: fn(int)) {
     while i < b { it(i); i += 1; }
 }
 
-fn main() {
+pub fn main() {
     let mut sum: int = 0;
     range(0, 100, |x| sum += x );
     log(debug, sum);
diff --git a/src/test/run-pass/iter-to-vec.rs b/src/test/run-pass/iter-to-vec.rs
index dcac8c11e14..c613c688c9d 100644
--- a/src/test/run-pass/iter-to-vec.rs
+++ b/src/test/run-pass/iter-to-vec.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     assert [1u, 3u].to_vec() == ~[1u, 3u];
     let e: ~[uint] = ~[];
     assert e.to_vec() == ~[];
diff --git a/src/test/run-pass/ivec-add.rs b/src/test/run-pass/ivec-add.rs
index 814578f1a1c..f06185f3727 100644
--- a/src/test/run-pass/ivec-add.rs
+++ b/src/test/run-pass/ivec-add.rs
@@ -12,7 +12,7 @@ fn double<T: Copy>(a: T) -> ~[T] { return ~[a] + ~[a]; }
 
 fn double_int(a: int) -> ~[int] { return ~[a] + ~[a]; }
 
-fn main() {
+pub fn main() {
     let mut d = double(1);
     assert (d[0] == 1);
     assert (d[1] == 1);
diff --git a/src/test/run-pass/ivec-pass-by-value.rs b/src/test/run-pass/ivec-pass-by-value.rs
index 84d0a22cf7f..756f38196fd 100644
--- a/src/test/run-pass/ivec-pass-by-value.rs
+++ b/src/test/run-pass/ivec-pass-by-value.rs
@@ -9,5 +9,5 @@
 // except according to those terms.
 
 fn f(a: ~[int]) { }
-fn main() { f(~[1, 2, 3, 4, 5]); }
+pub fn main() { f(~[1, 2, 3, 4, 5]); }
 
diff --git a/src/test/run-pass/ivec-tag.rs b/src/test/run-pass/ivec-tag.rs
index b890160ea17..9971b098bb0 100644
--- a/src/test/run-pass/ivec-tag.rs
+++ b/src/test/run-pass/ivec-tag.rs
@@ -6,7 +6,7 @@ fn producer(c: &Chan<~[u8]>) {
           13u8]);
 }
 
-fn main() {
+pub fn main() {
     let (p, ch) = stream::<~[u8]>();
     let prod = task::spawn(|| producer(&ch) );
 
diff --git a/src/test/run-pass/keyword-changes-2012-07-31.rs b/src/test/run-pass/keyword-changes-2012-07-31.rs
index 7a8c3cdaa39..ff568b77f08 100644
--- a/src/test/run-pass/keyword-changes-2012-07-31.rs
+++ b/src/test/run-pass/keyword-changes-2012-07-31.rs
@@ -12,7 +12,7 @@
 // mod -> module
 // match -> match
 
-fn main() {
+pub fn main() {
 }
 
 mod foo {
diff --git a/src/test/run-pass/kindck-owned-trait-contains-1.rs b/src/test/run-pass/kindck-owned-trait-contains-1.rs
index 573aae94925..f87e55173ab 100644
--- a/src/test/run-pass/kindck-owned-trait-contains-1.rs
+++ b/src/test/run-pass/kindck-owned-trait-contains-1.rs
@@ -19,7 +19,7 @@ fn repeater<A:Copy>(v: @A) -> repeat<A> {
     v as repeat::<A> // No
 }
 
-fn main() {
+pub fn main() {
     let x = &3;
     let y = repeater(@x);
     assert *x == *(y.get());
diff --git a/src/test/run-pass/labeled-break.rs b/src/test/run-pass/labeled-break.rs
index a2af5764e8a..b26d8f78e64 100644
--- a/src/test/run-pass/labeled-break.rs
+++ b/src/test/run-pass/labeled-break.rs
@@ -11,7 +11,7 @@
 // xfail-fast
 // xfail-test
 
-fn main() {
+pub fn main() {
     loop foo: {
         loop {
             break foo;
diff --git a/src/test/run-pass/lambda-infer-unresolved.rs b/src/test/run-pass/lambda-infer-unresolved.rs
index 1e94f6af90f..e6c2ff28142 100644
--- a/src/test/run-pass/lambda-infer-unresolved.rs
+++ b/src/test/run-pass/lambda-infer-unresolved.rs
@@ -14,7 +14,7 @@
 
 struct Refs { mut refs: ~[int], n: int }
 
-fn main() {
+pub fn main() {
     let e = @Refs{mut refs: ~[], n: 0};
     let f = fn@ () { log(error, e.n); };
     e.refs += ~[1];
diff --git a/src/test/run-pass/lambda-no-leak.rs b/src/test/run-pass/lambda-no-leak.rs
index 9282509fe17..9868f026c65 100644
--- a/src/test/run-pass/lambda-no-leak.rs
+++ b/src/test/run-pass/lambda-no-leak.rs
@@ -10,7 +10,7 @@
 
 // Make sure we don't leak fn@s in silly ways.
 fn force(f: fn@()) { f() }
-fn main() {
+pub fn main() {
     let x = 7;
     let _f = fn@() { log(error, x); };
     force(fn@() { log(error, x); });
diff --git a/src/test/run-pass/large-records.rs b/src/test/run-pass/large-records.rs
index 21b68a07560..1ba5b10e9b7 100644
--- a/src/test/run-pass/large-records.rs
+++ b/src/test/run-pass/large-records.rs
@@ -41,4 +41,4 @@ fn f() {
          l: 0};
 }
 
-fn main() { f(); }
+pub fn main() { f(); }
diff --git a/src/test/run-pass/last-use-in-block.rs b/src/test/run-pass/last-use-in-block.rs
index 8ea06f9f0b1..77dfbe237e3 100644
--- a/src/test/run-pass/last-use-in-block.rs
+++ b/src/test/run-pass/last-use-in-block.rs
@@ -23,4 +23,4 @@ fn apply<T>(s: ~str, f: fn(~str) -> T) -> T {
     g(s, |v| { let r = f(v); move r })
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/last-use-in-cap-clause.rs b/src/test/run-pass/last-use-in-cap-clause.rs
index ee08b18de16..e8cb47b3738 100644
--- a/src/test/run-pass/last-use-in-cap-clause.rs
+++ b/src/test/run-pass/last-use-in-cap-clause.rs
@@ -18,6 +18,6 @@ fn foo() -> fn@() -> int {
     return fn@(move k) -> int { 22 };
 }
 
-fn main() {
+pub fn main() {
     assert foo()() == 22;
 }
diff --git a/src/test/run-pass/last-use-is-capture.rs b/src/test/run-pass/last-use-is-capture.rs
index 885b3a83da6..7f4551b9f39 100644
--- a/src/test/run-pass/last-use-is-capture.rs
+++ b/src/test/run-pass/last-use-is-capture.rs
@@ -12,7 +12,7 @@
 
 struct A { a: ~int }
 
-fn main() {
+pub fn main() {
     fn invoke(f: fn@()) { f(); }
     let k = ~22;
     let _u = A {a: copy k};
diff --git a/src/test/run-pass/lazy-and-or.rs b/src/test/run-pass/lazy-and-or.rs
index 3af7902ef57..258f4714cf8 100644
--- a/src/test/run-pass/lazy-and-or.rs
+++ b/src/test/run-pass/lazy-and-or.rs
@@ -12,7 +12,7 @@
 
 fn incr(x: &mut int) -> bool { *x += 1; assert (false); return false; }
 
-fn main() {
+pub fn main() {
     let x = 1 == 2 || 3 == 3;
     assert (x);
     let mut y: int = 10;
diff --git a/src/test/run-pass/lazy-init.rs b/src/test/run-pass/lazy-init.rs
index 662a4ddc61a..0ccecba58c0 100644
--- a/src/test/run-pass/lazy-init.rs
+++ b/src/test/run-pass/lazy-init.rs
@@ -12,4 +12,4 @@
 
 fn foo(x: int) { log(debug, x); }
 
-fn main() { let mut x: int; if 1 > 2 { x = 12; } else { x = 10; } foo(x); }
+pub fn main() { let mut x: int; if 1 > 2 { x = 12; } else { x = 10; } foo(x); }
diff --git a/src/test/run-pass/leak-box-as-tydesc.rs b/src/test/run-pass/leak-box-as-tydesc.rs
index 152818e395a..94bd54e5b7c 100644
--- a/src/test/run-pass/leak-box-as-tydesc.rs
+++ b/src/test/run-pass/leak-box-as-tydesc.rs
@@ -12,4 +12,4 @@
 
 fn leaky<T>(t: T) { }
 
-fn main() { let x = @10; leaky::<@int>(x); }
+pub fn main() { let x = @10; leaky::<@int>(x); }
diff --git a/src/test/run-pass/leak-tag-copy.rs b/src/test/run-pass/leak-tag-copy.rs
index 089febc49f1..05b8e361ae7 100644
--- a/src/test/run-pass/leak-tag-copy.rs
+++ b/src/test/run-pass/leak-tag-copy.rs
@@ -12,4 +12,4 @@
 
 enum t { a, b(@int), }
 
-fn main() { let mut x = b(@10); x = a; }
+pub fn main() { let mut x = b(@10); x = a; }
diff --git a/src/test/run-pass/leak-unique-as-tydesc.rs b/src/test/run-pass/leak-unique-as-tydesc.rs
index b58adde6a6e..98c092a68c9 100644
--- a/src/test/run-pass/leak-unique-as-tydesc.rs
+++ b/src/test/run-pass/leak-unique-as-tydesc.rs
@@ -12,4 +12,4 @@
 
 fn leaky<T>(t: T) { }
 
-fn main() { let x = ~10; leaky::<~int>(x); }
+pub fn main() { let x = ~10; leaky::<~int>(x); }
diff --git a/src/test/run-pass/let-assignability.rs b/src/test/run-pass/let-assignability.rs
index 453d556b13c..51fa84613ca 100644
--- a/src/test/run-pass/let-assignability.rs
+++ b/src/test/run-pass/let-assignability.rs
@@ -14,7 +14,7 @@ fn f() {
     io::println(b);
 }
 
-fn main() {
+pub fn main() {
     f();
 }
 
diff --git a/src/test/run-pass/let-destruct-fresh-mem.rs b/src/test/run-pass/let-destruct-fresh-mem.rs
index ba7fd4fee5e..caccd1ac15c 100644
--- a/src/test/run-pass/let-destruct-fresh-mem.rs
+++ b/src/test/run-pass/let-destruct-fresh-mem.rs
@@ -11,7 +11,7 @@
 struct X { x: int, y: @A }
 struct A { a: int }
 
-fn main() {
+pub fn main() {
     let u = X {x: 10, y: @A {a: 20}};
     let mut X {x: x, y: @A {a: a}} = u;
     x = 100;
diff --git a/src/test/run-pass/let-destruct.rs b/src/test/run-pass/let-destruct.rs
index be9c8bdf2d6..1a111135563 100644
--- a/src/test/run-pass/let-destruct.rs
+++ b/src/test/run-pass/let-destruct.rs
@@ -12,7 +12,7 @@ enum xx = int;
 
 struct X { x: xx, y: int }
 
-fn main() {
+pub fn main() {
     let @X {x: xx(x), y: y} = @X{x: xx(10), y: 20};
     assert (x + y == 30);
 }
diff --git a/src/test/run-pass/linear-for-loop.rs b/src/test/run-pass/linear-for-loop.rs
index 6abf9369645..bad813aef52 100644
--- a/src/test/run-pass/linear-for-loop.rs
+++ b/src/test/run-pass/linear-for-loop.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let x = ~[1, 2, 3];
     let mut y = 0;
     for x.each |i| { log(debug, *i); y += *i; }
diff --git a/src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs b/src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs
index 2aab96b3177..f51312bc257 100644
--- a/src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs
+++ b/src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs
@@ -13,4 +13,4 @@
 #[forbid(non_camel_case_types)]
 type Foo_ = int;
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/lint-structural-records.rs b/src/test/run-pass/lint-structural-records.rs
index 1ed4226155e..9a812b77cb8 100644
--- a/src/test/run-pass/lint-structural-records.rs
+++ b/src/test/run-pass/lint-structural-records.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 #[warn(structural_records)];
-fn main() {
+pub fn main() {
     let _foo = {x:5};
 }
\ No newline at end of file
diff --git a/src/test/run-pass/list.rs b/src/test/run-pass/list.rs
index 25402bf4878..b8a9d2ee9e3 100644
--- a/src/test/run-pass/list.rs
+++ b/src/test/run-pass/list.rs
@@ -14,4 +14,4 @@
 // -*- rust -*-
 enum list { cons(int, @list), nil, }
 
-fn main() { cons(10, @cons(11, @cons(12, @nil))); }
+pub fn main() { cons(10, @cons(11, @cons(12, @nil))); }
diff --git a/src/test/run-pass/liveness-assign-imm-local-after-loop.rs b/src/test/run-pass/liveness-assign-imm-local-after-loop.rs
index 570f5979bd7..f352a2b5273 100644
--- a/src/test/run-pass/liveness-assign-imm-local-after-loop.rs
+++ b/src/test/run-pass/liveness-assign-imm-local-after-loop.rs
@@ -15,6 +15,6 @@ fn test(cond: bool) {
     v = 2;
 }
 
-fn main() {
+pub fn main() {
 	// note: don't call test()... :)
 }
diff --git a/src/test/run-pass/liveness-assign-imm-local-after-ret.rs b/src/test/run-pass/liveness-assign-imm-local-after-ret.rs
index 5a2cac57130..e9c12277286 100644
--- a/src/test/run-pass/liveness-assign-imm-local-after-ret.rs
+++ b/src/test/run-pass/liveness-assign-imm-local-after-ret.rs
@@ -15,5 +15,5 @@ fn test() {
     _v = 2; //~ WARNING: unreachable statement
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/liveness-loop-break.rs b/src/test/run-pass/liveness-loop-break.rs
index 11c3c6e7eb1..7a379d10ff9 100644
--- a/src/test/run-pass/liveness-loop-break.rs
+++ b/src/test/run-pass/liveness-loop-break.rs
@@ -17,6 +17,6 @@ fn test() {
     debug!("%d", v);
 }
 
-fn main() {
+pub fn main() {
     test();
 }
diff --git a/src/test/run-pass/liveness-move-in-loop.rs b/src/test/run-pass/liveness-move-in-loop.rs
index 9c649fed87b..f8166e2443d 100644
--- a/src/test/run-pass/liveness-move-in-loop.rs
+++ b/src/test/run-pass/liveness-move-in-loop.rs
@@ -22,4 +22,4 @@ fn the_loop() {
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/log-degen-enum.rs b/src/test/run-pass/log-degen-enum.rs
index ba9a2e9a641..fc17ec96ea6 100644
--- a/src/test/run-pass/log-degen-enum.rs
+++ b/src/test/run-pass/log-degen-enum.rs
@@ -10,7 +10,7 @@
 
 enum Foo = uint;
 
-fn main() {
+pub fn main() {
     let x = Foo(1);
     let y = fmt!("%?", x);
     assert y == ~"Foo(1)";
diff --git a/src/test/run-pass/log-err-phi.rs b/src/test/run-pass/log-err-phi.rs
index c3e20b85840..df4f754ae7e 100644
--- a/src/test/run-pass/log-err-phi.rs
+++ b/src/test/run-pass/log-err-phi.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { if false { log(error, ~"foo" + ~"bar"); } }
+pub fn main() { if false { log(error, ~"foo" + ~"bar"); } }
diff --git a/src/test/run-pass/log-knows-the-names-of-variants-in-std.rs b/src/test/run-pass/log-knows-the-names-of-variants-in-std.rs
index af2fe623c44..46db3d32340 100644
--- a/src/test/run-pass/log-knows-the-names-of-variants-in-std.rs
+++ b/src/test/run-pass/log-knows-the-names-of-variants-in-std.rs
@@ -22,7 +22,7 @@ fn check_log<T>(exp: ~str, v: T) {
     assert exp == fmt!("%?", v);
 }
 
-fn main() {
+pub fn main() {
     let x = list::from_vec(~[a(22u), b(~"hi")]);
     let exp = ~"@Cons(a(22), @Cons(b(~\"hi\"), @Nil))";
     let act = fmt!("%?", x);
diff --git a/src/test/run-pass/log-knows-the-names-of-variants.rs b/src/test/run-pass/log-knows-the-names-of-variants.rs
index 0b9d07b1948..dcf11afbc17 100644
--- a/src/test/run-pass/log-knows-the-names-of-variants.rs
+++ b/src/test/run-pass/log-knows-the-names-of-variants.rs
@@ -18,7 +18,7 @@ enum bar {
   d, e, f
 }
 
-fn main() {
+pub fn main() {
     assert ~"a(22)" == fmt!("%?", a(22u));
     assert ~"b(~\"hi\")" == fmt!("%?", b(~"hi"));
     assert ~"c" == fmt!("%?", c);
diff --git a/src/test/run-pass/log-linearized.rs b/src/test/run-pass/log-linearized.rs
index 73e16085c4e..28163fef8b4 100644
--- a/src/test/run-pass/log-linearized.rs
+++ b/src/test/run-pass/log-linearized.rs
@@ -29,7 +29,7 @@ fn f<T,U>() {
     log(error, sim);
 }
 
-fn main() {
+pub fn main() {
     f::<int,int>();
 }
 
diff --git a/src/test/run-pass/log-str.rs b/src/test/run-pass/log-str.rs
index 64616f26c88..3774253b59b 100644
--- a/src/test/run-pass/log-str.rs
+++ b/src/test/run-pass/log-str.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let act = sys::log_str(&~[1, 2, 3]);
     assert ~"~[1, 2, 3]" == act;
 
diff --git a/src/test/run-pass/long-while.rs b/src/test/run-pass/long-while.rs
index 27dc8b494b1..3e4a33981d9 100644
--- a/src/test/run-pass/long-while.rs
+++ b/src/test/run-pass/long-while.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let mut i: int = 0; while i < 1000000 { i += 1; let x = 3; } }
+pub fn main() { let mut i: int = 0; while i < 1000000 { i += 1; let x = 3; } }
diff --git a/src/test/run-pass/loop-break-cont-1.rs b/src/test/run-pass/loop-break-cont-1.rs
index f04fe4c87f4..1634f36df53 100644
--- a/src/test/run-pass/loop-break-cont-1.rs
+++ b/src/test/run-pass/loop-break-cont-1.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
   let i = 0u;
   loop {
     break;
diff --git a/src/test/run-pass/loop-break-cont.rs b/src/test/run-pass/loop-break-cont.rs
index 0035cb15b71..3be3d5f7585 100644
--- a/src/test/run-pass/loop-break-cont.rs
+++ b/src/test/run-pass/loop-break-cont.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
   let mut i = 0u;
   loop {
     log(error, ~"a");
diff --git a/src/test/run-pass/loop-diverges.rs b/src/test/run-pass/loop-diverges.rs
index 63ccf383e15..27838fe642a 100644
--- a/src/test/run-pass/loop-diverges.rs
+++ b/src/test/run-pass/loop-diverges.rs
@@ -15,6 +15,6 @@ fn forever() -> ! {
   loop{}
 }
 
-fn main() {
+pub fn main() {
   if (1 == 2) { forever(); }
 }
\ No newline at end of file
diff --git a/src/test/run-pass/loop-scope.rs b/src/test/run-pass/loop-scope.rs
index 0f0582940fa..df5b55268a1 100644
--- a/src/test/run-pass/loop-scope.rs
+++ b/src/test/run-pass/loop-scope.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = ~[10, 20, 30];
     let mut sum = 0;
     for x.each |x| { sum += *x; }
diff --git a/src/test/run-pass/lots-a-fail.rs b/src/test/run-pass/lots-a-fail.rs
index 166639da5df..41c3516bef2 100644
--- a/src/test/run-pass/lots-a-fail.rs
+++ b/src/test/run-pass/lots-a-fail.rs
@@ -19,7 +19,7 @@ fn iloop() {
     task::spawn(|| die() );
 }
 
-fn main() {
+pub fn main() {
     for uint::range(0u, 100u) |_i| {
         task::spawn_unlinked(|| iloop() );
     }
diff --git a/src/test/run-pass/macro-2.rs b/src/test/run-pass/macro-2.rs
index 79690e5061a..c280423190f 100644
--- a/src/test/run-pass/macro-2.rs
+++ b/src/test/run-pass/macro-2.rs
@@ -10,7 +10,7 @@
 
 // xfail-pretty - token trees can't pretty print
 
-fn main() {
+pub fn main() {
 
     macro_rules! mylambda_tt(
         ($x:ident, $body:expr) => ({
diff --git a/src/test/run-pass/macro-interpolation.rs b/src/test/run-pass/macro-interpolation.rs
index dd620b5ae39..4bb87ab0cca 100644
--- a/src/test/run-pass/macro-interpolation.rs
+++ b/src/test/run-pass/macro-interpolation.rs
@@ -22,7 +22,7 @@ macro_rules! overly_complicated (
     })
 
 )
-fn main() {
+pub fn main() {
     assert overly_complicated!(f, x, Option<uint>, { return Some(x); },
                                Some(8u), Some(y), y) == 8u
 
diff --git a/src/test/run-pass/macro-path.rs b/src/test/run-pass/macro-path.rs
index 6b59ff66709..a721f8c9469 100644
--- a/src/test/run-pass/macro-path.rs
+++ b/src/test/run-pass/macro-path.rs
@@ -19,6 +19,6 @@ macro_rules! foo {
     })
 }
 
-fn main() {
+pub fn main() {
     assert foo!(m::t) == 10;
 }
diff --git a/src/test/run-pass/macro-stmt.rs b/src/test/run-pass/macro-stmt.rs
index dfaaf0e54d3..b4b0d3d0a22 100644
--- a/src/test/run-pass/macro-stmt.rs
+++ b/src/test/run-pass/macro-stmt.rs
@@ -18,7 +18,7 @@ macro_rules! myfn(
 
 myfn!(add, (a,b), { return a+b; } )
 
-fn main() {
+pub fn main() {
 
     macro_rules! mylet(
         ($x:ident, $val:expr) => (
diff --git a/src/test/run-pass/max-min-classes.rs b/src/test/run-pass/max-min-classes.rs
index 816fe99c2d8..7247afeacd6 100644
--- a/src/test/run-pass/max-min-classes.rs
+++ b/src/test/run-pass/max-min-classes.rs
@@ -33,7 +33,7 @@ fn Foo(x: int, y: int) -> Foo {
     Foo { x: x, y: y }
 }
 
-fn main() {
+pub fn main() {
     let foo = Foo(3, 20);
     io::println(fmt!("%d %d", foo.sum(), foo.product()));
 }
diff --git a/src/test/run-pass/maybe-mutable.rs b/src/test/run-pass/maybe-mutable.rs
index f18d201f5ab..700923eb829 100644
--- a/src/test/run-pass/maybe-mutable.rs
+++ b/src/test/run-pass/maybe-mutable.rs
@@ -18,7 +18,7 @@ fn len(v: ~[const int]) -> uint {
     return i;
 }
 
-fn main() {
+pub fn main() {
     let v0 = ~[1, 2, 3, 4, 5];
     log(debug, len(v0));
     let v1 = ~[mut 1, 2, 3, 4, 5];
diff --git a/src/test/run-pass/method-attributes.rs b/src/test/run-pass/method-attributes.rs
index ed911abdb46..e3d4a2aff9f 100644
--- a/src/test/run-pass/method-attributes.rs
+++ b/src/test/run-pass/method-attributes.rs
@@ -31,4 +31,4 @@ impl int: frobable {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/mlist-cycle.rs b/src/test/run-pass/mlist-cycle.rs
index 7dd2fc99ad3..537ce1bb218 100644
--- a/src/test/run-pass/mlist-cycle.rs
+++ b/src/test/run-pass/mlist-cycle.rs
@@ -16,7 +16,7 @@ type cell = {mut c: @list};
 
 enum list { link(@cell), nil, }
 
-fn main() {
+pub fn main() {
     let first: @cell = @{mut c: @nil()};
     let second: @cell = @{mut c: @link(first)};
     first._0 = @link(second);
diff --git a/src/test/run-pass/mlist.rs b/src/test/run-pass/mlist.rs
index 45f03d751b7..cfb1db49465 100644
--- a/src/test/run-pass/mlist.rs
+++ b/src/test/run-pass/mlist.rs
@@ -11,4 +11,4 @@
 
 enum mlist { cons(int, @mlist), nil, }
 
-fn main() { cons(10, @cons(11, @cons(12, @nil))); }
+pub fn main() { cons(10, @cons(11, @cons(12, @nil))); }
diff --git a/src/test/run-pass/mod-inside-fn.rs b/src/test/run-pass/mod-inside-fn.rs
index 79b43173228..75dd2af9943 100644
--- a/src/test/run-pass/mod-inside-fn.rs
+++ b/src/test/run-pass/mod-inside-fn.rs
@@ -16,6 +16,6 @@ fn f() -> int {
     m::g()
 }
 
-fn main() {
+pub fn main() {
     assert f() == 720;
 }
diff --git a/src/test/run-pass/mod-merge-hack.rs b/src/test/run-pass/mod-merge-hack.rs
index 471c0602cd4..20df4978508 100644
--- a/src/test/run-pass/mod-merge-hack.rs
+++ b/src/test/run-pass/mod-merge-hack.rs
@@ -13,7 +13,7 @@
 #[merge = "mod-merge-hack-inst.rs"]
 mod myint32;
 
-fn main() {
+pub fn main() {
     assert myint32::bits == 32;
     assert myint32::min(10, 20) == 10;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/mod-view-items.rs b/src/test/run-pass/mod-view-items.rs
index fdb1d01727a..7dbcb72f1ea 100644
--- a/src/test/run-pass/mod-view-items.rs
+++ b/src/test/run-pass/mod-view-items.rs
@@ -21,4 +21,4 @@ mod m {
     pub fn f() -> ~[int] { vec::from_elem(1u, 0) }
 }
 
-fn main() { let x = m::f(); }
+pub fn main() { let x = m::f(); }
diff --git a/src/test/run-pass/mod_dir_path.rs b/src/test/run-pass/mod_dir_path.rs
index dd422ecda85..a79115a6fb8 100644
--- a/src/test/run-pass/mod_dir_path.rs
+++ b/src/test/run-pass/mod_dir_path.rs
@@ -16,6 +16,6 @@ mod mod_dir_simple {
     pub mod syrup;
 }
 
-fn main() {
+pub fn main() {
     assert mod_dir_simple::syrup::foo() == 10;
 }
diff --git a/src/test/run-pass/mod_dir_path2.rs b/src/test/run-pass/mod_dir_path2.rs
index a47ff1153ea..0d3ed8b2b0b 100644
--- a/src/test/run-pass/mod_dir_path2.rs
+++ b/src/test/run-pass/mod_dir_path2.rs
@@ -17,6 +17,6 @@ mod pancakes {
     pub mod syrup;
 }
 
-fn main() {
+pub fn main() {
     assert pancakes::syrup::foo() == 10;
 }
diff --git a/src/test/run-pass/mod_dir_path3.rs b/src/test/run-pass/mod_dir_path3.rs
index 64e3a9e8277..06c9e507d2f 100644
--- a/src/test/run-pass/mod_dir_path3.rs
+++ b/src/test/run-pass/mod_dir_path3.rs
@@ -16,6 +16,6 @@ mod pancakes {
     pub mod test;
 }
 
-fn main() {
+pub fn main() {
     assert pancakes::test::foo() == 10;
 }
diff --git a/src/test/run-pass/mod_dir_path_multi.rs b/src/test/run-pass/mod_dir_path_multi.rs
index 6a50d479e06..43f94303863 100644
--- a/src/test/run-pass/mod_dir_path_multi.rs
+++ b/src/test/run-pass/mod_dir_path_multi.rs
@@ -21,7 +21,7 @@ mod gravy {
     pub mod test;
 }
 
-fn main() {
+pub fn main() {
     assert biscuits::test::foo() == 10;
     assert gravy::test::foo() == 10;
 }
diff --git a/src/test/run-pass/mod_dir_recursive.rs b/src/test/run-pass/mod_dir_recursive.rs
index b95852f3a31..4377334309f 100644
--- a/src/test/run-pass/mod_dir_recursive.rs
+++ b/src/test/run-pass/mod_dir_recursive.rs
@@ -19,6 +19,6 @@ mod mod_dir_simple {
     pub mod load_another_mod;
 }
 
-fn main() {
+pub fn main() {
     assert mod_dir_simple::load_another_mod::test::foo() == 10;
 }
diff --git a/src/test/run-pass/mod_dir_simple.rs b/src/test/run-pass/mod_dir_simple.rs
index 7f07982a65b..9303d8184e0 100644
--- a/src/test/run-pass/mod_dir_simple.rs
+++ b/src/test/run-pass/mod_dir_simple.rs
@@ -15,6 +15,6 @@ mod mod_dir_simple {
     pub mod test;
 }
 
-fn main() {
+pub fn main() {
     assert mod_dir_simple::test::foo() == 10;
 }
diff --git a/src/test/run-pass/mod_file.rs b/src/test/run-pass/mod_file.rs
index 962c47df384..1fedf0c7874 100644
--- a/src/test/run-pass/mod_file.rs
+++ b/src/test/run-pass/mod_file.rs
@@ -14,6 +14,6 @@
 
 mod mod_file_aux;
 
-fn main() {
+pub fn main() {
     assert mod_file_aux::foo() == 10;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/mod_file_with_path_attr.rs b/src/test/run-pass/mod_file_with_path_attr.rs
index 5b03e5dc3aa..b7172a3d50c 100644
--- a/src/test/run-pass/mod_file_with_path_attr.rs
+++ b/src/test/run-pass/mod_file_with_path_attr.rs
@@ -15,6 +15,6 @@
 #[path = "mod_file_aux.rs"]
 mod m;
 
-fn main() {
+pub fn main() {
     assert m::foo() == 10;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/module-qualified-struct-destructure.rs b/src/test/run-pass/module-qualified-struct-destructure.rs
index be0b9e85ff0..6fb6d21f13f 100644
--- a/src/test/run-pass/module-qualified-struct-destructure.rs
+++ b/src/test/run-pass/module-qualified-struct-destructure.rs
@@ -15,7 +15,7 @@ mod m {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = m::S { x: 1, y: 2 };
     let m::S { x: a, y: b } = x;
 }
diff --git a/src/test/run-pass/monad.rs b/src/test/run-pass/monad.rs
index 210defa5789..b5c6d835374 100644
--- a/src/test/run-pass/monad.rs
+++ b/src/test/run-pass/monad.rs
@@ -40,7 +40,7 @@ fn transform(x: Option<int>) -> Option<~str> {
     x.bind(|n| Some(n + 1) ).bind(|n| Some(int::str(n)) )
 }
 
-fn main() {
+pub fn main() {
     assert transform(Some(10)) == Some(~"11");
     assert transform(None) == None;
     assert (~[~"hi"])
diff --git a/src/test/run-pass/monomorphize-trait-in-fn-at.rs b/src/test/run-pass/monomorphize-trait-in-fn-at.rs
index bdb5aac439e..bce5bb9cade 100644
--- a/src/test/run-pass/monomorphize-trait-in-fn-at.rs
+++ b/src/test/run-pass/monomorphize-trait-in-fn-at.rs
@@ -24,7 +24,7 @@ impl (): ty_ops {
     fn mk() -> uint { 22u }
 }
 
-fn main() {
+pub fn main() {
     let fn_env = fn@() -> uint {
         mk_nil(())
     };
diff --git a/src/test/run-pass/monomorphized-callees-with-ty-params-3314.rs b/src/test/run-pass/monomorphized-callees-with-ty-params-3314.rs
index f020449e567..72933f18d6f 100644
--- a/src/test/run-pass/monomorphized-callees-with-ty-params-3314.rs
+++ b/src/test/run-pass/monomorphized-callees-with-ty-params-3314.rs
@@ -32,7 +32,7 @@ impl<A: Copy Serializable> F<A>: Serializable {
 impl io::Writer: Serializer {
 }
 
-fn main() {
+pub fn main() {
     do io::with_str_writer |wr| {
         let foo = F { a: 1 };
         foo.serialize(wr);
diff --git a/src/test/run-pass/morestack-address.rs b/src/test/run-pass/morestack-address.rs
index 609d7d57011..f33af8abd57 100644
--- a/src/test/run-pass/morestack-address.rs
+++ b/src/test/run-pass/morestack-address.rs
@@ -14,7 +14,7 @@ extern mod rusti {
     pub fn morestack_addr() -> *();
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let addr = rusti::morestack_addr();
         assert addr.is_not_null();
diff --git a/src/test/run-pass/morestack1.rs b/src/test/run-pass/morestack1.rs
index 5e93a2a88c3..c31dae404c6 100644
--- a/src/test/run-pass/morestack1.rs
+++ b/src/test/run-pass/morestack1.rs
@@ -14,6 +14,6 @@ fn getbig(i: int) {
     }
 }
 
-fn main() {
+pub fn main() {
     getbig(100000);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/morestack2.rs b/src/test/run-pass/morestack2.rs
index 03288711bb2..5b2c016d44b 100644
--- a/src/test/run-pass/morestack2.rs
+++ b/src/test/run-pass/morestack2.rs
@@ -19,6 +19,6 @@ fn getbig(i: int) -> int {
     m
 }
 
-fn main() {
+pub fn main() {
     getbig(10000);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/morestack3.rs b/src/test/run-pass/morestack3.rs
index a6317980b65..717536a2fbc 100644
--- a/src/test/run-pass/morestack3.rs
+++ b/src/test/run-pass/morestack3.rs
@@ -46,7 +46,7 @@ fn getbig(a0: int,
     return a0;
 }
 
-fn main() {
+pub fn main() {
     let a = 10000;
     getbig(a, a+1, a+2, a+3, a+4, a+5, a+6, a+7, a+8, a+9);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/morestack4.rs b/src/test/run-pass/morestack4.rs
index 35b2993ca33..8f9a2575412 100644
--- a/src/test/run-pass/morestack4.rs
+++ b/src/test/run-pass/morestack4.rs
@@ -61,7 +61,7 @@ fn getbig(i: Biggy) {
     }
 }
 
-fn main() {
+pub fn main() {
     getbig(Biggy {
         a00: 10000u64,
         a01: 10000u64,
diff --git a/src/test/run-pass/morestack5.rs b/src/test/run-pass/morestack5.rs
index 4652ad3edfc..c0407b6e786 100644
--- a/src/test/run-pass/morestack5.rs
+++ b/src/test/run-pass/morestack5.rs
@@ -18,7 +18,7 @@ fn getbig(&&i: int) {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut sz = 400u;
     while sz < 500u {
         task::try(|| getbig(200) );
diff --git a/src/test/run-pass/morestack6.rs b/src/test/run-pass/morestack6.rs
index 352fe3e129d..4a254f6a7eb 100644
--- a/src/test/run-pass/morestack6.rs
+++ b/src/test/run-pass/morestack6.rs
@@ -53,7 +53,7 @@ fn runtest2(f: fn~(), frame_backoff: u32, last_stk: *u8) -> u32 {
     }
 }
 
-fn main() {
+pub fn main() {
     let fns = ~[
         calllink01,
         calllink02,
diff --git a/src/test/run-pass/move-1-unique.rs b/src/test/run-pass/move-1-unique.rs
index c5d7e9783e4..380c969fa1c 100644
--- a/src/test/run-pass/move-1-unique.rs
+++ b/src/test/run-pass/move-1-unique.rs
@@ -17,7 +17,7 @@ fn test(x: bool, foo: ~Triple) -> int {
     return y.y;
 }
 
-fn main() {
+pub fn main() {
     let x = ~Triple{x: 1, y: 2, z: 3};
     assert (test(true, copy x) == 2);
     assert (test(true, copy x) == 2);
diff --git a/src/test/run-pass/move-1.rs b/src/test/run-pass/move-1.rs
index 4c7e5682a13..ea6dc94bb8e 100644
--- a/src/test/run-pass/move-1.rs
+++ b/src/test/run-pass/move-1.rs
@@ -17,7 +17,7 @@ fn test(x: bool, foo: @Triple) -> int {
     return y.y;
 }
 
-fn main() {
+pub fn main() {
     let x = @Triple {x: 1, y: 2, z: 3};
     assert (test(true, x) == 2);
     assert (test(true, x) == 2);
diff --git a/src/test/run-pass/move-2-unique.rs b/src/test/run-pass/move-2-unique.rs
index 096daf315eb..133837089b8 100644
--- a/src/test/run-pass/move-2-unique.rs
+++ b/src/test/run-pass/move-2-unique.rs
@@ -11,4 +11,4 @@
 
 struct X { x: int, y: int, z: int }
 
-fn main() { let x = ~X{x: 1, y: 2, z: 3}; let y = move x; assert (y.y == 2); }
+pub fn main() { let x = ~X{x: 1, y: 2, z: 3}; let y = move x; assert (y.y == 2); }
diff --git a/src/test/run-pass/move-2.rs b/src/test/run-pass/move-2.rs
index 23746c924ad..f2b534765cf 100644
--- a/src/test/run-pass/move-2.rs
+++ b/src/test/run-pass/move-2.rs
@@ -11,4 +11,4 @@
 
 struct X { x: int, y: int, z: int }
 
-fn main() { let x = @X {x: 1, y: 2, z: 3}; let y = move x; assert (y.y == 2); }
+pub fn main() { let x = @X {x: 1, y: 2, z: 3}; let y = move x; assert (y.y == 2); }
diff --git a/src/test/run-pass/move-3-unique.rs b/src/test/run-pass/move-3-unique.rs
index 5bf5654320a..40d8f9a9bce 100644
--- a/src/test/run-pass/move-3-unique.rs
+++ b/src/test/run-pass/move-3-unique.rs
@@ -19,7 +19,7 @@ fn test(x: bool, foo: ~Triple) -> int {
     return y.y;
 }
 
-fn main() {
+pub fn main() {
     let x = ~Triple{x: 1, y: 2, z: 3};
     for uint::range(0u, 10000u) |_i| {
         assert (test(true, copy x) == 2);
diff --git a/src/test/run-pass/move-3.rs b/src/test/run-pass/move-3.rs
index 80de11091ee..0e57d0f6126 100644
--- a/src/test/run-pass/move-3.rs
+++ b/src/test/run-pass/move-3.rs
@@ -19,7 +19,7 @@ fn test(x: bool, foo: @Triple) -> int {
     return y.y;
 }
 
-fn main() {
+pub fn main() {
     let x = @Triple{x: 1, y: 2, z: 3};
     for uint::range(0u, 10000u) |i| {
         assert (test(true, x) == 2);
diff --git a/src/test/run-pass/move-4-unique.rs b/src/test/run-pass/move-4-unique.rs
index 0c2ce79e6aa..7b7b816aeb2 100644
--- a/src/test/run-pass/move-4-unique.rs
+++ b/src/test/run-pass/move-4-unique.rs
@@ -20,4 +20,4 @@ fn test(foo: ~Triple) -> ~Triple {
     return quux;
 }
 
-fn main() { let x = ~Triple{a: 1, b: 2, c: 3}; let y = test(x); assert (y.c == 3); }
+pub fn main() { let x = ~Triple{a: 1, b: 2, c: 3}; let y = test(x); assert (y.c == 3); }
diff --git a/src/test/run-pass/move-4.rs b/src/test/run-pass/move-4.rs
index 351b78807b8..cdb48b43b35 100644
--- a/src/test/run-pass/move-4.rs
+++ b/src/test/run-pass/move-4.rs
@@ -21,7 +21,7 @@ fn test(foo: @Triple) -> @Triple {
     return quux;
 }
 
-fn main() {
+pub fn main() {
     let x = @Triple{a: 1, b: 2, c: 3};
     let y = test(x);
     assert (y.c == 3);
diff --git a/src/test/run-pass/move-arg-2-unique.rs b/src/test/run-pass/move-arg-2-unique.rs
index ac2f60900d6..e6a3670804b 100644
--- a/src/test/run-pass/move-arg-2-unique.rs
+++ b/src/test/run-pass/move-arg-2-unique.rs
@@ -10,7 +10,7 @@
 
 fn test(-foo: ~~[int]) { assert (foo[0] == 10); }
 
-fn main() {
+pub fn main() {
     let x = ~~[10];
     // Test forgetting a local by move-in
     test(move x);
diff --git a/src/test/run-pass/move-arg-2.rs b/src/test/run-pass/move-arg-2.rs
index b66e251dc43..09dc47ab50e 100644
--- a/src/test/run-pass/move-arg-2.rs
+++ b/src/test/run-pass/move-arg-2.rs
@@ -10,7 +10,7 @@
 
 fn test(-foo: @~[int]) { assert (foo[0] == 10); }
 
-fn main() {
+pub fn main() {
     let x = @~[10];
     // Test forgetting a local by move-in
     test(move x);
diff --git a/src/test/run-pass/move-arg.rs b/src/test/run-pass/move-arg.rs
index 8187b59da3b..8e65981ebdf 100644
--- a/src/test/run-pass/move-arg.rs
+++ b/src/test/run-pass/move-arg.rs
@@ -10,4 +10,4 @@
 
 fn test(-foo: int) { assert (foo == 10); }
 
-fn main() { let x = 10; test(move x); }
+pub fn main() { let x = 10; test(move x); }
diff --git a/src/test/run-pass/move-nullary-fn.rs b/src/test/run-pass/move-nullary-fn.rs
index 854a00c37d6..77d4d2ccb36 100644
--- a/src/test/run-pass/move-nullary-fn.rs
+++ b/src/test/run-pass/move-nullary-fn.rs
@@ -15,6 +15,6 @@ fn f(-thing: fn@()) {
     f2(move thing);
 }
 
-fn main() {
+pub fn main() {
     f(fn@() {});
 }
\ No newline at end of file
diff --git a/src/test/run-pass/move-scalar.rs b/src/test/run-pass/move-scalar.rs
index c2f6466d4c6..533543ad138 100644
--- a/src/test/run-pass/move-scalar.rs
+++ b/src/test/run-pass/move-scalar.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
 
     let y: int = 42;
     let mut x: int;
diff --git a/src/test/run-pass/move-self.rs b/src/test/run-pass/move-self.rs
index 5598839e31d..170dd520ed6 100644
--- a/src/test/run-pass/move-self.rs
+++ b/src/test/run-pass/move-self.rs
@@ -12,7 +12,7 @@ impl S {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = S { x: ~"Hello!" };
     x.foo();
 }
diff --git a/src/test/run-pass/moves-based-on-type-capture-clause.rs b/src/test/run-pass/moves-based-on-type-capture-clause.rs
index 206d45b74fa..2f427ca48aa 100644
--- a/src/test/run-pass/moves-based-on-type-capture-clause.rs
+++ b/src/test/run-pass/moves-based-on-type-capture-clause.rs
@@ -1,4 +1,4 @@
-fn main() {
+pub fn main() {
     let x = ~"Hello world!";
     do task::spawn {
         io::println(x);
diff --git a/src/test/run-pass/moves-based-on-type-cross-crate.rs b/src/test/run-pass/moves-based-on-type-cross-crate.rs
index b2a5f7750dd..11038699a10 100644
--- a/src/test/run-pass/moves-based-on-type-cross-crate.rs
+++ b/src/test/run-pass/moves-based-on-type-cross-crate.rs
@@ -14,6 +14,6 @@
 extern mod moves_based_on_type_lib;
 use moves_based_on_type_lib::f;
 
-fn main() {
+pub fn main() {
     f();
 }
diff --git a/src/test/run-pass/multi-let.rs b/src/test/run-pass/multi-let.rs
index 06159a796d4..332e104ed77 100644
--- a/src/test/run-pass/multi-let.rs
+++ b/src/test/run-pass/multi-let.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let x = 10, y = x; assert (y == 10); }
+pub fn main() { let x = 10, y = x; assert (y == 10); }
diff --git a/src/test/run-pass/multiline-comment.rs b/src/test/run-pass/multiline-comment.rs
index 993dea560cf..08fd933a142 100644
--- a/src/test/run-pass/multiline-comment.rs
+++ b/src/test/run-pass/multiline-comment.rs
@@ -13,4 +13,4 @@
 /*
  * This is a multi-line oldcomment.
  */
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/multiple-trait-bounds.rs b/src/test/run-pass/multiple-trait-bounds.rs
index e64b51888ef..3c6559b9c0d 100644
--- a/src/test/run-pass/multiple-trait-bounds.rs
+++ b/src/test/run-pass/multiple-trait-bounds.rs
@@ -1,7 +1,7 @@
 fn f<T:Eq + Ord>(_: T) {
 }
 
-fn main() {
+pub fn main() {
     f(3);
 }
 
diff --git a/src/test/run-pass/mut-function-arguments.rs b/src/test/run-pass/mut-function-arguments.rs
index b125db6f79c..ffa18e040e7 100644
--- a/src/test/run-pass/mut-function-arguments.rs
+++ b/src/test/run-pass/mut-function-arguments.rs
@@ -20,7 +20,7 @@ fn g() {
 
 }
 
-fn main() {
+pub fn main() {
     let z = ~17;
     f(z);
     g();
diff --git a/src/test/run-pass/mut-vstore-expr.rs b/src/test/run-pass/mut-vstore-expr.rs
index e8d26e84f46..0ababc43c3f 100644
--- a/src/test/run-pass/mut-vstore-expr.rs
+++ b/src/test/run-pass/mut-vstore-expr.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x: &mut [int] = &mut [ 1, 2, 3 ];
 }
 
diff --git a/src/test/run-pass/mutability-inherits-through-fixed-length-vec.rs b/src/test/run-pass/mutability-inherits-through-fixed-length-vec.rs
index 05b2aef8623..4acc052a732 100644
--- a/src/test/run-pass/mutability-inherits-through-fixed-length-vec.rs
+++ b/src/test/run-pass/mutability-inherits-through-fixed-length-vec.rs
@@ -20,7 +20,7 @@ fn test2() {
     for ints.each |i| { assert *i == 22; }
 }
 
-fn main() {
+pub fn main() {
     test1();
     test2();
 }
diff --git a/src/test/run-pass/mutable-alias-vec.rs b/src/test/run-pass/mutable-alias-vec.rs
index c7ebe4ad81c..b82bd82ea6b 100644
--- a/src/test/run-pass/mutable-alias-vec.rs
+++ b/src/test/run-pass/mutable-alias-vec.rs
@@ -15,7 +15,7 @@ extern mod std;
 
 fn grow(v: &mut ~[int]) { *v += ~[1]; }
 
-fn main() {
+pub fn main() {
     let mut v: ~[int] = ~[];
     grow(&mut v);
     grow(&mut v);
diff --git a/src/test/run-pass/mutable-huh-variance-vec1.rs b/src/test/run-pass/mutable-huh-variance-vec1.rs
index 6ada02ee537..8db2705de2b 100644
--- a/src/test/run-pass/mutable-huh-variance-vec1.rs
+++ b/src/test/run-pass/mutable-huh-variance-vec1.rs
@@ -10,7 +10,7 @@
 
 // error-pattern: mismatched types
 
-fn main() {
+pub fn main() {
     let v = ~[~[0]];
 
     // This is ok because the outer vec is covariant with respect
diff --git a/src/test/run-pass/mutable-huh-variance-vec2.rs b/src/test/run-pass/mutable-huh-variance-vec2.rs
index b58404a40f0..7c48744000d 100644
--- a/src/test/run-pass/mutable-huh-variance-vec2.rs
+++ b/src/test/run-pass/mutable-huh-variance-vec2.rs
@@ -10,7 +10,7 @@
 
 // error-pattern: mismatched types
 
-fn main() {
+pub fn main() {
     let v = ~[~[0]];
 
     // This is ok because the outer vec is covariant with respect
diff --git a/src/test/run-pass/mutable-vec-drop.rs b/src/test/run-pass/mutable-vec-drop.rs
index f774e421348..63550aacb8d 100644
--- a/src/test/run-pass/mutable-vec-drop.rs
+++ b/src/test/run-pass/mutable-vec-drop.rs
@@ -11,7 +11,7 @@
 
 struct Pair { a: int, b: int}
 
-fn main() {
+pub fn main() {
     // This just tests whether the vec leaks its members.
     let pvec: ~[mut @Pair] =
         ~[mut @Pair{a: 1, b: 2}, @Pair{a: 3, b: 4}, @Pair{a: 5, b: 6}];
diff --git a/src/test/run-pass/mutual-recursion-group.rs b/src/test/run-pass/mutual-recursion-group.rs
index c7da25eae3f..cf007e99d38 100644
--- a/src/test/run-pass/mutual-recursion-group.rs
+++ b/src/test/run-pass/mutual-recursion-group.rs
@@ -20,4 +20,4 @@ enum list { cons(@tree, @list), nil, }
 
 enum small_list { kons(int, @small_list), neel, }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/negative.rs b/src/test/run-pass/negative.rs
index 4d2949ab217..5b80a746260 100644
--- a/src/test/run-pass/negative.rs
+++ b/src/test/run-pass/negative.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     match -5 {
       -5 => {}
       _ => { die!() }
diff --git a/src/test/run-pass/nested-alts.rs b/src/test/run-pass/nested-alts.rs
index 38fb1f4d2d0..f3b667209a0 100644
--- a/src/test/run-pass/nested-alts.rs
+++ b/src/test/run-pass/nested-alts.rs
@@ -22,4 +22,4 @@ fn foo() {
     }
 }
 
-fn main() { foo(); }
+pub fn main() { foo(); }
diff --git a/src/test/run-pass/nested-class.rs b/src/test/run-pass/nested-class.rs
index 3b02a20db80..a753ec4b68b 100644
--- a/src/test/run-pass/nested-class.rs
+++ b/src/test/run-pass/nested-class.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
   
   struct b {
     i: int,
diff --git a/src/test/run-pass/nested-exhaustive-alt.rs b/src/test/run-pass/nested-exhaustive-alt.rs
index c6eb91c564d..e5ecd82be1d 100644
--- a/src/test/run-pass/nested-exhaustive-alt.rs
+++ b/src/test/run-pass/nested-exhaustive-alt.rs
@@ -10,7 +10,7 @@
 
 struct Foo { foo: bool, bar: Option<int>, baz: int }
 
-fn main() {
+pub fn main() {
     match @Foo{foo: true, bar: Some(10), baz: 20} {
       @Foo{foo: true, bar: Some(_), _} => {}
       @Foo{foo: false, bar: None, _} => {}
diff --git a/src/test/run-pass/nested-pattern.rs b/src/test/run-pass/nested-pattern.rs
index 3799fd106ee..470aa43d1ad 100644
--- a/src/test/run-pass/nested-pattern.rs
+++ b/src/test/run-pass/nested-pattern.rs
@@ -21,4 +21,4 @@ fn nested(o: t) {
     }
 }
 
-fn main() { nested(bar(1, None::<int>)); }
+pub fn main() { nested(bar(1, None::<int>)); }
diff --git a/src/test/run-pass/nested-patterns.rs b/src/test/run-pass/nested-patterns.rs
index c9d4682209c..c4cc1519735 100644
--- a/src/test/run-pass/nested-patterns.rs
+++ b/src/test/run-pass/nested-patterns.rs
@@ -13,7 +13,7 @@ struct B { a: int, b: C }
 struct D { a: int, d: C }
 struct C { mut c: int }
 
-fn main() {
+pub fn main() {
     match A {a: 10, b: @20} {
         x@A {a, b: @20} => { assert x.a == 10; assert a == 10; }
         A {b, _} => { die!(); }
diff --git a/src/test/run-pass/new-impl-syntax.rs b/src/test/run-pass/new-impl-syntax.rs
index 4cb30ffa213..7966fcea879 100644
--- a/src/test/run-pass/new-impl-syntax.rs
+++ b/src/test/run-pass/new-impl-syntax.rs
@@ -19,7 +19,7 @@ impl<T:ToStr> ToStr for PolymorphicThingy<T> {
     }
 }
 
-fn main() {
+pub fn main() {
     io::println(Thingy { x: 1, y: 2 }.to_str());
     io::println(PolymorphicThingy { x: Thingy { x: 1, y: 2 } }.to_str());
 }
diff --git a/src/test/run-pass/new-import-syntax.rs b/src/test/run-pass/new-import-syntax.rs
index 37e47197c9a..3bc1b6c1eba 100644
--- a/src/test/run-pass/new-import-syntax.rs
+++ b/src/test/run-pass/new-import-syntax.rs
@@ -10,7 +10,7 @@
 
 use io::println;
 
-fn main() {
+pub fn main() {
     println("Hello world!");
 }
 
diff --git a/src/test/run-pass/new-vstore-mut-box-syntax.rs b/src/test/run-pass/new-vstore-mut-box-syntax.rs
index 85d7bbf27e1..971e870d1f8 100644
--- a/src/test/run-pass/new-vstore-mut-box-syntax.rs
+++ b/src/test/run-pass/new-vstore-mut-box-syntax.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x: @mut [int] = @mut [ 1, 2, 3 ];
 
 }
diff --git a/src/test/run-pass/newlambdas-ret-infer.rs b/src/test/run-pass/newlambdas-ret-infer.rs
index b79573b1f30..0838ae83cb5 100644
--- a/src/test/run-pass/newlambdas-ret-infer.rs
+++ b/src/test/run-pass/newlambdas-ret-infer.rs
@@ -15,5 +15,5 @@ fn shared() -> fn@() { return || (); }
 
 fn unique() -> fn~() { return || (); }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/newlambdas-ret-infer2.rs b/src/test/run-pass/newlambdas-ret-infer2.rs
index 68106f4d20d..4a4be9859d1 100644
--- a/src/test/run-pass/newlambdas-ret-infer2.rs
+++ b/src/test/run-pass/newlambdas-ret-infer2.rs
@@ -16,5 +16,5 @@ fn shared() -> fn@() { || () }
 
 fn unique() -> fn~() { || () }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/newlambdas.rs b/src/test/run-pass/newlambdas.rs
index 0b881d95c55..c47ee5098a5 100644
--- a/src/test/run-pass/newlambdas.rs
+++ b/src/test/run-pass/newlambdas.rs
@@ -18,7 +18,7 @@ fn ff() -> fn@(int) -> int {
     return |x| x + 1;
 }
 
-fn main() {
+pub fn main() {
     assert f(10, |a| a) == 10;
     g(||());
     assert do f(10) |a| { a } == 10;
diff --git a/src/test/run-pass/newtype-polymorphic.rs b/src/test/run-pass/newtype-polymorphic.rs
index 6eb2fcdd520..dfa1008a69e 100644
--- a/src/test/run-pass/newtype-polymorphic.rs
+++ b/src/test/run-pass/newtype-polymorphic.rs
@@ -14,7 +14,7 @@ fn myvec_deref<X: Copy>(mv: myvec<X>) -> ~[X] { return copy *mv; }
 
 fn myvec_elt<X: Copy>(mv: myvec<X>) -> X { return mv[0]; }
 
-fn main() {
+pub fn main() {
     let mv = myvec(~[1, 2, 3]);
     assert (myvec_deref(copy mv)[1] == 2);
     assert (myvec_elt(copy mv) == 1);
diff --git a/src/test/run-pass/newtype.rs b/src/test/run-pass/newtype.rs
index cb781ae6a99..697a579f4bc 100644
--- a/src/test/run-pass/newtype.rs
+++ b/src/test/run-pass/newtype.rs
@@ -14,7 +14,7 @@ struct Mytype {compute: extern fn(mytype) -> int, val: int}
 
 fn compute(i: mytype) -> int { return i.val + 20; }
 
-fn main() {
+pub fn main() {
     let myval = mytype(Mytype{compute: compute, val: 30});
     assert ((myval.compute)(myval) == 50);
 }
diff --git a/src/test/run-pass/nil-decl-in-foreign.rs b/src/test/run-pass/nil-decl-in-foreign.rs
index 40f4b2339e5..edd3eac48b2 100644
--- a/src/test/run-pass/nil-decl-in-foreign.rs
+++ b/src/test/run-pass/nil-decl-in-foreign.rs
@@ -13,4 +13,4 @@
 extern mod libc {
     pub fn printf(x: ());
 }
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/nil-pattern.rs b/src/test/run-pass/nil-pattern.rs
index 9c629935ba2..329590b547d 100644
--- a/src/test/run-pass/nil-pattern.rs
+++ b/src/test/run-pass/nil-pattern.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let x = (); match x { () => { } } }
+pub fn main() { let x = (); match x { () => { } } }
diff --git a/src/test/run-pass/non-boolean-pure-fns.rs b/src/test/run-pass/non-boolean-pure-fns.rs
index ae0af82057f..3fb9a557fa1 100644
--- a/src/test/run-pass/non-boolean-pure-fns.rs
+++ b/src/test/run-pass/non-boolean-pure-fns.rs
@@ -27,7 +27,7 @@ fn safe_head<T: Copy>(ls: @List<T>) -> T {
     return head(ls);
 }
 
-fn main() {
+pub fn main() {
     let mylist = @Cons(@1u, @Nil);
     assert (nonempty_list(mylist));
     assert (*safe_head(mylist) == 1u);
diff --git a/src/test/run-pass/non-legacy-modes.rs b/src/test/run-pass/non-legacy-modes.rs
index a8a6d232360..6db971121b7 100644
--- a/src/test/run-pass/non-legacy-modes.rs
+++ b/src/test/run-pass/non-legacy-modes.rs
@@ -24,7 +24,7 @@ fn check_struct(x: X) {
     check_int(x.repr);
 }
 
-fn main() {
+pub fn main() {
     apply(22, check_int);
     apply(X {repr: 22}, check_struct);
 }
diff --git a/src/test/run-pass/nullary-or-pattern.rs b/src/test/run-pass/nullary-or-pattern.rs
index 2cbfb885e21..4b913ccb9b6 100644
--- a/src/test/run-pass/nullary-or-pattern.rs
+++ b/src/test/run-pass/nullary-or-pattern.rs
@@ -14,7 +14,7 @@ fn or_alt(q: blah) -> int {
   match q { a | b => { 42 } }
 }
 
-fn main() {
+pub fn main() {
     assert (or_alt(a) == 42);
     assert (or_alt(b) == 42);
 }
diff --git a/src/test/run-pass/numeric-method-autoexport.rs b/src/test/run-pass/numeric-method-autoexport.rs
index d94d2bf5811..f5c49bbf4d0 100644
--- a/src/test/run-pass/numeric-method-autoexport.rs
+++ b/src/test/run-pass/numeric-method-autoexport.rs
@@ -12,7 +12,7 @@
 // reachable for each numeric type, for each exported impl, with no imports
 // necessary. Testing the methods of the impls is done within the source
 // file for each numeric type.
-fn main() {
+pub fn main() {
 // ints
     // num
     assert 15i.add(&6) == 21;
diff --git a/src/test/run-pass/opeq.rs b/src/test/run-pass/opeq.rs
index 814da229e7d..ee669899154 100644
--- a/src/test/run-pass/opeq.rs
+++ b/src/test/run-pass/opeq.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let mut x: int = 1;
     x *= 2;
     log(debug, x);
diff --git a/src/test/run-pass/operator-associativity.rs b/src/test/run-pass/operator-associativity.rs
index f9ebed3afce..0223fee549f 100644
--- a/src/test/run-pass/operator-associativity.rs
+++ b/src/test/run-pass/operator-associativity.rs
@@ -12,4 +12,4 @@
 
 
 // Testcase for issue #130, operator associativity.
-fn main() { assert (3 * 5 / 2 == 7); }
+pub fn main() { assert (3 * 5 / 2 == 7); }
diff --git a/src/test/run-pass/operator-overloading-explicit-self.rs b/src/test/run-pass/operator-overloading-explicit-self.rs
index 2834e17dbc8..5a3ed4c6082 100644
--- a/src/test/run-pass/operator-overloading-explicit-self.rs
+++ b/src/test/run-pass/operator-overloading-explicit-self.rs
@@ -18,7 +18,7 @@ impl S {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut s = S { x: 1 };
     s += S { x: 2 };
     assert s.x == 3;
diff --git a/src/test/run-pass/operator-overloading.rs b/src/test/run-pass/operator-overloading.rs
index 13439c6e7e6..1ffdc6a21ca 100644
--- a/src/test/run-pass/operator-overloading.rs
+++ b/src/test/run-pass/operator-overloading.rs
@@ -53,7 +53,7 @@ impl Point : cmp::Eq {
     pure fn ne(&self, other: &Point) -> bool { !(*self).eq(other) }
 }
 
-fn main() {
+pub fn main() {
     let mut p = Point {x: 10, y: 20};
     p += Point {x: 101, y: 102};
     p = p - Point {x: 100, y: 100};
diff --git a/src/test/run-pass/option-ext.rs b/src/test/run-pass/option-ext.rs
index 29bdbebbc3e..63114da9d9d 100644
--- a/src/test/run-pass/option-ext.rs
+++ b/src/test/run-pass/option-ext.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let thing = ~"{{ f }}";
     let f = str::find_str(thing, ~"{{");
 
diff --git a/src/test/run-pass/option-unwrap.rs b/src/test/run-pass/option-unwrap.rs
index 1e894263d7c..604edc5e447 100644
--- a/src/test/run-pass/option-unwrap.rs
+++ b/src/test/run-pass/option-unwrap.rs
@@ -27,7 +27,7 @@ fn unwrap<T>(+o: Option<T>) -> T {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = @mut 1;
 
     {
diff --git a/src/test/run-pass/or-pattern.rs b/src/test/run-pass/or-pattern.rs
index a19fe8ecc4f..cc0a9e05f61 100644
--- a/src/test/run-pass/or-pattern.rs
+++ b/src/test/run-pass/or-pattern.rs
@@ -14,7 +14,7 @@ fn or_alt(q: blah) -> int {
     match q { a(x, y, _) | b(x, y) => { return x + y; } c => { return 0; } }
 }
 
-fn main() {
+pub fn main() {
     assert (or_alt(c) == 0);
     assert (or_alt(a(10, 100, 0u)) == 110);
     assert (or_alt(b(20, 200)) == 220);
diff --git a/src/test/run-pass/output-slot-variants.rs b/src/test/run-pass/output-slot-variants.rs
index 3667a980251..e45d2280bf0 100644
--- a/src/test/run-pass/output-slot-variants.rs
+++ b/src/test/run-pass/output-slot-variants.rs
@@ -23,7 +23,7 @@ fn ret_ext_mem() -> Abox { return Abox {a: @10, b: @10}; }
 
 fn ret_ext_ext_mem() -> @Abox { return @Abox{a: @10, b: @10}; }
 
-fn main() {
+pub fn main() {
     let mut int_i: int;
     let mut ext_i: @int;
     let mut int_rec: A;
diff --git a/src/test/run-pass/over-constrained-vregs.rs b/src/test/run-pass/over-constrained-vregs.rs
index 29b235ed988..14756904693 100644
--- a/src/test/run-pass/over-constrained-vregs.rs
+++ b/src/test/run-pass/over-constrained-vregs.rs
@@ -12,7 +12,7 @@
 
 
 // Regression test for issue #152.
-fn main() {
+pub fn main() {
     let mut b: uint = 1u;
     while b <= 32u {
         0u << b;
diff --git a/src/test/run-pass/paren-free.rs b/src/test/run-pass/paren-free.rs
index a101fc12225..b4d34d0c902 100644
--- a/src/test/run-pass/paren-free.rs
+++ b/src/test/run-pass/paren-free.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = true;
     if x { let mut i = 10; while i > 0 { i -= 1; } }
     match x { true => { debug!("right"); } false => { debug!("wrong"); } }
diff --git a/src/test/run-pass/parse-fail.rs b/src/test/run-pass/parse-fail.rs
index bb3ffdc14b4..c280bc0dde5 100644
--- a/src/test/run-pass/parse-fail.rs
+++ b/src/test/run-pass/parse-fail.rs
@@ -14,4 +14,4 @@
 // -*- rust -*-
 fn dont_call_me() { die!(); log(debug, 1); }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/pass-by-copy.rs b/src/test/run-pass/pass-by-copy.rs
index 2821ab3e3eb..44ec68dd346 100644
--- a/src/test/run-pass/pass-by-copy.rs
+++ b/src/test/run-pass/pass-by-copy.rs
@@ -13,7 +13,7 @@ fn magic2(+x: @int) { log(debug, x); }
 
 struct A { a: @int }
 
-fn main() {
+pub fn main() {
     let a = A {a: @10}, b = @10;
     magic(a); magic(A {a: @20});
     magic2(b); magic2(@20);
diff --git a/src/test/run-pass/path.rs b/src/test/run-pass/path.rs
index 9f600e106b3..ee90cdc253a 100644
--- a/src/test/run-pass/path.rs
+++ b/src/test/run-pass/path.rs
@@ -14,4 +14,4 @@ mod foo {
     pub fn bar(offset: uint) { }
 }
 
-fn main() { foo::bar(0u); }
+pub fn main() { foo::bar(0u); }
diff --git a/src/test/run-pass/pattern-bound-var-in-for-each.rs b/src/test/run-pass/pattern-bound-var-in-for-each.rs
index 9a2199ec08f..c667aeb1c10 100644
--- a/src/test/run-pass/pattern-bound-var-in-for-each.rs
+++ b/src/test/run-pass/pattern-bound-var-in-for-each.rs
@@ -25,4 +25,4 @@ fn foo(src: uint) {
     }
 }
 
-fn main() { foo(0u); }
+pub fn main() { foo(0u); }
diff --git a/src/test/run-pass/pattern-in-closure.rs b/src/test/run-pass/pattern-in-closure.rs
index 64114a4822d..7194fca519b 100644
--- a/src/test/run-pass/pattern-in-closure.rs
+++ b/src/test/run-pass/pattern-in-closure.rs
@@ -13,7 +13,7 @@ struct Foo {
     y: int
 }
 
-fn main() {
+pub fn main() {
     let f = |(x, _): (int, int)| io::println((x + 1).to_str());
     let g = |Foo { x: x, y: y }: Foo| io::println((x + 1).to_str());
     f((2, 3));
diff --git a/src/test/run-pass/pipe-bank-proto.rs b/src/test/run-pass/pipe-bank-proto.rs
index 5bd2f17b6e7..995ad4e71c0 100644
--- a/src/test/run-pass/pipe-bank-proto.rs
+++ b/src/test/run-pass/pipe-bank-proto.rs
@@ -115,5 +115,5 @@ fn bank_client(+bank: bank::client::login) {
     }
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/pipe-detect-term.rs b/src/test/run-pass/pipe-detect-term.rs
index a55921687e9..0bd06909ebb 100644
--- a/src/test/run-pass/pipe-detect-term.rs
+++ b/src/test/run-pass/pipe-detect-term.rs
@@ -28,7 +28,7 @@ proto! oneshot (
     }
 )
 
-fn main() {
+pub fn main() {
     let iotask = &uv::global_loop::get();
     
     pipes::spawn_service(oneshot::init, |p| { 
diff --git a/src/test/run-pass/pipe-peek.rs b/src/test/run-pass/pipe-peek.rs
index 5bf85a80f7c..7dc1feb2417 100644
--- a/src/test/run-pass/pipe-peek.rs
+++ b/src/test/run-pass/pipe-peek.rs
@@ -22,7 +22,7 @@ proto! oneshot (
     }
 )
 
-fn main() {
+pub fn main() {
     let (c, p) = oneshot::init();
 
     assert !pipes::peek(&p);
diff --git a/src/test/run-pass/pipe-pingpong-bounded.rs b/src/test/run-pass/pipe-pingpong-bounded.rs
index d251fbf8f76..a24e8b37386 100644
--- a/src/test/run-pass/pipe-pingpong-bounded.rs
+++ b/src/test/run-pass/pipe-pingpong-bounded.rs
@@ -107,7 +107,7 @@ mod test {
     }
 }
 
-fn main() {
+pub fn main() {
     let (client_, server_) = ::pingpong::init();
     let client_ = ~mut Some(move client_);
     let server_ = ~mut Some(move server_);
diff --git a/src/test/run-pass/pipe-pingpong-proto.rs b/src/test/run-pass/pipe-pingpong-proto.rs
index 840acd5b287..97afbba42c5 100644
--- a/src/test/run-pass/pipe-pingpong-proto.rs
+++ b/src/test/run-pass/pipe-pingpong-proto.rs
@@ -49,7 +49,7 @@ mod test {
     }
 }
 
-fn main() {
+pub fn main() {
     let (client_, server_) = pingpong::init();
     let client_ = ~mut Some(move client_);
     let server_ = ~mut Some(move server_);
diff --git a/src/test/run-pass/pipe-presentation-examples.rs b/src/test/run-pass/pipe-presentation-examples.rs
index dafe1ccec2a..b16f02e78de 100644
--- a/src/test/run-pass/pipe-presentation-examples.rs
+++ b/src/test/run-pass/pipe-presentation-examples.rs
@@ -173,4 +173,4 @@ fn draw_two_frames_bad2(+channel: double_buffer::client::acquire) {
     );
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/pipe-select-macro.rs b/src/test/run-pass/pipe-select-macro.rs
index ec792b38f94..368cda63394 100644
--- a/src/test/run-pass/pipe-select-macro.rs
+++ b/src/test/run-pass/pipe-select-macro.rs
@@ -60,5 +60,5 @@ fn test(+foo: foo::client::foo, +bar: bar::client::bar) {
     )
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/pipe-select.rs b/src/test/run-pass/pipe-select.rs
index ae0acb5c095..362fe3265f6 100644
--- a/src/test/run-pass/pipe-select.rs
+++ b/src/test/run-pass/pipe-select.rs
@@ -33,7 +33,7 @@ proto! stream (
     }
 )
 
-fn main() {
+pub fn main() {
     use oneshot::client::*;
     use stream::client::*;
 
diff --git a/src/test/run-pass/pipe-sleep.rs b/src/test/run-pass/pipe-sleep.rs
index 6d6c6cf4a08..ac4829a9c19 100644
--- a/src/test/run-pass/pipe-sleep.rs
+++ b/src/test/run-pass/pipe-sleep.rs
@@ -23,7 +23,7 @@ proto! oneshot (
     }
 )
 
-fn main() {
+pub fn main() {
     use oneshot::client::*;
 
     let c = pipes::spawn_service(oneshot::init, |p| { recv(move p); });
diff --git a/src/test/run-pass/placement-new-arena.rs b/src/test/run-pass/placement-new-arena.rs
index 71023d6c7f4..5112f2be4d9 100644
--- a/src/test/run-pass/placement-new-arena.rs
+++ b/src/test/run-pass/placement-new-arena.rs
@@ -13,7 +13,7 @@
 extern mod std;
 use std::arena;
 
-fn main() {
+pub fn main() {
     let p = &arena::Arena();
     let x = p.alloc(|| 4u);
     io::print(fmt!("%u", *x));
diff --git a/src/test/run-pass/platform_thread.rs b/src/test/run-pass/platform_thread.rs
index 2a61e83a537..40b9a7b92c0 100644
--- a/src/test/run-pass/platform_thread.rs
+++ b/src/test/run-pass/platform_thread.rs
@@ -12,7 +12,7 @@
 // The OS main scheduler should continue to be available and not terminate
 // while it is not in use.
 
-fn main() {
+pub fn main() {
     run(100);
 }
 
diff --git a/src/test/run-pass/pred-not-bool.rs b/src/test/run-pass/pred-not-bool.rs
index 738d1932a89..4b90b99cb31 100644
--- a/src/test/run-pass/pred-not-bool.rs
+++ b/src/test/run-pass/pred-not-bool.rs
@@ -13,4 +13,4 @@
 
 pure fn bad(a: int) -> int { return 37; } //~ ERROR Non-boolean return type
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/preempt.rs b/src/test/run-pass/preempt.rs
index 5cc6361f7ca..e0434c14048 100644
--- a/src/test/run-pass/preempt.rs
+++ b/src/test/run-pass/preempt.rs
@@ -19,7 +19,7 @@ fn starve_main(alive: chan<int>) {
     loop { i += 1; }
 }
 
-fn main() {
+pub fn main() {
     let alive: port<int> = port();
     debug!("main started");
     let s: task = spawn starve_main(chan(alive));
diff --git a/src/test/run-pass/private-class-field.rs b/src/test/run-pass/private-class-field.rs
index 59b07a21e19..3be87fd5047 100644
--- a/src/test/run-pass/private-class-field.rs
+++ b/src/test/run-pass/private-class-field.rs
@@ -25,7 +25,7 @@ fn cat(in_x : uint, in_y : int) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   assert (nyan.meow_count() == 52u);
 }
diff --git a/src/test/run-pass/private-method.rs b/src/test/run-pass/private-method.rs
index 0022343b1ba..ae149421f0a 100644
--- a/src/test/run-pass/private-method.rs
+++ b/src/test/run-pass/private-method.rs
@@ -32,7 +32,7 @@ fn cat(in_x : uint, in_y : int) -> cat {
     }
 }
 
-fn main() {
+pub fn main() {
   let nyan : cat = cat(52u, 99);
   nyan.play();
 }
diff --git a/src/test/run-pass/propagate-expected-type-through-block.rs b/src/test/run-pass/propagate-expected-type-through-block.rs
index 3c40d2e36c1..525535dd139 100644
--- a/src/test/run-pass/propagate-expected-type-through-block.rs
+++ b/src/test/run-pass/propagate-expected-type-through-block.rs
@@ -2,7 +2,7 @@
 // did not, then the type of `x` would not be known and a compilation
 // error would result.
 
-fn main() {
+pub fn main() {
     let y = ~3;
     let foo: @fn(&int) -> int = {
         let y = copy y;
diff --git a/src/test/run-pass/pub-use-xcrate.rs b/src/test/run-pass/pub-use-xcrate.rs
index d00e2114b03..03004e5e475 100644
--- a/src/test/run-pass/pub-use-xcrate.rs
+++ b/src/test/run-pass/pub-use-xcrate.rs
@@ -16,7 +16,7 @@ extern mod pub_use_xcrate2;
 
 use pub_use_xcrate2::Foo;
 
-fn main() {
+pub fn main() {
     let foo: Foo = Foo {
         name: 0
     };
diff --git a/src/test/run-pass/pub_use_mods_xcrate_exe.rs b/src/test/run-pass/pub_use_mods_xcrate_exe.rs
index 3398ff063ee..1d60cab3a82 100644
--- a/src/test/run-pass/pub_use_mods_xcrate_exe.rs
+++ b/src/test/run-pass/pub_use_mods_xcrate_exe.rs
@@ -14,5 +14,5 @@
 extern mod pub_use_mods_xcrate;
 use pub_use_mods_xcrate::a::c;
 
-fn main(){}
+pub fn main(){}
 
diff --git a/src/test/run-pass/pure-fmt.rs b/src/test/run-pass/pure-fmt.rs
index 572720f5808..b65c33939c8 100644
--- a/src/test/run-pass/pure-fmt.rs
+++ b/src/test/run-pass/pure-fmt.rs
@@ -30,5 +30,5 @@ pure fn foo() {
     debug!("test %b", a.g);
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/pure-sum.rs b/src/test/run-pass/pure-sum.rs
index 84792d52c13..19957a67c04 100644
--- a/src/test/run-pass/pure-sum.rs
+++ b/src/test/run-pass/pure-sum.rs
@@ -48,5 +48,5 @@ pure fn sums_to_using_uniq_rec(v: ~[int], sum: int) -> bool {
     return *sum0.f == sum;
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/purity-infer.rs b/src/test/run-pass/purity-infer.rs
index ec5e6d61628..9aba5046955 100644
--- a/src/test/run-pass/purity-infer.rs
+++ b/src/test/run-pass/purity-infer.rs
@@ -10,6 +10,6 @@
 
 
 fn something(f: pure fn()) { f(); }
-fn main() {
+pub fn main() {
     something(|| log(error, "hi!") );
 }
diff --git a/src/test/run-pass/rcvr-borrowed-to-region.rs b/src/test/run-pass/rcvr-borrowed-to-region.rs
index 2b511f6ecad..7f8e9cfdd69 100644
--- a/src/test/run-pass/rcvr-borrowed-to-region.rs
+++ b/src/test/run-pass/rcvr-borrowed-to-region.rs
@@ -19,7 +19,7 @@ impl &int: get {
     }
 }
 
-fn main() {
+pub fn main() {
     /*
     let x = @mut 6;
     let y = x.get();
diff --git a/src/test/run-pass/rcvr-borrowed-to-slice.rs b/src/test/run-pass/rcvr-borrowed-to-slice.rs
index 26eb815d20f..f58f6997e09 100644
--- a/src/test/run-pass/rcvr-borrowed-to-slice.rs
+++ b/src/test/run-pass/rcvr-borrowed-to-slice.rs
@@ -23,7 +23,7 @@ impl &[int]: sum {
 
 fn call_sum(x: &[int]) -> int { x.sum() }
 
-fn main() {
+pub fn main() {
     let x = ~[1, 2, 3];
     let y = call_sum(x);
     debug!("y==%d", y);
diff --git a/src/test/run-pass/readalias.rs b/src/test/run-pass/readalias.rs
index 5c3f77b994b..555a73c73d3 100644
--- a/src/test/run-pass/readalias.rs
+++ b/src/test/run-pass/readalias.rs
@@ -16,4 +16,4 @@ struct Point {x: int, y: int, z: int}
 
 fn f(p: Point) { assert (p.z == 12); }
 
-fn main() { let x: Point = Point {x: 10, y: 11, z: 12}; f(x); }
+pub fn main() { let x: Point = Point {x: 10, y: 11, z: 12}; f(x); }
diff --git a/src/test/run-pass/rec-align-u32.rs b/src/test/run-pass/rec-align-u32.rs
index 15538648363..ccf243aa072 100644
--- a/src/test/run-pass/rec-align-u32.rs
+++ b/src/test/run-pass/rec-align-u32.rs
@@ -41,7 +41,7 @@ mod m {
     pub fn size() -> uint { 8u }
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let x = Outer {c8: 22u8, t: Inner {c64: 44u32}};
 
diff --git a/src/test/run-pass/rec-align-u64.rs b/src/test/run-pass/rec-align-u64.rs
index 30978deb374..eb309efd49c 100644
--- a/src/test/run-pass/rec-align-u64.rs
+++ b/src/test/run-pass/rec-align-u64.rs
@@ -55,7 +55,7 @@ mod m {
     }
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let x = Outer {c8: 22u8, t: Inner {c64: 44u64}};
 
diff --git a/src/test/run-pass/rec-auto.rs b/src/test/run-pass/rec-auto.rs
index 05428879fd2..7dd13001de4 100644
--- a/src/test/run-pass/rec-auto.rs
+++ b/src/test/run-pass/rec-auto.rs
@@ -17,7 +17,7 @@
 
 struct X { foo: ~str, bar: ~str }
 
-fn main() {
+pub fn main() {
     let x = X {foo: ~"hello", bar: ~"world"};
     log(debug, copy x.foo);
     log(debug, copy x.bar);
diff --git a/src/test/run-pass/rec-extend.rs b/src/test/run-pass/rec-extend.rs
index ca353455c13..6b9eb51ef25 100644
--- a/src/test/run-pass/rec-extend.rs
+++ b/src/test/run-pass/rec-extend.rs
@@ -14,7 +14,7 @@
 // -*- rust -*-
 struct Point {x: int, y: int}
 
-fn main() {
+pub fn main() {
     let origin: Point = Point {x: 0, y: 0};
     let right: Point = Point {x: origin.x + 10,.. origin};
     let up: Point = Point {y: origin.y + 10,.. origin};
diff --git a/src/test/run-pass/rec-tup.rs b/src/test/run-pass/rec-tup.rs
index 8c20e4f342b..8d49ed43ffc 100644
--- a/src/test/run-pass/rec-tup.rs
+++ b/src/test/run-pass/rec-tup.rs
@@ -23,7 +23,7 @@ fn f(r: rect, x1: int, y1: int, x2: int, y2: int) {
     assert (snd(r).y == y2);
 }
 
-fn main() {
+pub fn main() {
     let r: rect = (Point {x: 10, y: 20}, Point {x: 11, y: 22});
     assert (fst(r).x == 10);
     assert (fst(r).y == 20);
diff --git a/src/test/run-pass/rec.rs b/src/test/run-pass/rec.rs
index 6ff36355875..34d0ad7535b 100644
--- a/src/test/run-pass/rec.rs
+++ b/src/test/run-pass/rec.rs
@@ -21,7 +21,7 @@ fn f(r: Rect, x: int, y: int, w: int, h: int) {
     assert (r.h == h);
 }
 
-fn main() {
+pub fn main() {
     let r: Rect = Rect {x: 10, y: 20, w: 100, h: 200};
     assert (r.x == 10);
     assert (r.y == 20);
diff --git a/src/test/run-pass/record-pat.rs b/src/test/run-pass/record-pat.rs
index 026b9c93203..ad986ddb752 100644
--- a/src/test/run-pass/record-pat.rs
+++ b/src/test/run-pass/record-pat.rs
@@ -19,7 +19,7 @@ fn m(in: t3) -> int {
     }
 }
 
-fn main() {
+pub fn main() {
     assert (m(c(T2 {x: a(10), y: 5}, 4u)) == 10);
     assert (m(c(T2 {x: b(10u), y: 5}, 4u)) == 19);
 }
diff --git a/src/test/run-pass/recursion.rs b/src/test/run-pass/recursion.rs
index 8cc2c8cc80a..77c0872b7c4 100644
--- a/src/test/run-pass/recursion.rs
+++ b/src/test/run-pass/recursion.rs
@@ -28,7 +28,7 @@ fn test<T:Dot> (n:int, i:int, first:T, second:T) ->int {
     _ => {test (n-1, i+1, Cons {head:2*i+1, tail:first}, Cons{head:i*i, tail:second})}
   }
 }
-fn main() {
+pub fn main() {
   let n = test(1, 0, Nil, Nil);
   io::println(fmt!("%d", n));
 }
diff --git a/src/test/run-pass/reexport-star.rs b/src/test/run-pass/reexport-star.rs
index b59ce4d9020..3b9fe688d4d 100644
--- a/src/test/run-pass/reexport-star.rs
+++ b/src/test/run-pass/reexport-star.rs
@@ -21,7 +21,7 @@ mod b {
     pub use a::*;
 }
 
-fn main() {
+pub fn main() {
     b::f();
     b::g();
 }
diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs
index c7c1a6bb331..3ea8ef23ea9 100644
--- a/src/test/run-pass/reflect-visit-data.rs
+++ b/src/test/run-pass/reflect-visit-data.rs
@@ -634,7 +634,7 @@ fn get_tydesc_for<T>(&&_t: T) -> *TyDesc {
 
 struct Triple { x: int, y: int, z: int }
 
-fn main() {
+pub fn main() {
     unsafe {
         let r = (1,2,3,true,false, Triple {x:5,y:4,z:3});
         let p = ptr::addr_of(&r) as *c_void;
diff --git a/src/test/run-pass/reflect-visit-type.rs b/src/test/run-pass/reflect-visit-type.rs
index edb11c7a979..9c8c65698b3 100644
--- a/src/test/run-pass/reflect-visit-type.rs
+++ b/src/test/run-pass/reflect-visit-type.rs
@@ -140,7 +140,7 @@ fn visit_ty<T>(v: TyVisitor) {
     visit_tydesc(get_tydesc::<T>(), v);
 }
 
-fn main() {
+pub fn main() {
     let v = my_visitor(@{mut types: ~[]});
     let vv = v as TyVisitor;
 
diff --git a/src/test/run-pass/region-dependent-addr-of.rs b/src/test/run-pass/region-dependent-addr-of.rs
index 133904d34e1..ab6d9cd58ea 100644
--- a/src/test/run-pass/region-dependent-addr-of.rs
+++ b/src/test/run-pass/region-dependent-addr-of.rs
@@ -78,7 +78,7 @@ fn get_v5_ref(a: &v/A, i: uint) -> &v/int {
     }
 }
 
-fn main() {
+pub fn main() {
     let a = A {value: B {v1: 22,
                          v2: [23, 24, 25],
                          v3: ~[26, 27, 28],
diff --git a/src/test/run-pass/region-return-interior-of-option.rs b/src/test/run-pass/region-return-interior-of-option.rs
index 7033510ad2e..b71707488e8 100644
--- a/src/test/run-pass/region-return-interior-of-option.rs
+++ b/src/test/run-pass/region-return-interior-of-option.rs
@@ -15,7 +15,7 @@ fn get<T>(opt: &r/Option<T>) -> &r/T {
     }
 }
 
-fn main() {
+pub fn main() {
     let mut x = Some(23);
 
     {
diff --git a/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs b/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs
index b07f53aba12..5a13ae58ae9 100644
--- a/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs
+++ b/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs
@@ -18,6 +18,6 @@ fn get_x(x: &r/character) -> &r/int {
     return &x.pos.x;
 }
 
-fn main() {
+pub fn main() {
 }
 
diff --git a/src/test/run-pass/regions-addr-of-ret.rs b/src/test/run-pass/regions-addr-of-ret.rs
index ac847f18128..88a378e7b49 100644
--- a/src/test/run-pass/regions-addr-of-ret.rs
+++ b/src/test/run-pass/regions-addr-of-ret.rs
@@ -12,7 +12,7 @@ fn f(x : &a/int) -> &a/int {
     return &*x;
 }
 
-fn main() {
+pub fn main() {
     let three = &3;
     log(error, fmt!("%d", *f(three)));
 }
diff --git a/src/test/run-pass/regions-appearance-constraint.rs b/src/test/run-pass/regions-appearance-constraint.rs
index 1881a5d9c3c..0b7b9728ae4 100644
--- a/src/test/run-pass/regions-appearance-constraint.rs
+++ b/src/test/run-pass/regions-appearance-constraint.rs
@@ -28,5 +28,5 @@ fn testfn(cond: bool) {
     assert *a == exp;
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/regions-borrow-at.rs b/src/test/run-pass/regions-borrow-at.rs
index dd48c66406c..f42e7015969 100644
--- a/src/test/run-pass/regions-borrow-at.rs
+++ b/src/test/run-pass/regions-borrow-at.rs
@@ -12,7 +12,7 @@ fn foo(x: &uint) -> uint {
     *x
 }
 
-fn main() {
+pub fn main() {
     let p = @22u;
     let r = foo(p);
     debug!("r=%u", r);
diff --git a/src/test/run-pass/regions-borrow-estr-uniq.rs b/src/test/run-pass/regions-borrow-estr-uniq.rs
index b44f60cb705..987f672a2fb 100644
--- a/src/test/run-pass/regions-borrow-estr-uniq.rs
+++ b/src/test/run-pass/regions-borrow-estr-uniq.rs
@@ -12,7 +12,7 @@ fn foo(x: &str) -> u8 {
     x[0]
 }
 
-fn main() {
+pub fn main() {
     let p = ~"hello";
     let r = foo(p);
     assert r == 'h' as u8;
diff --git a/src/test/run-pass/regions-borrow-evec-at.rs b/src/test/run-pass/regions-borrow-evec-at.rs
index c7aec8eb47b..73764ee1a6c 100644
--- a/src/test/run-pass/regions-borrow-evec-at.rs
+++ b/src/test/run-pass/regions-borrow-evec-at.rs
@@ -14,7 +14,7 @@ fn foo(x: &[uint]) -> uint {
     x[0]
 }
 
-fn main() {
+pub fn main() {
     let p = @[22u];
     let r = foo(p);
     assert r == 22u;
diff --git a/src/test/run-pass/regions-borrow-evec-fixed.rs b/src/test/run-pass/regions-borrow-evec-fixed.rs
index 218631a2a65..9f45da1268a 100644
--- a/src/test/run-pass/regions-borrow-evec-fixed.rs
+++ b/src/test/run-pass/regions-borrow-evec-fixed.rs
@@ -14,7 +14,7 @@ fn foo(x: &[int]) -> int {
     x[0]
 }
 
-fn main() {
+pub fn main() {
     let p = [1,2,3,4,5];
     assert foo(p) == 1;
 }
diff --git a/src/test/run-pass/regions-borrow-evec-uniq.rs b/src/test/run-pass/regions-borrow-evec-uniq.rs
index 43e335a2ac8..09a3e6f4a84 100644
--- a/src/test/run-pass/regions-borrow-evec-uniq.rs
+++ b/src/test/run-pass/regions-borrow-evec-uniq.rs
@@ -12,7 +12,7 @@ fn foo(x: &[int]) -> int {
     x[0]
 }
 
-fn main() {
+pub fn main() {
     let p = ~[1,2,3,4,5];
     let r = foo(p);
     assert r == 1;
diff --git a/src/test/run-pass/regions-borrow-uniq.rs b/src/test/run-pass/regions-borrow-uniq.rs
index 3b5c27bf440..00d7ec6448c 100644
--- a/src/test/run-pass/regions-borrow-uniq.rs
+++ b/src/test/run-pass/regions-borrow-uniq.rs
@@ -12,7 +12,7 @@ fn foo(x: &uint) -> uint {
     *x
 }
 
-fn main() {
+pub fn main() {
     let p = ~3u;
     let r = foo(p);
     assert r == 3u;
diff --git a/src/test/run-pass/regions-bot.rs b/src/test/run-pass/regions-bot.rs
index d9e047fc3f2..3c7a6dcbb85 100644
--- a/src/test/run-pass/regions-bot.rs
+++ b/src/test/run-pass/regions-bot.rs
@@ -14,5 +14,5 @@ fn produce_static<T>() -> &static/T { die!(); }
 
 fn foo<T>(x: &T) -> &uint { produce_static() }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/regions-copy-closure.rs b/src/test/run-pass/regions-copy-closure.rs
index b98603f33d4..bfb4ac5f60c 100644
--- a/src/test/run-pass/regions-copy-closure.rs
+++ b/src/test/run-pass/regions-copy-closure.rs
@@ -16,7 +16,7 @@ fn box_it(+x: &r/fn()) -> closure_box/&r {
     closure_box {cl: move x}
 }
 
-fn main() {
+pub fn main() {
     let mut i = 3;
     let cl_box = box_it(|| i += 1);
     assert i == 3;
diff --git a/src/test/run-pass/regions-creating-enums2.rs b/src/test/run-pass/regions-creating-enums2.rs
index c58512439cb..2245bd72f88 100644
--- a/src/test/run-pass/regions-creating-enums2.rs
+++ b/src/test/run-pass/regions-creating-enums2.rs
@@ -17,5 +17,5 @@ fn mk_add_ok(x: &r/ast, y: &r/ast) -> ast/&r {
     add(x, y)
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/regions-creating-enums5.rs b/src/test/run-pass/regions-creating-enums5.rs
index f5c558405bc..959a40055fd 100644
--- a/src/test/run-pass/regions-creating-enums5.rs
+++ b/src/test/run-pass/regions-creating-enums5.rs
@@ -17,5 +17,5 @@ fn mk_add_ok(x: &a/ast, y: &a/ast, z: &ast) -> ast/&a {
     add(x, y)
 }
 
-fn main() {
+pub fn main() {
 }
\ No newline at end of file
diff --git a/src/test/run-pass/regions-equiv-fns.rs b/src/test/run-pass/regions-equiv-fns.rs
index 0d28629f047..fb68e3e2b08 100644
--- a/src/test/run-pass/regions-equiv-fns.rs
+++ b/src/test/run-pass/regions-equiv-fns.rs
@@ -17,7 +17,7 @@ fn ok(a: &uint) {
     g(a);
 }
 
-fn main() {
+pub fn main() {
 }
 
 
diff --git a/src/test/run-pass/regions-escape-into-other-fn.rs b/src/test/run-pass/regions-escape-into-other-fn.rs
index 5f0e37768ba..a35a7cfa829 100644
--- a/src/test/run-pass/regions-escape-into-other-fn.rs
+++ b/src/test/run-pass/regions-escape-into-other-fn.rs
@@ -11,7 +11,7 @@
 fn foo(x: &r/uint) -> &r/uint { x }
 fn bar(x: &uint) -> uint { *x }
 
-fn main() {
+pub fn main() {
     let p = @3u;
     assert bar(foo(p)) == 3;
 }
diff --git a/src/test/run-pass/regions-fn-subtyping-2.rs b/src/test/run-pass/regions-fn-subtyping-2.rs
index d84b504ab68..ad9ede07f77 100644
--- a/src/test/run-pass/regions-fn-subtyping-2.rs
+++ b/src/test/run-pass/regions-fn-subtyping-2.rs
@@ -24,7 +24,7 @@ fn has_same_region(f: fn(x: &a.int, g: fn(y: &a.int))) {
 fn wants_same_region(_f: fn(x: &b.int, g: fn(y: &b.int))) { 
 }
 
-fn main() {
+pub fn main() {
 }
 
 
diff --git a/src/test/run-pass/regions-fn-subtyping.rs b/src/test/run-pass/regions-fn-subtyping.rs
index 28fdc3d26f3..2ed0d499e18 100644
--- a/src/test/run-pass/regions-fn-subtyping.rs
+++ b/src/test/run-pass/regions-fn-subtyping.rs
@@ -29,5 +29,5 @@ fn ok_inferred(f: fn@(x: &uint)) {
     g = f;
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
index 76ac8fa9de5..a31354512b3 100644
--- a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
+++ b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut x = 4;
 
     for uint::range(0, 3) |i| {
diff --git a/src/test/run-pass/regions-infer-borrow-scope-view.rs b/src/test/run-pass/regions-infer-borrow-scope-view.rs
index c0898916cae..676d595f212 100644
--- a/src/test/run-pass/regions-infer-borrow-scope-view.rs
+++ b/src/test/run-pass/regions-infer-borrow-scope-view.rs
@@ -10,7 +10,7 @@
 
 fn view<T>(x: &r/[T]) -> &r/[T] {x}
 
-fn main() {
+pub fn main() {
     let v = ~[1, 2, 3];
     let x = view(v);
     let y = view(x);
diff --git a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs
index 40ee9e318eb..444aca8b138 100644
--- a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs
+++ b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs
@@ -10,7 +10,7 @@
 
 fn borrow<T>(x: &r/T) -> &r/T {x}
 
-fn main() {
+pub fn main() {
     let x = @3;
     loop {
         let y = borrow(x);
diff --git a/src/test/run-pass/regions-infer-borrow-scope.rs b/src/test/run-pass/regions-infer-borrow-scope.rs
index e1d54f33dcb..3054438387b 100644
--- a/src/test/run-pass/regions-infer-borrow-scope.rs
+++ b/src/test/run-pass/regions-infer-borrow-scope.rs
@@ -14,7 +14,7 @@ fn x_coord(p: &r/Point) -> &r/int {
     return &p.x;
 }
 
-fn main() {
+pub fn main() {
     let p = @Point {x: 3, y: 4};
     let xc = x_coord(p);
     assert *xc == 3;
diff --git a/src/test/run-pass/regions-infer-call-2.rs b/src/test/run-pass/regions-infer-call-2.rs
index b3defb42813..940c087ea62 100644
--- a/src/test/run-pass/regions-infer-call-2.rs
+++ b/src/test/run-pass/regions-infer-call-2.rs
@@ -18,6 +18,6 @@ fn has_one(x: &a/int) -> int {
     do with |y| { takes_two(x, y) }
 }
 
-fn main() {
+pub fn main() {
     assert has_one(&2) == 22;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/regions-infer-call.rs b/src/test/run-pass/regions-infer-call.rs
index f065bc73956..d546bed4fde 100644
--- a/src/test/run-pass/regions-infer-call.rs
+++ b/src/test/run-pass/regions-infer-call.rs
@@ -14,6 +14,6 @@ fn has_two(x: &a/int, y: &b/int) -> int {
     takes_two(x, y)
 }
 
-fn main() {
+pub fn main() {
     assert has_two(&20, &2) == 22;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs b/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs
index 72a6d2449aa..414f12bf3da 100644
--- a/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs
+++ b/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs
@@ -21,7 +21,7 @@ fn with(bi: &boxed_int) -> int {
     max(bi, &i)
 }
 
-fn main() {
+pub fn main() {
     let g = 21;
     let foo = boxed_int { f: &g };
     assert with(&foo) == 22;
diff --git a/src/test/run-pass/regions-infer-contravariance.rs b/src/test/run-pass/regions-infer-contravariance.rs
index 78690277815..eccc75ed11f 100644
--- a/src/test/run-pass/regions-infer-contravariance.rs
+++ b/src/test/run-pass/regions-infer-contravariance.rs
@@ -24,7 +24,7 @@ fn with(bi: &r/boxed_int) {
     assert *get(bi) == 22;
 }
 
-fn main() {
+pub fn main() {
     let g = 22;
     let foo = boxed_int { f: &g };
     with(&foo);
diff --git a/src/test/run-pass/regions-mock-trans-impls.rs b/src/test/run-pass/regions-mock-trans-impls.rs
index 71bf0ac8269..5c1255f2aa2 100644
--- a/src/test/run-pass/regions-mock-trans-impls.rs
+++ b/src/test/run-pass/regions-mock-trans-impls.rs
@@ -42,7 +42,7 @@ fn f(ccx : &Ccx) {
     return g(fcx);
 }
 
-fn main() {
+pub fn main() {
     let ccx = Ccx { x: 0 };
     f(&ccx);
 }
diff --git a/src/test/run-pass/regions-mock-trans.rs b/src/test/run-pass/regions-mock-trans.rs
index 2ef63af3be1..d002de2249a 100644
--- a/src/test/run-pass/regions-mock-trans.rs
+++ b/src/test/run-pass/regions-mock-trans.rs
@@ -48,7 +48,7 @@ fn f(ccx : &Ccx) {
     return g(&fcx);
 }
 
-fn main() {
+pub fn main() {
     let ccx = Ccx { x: 0 };
     f(&ccx);
 }
diff --git a/src/test/run-pass/regions-nullary-variant.rs b/src/test/run-pass/regions-nullary-variant.rs
index faefe675aaf..ac416dd4468 100644
--- a/src/test/run-pass/regions-nullary-variant.rs
+++ b/src/test/run-pass/regions-nullary-variant.rs
@@ -16,4 +16,4 @@ fn mk(cond: bool, ptr: &r/uint) -> roption/&r {
     if cond {a} else {b(ptr)}
 }
 
-fn main() {}
\ No newline at end of file
+pub fn main() {}
\ No newline at end of file
diff --git a/src/test/run-pass/regions-params.rs b/src/test/run-pass/regions-params.rs
index 5d3d1c9c87b..0691f42bb7b 100644
--- a/src/test/run-pass/regions-params.rs
+++ b/src/test/run-pass/regions-params.rs
@@ -22,7 +22,7 @@ fn parameterized(x: &uint) -> uint {
     *z
 }
 
-fn main() {
+pub fn main() {
     let x = 3u;
     assert parameterized(&x) == 3u;
 }
diff --git a/src/test/run-pass/regions-self-impls.rs b/src/test/run-pass/regions-self-impls.rs
index 975d96dc420..40c83a17089 100644
--- a/src/test/run-pass/regions-self-impls.rs
+++ b/src/test/run-pass/regions-self-impls.rs
@@ -18,7 +18,7 @@ impl Clam: get_chowder {
     fn get_chowder() -> &self/int { return self.chowder; }
 }
 
-fn main() {
+pub fn main() {
     let clam = Clam { chowder: &3 };
     log(debug, *clam.get_chowder());
     clam.get_chowder();
diff --git a/src/test/run-pass/regions-self-in-enums.rs b/src/test/run-pass/regions-self-in-enums.rs
index 4b9cae12606..8ddbea5d3ed 100644
--- a/src/test/run-pass/regions-self-in-enums.rs
+++ b/src/test/run-pass/regions-self-in-enums.rs
@@ -12,7 +12,7 @@ enum int_wrapper {
     int_wrapper_ctor(&int)
 }
 
-fn main() {
+pub fn main() {
     let x = 3;
     let y = int_wrapper_ctor(&x);
     let mut z : &int;
diff --git a/src/test/run-pass/regions-simple.rs b/src/test/run-pass/regions-simple.rs
index 0238660c100..c32e08fc76b 100644
--- a/src/test/run-pass/regions-simple.rs
+++ b/src/test/run-pass/regions-simple.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut x: int = 3;
     let y: &mut int = &mut x;
     *y = 5;
diff --git a/src/test/run-pass/regions-static-closure.rs b/src/test/run-pass/regions-static-closure.rs
index faeba03128d..8b7fbfd3758 100644
--- a/src/test/run-pass/regions-static-closure.rs
+++ b/src/test/run-pass/regions-static-closure.rs
@@ -20,7 +20,7 @@ fn call_static_closure(cl: closure_box/&static) {
     (cl.cl)();
 }
 
-fn main() {
+pub fn main() {
     let cl_box = box_it(|| debug!("Hello, world!"));
     call_static_closure(move cl_box);
 }
diff --git a/src/test/run-pass/regions-trait.rs b/src/test/run-pass/regions-trait.rs
index 575fefa9db5..86da7c722ff 100644
--- a/src/test/run-pass/regions-trait.rs
+++ b/src/test/run-pass/regions-trait.rs
@@ -26,7 +26,7 @@ fn get_v(gc: get_ctxt) -> uint {
     gc.get_ctxt().v
 }
 
-fn main() {
+pub fn main() {
     let ctxt = Ctxt { v: 22 };
     let hc = HasCtxt { c: &ctxt };
 
diff --git a/src/test/run-pass/repeated-vector-syntax.rs b/src/test/run-pass/repeated-vector-syntax.rs
index fe319fd0049..49d0c49b396 100644
--- a/src/test/run-pass/repeated-vector-syntax.rs
+++ b/src/test/run-pass/repeated-vector-syntax.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = [ @[true], ..512 ];
     let y = [ 0, ..1 ];
     error!("%?", x);
diff --git a/src/test/run-pass/resolve-issue-2428.rs b/src/test/run-pass/resolve-issue-2428.rs
index c8f64bec19d..b5d3514154a 100644
--- a/src/test/run-pass/resolve-issue-2428.rs
+++ b/src/test/run-pass/resolve-issue-2428.rs
@@ -12,4 +12,4 @@
 
 const foo: int = 4 >> 1;
 enum bs { thing = foo }
-fn main() { assert(thing as int == foo); }
+pub fn main() { assert(thing as int == foo); }
diff --git a/src/test/run-pass/resource-assign-is-not-copy.rs b/src/test/run-pass/resource-assign-is-not-copy.rs
index 72c9cce6b7b..9de6fbebf85 100644
--- a/src/test/run-pass/resource-assign-is-not-copy.rs
+++ b/src/test/run-pass/resource-assign-is-not-copy.rs
@@ -24,7 +24,7 @@ fn r(i: @mut int) -> r {
     }
 }
 
-fn main() {
+pub fn main() {
     let i = @mut 0;
     // Even though these look like copies, they are guaranteed not to be
     {
diff --git a/src/test/run-pass/resource-cycle.rs b/src/test/run-pass/resource-cycle.rs
index f2926c5e1c5..fa9832125b3 100644
--- a/src/test/run-pass/resource-cycle.rs
+++ b/src/test/run-pass/resource-cycle.rs
@@ -41,7 +41,7 @@ struct Node {
     r: r
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let i1 = ~0;
         let i1p = cast::reinterpret_cast(&i1);
diff --git a/src/test/run-pass/resource-cycle2.rs b/src/test/run-pass/resource-cycle2.rs
index 56ca229b055..0b7179cc819 100644
--- a/src/test/run-pass/resource-cycle2.rs
+++ b/src/test/run-pass/resource-cycle2.rs
@@ -41,7 +41,7 @@ struct Node {
     r: r
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let i1 = ~0xA;
         let i1p = cast::reinterpret_cast(&i1);
diff --git a/src/test/run-pass/resource-cycle3.rs b/src/test/run-pass/resource-cycle3.rs
index 59a6d703c7c..4bec2f10f98 100644
--- a/src/test/run-pass/resource-cycle3.rs
+++ b/src/test/run-pass/resource-cycle3.rs
@@ -50,7 +50,7 @@ struct Node {
     r: R
 }
 
-fn main() { 
+pub fn main() { 
     unsafe {
         let i1 = ~0xA;
         let i1p = cast::reinterpret_cast(&i1);
diff --git a/src/test/run-pass/resource-destruct.rs b/src/test/run-pass/resource-destruct.rs
index f60df9300ef..6d4ddd13041 100644
--- a/src/test/run-pass/resource-destruct.rs
+++ b/src/test/run-pass/resource-destruct.rs
@@ -28,7 +28,7 @@ fn shrinky_pointer(i: @@mut int) -> shrinky_pointer {
     }
 }
 
-fn main() {
+pub fn main() {
     let my_total = @@mut 10;
     { let pt = move shrinky_pointer(my_total); assert (pt.look_at() == 10); }
     log(error, fmt!("my_total = %d", **my_total));
diff --git a/src/test/run-pass/resource-generic.rs b/src/test/run-pass/resource-generic.rs
index 7165d6089e8..86e023c4e8a 100644
--- a/src/test/run-pass/resource-generic.rs
+++ b/src/test/run-pass/resource-generic.rs
@@ -29,7 +29,7 @@ fn finish<T: Copy>(arg: Arg<T>) -> finish<T> {
     }
 }
 
-fn main() {
+pub fn main() {
     let box = @mut 10;
     fn dec_box(&&i: @mut int) { *i -= 1; }
 
diff --git a/src/test/run-pass/resource-in-struct.rs b/src/test/run-pass/resource-in-struct.rs
index 8fda3d0d949..50e60cb0f37 100644
--- a/src/test/run-pass/resource-in-struct.rs
+++ b/src/test/run-pass/resource-in-struct.rs
@@ -34,7 +34,7 @@ enum option<T> { none, some(T), }
 
 fn sink(res: option<close_res>) { }
 
-fn main() {
+pub fn main() {
     let c = @mut true;
     sink(none);
     sink(some(close_res(c)));
diff --git a/src/test/run-pass/ret-bang.rs b/src/test/run-pass/ret-bang.rs
index a7c3d32890e..5086e8af50a 100644
--- a/src/test/run-pass/ret-bang.rs
+++ b/src/test/run-pass/ret-bang.rs
@@ -18,4 +18,4 @@ fn okay(i: uint) -> int {
     if i == 3u { my_err(~"I don't like three"); } else { return 42; }
 }
 
-fn main() { okay(4u); }
+pub fn main() { okay(4u); }
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 9ecc7168f6e..97fa11bef1b 100644
--- a/src/test/run-pass/ret-break-cont-in-block.rs
+++ b/src/test/run-pass/ret-break-cont-in-block.rs
@@ -50,7 +50,7 @@ fn ret_deep() -> ~str {
     return ~"bye";
 }
 
-fn main() {
+pub fn main() {
     let mut last = 0;
     for vec::all(~[1, 2, 3, 4, 5, 6, 7]) |e| {
         last = *e;
diff --git a/src/test/run-pass/ret-none.rs b/src/test/run-pass/ret-none.rs
index 5e3e543e09e..1df01a5e579 100644
--- a/src/test/run-pass/ret-none.rs
+++ b/src/test/run-pass/ret-none.rs
@@ -14,4 +14,4 @@ enum option<T> { none, some(T), }
 
 fn f<T: Copy>() -> option<T> { return none; }
 
-fn main() { f::<int>(); }
+pub fn main() { f::<int>(); }
diff --git a/src/test/run-pass/return-nil.rs b/src/test/run-pass/return-nil.rs
index a53d5aa3d6a..c86c6394228 100644
--- a/src/test/run-pass/return-nil.rs
+++ b/src/test/run-pass/return-nil.rs
@@ -12,4 +12,4 @@
 
 fn f() { let x: () = (); return x; }
 
-fn main() { let x = f(); }
+pub fn main() { let x = f(); }
diff --git a/src/test/run-pass/rt-sched-1.rs b/src/test/run-pass/rt-sched-1.rs
index 6922156f5ef..badd9632cc8 100644
--- a/src/test/run-pass/rt-sched-1.rs
+++ b/src/test/run-pass/rt-sched-1.rs
@@ -25,7 +25,7 @@ extern mod rustrt {
     pub fn start_task(id: task_id, f: closure);
 }
 
-fn main() {
+pub fn main() {
     unsafe {
         let (po, ch) = stream();
         let parent_sched_id = rustrt::rust_get_sched_id();
diff --git a/src/test/run-pass/self-shadowing-import.rs b/src/test/run-pass/self-shadowing-import.rs
index 22562d65e37..7846db4ff2f 100644
--- a/src/test/run-pass/self-shadowing-import.rs
+++ b/src/test/run-pass/self-shadowing-import.rs
@@ -23,4 +23,4 @@ mod c {
     pub fn bar() { assert (a::foo() == 1); }
 }
 
-fn main() { c::bar(); }
+pub fn main() { c::bar(); }
diff --git a/src/test/run-pass/self-type-param.rs b/src/test/run-pass/self-type-param.rs
index ea42045fc46..d0d20d096b4 100644
--- a/src/test/run-pass/self-type-param.rs
+++ b/src/test/run-pass/self-type-param.rs
@@ -12,5 +12,5 @@ impl S : MyTrait {
     }
 }
 
-fn main() {}
+pub fn main() {}
 
diff --git a/src/test/run-pass/send-iloop.rs b/src/test/run-pass/send-iloop.rs
index a539777f84e..848eb64235d 100644
--- a/src/test/run-pass/send-iloop.rs
+++ b/src/test/run-pass/send-iloop.rs
@@ -29,7 +29,7 @@ fn iloop() {
     }
 }
 
-fn main() {
+pub fn main() {
     for uint::range(0u, 16u) |_i| {
         task::spawn_unlinked(|| iloop() );
     }
diff --git a/src/test/run-pass/send-resource.rs b/src/test/run-pass/send-resource.rs
index be0546c6883..11d1af2b399 100644
--- a/src/test/run-pass/send-resource.rs
+++ b/src/test/run-pass/send-resource.rs
@@ -24,7 +24,7 @@ fn test(f: int) -> test {
     }
 }
 
-fn main() {
+pub fn main() {
     let (p, c) = stream();
 
     do task::spawn() {
diff --git a/src/test/run-pass/send-type-inference.rs b/src/test/run-pass/send-type-inference.rs
index c2f7ed28f81..bf1ab6e07d2 100644
--- a/src/test/run-pass/send-type-inference.rs
+++ b/src/test/run-pass/send-type-inference.rs
@@ -17,4 +17,4 @@ fn cache_server<K: Owned, V: Owned>(c: Chan<Chan<command<K, V>>>) {
     let (ctrl_port, ctrl_chan) = stream();
     c.send(ctrl_chan);
 }
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/sendable-class.rs b/src/test/run-pass/sendable-class.rs
index 0a1afc68a5b..a5691e289d7 100644
--- a/src/test/run-pass/sendable-class.rs
+++ b/src/test/run-pass/sendable-class.rs
@@ -22,7 +22,7 @@ fn foo(i:int, j: char) -> foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let (_po, ch) = pipes::stream();
     ch.send(foo(42, 'c'));
 }
\ No newline at end of file
diff --git a/src/test/run-pass/sendfn-deep-copy.rs b/src/test/run-pass/sendfn-deep-copy.rs
index 01a480ff25d..520ddf3f73a 100644
--- a/src/test/run-pass/sendfn-deep-copy.rs
+++ b/src/test/run-pass/sendfn-deep-copy.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { test05(); }
+pub fn main() { test05(); }
 
 fn mk_counter<A:Copy>() -> fn~(A) -> (A,uint) {
     // The only reason that the counter is generic is so that it closes
diff --git a/src/test/run-pass/sendfn-generic-fn.rs b/src/test/run-pass/sendfn-generic-fn.rs
index 8cc1d77a3d3..be4b609afab 100644
--- a/src/test/run-pass/sendfn-generic-fn.rs
+++ b/src/test/run-pass/sendfn-generic-fn.rs
@@ -11,7 +11,7 @@
 // xfail-fast
 #[legacy_modes];
 
-fn main() { test05(); }
+pub fn main() { test05(); }
 
 struct Pair<A,B> { a: A, b: B }
 
diff --git a/src/test/run-pass/sendfn-is-a-block.rs b/src/test/run-pass/sendfn-is-a-block.rs
index a9c16ea634e..2d995191785 100644
--- a/src/test/run-pass/sendfn-is-a-block.rs
+++ b/src/test/run-pass/sendfn-is-a-block.rs
@@ -15,7 +15,7 @@ fn test(f: fn(uint) -> uint) -> uint {
     return f(22u);
 }
 
-fn main() {
+pub fn main() {
     let y = test(fn~(x: uint) -> uint { return 4u * x; });
     assert y == 88u;
 }
diff --git a/src/test/run-pass/sendfn-spawn-with-fn-arg.rs b/src/test/run-pass/sendfn-spawn-with-fn-arg.rs
index 504d7948ffc..d86dc4d56d7 100644
--- a/src/test/run-pass/sendfn-spawn-with-fn-arg.rs
+++ b/src/test/run-pass/sendfn-spawn-with-fn-arg.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { test05(); }
+pub fn main() { test05(); }
 
 fn test05_start(&&f: fn~(int)) {
     f(22);
diff --git a/src/test/run-pass/seq-compare.rs b/src/test/run-pass/seq-compare.rs
index 10e44b2b9d1..6a7832fe6a9 100644
--- a/src/test/run-pass/seq-compare.rs
+++ b/src/test/run-pass/seq-compare.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     assert (~"hello" < ~"hellr");
     assert (~"hello " > ~"hello");
     assert (~"hello" != ~"there");
diff --git a/src/test/run-pass/shadow.rs b/src/test/run-pass/shadow.rs
index e3fe7a34ff9..a23bb21c77d 100644
--- a/src/test/run-pass/shadow.rs
+++ b/src/test/run-pass/shadow.rs
@@ -28,4 +28,4 @@ fn foo(c: ~[int]) {
 
 enum t<T> { none, some(T), }
 
-fn main() { let x = 10; let x = x + 20; assert (x == 30); foo(~[]); }
+pub fn main() { let x = 10; let x = x + 20; assert (x == 30); foo(~[]); }
diff --git a/src/test/run-pass/shape_intrinsic_tag_then_rec.rs b/src/test/run-pass/shape_intrinsic_tag_then_rec.rs
index 53a09b385b3..578e8d9318f 100644
--- a/src/test/run-pass/shape_intrinsic_tag_then_rec.rs
+++ b/src/test/run-pass/shape_intrinsic_tag_then_rec.rs
@@ -33,7 +33,7 @@ type ty = Spanned<ty_>;
 
 struct X { sp: Span, path: path }
 
-fn main() {
+pub fn main() {
     let sp: Span = Span {lo: 57451u, hi: 57542u, expanded_from: os_none};
     let t: @ty = @Spanned { data: 3u, span: sp };
     let p_: Path_ = Path_ { global: true, idents: ~[~"hi"], types: ~[t] };
diff --git a/src/test/run-pass/shebang.rs b/src/test/run-pass/shebang.rs
index e4a9dee4ed7..f47faca52c0 100644
--- a/src/test/run-pass/shebang.rs
+++ b/src/test/run-pass/shebang.rs
@@ -11,4 +11,4 @@
 
 // pp-exact
 
-fn main() { io::println("Hello World"); }
+pub fn main() { io::println("Hello World"); }
diff --git a/src/test/run-pass/shift.rs b/src/test/run-pass/shift.rs
index 1b650a48be1..ad0b82a905b 100644
--- a/src/test/run-pass/shift.rs
+++ b/src/test/run-pass/shift.rs
@@ -11,7 +11,7 @@
 // Testing shifts for various combinations of integers
 // Issue #1570
 
-fn main() {
+pub fn main() {
     test_misc();
     test_expr();
     test_const();
diff --git a/src/test/run-pass/signed-shift-const-eval.rs b/src/test/run-pass/signed-shift-const-eval.rs
index 932d94a3d6c..fbce196dd39 100644
--- a/src/test/run-pass/signed-shift-const-eval.rs
+++ b/src/test/run-pass/signed-shift-const-eval.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 enum test { thing = -5 >> 1u }
-fn main() {
+pub fn main() {
     assert(thing as int == -3);
 }
diff --git a/src/test/run-pass/simple-alt-generic-tag.rs b/src/test/run-pass/simple-alt-generic-tag.rs
index a7d5433ff83..6f7f2af6820 100644
--- a/src/test/run-pass/simple-alt-generic-tag.rs
+++ b/src/test/run-pass/simple-alt-generic-tag.rs
@@ -12,7 +12,7 @@
 
 enum opt<T> { none, }
 
-fn main() {
+pub fn main() {
     let x = none::<int>;
     match x { none::<int> => { debug!("hello world"); } }
 }
diff --git a/src/test/run-pass/simple-generic-alt.rs b/src/test/run-pass/simple-generic-alt.rs
index 865e5f735a3..3f3b1c8b783 100644
--- a/src/test/run-pass/simple-generic-alt.rs
+++ b/src/test/run-pass/simple-generic-alt.rs
@@ -12,4 +12,4 @@
 
 enum clam<T> { a(T), }
 
-fn main() { let c = a(2); match c { a::<int>(_) => { } } }
+pub fn main() { let c = a(2); match c { a::<int>(_) => { } } }
diff --git a/src/test/run-pass/simple-generic-tag.rs b/src/test/run-pass/simple-generic-tag.rs
index 893d5fc934e..8a36f9e17f3 100644
--- a/src/test/run-pass/simple-generic-tag.rs
+++ b/src/test/run-pass/simple-generic-tag.rs
@@ -12,4 +12,4 @@
 
 enum clam<T> { a(T), }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/simple-infer.rs b/src/test/run-pass/simple-infer.rs
index bb20951ca54..137c973d590 100644
--- a/src/test/run-pass/simple-infer.rs
+++ b/src/test/run-pass/simple-infer.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let mut n; n = 1; log(debug, n); }
+pub fn main() { let mut n; n = 1; log(debug, n); }
diff --git a/src/test/run-pass/size-and-align.rs b/src/test/run-pass/size-and-align.rs
index 73dd4c222b9..b94439e6b9d 100644
--- a/src/test/run-pass/size-and-align.rs
+++ b/src/test/run-pass/size-and-align.rs
@@ -21,7 +21,7 @@ fn uhoh<T>(v: ~[clam<T>]) {
     }
 }
 
-fn main() {
+pub fn main() {
     let v: ~[clam<int>] = ~[b::<int>, b::<int>, a::<int>(42, 17)];
     uhoh::<int>(v);
 }
diff --git a/src/test/run-pass/spawn-fn.rs b/src/test/run-pass/spawn-fn.rs
index 5ae5bbaeec9..c2a0015f6e6 100644
--- a/src/test/run-pass/spawn-fn.rs
+++ b/src/test/run-pass/spawn-fn.rs
@@ -15,7 +15,7 @@ fn x(s: ~str, n: int) {
     log(debug, n);
 }
 
-fn main() {
+pub fn main() {
     task::spawn(|| x(~"hello from first spawned fn", 65) );
     task::spawn(|| x(~"hello from second spawned fn", 66) );
     task::spawn(|| x(~"hello from third spawned fn", 67) );
diff --git a/src/test/run-pass/spawn-types.rs b/src/test/run-pass/spawn-types.rs
index f722a91d196..6090f2eb71c 100644
--- a/src/test/run-pass/spawn-types.rs
+++ b/src/test/run-pass/spawn-types.rs
@@ -22,7 +22,7 @@ fn iotask(cx: &ctx, ip: ~str) {
     assert (ip == ~"localhost");
 }
 
-fn main() {
+pub fn main() {
     let (p, ch) = stream::<int>();
     task::spawn(|| iotask(&ch, ~"localhost") );
 }
diff --git a/src/test/run-pass/spawn.rs b/src/test/run-pass/spawn.rs
index 35680a90cf2..8c328081186 100644
--- a/src/test/run-pass/spawn.rs
+++ b/src/test/run-pass/spawn.rs
@@ -13,7 +13,7 @@
 extern mod std;
 
 
-fn main() {
+pub fn main() {
     task::spawn(|| child(10) );
 }
 
diff --git a/src/test/run-pass/spawn2.rs b/src/test/run-pass/spawn2.rs
index fb3dc1ff741..f62593cecec 100644
--- a/src/test/run-pass/spawn2.rs
+++ b/src/test/run-pass/spawn2.rs
@@ -9,7 +9,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { task::spawn(|| child((10, 20, 30, 40, 50, 60, 70, 80, 90)) ); }
+pub fn main() { task::spawn(|| child((10, 20, 30, 40, 50, 60, 70, 80, 90)) ); }
 
 fn child(&&args: (int, int, int, int, int, int, int, int, int)) {
     let (i1, i2, i3, i4, i5, i6, i7, i8, i9) = args;
diff --git a/src/test/run-pass/stable-addr-of.rs b/src/test/run-pass/stable-addr-of.rs
index bbfbf3d02c1..f1f50d83d1a 100644
--- a/src/test/run-pass/stable-addr-of.rs
+++ b/src/test/run-pass/stable-addr-of.rs
@@ -10,7 +10,7 @@
 
 // Issue #2040
 
-fn main() {
+pub fn main() {
     let foo = 1;
     assert ptr::addr_of(&foo) == ptr::addr_of(&foo);
 }
diff --git a/src/test/run-pass/stat.rs b/src/test/run-pass/stat.rs
index 9345ba18463..e71444294dc 100644
--- a/src/test/run-pass/stat.rs
+++ b/src/test/run-pass/stat.rs
@@ -14,7 +14,7 @@ extern mod std;
 use io::WriterUtil;
 use std::tempfile;
 
-fn main() {
+pub fn main() {
     let dir = option::unwrap(tempfile::mkdtemp(&Path("."), ""));
     let path = dir.with_filename("file");
 
diff --git a/src/test/run-pass/static-fn-inline-xc.rs b/src/test/run-pass/static-fn-inline-xc.rs
index aa19fa56040..000f43684d4 100644
--- a/src/test/run-pass/static-fn-inline-xc.rs
+++ b/src/test/run-pass/static-fn-inline-xc.rs
@@ -15,6 +15,6 @@ extern mod mycore(name ="static_fn_inline_xc_aux");
 
 use mycore::num;
 
-fn main() {
+pub fn main() {
     let _1:float = num::Num2::from_int2(1i);
 }
diff --git a/src/test/run-pass/static-fn-trait-xc.rs b/src/test/run-pass/static-fn-trait-xc.rs
index eb465ecff32..55db2018aae 100644
--- a/src/test/run-pass/static-fn-trait-xc.rs
+++ b/src/test/run-pass/static-fn-trait-xc.rs
@@ -5,6 +5,6 @@ extern mod mycore(name ="static_fn_trait_xc_aux");
 
 use mycore::num;
 
-fn main() {
+pub fn main() {
     let _1:float = num::Num2::from_int2(1i);
 }
diff --git a/src/test/run-pass/static-impl.rs b/src/test/run-pass/static-impl.rs
index 6987dfab1b5..2aeabcf4872 100644
--- a/src/test/run-pass/static-impl.rs
+++ b/src/test/run-pass/static-impl.rs
@@ -54,7 +54,7 @@ impl<T> ~[T]: vec_utils<T> {
     }
 }
 
-fn main() {
+pub fn main() {
     assert 10u.plus() == 30;
     assert (~"hi").plus() == 200;
 
diff --git a/src/test/run-pass/static-method-in-trait-with-tps-intracrate.rs b/src/test/run-pass/static-method-in-trait-with-tps-intracrate.rs
index 6eba8771fce..bf70b86a4c6 100644
--- a/src/test/run-pass/static-method-in-trait-with-tps-intracrate.rs
+++ b/src/test/run-pass/static-method-in-trait-with-tps-intracrate.rs
@@ -28,7 +28,7 @@ impl FromThinAir: Deserializer {
     fn read_int() -> int { 22 }
 }
 
-fn main() {
+pub fn main() {
     let d = FromThinAir { dummy: () };
     let i: int = Deserializable::deserialize(&d);
     assert i == 22;
diff --git a/src/test/run-pass/static-method-test.rs b/src/test/run-pass/static-method-test.rs
index 9ee65547cba..28bdcddb3ad 100644
--- a/src/test/run-pass/static-method-test.rs
+++ b/src/test/run-pass/static-method-test.rs
@@ -78,7 +78,7 @@ fn seq_range<BT: buildable<int>>(lo: uint, hi: uint) -> BT {
     }
 }
 
-fn main() {
+pub fn main() {
     let v: @[int] = seq_range(0, 10);
     assert v == @[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
 
diff --git a/src/test/run-pass/static-method-xcrate.rs b/src/test/run-pass/static-method-xcrate.rs
index ca42742a576..30fcc7aec34 100644
--- a/src/test/run-pass/static-method-xcrate.rs
+++ b/src/test/run-pass/static-method-xcrate.rs
@@ -15,7 +15,7 @@ extern mod static_methods_crate;
 use static_methods_crate::read;
 use readMaybeRenamed = static_methods_crate::read::readMaybe;
 
-fn main() {
+pub fn main() {
     let result: int = read(~"5");
     assert result == 5;
     assert readMaybeRenamed(~"false") == Some(false);
diff --git a/src/test/run-pass/static-methods-in-traits.rs b/src/test/run-pass/static-methods-in-traits.rs
index 6e5160da763..d144181984f 100644
--- a/src/test/run-pass/static-methods-in-traits.rs
+++ b/src/test/run-pass/static-methods-in-traits.rs
@@ -26,7 +26,7 @@ mod a {
 	}
 }
 
-fn main() {
+pub fn main() {
 	let x: int = a::Foo::foo();
 	let y: uint = a::Foo::foo();
 	assert x == 3;
diff --git a/src/test/run-pass/static-methods-in-traits2.rs b/src/test/run-pass/static-methods-in-traits2.rs
index 7851aa481d3..8c61f60eaac 100644
--- a/src/test/run-pass/static-methods-in-traits2.rs
+++ b/src/test/run-pass/static-methods-in-traits2.rs
@@ -14,6 +14,6 @@ pub impl float: NumConv {
     pure fn to_float(&self) -> float { *self }
 }
 
-fn main() {
+pub fn main() {
     let _: float = Number::from(0.0f);
 }
diff --git a/src/test/run-pass/str-append.rs b/src/test/run-pass/str-append.rs
index 0bf640b1251..a3eaf6198fb 100644
--- a/src/test/run-pass/str-append.rs
+++ b/src/test/run-pass/str-append.rs
@@ -32,4 +32,4 @@ fn test2() {
     assert (b == ~"ABCabcABC");
 }
 
-fn main() { test1(); test2(); }
+pub fn main() { test1(); test2(); }
diff --git a/src/test/run-pass/str-concat.rs b/src/test/run-pass/str-concat.rs
index acfbde9783c..6901adaec70 100644
--- a/src/test/run-pass/str-concat.rs
+++ b/src/test/run-pass/str-concat.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let a: ~str = ~"hello";
     let b: ~str = ~"world";
     let s: ~str = a + b;
diff --git a/src/test/run-pass/str-growth.rs b/src/test/run-pass/str-growth.rs
index 7835f867d14..3240ab0831d 100644
--- a/src/test/run-pass/str-growth.rs
+++ b/src/test/run-pass/str-growth.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let mut s = ~"a";
     s += ~"b";
     assert (s[0] == 'a' as u8);
diff --git a/src/test/run-pass/str-idx.rs b/src/test/run-pass/str-idx.rs
index 2e73877bff1..a9484ccccdc 100644
--- a/src/test/run-pass/str-idx.rs
+++ b/src/test/run-pass/str-idx.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let s = ~"hello";
     let c: u8 = s[4];
     log(debug, c);
diff --git a/src/test/run-pass/str-multiline.rs b/src/test/run-pass/str-multiline.rs
index 54119941325..8ff84536227 100644
--- a/src/test/run-pass/str-multiline.rs
+++ b/src/test/run-pass/str-multiline.rs
@@ -13,7 +13,7 @@
 // -*- rust -*-
 extern mod std;
 
-fn main() {
+pub fn main() {
     let a: ~str = ~"this \
 is a test";
     let b: ~str =
diff --git a/src/test/run-pass/string-self-append.rs b/src/test/run-pass/string-self-append.rs
index 54ca0f195ee..7bda8476763 100644
--- a/src/test/run-pass/string-self-append.rs
+++ b/src/test/run-pass/string-self-append.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
     // Make sure we properly handle repeated self-appends.
     let mut a: ~str = ~"A";
     let mut i = 20;
diff --git a/src/test/run-pass/struct-deref.rs b/src/test/run-pass/struct-deref.rs
index d04bd20442e..5bf2b70e7fb 100644
--- a/src/test/run-pass/struct-deref.rs
+++ b/src/test/run-pass/struct-deref.rs
@@ -10,7 +10,7 @@
 
 struct Foo(int);
 
-fn main() {
+pub fn main() {
     let x: Foo = Foo(2);
     assert *x == 2;
 }
diff --git a/src/test/run-pass/struct-destructuring-cross-crate.rs b/src/test/run-pass/struct-destructuring-cross-crate.rs
index c2870f13fa2..6c2324bbc50 100644
--- a/src/test/run-pass/struct-destructuring-cross-crate.rs
+++ b/src/test/run-pass/struct-destructuring-cross-crate.rs
@@ -13,7 +13,7 @@
 
 extern mod struct_destructuring_cross_crate;
 
-fn main() {
+pub fn main() {
     let x = struct_destructuring_cross_crate::S { x: 1, y: 2 };
     let struct_destructuring_cross_crate::S { x: a, y: b } = x;
     assert a == 1;
diff --git a/src/test/run-pass/struct-field-assignability.rs b/src/test/run-pass/struct-field-assignability.rs
index 93c490bd5f3..2df92ace6a5 100644
--- a/src/test/run-pass/struct-field-assignability.rs
+++ b/src/test/run-pass/struct-field-assignability.rs
@@ -2,7 +2,7 @@ struct Foo {
     x: &int
 }
 
-fn main() {
+pub fn main() {
     let f = Foo { x: @3 };
     assert *f.x == 3;
 }
diff --git a/src/test/run-pass/struct-like-variant-construct.rs b/src/test/run-pass/struct-like-variant-construct.rs
index 5796dbd73e2..0d14d90c1f1 100644
--- a/src/test/run-pass/struct-like-variant-construct.rs
+++ b/src/test/run-pass/struct-like-variant-construct.rs
@@ -19,7 +19,7 @@ enum Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = Bar { a: 2, b: 3 };
 }
 
diff --git a/src/test/run-pass/struct-like-variant-match.rs b/src/test/run-pass/struct-like-variant-match.rs
index 4c01f115295..e36f2d91e42 100644
--- a/src/test/run-pass/struct-like-variant-match.rs
+++ b/src/test/run-pass/struct-like-variant-match.rs
@@ -32,7 +32,7 @@ fn f(x: &Foo) {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = Bar { x: 1, y: 2 };
     f(&x);
     let y = Baz { x: 1.0, y: 2.0 };
diff --git a/src/test/run-pass/struct-literal-dtor.rs b/src/test/run-pass/struct-literal-dtor.rs
index 0afeb14ff19..668e7a80b35 100644
--- a/src/test/run-pass/struct-literal-dtor.rs
+++ b/src/test/run-pass/struct-literal-dtor.rs
@@ -18,6 +18,6 @@ impl foo : Drop {
     }
 }
 
-fn main() {
+pub fn main() {
     let _z = foo { x: ~"Hello" };
 }
diff --git a/src/test/run-pass/struct-pattern-matching.rs b/src/test/run-pass/struct-pattern-matching.rs
index bf95f20f4aa..1d7bcb2585f 100644
--- a/src/test/run-pass/struct-pattern-matching.rs
+++ b/src/test/run-pass/struct-pattern-matching.rs
@@ -13,7 +13,7 @@ struct Foo {
     y: int,
 }
 
-fn main() {
+pub fn main() {
     let a = Foo { x: 1, y: 2 };
     match a {
         Foo { x: x, y: y } => io::println(fmt!("yes, %d, %d", x, y))
diff --git a/src/test/run-pass/struct-return.rs b/src/test/run-pass/struct-return.rs
index 07855181501..3d75f7b9050 100644
--- a/src/test/run-pass/struct-return.rs
+++ b/src/test/run-pass/struct-return.rs
@@ -55,7 +55,7 @@ fn test2() {
 fn test2() {
 }
 
-fn main() {
+pub fn main() {
     test1();
     test2();
 }
diff --git a/src/test/run-pass/structured-compare.rs b/src/test/run-pass/structured-compare.rs
index 18398ad6710..17a4c904470 100644
--- a/src/test/run-pass/structured-compare.rs
+++ b/src/test/run-pass/structured-compare.rs
@@ -19,7 +19,7 @@ impl foo : cmp::Eq {
     pure fn ne(&self, other: &foo) -> bool { !(*self).eq(other) }
 }
 
-fn main() {
+pub fn main() {
     let a = (1, 2, 3);
     let b = (1, 2, 3);
     assert (a == b);
diff --git a/src/test/run-pass/super.rs b/src/test/run-pass/super.rs
index 0eb922643c6..2fe0696b2f2 100644
--- a/src/test/run-pass/super.rs
+++ b/src/test/run-pass/super.rs
@@ -7,6 +7,6 @@ pub mod a {
     }
 }
 
-fn main() {
+pub fn main() {
 }
 
diff --git a/src/test/run-pass/supported-cast.rs b/src/test/run-pass/supported-cast.rs
index f8bd90b0eaf..cc9214121e9 100644
--- a/src/test/run-pass/supported-cast.rs
+++ b/src/test/run-pass/supported-cast.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
   let f = 1 as *libc::FILE;
   log(debug, f as int);
   log(debug, f as uint);
diff --git a/src/test/run-pass/swap-1.rs b/src/test/run-pass/swap-1.rs
index a67a8d7724b..d4d4668cd55 100644
--- a/src/test/run-pass/swap-1.rs
+++ b/src/test/run-pass/swap-1.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut x = 3; let mut y = 7;
     x <-> y; assert (x == 7); assert (y == 3);
 }
diff --git a/src/test/run-pass/swap-2.rs b/src/test/run-pass/swap-2.rs
index 6a0ee0c69c8..d80c7e9558f 100644
--- a/src/test/run-pass/swap-2.rs
+++ b/src/test/run-pass/swap-2.rs
@@ -10,7 +10,7 @@
 
 fn swap<T>(v: &[mut T], i: int, j: int) { v[i] <-> v[j]; }
 
-fn main() {
+pub fn main() {
     let a: ~[mut int] = ~[mut 0, 1, 2, 3, 4, 5, 6];
     swap(a, 2, 4);
     assert (a[2] == 4);
diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs
index 43ba9504ee2..ddd0743083f 100644
--- a/src/test/run-pass/syntax-extension-fmt.rs
+++ b/src/test/run-pass/syntax-extension-fmt.rs
@@ -16,7 +16,7 @@ fn test(actual: ~str, expected: ~str) {
     assert (actual == expected);
 }
 
-fn main() {
+pub fn main() {
     test(fmt!("hello %d friends and %s things", 10, ~"formatted"),
          ~"hello 10 friends and formatted things");
 
diff --git a/src/test/run-pass/syntax-extension-minor.rs b/src/test/run-pass/syntax-extension-minor.rs
index aafd71d9162..42a475866a9 100644
--- a/src/test/run-pass/syntax-extension-minor.rs
+++ b/src/test/run-pass/syntax-extension-minor.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 
-fn main() {
+pub fn main() {
     let asdf_fdsa = ~"<.<";
     assert (concat_idents!(asd, f_f, dsa) == ~"<.<");
 
diff --git a/src/test/run-pass/syntax-extension-shell.rs b/src/test/run-pass/syntax-extension-shell.rs
index f0ea92b65d3..cc934b97368 100644
--- a/src/test/run-pass/syntax-extension-shell.rs
+++ b/src/test/run-pass/syntax-extension-shell.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // xfail-test
-fn main() {
+pub fn main() {
   let s = shell!( uname -a );
   log(debug, s);
 }
diff --git a/src/test/run-pass/syntax-extension-source-utils.rs b/src/test/run-pass/syntax-extension-source-utils.rs
index af1b20eb49d..342ee4e3510 100644
--- a/src/test/run-pass/syntax-extension-source-utils.rs
+++ b/src/test/run-pass/syntax-extension-source-utils.rs
@@ -17,7 +17,7 @@ pub mod m1 {
     }
 }
 
-fn main() {
+pub fn main() {
     assert(line!() == 21);
     assert(col!() == 11);
     assert(file!().to_owned().ends_with(~"syntax-extension-source-utils.rs"));
diff --git a/src/test/run-pass/tag-align-dyn-u64.rs b/src/test/run-pass/tag-align-dyn-u64.rs
index 4e358d18f6f..ffbd91d0a3a 100644
--- a/src/test/run-pass/tag-align-dyn-u64.rs
+++ b/src/test/run-pass/tag-align-dyn-u64.rs
@@ -28,7 +28,7 @@ fn is_8_byte_aligned(&&u: a_tag<u64>) -> bool {
     return (p & 7u) == 0u;
 }
 
-fn main() {
+pub fn main() {
     let x = mk_rec();
     assert is_8_byte_aligned(x.t);
 }
diff --git a/src/test/run-pass/tag-align-dyn-variants.rs b/src/test/run-pass/tag-align-dyn-variants.rs
index 04ef8734247..953b4d55177 100644
--- a/src/test/run-pass/tag-align-dyn-variants.rs
+++ b/src/test/run-pass/tag-align-dyn-variants.rs
@@ -38,7 +38,7 @@ fn variant_data_is_aligned<A,B>(amnt: uint, &&u: a_tag<A,B>) -> bool {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = mk_rec(22u64, 23u64);
     assert is_aligned(8u, x.tA);
     assert variant_data_is_aligned(8u, x.tA);
diff --git a/src/test/run-pass/tag-align-shape.rs b/src/test/run-pass/tag-align-shape.rs
index 6eaa15bf329..2ebb9b2a7d5 100644
--- a/src/test/run-pass/tag-align-shape.rs
+++ b/src/test/run-pass/tag-align-shape.rs
@@ -21,7 +21,7 @@ type t_rec = {
     t: a_tag
 };
 
-fn main() {
+pub fn main() {
     let x = {c8: 22u8, t: a_tag(44u64)};
     let y = fmt!("%?", x);
     debug!("y = %s", y);
diff --git a/src/test/run-pass/tag-align-u64.rs b/src/test/run-pass/tag-align-u64.rs
index b7c2925ba4a..29043554c72 100644
--- a/src/test/run-pass/tag-align-u64.rs
+++ b/src/test/run-pass/tag-align-u64.rs
@@ -28,7 +28,7 @@ fn is_8_byte_aligned(&&u: a_tag) -> bool {
     return (p & 7u64) == 0u64;
 }
 
-fn main() {
+pub fn main() {
     let x = mk_rec();
     assert is_8_byte_aligned(x.t);
 }
diff --git a/src/test/run-pass/tag-disr-val-shape.rs b/src/test/run-pass/tag-disr-val-shape.rs
index 973e210eaf7..244712836d1 100644
--- a/src/test/run-pass/tag-disr-val-shape.rs
+++ b/src/test/run-pass/tag-disr-val-shape.rs
@@ -16,7 +16,7 @@ enum color {
     white = 0xFFFFFF,
 }
 
-fn main() {
+pub fn main() {
     let act = fmt!("%?", red);
     io::println(act);
     assert ~"red" == act;
diff --git a/src/test/run-pass/tag-exports.rs b/src/test/run-pass/tag-exports.rs
index 124afc4364f..e901196387e 100644
--- a/src/test/run-pass/tag-exports.rs
+++ b/src/test/run-pass/tag-exports.rs
@@ -19,7 +19,7 @@ mod alder {
     pub enum marshall { northrup, overton }
 }
 
-fn main() {
+pub fn main() {
   let _pettygrove: burnside = couch;
   let _quimby: everett = flanders;
   let _raleigh: irving = johnson;
diff --git a/src/test/run-pass/tag-in-block.rs b/src/test/run-pass/tag-in-block.rs
index f768d268e62..b3f1d128843 100644
--- a/src/test/run-pass/tag-in-block.rs
+++ b/src/test/run-pass/tag-in-block.rs
@@ -16,4 +16,4 @@ fn foo() {
     fn baz() { zed(nil); }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/tag-variant-disr-val.rs b/src/test/run-pass/tag-variant-disr-val.rs
index 64eb50cf0ff..c573ee376c7 100644
--- a/src/test/run-pass/tag-variant-disr-val.rs
+++ b/src/test/run-pass/tag-variant-disr-val.rs
@@ -26,7 +26,7 @@ impl color : cmp::Eq {
     pure fn ne(&self, other: &color) -> bool { !(*self).eq(other) }
 }
 
-fn main() {
+pub fn main() {
     test_color(red, 0xff0000, ~"red");
     test_color(green, 0x00ff00, ~"green");
     test_color(blue, 0x0000ff, ~"blue");
diff --git a/src/test/run-pass/tag.rs b/src/test/run-pass/tag.rs
index f103a2c14c6..e74237c7494 100644
--- a/src/test/run-pass/tag.rs
+++ b/src/test/run-pass/tag.rs
@@ -36,4 +36,4 @@ impl colour : cmp::Eq {
 
 fn f() { let x = red(1, 2); let y = green; assert (x != y); }
 
-fn main() { f(); }
+pub fn main() { f(); }
diff --git a/src/test/run-pass/tail-call-arg-leak.rs b/src/test/run-pass/tail-call-arg-leak.rs
index fbeaa9c59c8..6649649d55a 100644
--- a/src/test/run-pass/tail-call-arg-leak.rs
+++ b/src/test/run-pass/tail-call-arg-leak.rs
@@ -14,4 +14,4 @@
 // use of tail calls causes arg slot leaks, issue #160.
 fn inner(dummy: ~str, b: bool) { if b { return inner(dummy, false); } }
 
-fn main() { inner(~"hi", true); }
+pub fn main() { inner(~"hi", true); }
diff --git a/src/test/run-pass/tail-cps.rs b/src/test/run-pass/tail-cps.rs
index 50d19d31d41..3d1c9842476 100644
--- a/src/test/run-pass/tail-cps.rs
+++ b/src/test/run-pass/tail-cps.rs
@@ -14,7 +14,7 @@
 // -*- rust -*-
 fn checktrue(rs: bool) -> bool { assert (rs); return true; }
 
-fn main() { let k = checktrue; evenk(42, k); oddk(45, k); }
+pub fn main() { let k = checktrue; evenk(42, k); oddk(45, k); }
 
 fn evenk(n: int, k: extern fn(bool) -> bool) -> bool {
     debug!("evenk");
diff --git a/src/test/run-pass/tail-direct.rs b/src/test/run-pass/tail-direct.rs
index 3e5b6231e57..1a7733274fe 100644
--- a/src/test/run-pass/tail-direct.rs
+++ b/src/test/run-pass/tail-direct.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() { assert (even(42)); assert (odd(45)); }
+pub fn main() { assert (even(42)); assert (odd(45)); }
 
 fn even(n: int) -> bool { if n == 0 { return true; } else { return odd(n - 1); } }
 
diff --git a/src/test/run-pass/task-comm-0.rs b/src/test/run-pass/task-comm-0.rs
index a473d631819..b66f295e1ba 100644
--- a/src/test/run-pass/task-comm-0.rs
+++ b/src/test/run-pass/task-comm-0.rs
@@ -16,7 +16,7 @@ extern mod std;
 use pipes::Chan;
 use pipes::Port;
 
-fn main() { test05(); }
+pub fn main() { test05(); }
 
 fn test05_start(ch : Chan<int>) {
     ch.send(10);
diff --git a/src/test/run-pass/task-comm-1.rs b/src/test/run-pass/task-comm-1.rs
index 2dea2078413..b8e314c4c6e 100644
--- a/src/test/run-pass/task-comm-1.rs
+++ b/src/test/run-pass/task-comm-1.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn start() { debug!("Started / Finished task."); }
 
diff --git a/src/test/run-pass/task-comm-10.rs b/src/test/run-pass/task-comm-10.rs
index 5188ec7b71b..a5d55fd823b 100644
--- a/src/test/run-pass/task-comm-10.rs
+++ b/src/test/run-pass/task-comm-10.rs
@@ -27,7 +27,7 @@ fn start(c: pipes::Chan<pipes::Chan<~str>>) {
     log(error, move b);
 }
 
-fn main() {
+pub fn main() {
     let (p, ch) = pipes::stream();
     let child = task::spawn(|move ch| start(ch) );
 
diff --git a/src/test/run-pass/task-comm-11.rs b/src/test/run-pass/task-comm-11.rs
index 8d0a8a425b0..498b0b74238 100644
--- a/src/test/run-pass/task-comm-11.rs
+++ b/src/test/run-pass/task-comm-11.rs
@@ -18,7 +18,7 @@ fn start(c: pipes::Chan<pipes::Chan<int>>) {
     c.send(move ch);
 }
 
-fn main() {
+pub fn main() {
     let (p, ch) = pipes::stream();
     let child = task::spawn(|move ch| start(ch) );
     let c = p.recv();
diff --git a/src/test/run-pass/task-comm-12.rs b/src/test/run-pass/task-comm-12.rs
index 5f58f8ab2e3..d32e9454f53 100644
--- a/src/test/run-pass/task-comm-12.rs
+++ b/src/test/run-pass/task-comm-12.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn start(&&task_number: int) { debug!("Started / Finished task."); }
 
diff --git a/src/test/run-pass/task-comm-13.rs b/src/test/run-pass/task-comm-13.rs
index 89097776b90..c52facf230b 100644
--- a/src/test/run-pass/task-comm-13.rs
+++ b/src/test/run-pass/task-comm-13.rs
@@ -19,7 +19,7 @@ fn start(c: pipes::Chan<int>, start: int, number_of_messages: int) {
     while i < number_of_messages { c.send(start + i); i += 1; }
 }
 
-fn main() {
+pub fn main() {
     debug!("Check that we don't deadlock.");
     let (p, ch) = pipes::stream();
     task::try(|move ch| start(ch, 0, 10) );
diff --git a/src/test/run-pass/task-comm-14.rs b/src/test/run-pass/task-comm-14.rs
index f49a095c334..dbf8c034935 100644
--- a/src/test/run-pass/task-comm-14.rs
+++ b/src/test/run-pass/task-comm-14.rs
@@ -11,7 +11,7 @@
 // xfail-fast
 #[legacy_modes];
 
-fn main() {
+pub fn main() {
     let po = pipes::PortSet();
 
     // Spawn 10 tasks each sending us back one int.
diff --git a/src/test/run-pass/task-comm-15.rs b/src/test/run-pass/task-comm-15.rs
index d8a537f2c5c..c65e10d36b7 100644
--- a/src/test/run-pass/task-comm-15.rs
+++ b/src/test/run-pass/task-comm-15.rs
@@ -22,7 +22,7 @@ fn start(c: pipes::Chan<int>, i0: int) {
     }
 }
 
-fn main() {
+pub fn main() {
     // Spawn a task that sends us back messages. The parent task
     // is likely to terminate before the child completes, so from
     // the child's point of view the receiver may die. We should
diff --git a/src/test/run-pass/task-comm-16.rs b/src/test/run-pass/task-comm-16.rs
index 83e34ba84e1..91925fc1917 100644
--- a/src/test/run-pass/task-comm-16.rs
+++ b/src/test/run-pass/task-comm-16.rs
@@ -110,7 +110,7 @@ fn test_chan() {
     assert (i == 10);
 }
 
-fn main() {
+pub fn main() {
     test_rec();
     test_vec();
     test_str();
diff --git a/src/test/run-pass/task-comm-17.rs b/src/test/run-pass/task-comm-17.rs
index 269bb1951f1..e146afa3a0f 100644
--- a/src/test/run-pass/task-comm-17.rs
+++ b/src/test/run-pass/task-comm-17.rs
@@ -17,6 +17,6 @@ extern mod std;
 fn f() {
 }
 
-fn main() {
+pub fn main() {
     task::spawn(|| f() );
 }
\ No newline at end of file
diff --git a/src/test/run-pass/task-comm-3.rs b/src/test/run-pass/task-comm-3.rs
index ebbac2d1a0a..97280d37c63 100644
--- a/src/test/run-pass/task-comm-3.rs
+++ b/src/test/run-pass/task-comm-3.rs
@@ -16,7 +16,7 @@ use pipes::Chan;
 use pipes::send;
 use pipes::recv;
 
-fn main() { debug!("===== WITHOUT THREADS ====="); test00(); }
+pub fn main() { debug!("===== WITHOUT THREADS ====="); test00(); }
 
 fn test00_start(ch: Chan<int>, message: int, count: int) {
     debug!("Starting test00_start");
diff --git a/src/test/run-pass/task-comm-4.rs b/src/test/run-pass/task-comm-4.rs
index dc82ae214dc..d7997d93248 100644
--- a/src/test/run-pass/task-comm-4.rs
+++ b/src/test/run-pass/task-comm-4.rs
@@ -10,7 +10,7 @@
 
 use pipes::send;
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn test00() {
     let mut r: int = 0;
diff --git a/src/test/run-pass/task-comm-5.rs b/src/test/run-pass/task-comm-5.rs
index dbf43df4069..f8f19d804c8 100644
--- a/src/test/run-pass/task-comm-5.rs
+++ b/src/test/run-pass/task-comm-5.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn test00() {
     let r: int = 0;
diff --git a/src/test/run-pass/task-comm-6.rs b/src/test/run-pass/task-comm-6.rs
index cad0f4f1dde..5d19075a71e 100644
--- a/src/test/run-pass/task-comm-6.rs
+++ b/src/test/run-pass/task-comm-6.rs
@@ -12,7 +12,7 @@ use pipes::send;
 use pipes::Chan;
 use pipes::recv;
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn test00() {
     let mut r: int = 0;
diff --git a/src/test/run-pass/task-comm-7.rs b/src/test/run-pass/task-comm-7.rs
index 313107537dd..5ebd191944b 100644
--- a/src/test/run-pass/task-comm-7.rs
+++ b/src/test/run-pass/task-comm-7.rs
@@ -13,7 +13,7 @@
 
 extern mod std;
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn test00_start(c: pipes::Chan<int>, start: int, number_of_messages: int) {
     let mut i: int = 0;
diff --git a/src/test/run-pass/task-comm-9.rs b/src/test/run-pass/task-comm-9.rs
index c12a9fc4f2f..ac259e7f785 100644
--- a/src/test/run-pass/task-comm-9.rs
+++ b/src/test/run-pass/task-comm-9.rs
@@ -13,7 +13,7 @@
 
 extern mod std;
 
-fn main() { test00(); }
+pub fn main() { test00(); }
 
 fn test00_start(c: pipes::Chan<int>, number_of_messages: int) {
     let mut i: int = 0;
diff --git a/src/test/run-pass/task-comm-chan-nil.rs b/src/test/run-pass/task-comm-chan-nil.rs
index ae2ee7880bd..cb62e2f87ee 100644
--- a/src/test/run-pass/task-comm-chan-nil.rs
+++ b/src/test/run-pass/task-comm-chan-nil.rs
@@ -15,7 +15,7 @@ extern mod std;
 // rustboot can't transmit nils across channels because they don't have
 // any size, but rustc currently can because they do have size. Whether
 // or not this is desirable I don't know, but here's a regression test.
-fn main() {
+pub fn main() {
     let (po, ch) = pipes::stream();
     ch.send(());
     let n: () = po.recv();
diff --git a/src/test/run-pass/task-killjoin-rsrc.rs b/src/test/run-pass/task-killjoin-rsrc.rs
index 06e8a28262b..65cc8e897d6 100644
--- a/src/test/run-pass/task-killjoin-rsrc.rs
+++ b/src/test/run-pass/task-killjoin-rsrc.rs
@@ -78,7 +78,7 @@ fn supervisor() {
     join(t);
 }
 
-fn main() {
+pub fn main() {
     join(joinable(supervisor));
 }
 
diff --git a/src/test/run-pass/task-killjoin.rs b/src/test/run-pass/task-killjoin.rs
index 5d978f2c273..7ab533bd870 100644
--- a/src/test/run-pass/task-killjoin.rs
+++ b/src/test/run-pass/task-killjoin.rs
@@ -30,7 +30,7 @@ fn supervisor() {
     task::try(supervised);
 }
 
-fn main() {
+pub fn main() {
     task::spawn_unlinked(supervisor)
 }
 
diff --git a/src/test/run-pass/task-life-0.rs b/src/test/run-pass/task-life-0.rs
index 00fbbd4b212..3e27ffb4152 100644
--- a/src/test/run-pass/task-life-0.rs
+++ b/src/test/run-pass/task-life-0.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 extern mod std;
-fn main() {
+pub fn main() {
     task::spawn(|| child(~"Hello") );
 }
 
diff --git a/src/test/run-pass/task-spawn-move-and-copy.rs b/src/test/run-pass/task-spawn-move-and-copy.rs
index e68d6dd7483..d9b06627c80 100644
--- a/src/test/run-pass/task-spawn-move-and-copy.rs
+++ b/src/test/run-pass/task-spawn-move-and-copy.rs
@@ -10,7 +10,7 @@
 
 use core::pipes::*;
 
-fn main() {
+pub fn main() {
     let (p, ch) = stream::<uint>();
 
     let x = ~1;
diff --git a/src/test/run-pass/terminate-in-initializer.rs b/src/test/run-pass/terminate-in-initializer.rs
index a96541d1985..183db464fe2 100644
--- a/src/test/run-pass/terminate-in-initializer.rs
+++ b/src/test/run-pass/terminate-in-initializer.rs
@@ -31,7 +31,7 @@ fn test_fail_indirect() {
     task::try(|| g() );
 }
 
-fn main() {
+pub fn main() {
     test_break();
     test_cont();
     test_ret();
diff --git a/src/test/run-pass/test-runner-hides-main.rs b/src/test/run-pass/test-runner-hides-main.rs
index bffd488355d..0c7710585a9 100644
--- a/src/test/run-pass/test-runner-hides-main.rs
+++ b/src/test/run-pass/test-runner-hides-main.rs
@@ -15,4 +15,4 @@ extern mod std;
 
 // Building as a test runner means that a synthetic main will be run,
 // not ours
-fn main() { die!(); }
+pub fn main() { die!(); }
diff --git a/src/test/run-pass/threads.rs b/src/test/run-pass/threads.rs
index 02dcebb1132..bd7bab60cb3 100644
--- a/src/test/run-pass/threads.rs
+++ b/src/test/run-pass/threads.rs
@@ -12,7 +12,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
     let mut i = 10;
     while i > 0 { task::spawn({let i = i; || child(i)}); i = i - 1; }
     debug!("main thread exiting");
diff --git a/src/test/run-pass/too-much-recursion.rs b/src/test/run-pass/too-much-recursion.rs
index 9e732c8e3ef..adccc786926 100644
--- a/src/test/run-pass/too-much-recursion.rs
+++ b/src/test/run-pass/too-much-recursion.rs
@@ -14,7 +14,7 @@
 // Test that the task fails after hitting the recursion limit, but
 // that it doesn't bring down the whole proc
 
-fn main() {
+pub fn main() {
     do task::spawn_unlinked {
         fn f() { f() };
         f();
diff --git a/src/test/run-pass/trait-bounds.rs b/src/test/run-pass/trait-bounds.rs
index 4579616176a..8c737428ba9 100644
--- a/src/test/run-pass/trait-bounds.rs
+++ b/src/test/run-pass/trait-bounds.rs
@@ -27,7 +27,7 @@ impl my_connection_factory: connection_factory<my_connection> {
     fn create() -> my_connection { () }
 }
 
-fn main() {
+pub fn main() {
     let factory = ();
     let connection = factory.create();
     let result = connection.read();
diff --git a/src/test/run-pass/trait-cast.rs b/src/test/run-pass/trait-cast.rs
index cbc093fcc19..cfb0096f97f 100644
--- a/src/test/run-pass/trait-cast.rs
+++ b/src/test/run-pass/trait-cast.rs
@@ -44,7 +44,7 @@ impl Tree: to_str {
 
 fn foo<T: to_str>(x: T) -> ~str { x.to_str() }
 
-fn main() {
+pub fn main() {
     let t1 = Tree(@TreeR{mut left: None,
                     mut right: None,
                     val: 1 as to_str });
diff --git a/src/test/run-pass/trait-composition-trivial.rs b/src/test/run-pass/trait-composition-trivial.rs
index bd4b1a9f4de..56645b48218 100644
--- a/src/test/run-pass/trait-composition-trivial.rs
+++ b/src/test/run-pass/trait-composition-trivial.rs
@@ -16,6 +16,6 @@ trait Bar : Foo {
     fn bar();
 }
 
-fn main() {}
+pub fn main() {}
 
 
diff --git a/src/test/run-pass/trait-generic.rs b/src/test/run-pass/trait-generic.rs
index 25531ee278d..8a8efb4b991 100644
--- a/src/test/run-pass/trait-generic.rs
+++ b/src/test/run-pass/trait-generic.rs
@@ -42,7 +42,7 @@ fn bar<U: to_str, T: map<U>>(x: T) -> ~[~str] {
     x.map(|_e| _e.to_str() )
 }
 
-fn main() {
+pub fn main() {
     assert foo(~[1]) == ~[~"hi"];
     assert bar::<int, ~[int]>(~[4, 5]) == ~[~"4", ~"5"];
     assert bar::<~str, ~[~str]>(~[~"x", ~"y"]) == ~[~"x", ~"y"];
diff --git a/src/test/run-pass/trait-inheritance-auto-xc-2.rs b/src/test/run-pass/trait-inheritance-auto-xc-2.rs
index 852e41ef078..105cf9ba2ab 100644
--- a/src/test/run-pass/trait-inheritance-auto-xc-2.rs
+++ b/src/test/run-pass/trait-inheritance-auto-xc-2.rs
@@ -26,7 +26,7 @@ fn f<T: Quux>(a: &T) {
     assert a.h() == 30;
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     f(a);
 }
diff --git a/src/test/run-pass/trait-inheritance-auto-xc.rs b/src/test/run-pass/trait-inheritance-auto-xc.rs
index c57a2d1dd23..5856d48aec4 100644
--- a/src/test/run-pass/trait-inheritance-auto-xc.rs
+++ b/src/test/run-pass/trait-inheritance-auto-xc.rs
@@ -27,7 +27,7 @@ fn f<T: Quux>(a: &T) {
     assert a.h() == 30;
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     f(a);
 }
diff --git a/src/test/run-pass/trait-inheritance-auto.rs b/src/test/run-pass/trait-inheritance-auto.rs
index 70c0aca25ea..c07c03c108d 100644
--- a/src/test/run-pass/trait-inheritance-auto.rs
+++ b/src/test/run-pass/trait-inheritance-auto.rs
@@ -30,7 +30,7 @@ fn f<T: Quux>(a: &T) {
     assert a.h() == 30;
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     f(a);
 }
diff --git a/src/test/run-pass/trait-inheritance-call-bound-inherited.rs b/src/test/run-pass/trait-inheritance-call-bound-inherited.rs
index f051187072b..8a3e81c3fdb 100644
--- a/src/test/run-pass/trait-inheritance-call-bound-inherited.rs
+++ b/src/test/run-pass/trait-inheritance-call-bound-inherited.rs
@@ -21,7 +21,7 @@ fn gg<T:Bar>(a: &T) -> int {
     a.f()
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     assert gg(a) == 10;
 }
diff --git a/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs b/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs
index bd2e6b09c24..a6bac1a0583 100644
--- a/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs
+++ b/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs
@@ -24,7 +24,7 @@ fn gg<T: Baz>(a: &T) -> int {
     a.f()
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     assert gg(a) == 10;
 }
diff --git a/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs b/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs
index 100108f9ec9..1ef250f215c 100644
--- a/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs
+++ b/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs
@@ -31,7 +31,7 @@ impl A : Bar {
     fn g() -> int { 20 }
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     let afoo = a as &Foo;
     let abar = a as &Bar;
diff --git a/src/test/run-pass/trait-inheritance-cast.rs b/src/test/run-pass/trait-inheritance-cast.rs
index 426e407cd36..2fbfaf483e9 100644
--- a/src/test/run-pass/trait-inheritance-cast.rs
+++ b/src/test/run-pass/trait-inheritance-cast.rs
@@ -32,7 +32,7 @@ impl A : Bar {
     fn g() -> int { 20 }
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     let afoo = a as &Foo;
     let abar = a as &Bar;
diff --git a/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs b/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs
index 7dab7064a41..ce0a5fe5465 100644
--- a/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs
+++ b/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs
@@ -21,7 +21,7 @@ impl aux::A : Bar {
     fn g() -> int { self.f() }
 }
 
-fn main() {
+pub fn main() {
     let a = &aux::A { x: 3 };
     assert a.g() == 10;
 }
diff --git a/src/test/run-pass/trait-inheritance-cross-trait-call.rs b/src/test/run-pass/trait-inheritance-cross-trait-call.rs
index ec3ec4fbee2..78e258bac48 100644
--- a/src/test/run-pass/trait-inheritance-cross-trait-call.rs
+++ b/src/test/run-pass/trait-inheritance-cross-trait-call.rs
@@ -20,7 +20,7 @@ impl A : Bar {
     fn g() -> int { self.f() }
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     assert a.g() == 10;
 }
diff --git a/src/test/run-pass/trait-inheritance-diamond.rs b/src/test/run-pass/trait-inheritance-diamond.rs
index 83e90854265..42042641357 100644
--- a/src/test/run-pass/trait-inheritance-diamond.rs
+++ b/src/test/run-pass/trait-inheritance-diamond.rs
@@ -29,7 +29,7 @@ fn f<T: D>(x: &T) {
     assert x.d() == 40;
 }
 
-fn main() {
+pub fn main() {
     let value = &S { bogus: () };
     f(value);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/trait-inheritance-multiple-inheritors.rs b/src/test/run-pass/trait-inheritance-multiple-inheritors.rs
index 3f7f61b94b8..a293051d360 100644
--- a/src/test/run-pass/trait-inheritance-multiple-inheritors.rs
+++ b/src/test/run-pass/trait-inheritance-multiple-inheritors.rs
@@ -25,6 +25,6 @@ fn f<T: B C>(x: &T) {
     assert x.c() == 30;
 }
 
-fn main() {
+pub fn main() {
     f(&S { bogus: () })
 }
\ No newline at end of file
diff --git a/src/test/run-pass/trait-inheritance-multiple-params.rs b/src/test/run-pass/trait-inheritance-multiple-params.rs
index 748659cb121..7008b098d8a 100644
--- a/src/test/run-pass/trait-inheritance-multiple-params.rs
+++ b/src/test/run-pass/trait-inheritance-multiple-params.rs
@@ -27,7 +27,7 @@ fn f<X: A, Y: B, Z: C>(x: &X, y: &Y, z: &Z) {
     assert z.c() == 30;
 }
 
-fn main() {
+pub fn main() {
     let s = &S { bogus: () };
     f(s, s, s);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/trait-inheritance-num.rs b/src/test/run-pass/trait-inheritance-num.rs
index 05e91912c24..90e7db7dbbb 100644
--- a/src/test/run-pass/trait-inheritance-num.rs
+++ b/src/test/run-pass/trait-inheritance-num.rs
@@ -23,4 +23,4 @@ pub trait FloatExt: NumExt FuzzyEq {}
 fn greater_than_one<T:NumExt>(n: &T) -> bool { *n > from_int(1) }
 fn greater_than_one_float<T:FloatExt>(n: &T) -> bool { *n > from_int(1) }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/trait-inheritance-num0.rs b/src/test/run-pass/trait-inheritance-num0.rs
index 2d82832652f..c7f43e055a4 100644
--- a/src/test/run-pass/trait-inheritance-num0.rs
+++ b/src/test/run-pass/trait-inheritance-num0.rs
@@ -25,4 +25,4 @@ fn greater_than_one<T:NumExt>(n: &T) -> bool {
     n.gt(&from_int(1))
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/trait-inheritance-num1.rs b/src/test/run-pass/trait-inheritance-num1.rs
index 3740e484a45..75467359936 100644
--- a/src/test/run-pass/trait-inheritance-num1.rs
+++ b/src/test/run-pass/trait-inheritance-num1.rs
@@ -19,4 +19,4 @@ fn greater_than_one<T:NumExt>(n: &T) -> bool {
     *n > from_int(1)
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/trait-inheritance-num2.rs b/src/test/run-pass/trait-inheritance-num2.rs
index 7686f388e2c..455b3946ec0 100644
--- a/src/test/run-pass/trait-inheritance-num2.rs
+++ b/src/test/run-pass/trait-inheritance-num2.rs
@@ -103,6 +103,6 @@ pub impl float: FloatExt {}
 
 fn test_float_ext<T:FloatExt>(n: T) { io::println(fmt!("%?", n < n)) }
 
-fn main() {
+pub fn main() {
     test_float_ext(1f32);
 }
diff --git a/src/test/run-pass/trait-inheritance-num3.rs b/src/test/run-pass/trait-inheritance-num3.rs
index 78dfee136a9..939b074e2dd 100644
--- a/src/test/run-pass/trait-inheritance-num3.rs
+++ b/src/test/run-pass/trait-inheritance-num3.rs
@@ -17,6 +17,6 @@ pub impl f32: NumExt {}
 
 fn num_eq_one<T:NumExt>(n: T) { io::println(fmt!("%?", n == from_int(1))) }
 
-fn main() {
+pub fn main() {
     num_eq_one(1f32); // you need to actually use the function to trigger the ICE
 }
\ No newline at end of file
diff --git a/src/test/run-pass/trait-inheritance-num5.rs b/src/test/run-pass/trait-inheritance-num5.rs
index c8db6f17a81..bb9b57d4afb 100644
--- a/src/test/run-pass/trait-inheritance-num5.rs
+++ b/src/test/run-pass/trait-inheritance-num5.rs
@@ -20,6 +20,6 @@ fn num_eq_one<T:NumExt>() -> T {
     from_int(1)
 }
 
-fn main() {
+pub fn main() {
     num_eq_one::<int>(); // you need to actually use the function to trigger the ICE
 }
diff --git a/src/test/run-pass/trait-inheritance-overloading-simple.rs b/src/test/run-pass/trait-inheritance-overloading-simple.rs
index 63df8397bc5..70c8981fd3c 100644
--- a/src/test/run-pass/trait-inheritance-overloading-simple.rs
+++ b/src/test/run-pass/trait-inheritance-overloading-simple.rs
@@ -27,7 +27,7 @@ fn f<T:MyNum>(x: T, y: T) -> bool {
 
 pure fn mi(v: int) -> MyInt { MyInt { val: v } }
 
-fn main() {
+pub fn main() {
     let (x, y, z) = (mi(3), mi(5), mi(3));
     assert x != y;
     assert x == z;
diff --git a/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs b/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs
index f0e33b69540..f7798507871 100644
--- a/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs
+++ b/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs
@@ -20,7 +20,7 @@ fn f<T:Copy MyNum>(x: T, y: T) -> (T, T, T) {
 
 pure fn mi(v: int) -> MyInt { MyInt { val: v } }
 
-fn main() {
+pub fn main() {
     let (x, y) = (mi(3), mi(5));
     let (a, b, c) = f(x, y);
     assert a == mi(8);
diff --git a/src/test/run-pass/trait-inheritance-overloading.rs b/src/test/run-pass/trait-inheritance-overloading.rs
index e4f98bb7962..6794e8130e5 100644
--- a/src/test/run-pass/trait-inheritance-overloading.rs
+++ b/src/test/run-pass/trait-inheritance-overloading.rs
@@ -39,7 +39,7 @@ fn f<T:Copy MyNum>(x: T, y: T) -> (T, T, T) {
 
 pure fn mi(v: int) -> MyInt { MyInt { val: v } }
 
-fn main() {
+pub fn main() {
     let (x, y) = (mi(3), mi(5));
     let (a, b, c) = f(x, y);
     assert a == mi(8);
diff --git a/src/test/run-pass/trait-inheritance-self.rs b/src/test/run-pass/trait-inheritance-self.rs
index 636cd5cd397..3f157f31283 100644
--- a/src/test/run-pass/trait-inheritance-self.rs
+++ b/src/test/run-pass/trait-inheritance-self.rs
@@ -22,7 +22,7 @@ impl S : Bar {
     }
 }
 
-fn main() {
+pub fn main() {
     let s = S { x: 1 };
     s.g();
 }
diff --git a/src/test/run-pass/trait-inheritance-simple.rs b/src/test/run-pass/trait-inheritance-simple.rs
index 5d3bafc0810..b119438240a 100644
--- a/src/test/run-pass/trait-inheritance-simple.rs
+++ b/src/test/run-pass/trait-inheritance-simple.rs
@@ -24,7 +24,7 @@ fn gg<T:Bar>(a: &T) -> int {
     a.g()
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     assert ff(a) == 10;
     assert gg(a) == 20;
diff --git a/src/test/run-pass/trait-inheritance-static.rs b/src/test/run-pass/trait-inheritance-static.rs
index 4a874f02a6a..4b40d759609 100644
--- a/src/test/run-pass/trait-inheritance-static.rs
+++ b/src/test/run-pass/trait-inheritance-static.rs
@@ -28,7 +28,7 @@ impl S: NumExt { }
 
 fn greater_than_one<T:NumExt>() -> T { MyNum::from_int(1) }
 
-fn main() {
+pub fn main() {
     let v: S = greater_than_one();
     assert v.v == 1;
 }
diff --git a/src/test/run-pass/trait-inheritance-static2.rs b/src/test/run-pass/trait-inheritance-static2.rs
index b767f34b4b1..8967bd91b8b 100644
--- a/src/test/run-pass/trait-inheritance-static2.rs
+++ b/src/test/run-pass/trait-inheritance-static2.rs
@@ -32,7 +32,7 @@ impl S: NumExt { }
 
 fn greater_than_one<T:NumExt>() -> T { MyNum::from_int(1) }
 
-fn main() {
+pub fn main() {
     let v: S = greater_than_one();
     assert v.v == 1;
 }
diff --git a/src/test/run-pass/trait-inheritance-subst.rs b/src/test/run-pass/trait-inheritance-subst.rs
index 686c5cba633..c8b270cad76 100644
--- a/src/test/run-pass/trait-inheritance-subst.rs
+++ b/src/test/run-pass/trait-inheritance-subst.rs
@@ -28,7 +28,7 @@ fn f<T:MyNum>(x: T, y: T) -> T {
 
 pure fn mi(v: int) -> MyInt { MyInt { val: v } }
 
-fn main() {
+pub fn main() {
     let (x, y) = (mi(3), mi(5));
     let z = f(x, y);
     assert z.val == 8
diff --git a/src/test/run-pass/trait-inheritance-subst2.rs b/src/test/run-pass/trait-inheritance-subst2.rs
index 54a7e811a1c..5659fed9c9b 100644
--- a/src/test/run-pass/trait-inheritance-subst2.rs
+++ b/src/test/run-pass/trait-inheritance-subst2.rs
@@ -38,7 +38,7 @@ fn f<T:MyNum>(x: T, y: T) -> T {
 
 fn mi(v: int) -> MyInt { MyInt { val: v } }
 
-fn main() {
+pub fn main() {
     let (x, y) = (mi(3), mi(5));
     let z = f(x, y);
     assert z.val == 13;
diff --git a/src/test/run-pass/trait-inheritance-visibility.rs b/src/test/run-pass/trait-inheritance-visibility.rs
index d18a4fa1142..70b0302de8c 100644
--- a/src/test/run-pass/trait-inheritance-visibility.rs
+++ b/src/test/run-pass/trait-inheritance-visibility.rs
@@ -23,6 +23,6 @@ fn f<T: Quux>(x: &T) {
     assert x.f() == 10;
 }
 
-fn main() {
+pub fn main() {
     f(&0)
 }
\ No newline at end of file
diff --git a/src/test/run-pass/trait-inheritance2.rs b/src/test/run-pass/trait-inheritance2.rs
index a09432ebf5d..951c03fd016 100644
--- a/src/test/run-pass/trait-inheritance2.rs
+++ b/src/test/run-pass/trait-inheritance2.rs
@@ -27,7 +27,7 @@ fn f<T: Quux Foo Bar Baz>(a: &T) {
     assert a.h() == 30;
 }
 
-fn main() {
+pub fn main() {
     let a = &A { x: 3 };
     f(a);
 }
diff --git a/src/test/run-pass/trait-region-pointer-simple.rs b/src/test/run-pass/trait-region-pointer-simple.rs
index 2d963d59c1f..1cd34e264e8 100644
--- a/src/test/run-pass/trait-region-pointer-simple.rs
+++ b/src/test/run-pass/trait-region-pointer-simple.rs
@@ -23,7 +23,7 @@ impl A : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let a = A { x: 3 };
     let b = (&a) as &Foo;
     assert b.f() == 3;
diff --git a/src/test/run-pass/trait-static-method-overwriting.rs b/src/test/run-pass/trait-static-method-overwriting.rs
index d8a8fc26d7f..9538ea497ec 100644
--- a/src/test/run-pass/trait-static-method-overwriting.rs
+++ b/src/test/run-pass/trait-static-method-overwriting.rs
@@ -38,7 +38,7 @@ mod base {
     }
 }
 
-fn main() {
+pub fn main() {
     let f: base::Foo = base::HasNew::new::<base::Foo, base::Foo>();
 	let b: base::Bar = base::HasNew::new::<base::Bar, base::Bar>();
 }
diff --git a/src/test/run-pass/trait-to-str.rs b/src/test/run-pass/trait-to-str.rs
index 43cafa49b4e..8b6f61117e8 100644
--- a/src/test/run-pass/trait-to-str.rs
+++ b/src/test/run-pass/trait-to-str.rs
@@ -30,7 +30,7 @@ impl<T: to_str> ~[T]: to_str {
     }
 }
 
-fn main() {
+pub fn main() {
     assert 1.to_str() == ~"1";
     assert (~[2, 3, 4]).to_str() == ~"[2, 3, 4]";
 
diff --git a/src/test/run-pass/trait-typedef-cc.rs b/src/test/run-pass/trait-typedef-cc.rs
index 8b1366bb220..9e75a6625a5 100644
--- a/src/test/run-pass/trait-typedef-cc.rs
+++ b/src/test/run-pass/trait-typedef-cc.rs
@@ -22,7 +22,7 @@ impl S: Foo {
     fn bar() { }
 }
 
-fn main() {
+pub fn main() {
     let s = S {
         name: 0
     };
diff --git a/src/test/run-pass/traits-default-method-macro.rs b/src/test/run-pass/traits-default-method-macro.rs
index 9e49b249c18..66f4c431141 100644
--- a/src/test/run-pass/traits-default-method-macro.rs
+++ b/src/test/run-pass/traits-default-method-macro.rs
@@ -23,7 +23,7 @@ enum Baz {
 impl Baz: Foo {
 }
 
-fn main() {
+pub fn main() {
     let q = Quux;
     assert q.bar() == ~"test";
 }
diff --git a/src/test/run-pass/traits-default-method-self.rs b/src/test/run-pass/traits-default-method-self.rs
index 6626c97bab1..b0742255ba3 100644
--- a/src/test/run-pass/traits-default-method-self.rs
+++ b/src/test/run-pass/traits-default-method-self.rs
@@ -24,6 +24,6 @@ impl int : Cat {
     }
 }
 
-fn main() {
+pub fn main() {
     assert 5.meow();
 }
diff --git a/src/test/run-pass/traits-default-method-trivial.rs b/src/test/run-pass/traits-default-method-trivial.rs
index 9dbb26af441..e9850588e9e 100644
--- a/src/test/run-pass/traits-default-method-trivial.rs
+++ b/src/test/run-pass/traits-default-method-trivial.rs
@@ -25,6 +25,6 @@ impl int : Cat {
     }
 }
 
-fn main() {
+pub fn main() {
     assert 5.meow();
 }
diff --git a/src/test/run-pass/trivial-message.rs b/src/test/run-pass/trivial-message.rs
index e5bcba59ea2..21524d3fc54 100644
--- a/src/test/run-pass/trivial-message.rs
+++ b/src/test/run-pass/trivial-message.rs
@@ -14,7 +14,7 @@ use pipes::{Port, Chan};
   This is about the simplest program that can successfully send a
   message.
  */
-fn main() {
+pub fn main() {
     let (po, ch) = pipes::stream();
     ch.send(42);
     let r = po.recv();
diff --git a/src/test/run-pass/tstate-loop-break.rs b/src/test/run-pass/tstate-loop-break.rs
index 7c4f941c524..8b626611c41 100644
--- a/src/test/run-pass/tstate-loop-break.rs
+++ b/src/test/run-pass/tstate-loop-break.rs
@@ -22,6 +22,6 @@ fn test() {
     even(v);
 }
 
-fn main() {
+pub fn main() {
     test();
 }
diff --git a/src/test/run-pass/tup.rs b/src/test/run-pass/tup.rs
index cb58d926bb1..01d2600708d 100644
--- a/src/test/run-pass/tup.rs
+++ b/src/test/run-pass/tup.rs
@@ -17,7 +17,7 @@ fn f(p: point, x: int, y: int) {
     assert (b == y);
 }
 
-fn main() {
+pub fn main() {
     let p: point = (10, 20);
     let (a, b) = p;
     assert (a == 10);
diff --git a/src/test/run-pass/tuple-struct-construct.rs b/src/test/run-pass/tuple-struct-construct.rs
index 5fb48d3a079..ea410093c4b 100644
--- a/src/test/run-pass/tuple-struct-construct.rs
+++ b/src/test/run-pass/tuple-struct-construct.rs
@@ -10,7 +10,7 @@
 
 struct Foo(int, int);
 
-fn main() {
+pub fn main() {
     let x = Foo(1, 2);
     io::println(fmt!("%?", x));
 }
diff --git a/src/test/run-pass/tuple-struct-destructuring.rs b/src/test/run-pass/tuple-struct-destructuring.rs
index 61799f11046..dcecacf975a 100644
--- a/src/test/run-pass/tuple-struct-destructuring.rs
+++ b/src/test/run-pass/tuple-struct-destructuring.rs
@@ -10,7 +10,7 @@
 
 struct Foo(int, int);
 
-fn main() {
+pub fn main() {
     let x = Foo(1, 2);
     let Foo(y, z) = x;
     io::println(fmt!("%d %d", y, z));
diff --git a/src/test/run-pass/tuple-struct-matching.rs b/src/test/run-pass/tuple-struct-matching.rs
index ab7b83e56ef..e127ba6d4c9 100644
--- a/src/test/run-pass/tuple-struct-matching.rs
+++ b/src/test/run-pass/tuple-struct-matching.rs
@@ -10,7 +10,7 @@
 
 struct Foo(int, int);
 
-fn main() {
+pub fn main() {
     let x = Foo(1, 2);
     match x {
         Foo(a, b) => {
diff --git a/src/test/run-pass/tuple-struct-trivial.rs b/src/test/run-pass/tuple-struct-trivial.rs
index 520d5c60114..8ddc04a186f 100644
--- a/src/test/run-pass/tuple-struct-trivial.rs
+++ b/src/test/run-pass/tuple-struct-trivial.rs
@@ -12,6 +12,6 @@
 
 struct Foo(int, int, int);
 
-fn main() {
+pub fn main() {
 }
 
diff --git a/src/test/run-pass/type-in-nested-module.rs b/src/test/run-pass/type-in-nested-module.rs
index bb7b9aa46eb..e2ccee013c2 100644
--- a/src/test/run-pass/type-in-nested-module.rs
+++ b/src/test/run-pass/type-in-nested-module.rs
@@ -18,4 +18,4 @@ mod a {
     }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/type-namespace.rs b/src/test/run-pass/type-namespace.rs
index 4215a8597f2..56b9c4700b9 100644
--- a/src/test/run-pass/type-namespace.rs
+++ b/src/test/run-pass/type-namespace.rs
@@ -12,4 +12,4 @@ struct A { a: int }
 
 fn a(a: A) -> int { return a.a; }
 
-fn main() { let x: A = A {a: 1}; assert (a(x) == 1); }
+pub fn main() { let x: A = A {a: 1}; assert (a(x) == 1); }
diff --git a/src/test/run-pass/type-param-constraints.rs b/src/test/run-pass/type-param-constraints.rs
index aa0485f7994..d5749155456 100644
--- a/src/test/run-pass/type-param-constraints.rs
+++ b/src/test/run-pass/type-param-constraints.rs
@@ -29,7 +29,7 @@ fn r(i:int) -> r {
     }
 }
 
-fn main() {
+pub fn main() {
     p_foo(r(10));
     p_foo(@r(10));
 
diff --git a/src/test/run-pass/type-param.rs b/src/test/run-pass/type-param.rs
index 7efad62276e..209dade8d0c 100644
--- a/src/test/run-pass/type-param.rs
+++ b/src/test/run-pass/type-param.rs
@@ -12,4 +12,4 @@
 
 type lteq<T> = extern fn(T) -> bool;
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/type-params-in-for-each.rs b/src/test/run-pass/type-params-in-for-each.rs
index dd8f321f5f4..f4ec8b0c9e8 100644
--- a/src/test/run-pass/type-params-in-for-each.rs
+++ b/src/test/run-pass/type-params-in-for-each.rs
@@ -19,4 +19,4 @@ fn create_index<T>(index: ~[{a: T, b: uint}], hash_fn: extern fn(T) -> uint) {
     range(0u, 256u, |_i| { let bucket: ~[T] = ~[]; } )
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/type-ptr.rs b/src/test/run-pass/type-ptr.rs
index defa98990f0..a00b6b8153e 100644
--- a/src/test/run-pass/type-ptr.rs
+++ b/src/test/run-pass/type-ptr.rs
@@ -12,4 +12,4 @@ fn f(a: *int) -> *int { return a; }
 
 fn g(a: *int) -> *int { let b = f(a); return b; }
 
-fn main() { return; }
+pub fn main() { return; }
diff --git a/src/test/run-pass/type-sizes.rs b/src/test/run-pass/type-sizes.rs
index 0a2863b6a96..2c50e73cd57 100644
--- a/src/test/run-pass/type-sizes.rs
+++ b/src/test/run-pass/type-sizes.rs
@@ -12,7 +12,7 @@
 use sys::rustrt::size_of;
 extern mod std;
 
-fn main() {
+pub fn main() {
     assert (size_of::<u8>() == 1 as uint);
     assert (size_of::<u32>() == 4 as uint);
     assert (size_of::<char>() == 4 as uint);
diff --git a/src/test/run-pass/type-use-i1-versus-i8.rs b/src/test/run-pass/type-use-i1-versus-i8.rs
index 4c92374409e..5f0414cdb78 100644
--- a/src/test/run-pass/type-use-i1-versus-i8.rs
+++ b/src/test/run-pass/type-use-i1-versus-i8.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 use io::ReaderUtil;
-fn main() {
+pub fn main() {
     let mut x: bool = false;
     // this line breaks it
     vec::rusti::move_val_init(&mut x, false);
diff --git a/src/test/run-pass/typeclasses-eq-example-static.rs b/src/test/run-pass/typeclasses-eq-example-static.rs
index 3da714f0a7b..13afc62baeb 100644
--- a/src/test/run-pass/typeclasses-eq-example-static.rs
+++ b/src/test/run-pass/typeclasses-eq-example-static.rs
@@ -46,7 +46,7 @@ impl ColorTree : Equal {
     }
 }
 
-fn main() {
+pub fn main() {
     assert Equal::isEq(cyan, cyan);
     assert Equal::isEq(magenta, magenta);
     assert !Equal::isEq(cyan, yellow);
diff --git a/src/test/run-pass/typeclasses-eq-example.rs b/src/test/run-pass/typeclasses-eq-example.rs
index 75a574b1dda..cf2c2e27fa5 100644
--- a/src/test/run-pass/typeclasses-eq-example.rs
+++ b/src/test/run-pass/typeclasses-eq-example.rs
@@ -45,7 +45,7 @@ impl ColorTree : Equal {
     }
 }
 
-fn main() {
+pub fn main() {
     assert cyan.isEq(cyan);
     assert magenta.isEq(magenta);
     assert !cyan.isEq(yellow);
diff --git a/src/test/run-pass/typestate-cfg-nesting.rs b/src/test/run-pass/typestate-cfg-nesting.rs
index 5dee498d6b1..997464ba50a 100644
--- a/src/test/run-pass/typestate-cfg-nesting.rs
+++ b/src/test/run-pass/typestate-cfg-nesting.rs
@@ -15,7 +15,7 @@ fn f() {
     if true { match x { _ => { y = x; } } } else { }
 }
 
-fn main() {
+pub fn main() {
     let x = 10;
     let mut y = 11;
     if true { while false { y = x; } } else { }
diff --git a/src/test/run-pass/typestate-multi-decl.rs b/src/test/run-pass/typestate-multi-decl.rs
index d5c44a65f92..68fff0cf8f5 100644
--- a/src/test/run-pass/typestate-multi-decl.rs
+++ b/src/test/run-pass/typestate-multi-decl.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let x = 10, y = 20; let z = x + y; assert (z == 30); }
+pub fn main() { let x = 10, y = 20; let z = x + y; assert (z == 30); }
diff --git a/src/test/run-pass/u32-decr.rs b/src/test/run-pass/u32-decr.rs
index b8e1c389f68..a720bd5f2b5 100644
--- a/src/test/run-pass/u32-decr.rs
+++ b/src/test/run-pass/u32-decr.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let mut word: u32 = 200000u32;
     word = word - 1u32;
     assert (word == 199999u32);
diff --git a/src/test/run-pass/u8-incr-decr.rs b/src/test/run-pass/u8-incr-decr.rs
index 561e0d7f840..e99a5d9e081 100644
--- a/src/test/run-pass/u8-incr-decr.rs
+++ b/src/test/run-pass/u8-incr-decr.rs
@@ -15,7 +15,7 @@
 
 // These constants were chosen because they aren't used anywhere
 // in the rest of the generated code so they're easily grep-able.
-fn main() {
+pub fn main() {
     let mut x: u8 = 19u8; // 0x13
 
     let mut y: u8 = 35u8; // 0x23
diff --git a/src/test/run-pass/u8-incr.rs b/src/test/run-pass/u8-incr.rs
index 0cfef4f3ff4..44f0c9b19ba 100644
--- a/src/test/run-pass/u8-incr.rs
+++ b/src/test/run-pass/u8-incr.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let mut x: u8 = 12u8;
     let y: u8 = 12u8;
     x = x + 1u8;
diff --git a/src/test/run-pass/uint.rs b/src/test/run-pass/uint.rs
index 72b467aa3a1..b865b302668 100644
--- a/src/test/run-pass/uint.rs
+++ b/src/test/run-pass/uint.rs
@@ -12,4 +12,4 @@
 
 
 // -*- rust -*-
-fn main() { let x: uint = 10 as uint; }
+pub fn main() { let x: uint = 10 as uint; }
diff --git a/src/test/run-pass/unary-minus-suffix-inference.rs b/src/test/run-pass/unary-minus-suffix-inference.rs
index ac558c515de..d48b8bd7b4e 100644
--- a/src/test/run-pass/unary-minus-suffix-inference.rs
+++ b/src/test/run-pass/unary-minus-suffix-inference.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let a = 1;
     let a_neg: i8 = -a;
     log(error, a_neg);
diff --git a/src/test/run-pass/unify-return-ty.rs b/src/test/run-pass/unify-return-ty.rs
index 3f925e34475..5452936c411 100644
--- a/src/test/run-pass/unify-return-ty.rs
+++ b/src/test/run-pass/unify-return-ty.rs
@@ -19,4 +19,4 @@ fn null<T>() -> *T {
     }
 }
 
-fn main() { null::<int>(); }
+pub fn main() { null::<int>(); }
diff --git a/src/test/run-pass/uniq-cc-generic.rs b/src/test/run-pass/uniq-cc-generic.rs
index b1cde5b2e85..8de91acd185 100644
--- a/src/test/run-pass/uniq-cc-generic.rs
+++ b/src/test/run-pass/uniq-cc-generic.rs
@@ -29,7 +29,7 @@ fn empty_pointy() -> @Pointy {
     }
 }
 
-fn main()
+pub fn main()
 {
     let v = empty_pointy();
     v.a = p(v);
diff --git a/src/test/run-pass/uniq-cc.rs b/src/test/run-pass/uniq-cc.rs
index deaf09a2392..384450ec57f 100644
--- a/src/test/run-pass/uniq-cc.rs
+++ b/src/test/run-pass/uniq-cc.rs
@@ -27,7 +27,7 @@ fn empty_pointy() -> @Pointy {
     }
 }
 
-fn main()
+pub fn main()
 {
     let v = empty_pointy();
     v.a = p(v);
diff --git a/src/test/run-pass/unique-alt-discrim.rs b/src/test/run-pass/unique-alt-discrim.rs
index fcc800c1c18..60c5bf068f0 100644
--- a/src/test/run-pass/unique-alt-discrim.rs
+++ b/src/test/run-pass/unique-alt-discrim.rs
@@ -15,4 +15,4 @@ fn altsimple() {
       _ => { }
     }
 }
-fn main() { }
\ No newline at end of file
+pub fn main() { }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-assign-copy.rs b/src/test/run-pass/unique-assign-copy.rs
index 2c5d49130a5..4723356dcd0 100644
--- a/src/test/run-pass/unique-assign-copy.rs
+++ b/src/test/run-pass/unique-assign-copy.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~mut 1;
     // Should be a copy
     let mut j;
diff --git a/src/test/run-pass/unique-assign-drop.rs b/src/test/run-pass/unique-assign-drop.rs
index bb412f61720..07c1d522157 100644
--- a/src/test/run-pass/unique-assign-drop.rs
+++ b/src/test/run-pass/unique-assign-drop.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~1;
     let mut j = ~2;
     // Should drop the previous value of j
diff --git a/src/test/run-pass/unique-assign-generic.rs b/src/test/run-pass/unique-assign-generic.rs
index d00d8cfc9c3..9ad5575be9d 100644
--- a/src/test/run-pass/unique-assign-generic.rs
+++ b/src/test/run-pass/unique-assign-generic.rs
@@ -13,7 +13,7 @@ fn f<T: Copy>(t: T) -> T {
     t1
 }
 
-fn main() {
+pub fn main() {
     let t = f(~100);
     assert t == ~100;
     let t = f(~@~[100]);
diff --git a/src/test/run-pass/unique-assign.rs b/src/test/run-pass/unique-assign.rs
index 36bf2905e58..9089ac9a327 100644
--- a/src/test/run-pass/unique-assign.rs
+++ b/src/test/run-pass/unique-assign.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut i;
     i = ~1;
     assert *i == 1;
diff --git a/src/test/run-pass/unique-autoderef-field.rs b/src/test/run-pass/unique-autoderef-field.rs
index d53d89457f1..eac67c65b8f 100644
--- a/src/test/run-pass/unique-autoderef-field.rs
+++ b/src/test/run-pass/unique-autoderef-field.rs
@@ -10,7 +10,7 @@
 
 struct J { j: int }
 
-fn main() {
+pub fn main() {
     let i = ~J {
         j: 100
     };
diff --git a/src/test/run-pass/unique-autoderef-index.rs b/src/test/run-pass/unique-autoderef-index.rs
index d61afb384ea..45e4b798969 100644
--- a/src/test/run-pass/unique-autoderef-index.rs
+++ b/src/test/run-pass/unique-autoderef-index.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~~[100];
     assert i[0] == 100;
 }
diff --git a/src/test/run-pass/unique-cmp.rs b/src/test/run-pass/unique-cmp.rs
index 3b22b0198fe..5a565d4b81c 100644
--- a/src/test/run-pass/unique-cmp.rs
+++ b/src/test/run-pass/unique-cmp.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
     assert i == ~100;
     assert i < ~101;
diff --git a/src/test/run-pass/unique-containing-tag.rs b/src/test/run-pass/unique-containing-tag.rs
index 5b6b17d9e45..05d57967340 100644
--- a/src/test/run-pass/unique-containing-tag.rs
+++ b/src/test/run-pass/unique-containing-tag.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     enum t { t1(int), t2(int), }
 
     let x = ~t1(10);
diff --git a/src/test/run-pass/unique-copy-box.rs b/src/test/run-pass/unique-copy-box.rs
index 95d3703a28c..c1ee7f844d3 100644
--- a/src/test/run-pass/unique-copy-box.rs
+++ b/src/test/run-pass/unique-copy-box.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     unsafe {
         let i = ~@1;
         let j = ~@2;
diff --git a/src/test/run-pass/unique-create.rs b/src/test/run-pass/unique-create.rs
index 0179e03d67f..989ee58a793 100644
--- a/src/test/run-pass/unique-create.rs
+++ b/src/test/run-pass/unique-create.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     ~100;
 }
 
diff --git a/src/test/run-pass/unique-decl-init-copy.rs b/src/test/run-pass/unique-decl-init-copy.rs
index 6271f968885..628eb7265a5 100644
--- a/src/test/run-pass/unique-decl-init-copy.rs
+++ b/src/test/run-pass/unique-decl-init-copy.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~mut 1;
     // Should be a copy
     let j = copy i;
diff --git a/src/test/run-pass/unique-decl-init.rs b/src/test/run-pass/unique-decl-init.rs
index fc9e2f81127..8c6420a4df7 100644
--- a/src/test/run-pass/unique-decl-init.rs
+++ b/src/test/run-pass/unique-decl-init.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~1;
     let j = i;
     assert *j == 1;
diff --git a/src/test/run-pass/unique-decl-move-temp.rs b/src/test/run-pass/unique-decl-move-temp.rs
index 8e4b9a53adc..56cbc044c01 100644
--- a/src/test/run-pass/unique-decl-move-temp.rs
+++ b/src/test/run-pass/unique-decl-move-temp.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = move ~100;
     assert *i == 100;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-decl-move.rs b/src/test/run-pass/unique-decl-move.rs
index 894886544e4..d41e6f99ec5 100644
--- a/src/test/run-pass/unique-decl-move.rs
+++ b/src/test/run-pass/unique-decl-move.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
     let j = move i;
     assert *j == 100;
diff --git a/src/test/run-pass/unique-decl.rs b/src/test/run-pass/unique-decl.rs
index 82afc1a0f60..2bc95754e08 100644
--- a/src/test/run-pass/unique-decl.rs
+++ b/src/test/run-pass/unique-decl.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let _: ~int;
 }
 
diff --git a/src/test/run-pass/unique-deref.rs b/src/test/run-pass/unique-deref.rs
index 3a660fad105..625a8f8982e 100644
--- a/src/test/run-pass/unique-deref.rs
+++ b/src/test/run-pass/unique-deref.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
     assert *i == 100;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-destructure.rs b/src/test/run-pass/unique-destructure.rs
index 5f88a9fce03..4c4f46607d2 100644
--- a/src/test/run-pass/unique-destructure.rs
+++ b/src/test/run-pass/unique-destructure.rs
@@ -10,7 +10,7 @@
 
 struct Foo { a: int, b: int }
 
-fn main() {
+pub fn main() {
     let ~Foo{a, b} = ~Foo{a: 100, b: 200};
     assert a + b == 300;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-drop-complex.rs b/src/test/run-pass/unique-drop-complex.rs
index 362859d8be8..aabf6c7878e 100644
--- a/src/test/run-pass/unique-drop-complex.rs
+++ b/src/test/run-pass/unique-drop-complex.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = ~~[0,0,0,0,0];
 }
diff --git a/src/test/run-pass/unique-fn-arg-move.rs b/src/test/run-pass/unique-fn-arg-move.rs
index 72b56998e81..2246fa2270a 100644
--- a/src/test/run-pass/unique-fn-arg-move.rs
+++ b/src/test/run-pass/unique-fn-arg-move.rs
@@ -12,7 +12,7 @@ fn f(-i: ~int) {
     assert *i == 100;
 }
 
-fn main() {
+pub fn main() {
     let i = ~100;
     f(move i);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-fn-arg-mut.rs b/src/test/run-pass/unique-fn-arg-mut.rs
index 6ad0cbe03c1..82462c0c11c 100644
--- a/src/test/run-pass/unique-fn-arg-mut.rs
+++ b/src/test/run-pass/unique-fn-arg-mut.rs
@@ -12,7 +12,7 @@ fn f(i: &mut ~int) {
     *i = ~200;
 }
 
-fn main() {
+pub fn main() {
     let mut i = ~100;
     f(&mut i);
     assert *i == 200;
diff --git a/src/test/run-pass/unique-fn-arg.rs b/src/test/run-pass/unique-fn-arg.rs
index 8a68dab6264..2dbd924a6ad 100644
--- a/src/test/run-pass/unique-fn-arg.rs
+++ b/src/test/run-pass/unique-fn-arg.rs
@@ -12,7 +12,7 @@ fn f(i: ~int) {
     assert *i == 100;
 }
 
-fn main() {
+pub fn main() {
     f(~100);
     let i = ~100;
     f(i);
diff --git a/src/test/run-pass/unique-fn-ret.rs b/src/test/run-pass/unique-fn-ret.rs
index 4421a658cb1..b5127571a21 100644
--- a/src/test/run-pass/unique-fn-ret.rs
+++ b/src/test/run-pass/unique-fn-ret.rs
@@ -12,6 +12,6 @@ fn f() -> ~int {
     ~100
 }
 
-fn main() {
+pub fn main() {
     assert f() == ~100;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-generic-assign.rs b/src/test/run-pass/unique-generic-assign.rs
index 5642a4d76e7..5d3b550c430 100644
--- a/src/test/run-pass/unique-generic-assign.rs
+++ b/src/test/run-pass/unique-generic-assign.rs
@@ -13,4 +13,4 @@
 fn f<T: Copy>(x: ~T) {
     let _x2 = x;
 }
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/unique-in-tag.rs b/src/test/run-pass/unique-in-tag.rs
index a9bc558dba8..6e454d40032 100644
--- a/src/test/run-pass/unique-in-tag.rs
+++ b/src/test/run-pass/unique-in-tag.rs
@@ -21,6 +21,6 @@ fn test1() {
     } == 10;
 }
 
-fn main() {
+pub fn main() {
     test1();
 }
diff --git a/src/test/run-pass/unique-in-vec-copy.rs b/src/test/run-pass/unique-in-vec-copy.rs
index 6f95a2f7b6a..54ea0258c7c 100644
--- a/src/test/run-pass/unique-in-vec-copy.rs
+++ b/src/test/run-pass/unique-in-vec-copy.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let a = ~[~mut 10];
     let b = copy a;
 
diff --git a/src/test/run-pass/unique-in-vec.rs b/src/test/run-pass/unique-in-vec.rs
index 0aa4b1e58da..0a6a3a0ef5d 100644
--- a/src/test/run-pass/unique-in-vec.rs
+++ b/src/test/run-pass/unique-in-vec.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     assert (~[~100])[0] == ~100;
 }
diff --git a/src/test/run-pass/unique-init.rs b/src/test/run-pass/unique-init.rs
index 79c90714270..0d58e2fcd2e 100644
--- a/src/test/run-pass/unique-init.rs
+++ b/src/test/run-pass/unique-init.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-kinds.rs b/src/test/run-pass/unique-kinds.rs
index f3637ef7d6e..0cffa14fb70 100644
--- a/src/test/run-pass/unique-kinds.rs
+++ b/src/test/run-pass/unique-kinds.rs
@@ -64,7 +64,7 @@ fn noncopyable() {
     g(i, j);
 }
 
-fn main() {
+pub fn main() {
     sendable();
     copyable();
     noncopyable();
diff --git a/src/test/run-pass/unique-log.rs b/src/test/run-pass/unique-log.rs
index ee5261e63ff..27a4cbf8d4b 100644
--- a/src/test/run-pass/unique-log.rs
+++ b/src/test/run-pass/unique-log.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
     log(error, i);
 }
\ No newline at end of file
diff --git a/src/test/run-pass/unique-move-drop.rs b/src/test/run-pass/unique-move-drop.rs
index 4dadf5ee160..6aac2ac3963 100644
--- a/src/test/run-pass/unique-move-drop.rs
+++ b/src/test/run-pass/unique-move-drop.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
     let j = ~200;
     let j = move i;
diff --git a/src/test/run-pass/unique-move-temp.rs b/src/test/run-pass/unique-move-temp.rs
index a9e45e626be..df6ed48fa60 100644
--- a/src/test/run-pass/unique-move-temp.rs
+++ b/src/test/run-pass/unique-move-temp.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut i;
     i = move ~100;
     assert *i == 100;
diff --git a/src/test/run-pass/unique-move.rs b/src/test/run-pass/unique-move.rs
index 4f508783846..771e8652876 100644
--- a/src/test/run-pass/unique-move.rs
+++ b/src/test/run-pass/unique-move.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~100;
     let mut j;
     j = move i;
diff --git a/src/test/run-pass/unique-mutable.rs b/src/test/run-pass/unique-mutable.rs
index c83a2bcb04b..95ef19600e6 100644
--- a/src/test/run-pass/unique-mutable.rs
+++ b/src/test/run-pass/unique-mutable.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let i = ~mut 0;
     *i = 1;
     assert *i == 1;
diff --git a/src/test/run-pass/unique-object.rs b/src/test/run-pass/unique-object.rs
index 6d9a1d19c87..058d212eb69 100644
--- a/src/test/run-pass/unique-object.rs
+++ b/src/test/run-pass/unique-object.rs
@@ -22,7 +22,7 @@ impl Bar : Foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = ~Bar { x: 10 };
     let y = x as ~Foo;
     let z = copy y;
diff --git a/src/test/run-pass/unique-pat-2.rs b/src/test/run-pass/unique-pat-2.rs
index 48c90d3ba63..8eb68dacbe3 100644
--- a/src/test/run-pass/unique-pat-2.rs
+++ b/src/test/run-pass/unique-pat-2.rs
@@ -13,7 +13,7 @@ struct Foo {a: int, b: uint}
 
 enum bar { u(~Foo), w(int), }
 
-fn main() {
+pub fn main() {
     assert (match u(~Foo{a: 10, b: 40u}) {
               u(~Foo{a: a, b: b}) => { a + (b as int) }
               _ => { 66 }
diff --git a/src/test/run-pass/unique-pat-3.rs b/src/test/run-pass/unique-pat-3.rs
index f518c270152..f4e895a0915 100644
--- a/src/test/run-pass/unique-pat-3.rs
+++ b/src/test/run-pass/unique-pat-3.rs
@@ -11,7 +11,7 @@
 
 enum bar { u(~int), w(int), }
 
-fn main() {
+pub fn main() {
     assert match u(~10) {
       u(a) => {
         log(error, a);
diff --git a/src/test/run-pass/unique-pat.rs b/src/test/run-pass/unique-pat.rs
index c6e680842e6..82e3f6c9486 100644
--- a/src/test/run-pass/unique-pat.rs
+++ b/src/test/run-pass/unique-pat.rs
@@ -15,6 +15,6 @@ fn simple() {
     }
 }
 
-fn main() {
+pub fn main() {
     simple();
 }
diff --git a/src/test/run-pass/unique-pinned-nocopy-2.rs b/src/test/run-pass/unique-pinned-nocopy-2.rs
index 7401bb56b1e..089deeb20ac 100644
--- a/src/test/run-pass/unique-pinned-nocopy-2.rs
+++ b/src/test/run-pass/unique-pinned-nocopy-2.rs
@@ -24,7 +24,7 @@ fn r(i: @mut int) -> r {
     }
 }
 
-fn main() {
+pub fn main() {
     let i = @mut 0;
     {
         let j = ~r(i);
diff --git a/src/test/run-pass/unique-rec.rs b/src/test/run-pass/unique-rec.rs
index 4beaa080f8b..20d30e45d08 100644
--- a/src/test/run-pass/unique-rec.rs
+++ b/src/test/run-pass/unique-rec.rs
@@ -10,7 +10,7 @@
 
 struct X { x: int }
 
-fn main() {
+pub fn main() {
     let x = ~X {x: 1};
     let bar = x;
     assert bar.x == 1;
diff --git a/src/test/run-pass/unique-send-2.rs b/src/test/run-pass/unique-send-2.rs
index fbf4e0bd757..a79c7bd6d5b 100644
--- a/src/test/run-pass/unique-send-2.rs
+++ b/src/test/run-pass/unique-send-2.rs
@@ -14,7 +14,7 @@ fn child(c: &SharedChan<~uint>, i: uint) {
     c.send(~i);
 }
 
-fn main() {
+pub fn main() {
     let (p, ch) = stream();
     let ch = SharedChan(ch);
     let n = 100u;
diff --git a/src/test/run-pass/unique-send.rs b/src/test/run-pass/unique-send.rs
index 17827bb39ca..b6c5b2948a0 100644
--- a/src/test/run-pass/unique-send.rs
+++ b/src/test/run-pass/unique-send.rs
@@ -10,7 +10,7 @@
 
 use core::pipes::*;
 
-fn main() {
+pub fn main() {
     let (p, c) = stream();
     c.send(~100);
     let v = p.recv();
diff --git a/src/test/run-pass/unique-swap.rs b/src/test/run-pass/unique-swap.rs
index 48365efe43c..d0e8c463f00 100644
--- a/src/test/run-pass/unique-swap.rs
+++ b/src/test/run-pass/unique-swap.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut i = ~100;
     let mut j = ~200;
     i <-> j;
diff --git a/src/test/run-pass/unit-like-struct.rs b/src/test/run-pass/unit-like-struct.rs
index 8cd15bb5f6b..837bfa50b8e 100644
--- a/src/test/run-pass/unit-like-struct.rs
+++ b/src/test/run-pass/unit-like-struct.rs
@@ -10,7 +10,7 @@
 
 struct Foo;
 
-fn main() {
+pub fn main() {
     let x: Foo = Foo;
     match x {
         Foo => { io::println("hi"); }
diff --git a/src/test/run-pass/unit.rs b/src/test/run-pass/unit.rs
index a6afe26d4f2..78510a57459 100644
--- a/src/test/run-pass/unit.rs
+++ b/src/test/run-pass/unit.rs
@@ -14,7 +14,7 @@
 // -*- rust -*-
 fn f(u: ()) { return u; }
 
-fn main() {
+pub fn main() {
     let u1: () = ();
     let mut u2: () = f(u1);
     u2 = ();
diff --git a/src/test/run-pass/unnamed_argument_mode.rs b/src/test/run-pass/unnamed_argument_mode.rs
index 97e7582e142..e8ceeab3bf6 100644
--- a/src/test/run-pass/unnamed_argument_mode.rs
+++ b/src/test/run-pass/unnamed_argument_mode.rs
@@ -6,6 +6,6 @@ fn good(a: &int) {
 fn called(f: fn(&int)) {
 }
 
-fn main() {
+pub fn main() {
 called(good);
 }
diff --git a/src/test/run-pass/unreachable-code-1.rs b/src/test/run-pass/unreachable-code-1.rs
index b98e5edacc5..54cd961dbf6 100644
--- a/src/test/run-pass/unreachable-code-1.rs
+++ b/src/test/run-pass/unreachable-code-1.rs
@@ -18,5 +18,5 @@ fn call_id() {
 
 fn call_id_3() { id(return) && id(return); }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/unreachable-code.rs b/src/test/run-pass/unreachable-code.rs
index a3344bfa5b7..5c046ff0d16 100644
--- a/src/test/run-pass/unreachable-code.rs
+++ b/src/test/run-pass/unreachable-code.rs
@@ -37,4 +37,4 @@ fn ret_guard() {
     }
 }
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/unsafe-fn-called-from-unsafe-blk.rs b/src/test/run-pass/unsafe-fn-called-from-unsafe-blk.rs
index 5c6fb247497..8b1c003c66f 100644
--- a/src/test/run-pass/unsafe-fn-called-from-unsafe-blk.rs
+++ b/src/test/run-pass/unsafe-fn-called-from-unsafe-blk.rs
@@ -20,5 +20,5 @@ fn g() {
     }
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/unsafe-fn-called-from-unsafe-fn.rs b/src/test/run-pass/unsafe-fn-called-from-unsafe-fn.rs
index c4a7350b9c4..1564045a435 100644
--- a/src/test/run-pass/unsafe-fn-called-from-unsafe-fn.rs
+++ b/src/test/run-pass/unsafe-fn-called-from-unsafe-fn.rs
@@ -18,6 +18,6 @@ unsafe fn g() {
     f();
 }
 
-fn main() {
+pub fn main() {
     return;
 }
diff --git a/src/test/run-pass/unsafe-pointer-assignability.rs b/src/test/run-pass/unsafe-pointer-assignability.rs
index 7b683f22a86..6684069c38b 100644
--- a/src/test/run-pass/unsafe-pointer-assignability.rs
+++ b/src/test/run-pass/unsafe-pointer-assignability.rs
@@ -14,7 +14,7 @@ fn f(x: *int) {
     }
 }
 
-fn main() {
+pub fn main() {
     f(&3);
 }
 
diff --git a/src/test/run-pass/unused-move-capture.rs b/src/test/run-pass/unused-move-capture.rs
index 649506e7817..8f3a6f91d17 100644
--- a/src/test/run-pass/unused-move-capture.rs
+++ b/src/test/run-pass/unused-move-capture.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x = ~1;
     let lam_move = fn@(move x) { };
     lam_move();
diff --git a/src/test/run-pass/unused-move.rs b/src/test/run-pass/unused-move.rs
index 1916b23dec0..95b224fa2b7 100644
--- a/src/test/run-pass/unused-move.rs
+++ b/src/test/run-pass/unused-move.rs
@@ -12,7 +12,7 @@
 // Issue Name: Unused move causes a crash
 // Abstract: zero-fill to block after drop
 
-fn main()
+pub fn main()
 {
     let y = ~1;
     move y;
diff --git a/src/test/run-pass/unwind-box.rs b/src/test/run-pass/unwind-box.rs
index 35dda8da170..80bdc9adf41 100644
--- a/src/test/run-pass/unwind-box.rs
+++ b/src/test/run-pass/unwind-box.rs
@@ -16,6 +16,6 @@ fn f() {
     die!();
 }
 
-fn main() {
+pub fn main() {
     task::spawn_unlinked(f);
 }
diff --git a/src/test/run-pass/unwind-resource.rs b/src/test/run-pass/unwind-resource.rs
index b80a6b83b50..5e885f781e2 100644
--- a/src/test/run-pass/unwind-resource.rs
+++ b/src/test/run-pass/unwind-resource.rs
@@ -37,7 +37,7 @@ fn f(c: SharedChan<bool>) {
     die!();
 }
 
-fn main() {
+pub fn main() {
     let (p, c) = stream();
     let c = SharedChan(c);
     task::spawn_unlinked(|| f(c.clone()) );
diff --git a/src/test/run-pass/unwind-resource2.rs b/src/test/run-pass/unwind-resource2.rs
index b133428f7fa..52a64863e72 100644
--- a/src/test/run-pass/unwind-resource2.rs
+++ b/src/test/run-pass/unwind-resource2.rs
@@ -30,6 +30,6 @@ fn f() {
     die!();
 }
 
-fn main() {
+pub fn main() {
     task::spawn_unlinked(f);
 }
diff --git a/src/test/run-pass/unwind-unique.rs b/src/test/run-pass/unwind-unique.rs
index 0ff3cff54f5..5edf4de3be3 100644
--- a/src/test/run-pass/unwind-unique.rs
+++ b/src/test/run-pass/unwind-unique.rs
@@ -16,6 +16,6 @@ fn f() {
     die!();
 }
 
-fn main() {
+pub fn main() {
     task::spawn_unlinked(f);
 }
diff --git a/src/test/run-pass/use-crate-name-alias.rs b/src/test/run-pass/use-crate-name-alias.rs
index dc01a62efde..ea9dcc2f562 100644
--- a/src/test/run-pass/use-crate-name-alias.rs
+++ b/src/test/run-pass/use-crate-name-alias.rs
@@ -11,4 +11,4 @@
 // Issue #1706
 extern mod stdlib(name="std");
 
-fn main() {}
+pub fn main() {}
diff --git a/src/test/run-pass/use-import-export.rs b/src/test/run-pass/use-import-export.rs
index 70c21c6ac4f..ec8033ff3b0 100644
--- a/src/test/run-pass/use-import-export.rs
+++ b/src/test/run-pass/use-import-export.rs
@@ -18,4 +18,4 @@ mod bar {
     pub fn y() -> int { return 1; }
 }
 
-fn main() { foo::x(); bar::y(); }
+pub fn main() { foo::x(); bar::y(); }
diff --git a/src/test/run-pass/use-mod.rs b/src/test/run-pass/use-mod.rs
index bd273e64b1a..1b1402e0a0e 100644
--- a/src/test/run-pass/use-mod.rs
+++ b/src/test/run-pass/use-mod.rs
@@ -18,7 +18,7 @@ mod a {
     }
 }
 
-fn main() {
+pub fn main() {
     b::f();
 }
 
diff --git a/src/test/run-pass/use-trait-before-def.rs b/src/test/run-pass/use-trait-before-def.rs
index 1f268c5c4c1..30646c4a356 100644
--- a/src/test/run-pass/use-trait-before-def.rs
+++ b/src/test/run-pass/use-trait-before-def.rs
@@ -12,4 +12,4 @@
 
 impl int: foo { fn foo() -> int { 10 } }
 trait foo { fn foo() -> int; }
-fn main() {}
\ No newline at end of file
+pub fn main() {}
\ No newline at end of file
diff --git a/src/test/run-pass/use-uninit-alt.rs b/src/test/run-pass/use-uninit-alt.rs
index 95c36df48c5..17600f5f514 100644
--- a/src/test/run-pass/use-uninit-alt.rs
+++ b/src/test/run-pass/use-uninit-alt.rs
@@ -18,4 +18,4 @@ fn foo<T>(o: myoption<T>) -> int {
 
 enum myoption<T> { none, some(T), }
 
-fn main() { log(debug, 5); }
+pub fn main() { log(debug, 5); }
diff --git a/src/test/run-pass/use-uninit-alt2.rs b/src/test/run-pass/use-uninit-alt2.rs
index 5b4fa1f84a5..af0c796ca27 100644
--- a/src/test/run-pass/use-uninit-alt2.rs
+++ b/src/test/run-pass/use-uninit-alt2.rs
@@ -18,4 +18,4 @@ fn foo<T>(o: myoption<T>) -> int {
 
 enum myoption<T> { none, some(T), }
 
-fn main() { log(debug, 5); }
+pub fn main() { log(debug, 5); }
diff --git a/src/test/run-pass/use.rs b/src/test/run-pass/use.rs
index 5f57e1c1475..2a24bfe72d2 100644
--- a/src/test/run-pass/use.rs
+++ b/src/test/run-pass/use.rs
@@ -23,4 +23,4 @@ mod baz {
     pub use x = core::str;
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/utf8.rs b/src/test/run-pass/utf8.rs
index c9698dacd83..0a6e1471671 100644
--- a/src/test/run-pass/utf8.rs
+++ b/src/test/run-pass/utf8.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let yen: char = '¥'; // 0xa5
     let c_cedilla: char = 'ç'; // 0xe7
     let thorn: char = 'þ'; // 0xfe
diff --git a/src/test/run-pass/utf8_chars.rs b/src/test/run-pass/utf8_chars.rs
index 6922bcf7505..147c81a263f 100644
--- a/src/test/run-pass/utf8_chars.rs
+++ b/src/test/run-pass/utf8_chars.rs
@@ -10,7 +10,7 @@
 
 extern mod std;
 
-fn main() {
+pub fn main() {
     // Chars of 1, 2, 3, and 4 bytes
     let chs: ~[char] = ~['e', 'é', '€', 0x10000 as char];
     let s: ~str = str::from_chars(chs);
diff --git a/src/test/run-pass/utf8_idents.rs b/src/test/run-pass/utf8_idents.rs
index bebe40824cd..7cd04d5f7b4 100644
--- a/src/test/run-pass/utf8_idents.rs
+++ b/src/test/run-pass/utf8_idents.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let ε = 0.00001;
     let Π = 3.14;
     let लंच = Π * Π + 1.54;
diff --git a/src/test/run-pass/variant-attributes.rs b/src/test/run-pass/variant-attributes.rs
index 86df25d5496..54a1dd0143e 100644
--- a/src/test/run-pass/variant-attributes.rs
+++ b/src/test/run-pass/variant-attributes.rs
@@ -36,4 +36,4 @@ enum crew_of_enterprise_d {
 
 fn boldly_go(_crew_member: crew_of_enterprise_d, _where: ~str) { }
 
-fn main() { boldly_go(worf, ~"where no one has gone before"); }
+pub fn main() { boldly_go(worf, ~"where no one has gone before"); }
diff --git a/src/test/run-pass/variant-structs-trivial.rs b/src/test/run-pass/variant-structs-trivial.rs
index 6001c5a3e17..e078fa1485d 100644
--- a/src/test/run-pass/variant-structs-trivial.rs
+++ b/src/test/run-pass/variant-structs-trivial.rs
@@ -13,4 +13,4 @@ enum Foo {
     Baz { y: int }
 }
 
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/vec-concat.rs b/src/test/run-pass/vec-concat.rs
index f29bce204e4..82a18a8ebfc 100644
--- a/src/test/run-pass/vec-concat.rs
+++ b/src/test/run-pass/vec-concat.rs
@@ -9,7 +9,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let a: ~[int] = ~[1, 2, 3, 4, 5];
     let b: ~[int] = ~[6, 7, 8, 9, 0];
     let v: ~[int] = a + b;
diff --git a/src/test/run-pass/vec-drop.rs b/src/test/run-pass/vec-drop.rs
index f7d7c1474f7..16cca5cd6cf 100644
--- a/src/test/run-pass/vec-drop.rs
+++ b/src/test/run-pass/vec-drop.rs
@@ -12,7 +12,7 @@
 
 struct Pair { x: int, y: int }
 
-fn main() {
+pub fn main() {
     // This just tests whether the vec leaks its members.
 
     let pvec: ~[@Pair] =
diff --git a/src/test/run-pass/vec-fixed-length.rs b/src/test/run-pass/vec-fixed-length.rs
index 918d6de9dcb..5d0620be28c 100644
--- a/src/test/run-pass/vec-fixed-length.rs
+++ b/src/test/run-pass/vec-fixed-length.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let x: [int*4] = [1, 2, 3, 4];
     io::println(fmt!("%d", x[0]));
 }
diff --git a/src/test/run-pass/vec-growth.rs b/src/test/run-pass/vec-growth.rs
index 0689338e943..ebfb3831045 100644
--- a/src/test/run-pass/vec-growth.rs
+++ b/src/test/run-pass/vec-growth.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let mut v = ~[1];
     v += ~[2];
     v += ~[3];
diff --git a/src/test/run-pass/vec-ivec-deadlock.rs b/src/test/run-pass/vec-ivec-deadlock.rs
index 6dfacfa55ae..505b57ec7bb 100644
--- a/src/test/run-pass/vec-ivec-deadlock.rs
+++ b/src/test/run-pass/vec-ivec-deadlock.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let a = ~[1, 2, 3, 4, 5];
     let mut b = ~[copy a, copy a];
     b = b + b; // FIXME(#3387)---can't write b += b
diff --git a/src/test/run-pass/vec-late-init.rs b/src/test/run-pass/vec-late-init.rs
index 9912c0e88db..918f7e70f4e 100644
--- a/src/test/run-pass/vec-late-init.rs
+++ b/src/test/run-pass/vec-late-init.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let mut later: ~[int];
     if true { later = ~[1]; } else { later = ~[2]; }
     log(debug, later[0]);
diff --git a/src/test/run-pass/vec-matching-autoslice.rs b/src/test/run-pass/vec-matching-autoslice.rs
index 298253b8825..f4eedb288b6 100644
--- a/src/test/run-pass/vec-matching-autoslice.rs
+++ b/src/test/run-pass/vec-matching-autoslice.rs
@@ -1,4 +1,4 @@
-fn main() {
+pub fn main() {
     let x = @[1, 2, 3];
     match x {
         [2, .._] => ::core::util::unreachable(),
diff --git a/src/test/run-pass/vec-matching-legal-tail-element-borrow.rs b/src/test/run-pass/vec-matching-legal-tail-element-borrow.rs
index 0d093a1b4b0..561d5555f12 100644
--- a/src/test/run-pass/vec-matching-legal-tail-element-borrow.rs
+++ b/src/test/run-pass/vec-matching-legal-tail-element-borrow.rs
@@ -1,4 +1,4 @@
-fn main() {
+pub fn main() {
     let x = &[1, 2, 3, 4, 5];
     if !x.is_empty() {
         let el = match x {
diff --git a/src/test/run-pass/vec-matching.rs b/src/test/run-pass/vec-matching.rs
index 687788d8ce8..1c7aec7682f 100644
--- a/src/test/run-pass/vec-matching.rs
+++ b/src/test/run-pass/vec-matching.rs
@@ -10,7 +10,7 @@ fn foldl<T, U: Copy>(
     }
 }
 
-fn main() {
+pub fn main() {
     let x = [1, 2, 3, 4, 5];
     match x {
         [a, b, c, d, e, f] => {
diff --git a/src/test/run-pass/vec-push.rs b/src/test/run-pass/vec-push.rs
index 13869b912f1..50e76db0314 100644
--- a/src/test/run-pass/vec-push.rs
+++ b/src/test/run-pass/vec-push.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let mut v = ~[1, 2, 3]; v.push(1); }
+pub fn main() { let mut v = ~[1, 2, 3]; v.push(1); }
diff --git a/src/test/run-pass/vec-self-append.rs b/src/test/run-pass/vec-self-append.rs
index 9536e30bfbf..44031f5deaa 100644
--- a/src/test/run-pass/vec-self-append.rs
+++ b/src/test/run-pass/vec-self-append.rs
@@ -55,4 +55,4 @@ fn test_loop() {
     }
 }
 
-fn main() { test_heap_to_heap(); test_stack_to_heap(); test_loop(); }
+pub fn main() { test_heap_to_heap(); test_stack_to_heap(); test_loop(); }
diff --git a/src/test/run-pass/vec-slice-drop.rs b/src/test/run-pass/vec-slice-drop.rs
index d3c6ed57c14..a73b12bef94 100644
--- a/src/test/run-pass/vec-slice-drop.rs
+++ b/src/test/run-pass/vec-slice-drop.rs
@@ -25,7 +25,7 @@ fn foo(x: @mut int) -> foo {
     }
 }
 
-fn main() {
+pub fn main() {
     let x = @mut 0;
     {
         let l = &[foo(x)];
diff --git a/src/test/run-pass/vec-slice.rs b/src/test/run-pass/vec-slice.rs
index 4901157c4fa..e77f8c72033 100644
--- a/src/test/run-pass/vec-slice.rs
+++ b/src/test/run-pass/vec-slice.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let  v = ~[1,2,3,4,5];
     let v2 = vec::slice(v, 1, 3);
     assert (v2[0] == 2);
diff --git a/src/test/run-pass/vec-tail-matching.rs b/src/test/run-pass/vec-tail-matching.rs
index 8a50d7b1643..0dc66c091ba 100644
--- a/src/test/run-pass/vec-tail-matching.rs
+++ b/src/test/run-pass/vec-tail-matching.rs
@@ -2,7 +2,7 @@ struct Foo {
     string: ~str
 }
 
-fn main() {
+pub fn main() {
     let x = [
         Foo { string: ~"foo" },
         Foo { string: ~"bar" },
diff --git a/src/test/run-pass/vec-trailing-comma.rs b/src/test/run-pass/vec-trailing-comma.rs
index 8fc7adc5445..d433aa5534c 100644
--- a/src/test/run-pass/vec-trailing-comma.rs
+++ b/src/test/run-pass/vec-trailing-comma.rs
@@ -10,7 +10,7 @@
 
 // Issue #2482.
 
-fn main() {
+pub fn main() {
     let v1: ~[int] = ~[10, 20, 30,];
     let v2: ~[int] = ~[10, 20, 30];
     assert (v1[2] == v2[2]);
diff --git a/src/test/run-pass/vec.rs b/src/test/run-pass/vec.rs
index a27b0240c6a..4a1be51e55e 100644
--- a/src/test/run-pass/vec.rs
+++ b/src/test/run-pass/vec.rs
@@ -12,7 +12,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let v: ~[int] = ~[10, 20];
     assert (v[0] == 10);
     assert (v[1] == 20);
diff --git a/src/test/run-pass/vector-no-ann-2.rs b/src/test/run-pass/vector-no-ann-2.rs
index 5d5db1e7573..f73b75b2f4c 100644
--- a/src/test/run-pass/vector-no-ann-2.rs
+++ b/src/test/run-pass/vector-no-ann-2.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() { let quux: @~[uint] = @~[]; }
+pub fn main() { let quux: @~[uint] = @~[]; }
diff --git a/src/test/run-pass/warn-ctypes-inhibit.rs b/src/test/run-pass/warn-ctypes-inhibit.rs
index 91617fb1c6d..2b5ac075cb5 100644
--- a/src/test/run-pass/warn-ctypes-inhibit.rs
+++ b/src/test/run-pass/warn-ctypes-inhibit.rs
@@ -17,5 +17,5 @@ extern mod libc {
     pub fn malloc(size: int) -> *u8;
 }
 
-fn main() {
+pub fn main() {
 }
diff --git a/src/test/run-pass/weird-exprs.rs b/src/test/run-pass/weird-exprs.rs
index 7899306e98d..5ade8825289 100644
--- a/src/test/run-pass/weird-exprs.rs
+++ b/src/test/run-pass/weird-exprs.rs
@@ -75,7 +75,7 @@ fn angrydome() {
 
 fn evil_lincoln() { let evil = move debug!("lincoln"); }
 
-fn main() {
+pub fn main() {
     strange();
     funny();
     what();
diff --git a/src/test/run-pass/while-cont.rs b/src/test/run-pass/while-cont.rs
index e1d880bfa0e..c13c2d1e7d7 100644
--- a/src/test/run-pass/while-cont.rs
+++ b/src/test/run-pass/while-cont.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // Issue #825: Should recheck the loop contition after continuing
-fn main() {
+pub fn main() {
     let mut i = 1;
     while i > 0 {
         assert (i > 0);
diff --git a/src/test/run-pass/while-flow-graph.rs b/src/test/run-pass/while-flow-graph.rs
index 67c2d813a5d..2e9fb981be4 100644
--- a/src/test/run-pass/while-flow-graph.rs
+++ b/src/test/run-pass/while-flow-graph.rs
@@ -10,4 +10,4 @@
 
 
 
-fn main() { let x: int = 10; while x == 10 && x == 11 { let y = 0xf00; } }
+pub fn main() { let x: int = 10; while x == 10 && x == 11 { let y = 0xf00; } }
diff --git a/src/test/run-pass/while-loop-constraints-2.rs b/src/test/run-pass/while-loop-constraints-2.rs
index 0fdd91f4fa4..3d44cf2669b 100644
--- a/src/test/run-pass/while-loop-constraints-2.rs
+++ b/src/test/run-pass/while-loop-constraints-2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
 
     let mut y: int = 42;
     let mut z: int = 42;
diff --git a/src/test/run-pass/while-prelude-drop.rs b/src/test/run-pass/while-prelude-drop.rs
index cf196278746..da3f28f5b7b 100644
--- a/src/test/run-pass/while-prelude-drop.rs
+++ b/src/test/run-pass/while-prelude-drop.rs
@@ -21,7 +21,7 @@ fn make(i: int) -> t {
     return b(s);
 }
 
-fn main() {
+pub fn main() {
     let mut i = 0;
 
 
diff --git a/src/test/run-pass/while-with-break.rs b/src/test/run-pass/while-with-break.rs
index f0cfb7d6058..8bbea140c60 100644
--- a/src/test/run-pass/while-with-break.rs
+++ b/src/test/run-pass/while-with-break.rs
@@ -2,7 +2,7 @@
 
 
 // -*- rust -*-
-fn main() {
+pub fn main() {
     let mut i: int = 90;
     while i < 100 {
         log(debug, i);
diff --git a/src/test/run-pass/while.rs b/src/test/run-pass/while.rs
index 27d2bca0056..64de4963b8a 100644
--- a/src/test/run-pass/while.rs
+++ b/src/test/run-pass/while.rs
@@ -10,7 +10,7 @@
 
 
 
-fn main() {
+pub fn main() {
     let mut x: int = 10;
     let mut y: int = 0;
     while y < x { log(debug, y); debug!("hello"); y = y + 1; }
diff --git a/src/test/run-pass/writealias.rs b/src/test/run-pass/writealias.rs
index 6d93f837aff..2aa3bc30d07 100644
--- a/src/test/run-pass/writealias.rs
+++ b/src/test/run-pass/writealias.rs
@@ -16,7 +16,7 @@ struct Point {x: int, y: int, mut z: int}
 
 fn f(p: &mut Point) { p.z = 13; }
 
-fn main() {
+pub fn main() {
     let mut x: Point = Point {x: 10, y: 11, mut z: 12};
     f(&mut x);
     assert (x.z == 13);
diff --git a/src/test/run-pass/x86stdcall.rs b/src/test/run-pass/x86stdcall.rs
index 3d42b680813..fb1ec6cd891 100644
--- a/src/test/run-pass/x86stdcall.rs
+++ b/src/test/run-pass/x86stdcall.rs
@@ -19,7 +19,7 @@ extern "stdcall" mod kernel32 {
 
 
 #[cfg(target_os = "win32")]
-fn main() {
+pub fn main() {
     unsafe {
         let expected = 1234u;
         kernel32::SetLastError(expected);
@@ -32,4 +32,4 @@ fn main() {
 #[cfg(target_os = "macos")]
 #[cfg(target_os = "linux")]
 #[cfg(target_os = "freebsd")]
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/x86stdcall2.rs b/src/test/run-pass/x86stdcall2.rs
index 88d5d659169..ad1dbd551b1 100644
--- a/src/test/run-pass/x86stdcall2.rs
+++ b/src/test/run-pass/x86stdcall2.rs
@@ -25,7 +25,7 @@ extern mod kernel32 {
 
 
 #[cfg(target_os = "win32")]
-fn main() {
+pub fn main() {
     let heap = unsafe { kernel32::GetProcessHeap() };
     let mem = unsafe { kernel32::HeapAlloc(heap, 0u32, 100u32) };
     assert mem != 0u;
@@ -36,4 +36,4 @@ fn main() {
 #[cfg(target_os = "macos")]
 #[cfg(target_os = "linux")]
 #[cfg(target_os = "freebsd")]
-fn main() { }
+pub fn main() { }
diff --git a/src/test/run-pass/yield.rs b/src/test/run-pass/yield.rs
index 2d73e672131..d5c58bbd0fa 100644
--- a/src/test/run-pass/yield.rs
+++ b/src/test/run-pass/yield.rs
@@ -9,7 +9,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut result = None;
     task::task().future_result(|+r| { result = Some(move r); }).spawn(child);
     error!("1");
diff --git a/src/test/run-pass/yield1.rs b/src/test/run-pass/yield1.rs
index 34e2f7b3c5d..1f617062434 100644
--- a/src/test/run-pass/yield1.rs
+++ b/src/test/run-pass/yield1.rs
@@ -9,7 +9,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut result = None;
     task::task().future_result(|+r| { result = Some(move r); }).spawn(child);
     error!("1");
diff --git a/src/test/run-pass/yield2.rs b/src/test/run-pass/yield2.rs
index 85a8befd3ba..eaaa226c286 100644
--- a/src/test/run-pass/yield2.rs
+++ b/src/test/run-pass/yield2.rs
@@ -9,7 +9,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() {
+pub fn main() {
     let mut i: int = 0;
     while i < 100 { i = i + 1; log(error, i); task::yield(); }
 }
diff --git a/src/test/run-pass/zip-same-length.rs b/src/test/run-pass/zip-same-length.rs
index 62b6ebf20ae..167448cfe25 100644
--- a/src/test/run-pass/zip-same-length.rs
+++ b/src/test/run-pass/zip-same-length.rs
@@ -28,7 +28,7 @@ fn enum_uints(start: uint, end: uint) -> ~[uint] {
     return r;
 }
 
-fn main() {
+pub fn main() {
     let a = 'a' as u8, j = 'j' as u8, k = 1u, l = 10u;
     let chars = enum_chars(a, j);
     let ints = enum_uints(k, l);