about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-03-25 12:19:20 -0700
committerGraydon Hoare <graydon@mozilla.com>2011-03-25 12:19:20 -0700
commit49d9d5688e12a7874cd6e06c0122577e6b7d1167 (patch)
tree8149415e7b553a5f85b1f15eb56cca581373d1aa
parenta47cd50dfb9b8d88abea0baf4122e454d82e09e9 (diff)
Switch xfail system to use comments embedded in source files.
-rw-r--r--Makefile.in290
-rw-r--r--src/test/bench/99-bottles/99bob-iter.rs1
-rw-r--r--src/test/bench/99-bottles/99bob-pattern.rs1
-rw-r--r--src/test/bench/99-bottles/99bob-simple.rs1
-rw-r--r--src/test/bench/99-bottles/99bob-tail.rs1
-rw-r--r--src/test/bench/shootout/binarytrees.rs1
-rw-r--r--src/test/bench/shootout/fannkuchredux.rs1
-rw-r--r--src/test/bench/shootout/fasta.rs1
-rw-r--r--src/test/bench/shootout/nbody.rs1
-rw-r--r--src/test/compile-fail/bad-alt.rs1
-rw-r--r--src/test/compile-fail/bad-env-capture.rs1
-rw-r--r--src/test/compile-fail/bad-expr-path.rs1
-rw-r--r--src/test/compile-fail/bad-main.rs1
-rw-r--r--src/test/compile-fail/bad-name.rs1
-rw-r--r--src/test/compile-fail/bad-recv.rs2
-rw-r--r--src/test/compile-fail/bad-send.rs2
-rw-r--r--src/test/compile-fail/bad-type-env-capture.rs1
-rw-r--r--src/test/compile-fail/bind-alias.rs1
-rw-r--r--src/test/compile-fail/comm-makes-io.rs1
-rw-r--r--src/test/compile-fail/constructor-as-cast.rs1
-rw-r--r--src/test/compile-fail/dead-code-be.rs1
-rw-r--r--src/test/compile-fail/dead-code-ret.rs1
-rw-r--r--src/test/compile-fail/direct-obj-fn-call.rs1
-rw-r--r--src/test/compile-fail/does-nothing.rs1
-rw-r--r--src/test/compile-fail/export.rs1
-rw-r--r--src/test/compile-fail/fru-typestate.rs1
-rw-r--r--src/test/compile-fail/import.rs1
-rw-r--r--src/test/compile-fail/import2.rs1
-rw-r--r--src/test/compile-fail/import3.rs1
-rw-r--r--src/test/compile-fail/import4.rs1
-rw-r--r--src/test/compile-fail/impure-pred.rs1
-rw-r--r--src/test/compile-fail/infinite-tag-type-recursion.rs1
-rw-r--r--src/test/compile-fail/infinite-vec-type-recursion.rs2
-rw-r--r--src/test/compile-fail/io-infects-caller.rs1
-rw-r--r--src/test/compile-fail/item-name-overload.rs1
-rw-r--r--src/test/compile-fail/missing-return.rs1
-rw-r--r--src/test/compile-fail/native-makes-unsafe.rs1
-rw-r--r--src/test/compile-fail/no-self-dispatch.rs1
-rw-r--r--src/test/compile-fail/not-a-pred.rs1
-rw-r--r--src/test/compile-fail/pred-on-wrong-slots.rs1
-rw-r--r--src/test/compile-fail/put-in-fn.rs1
-rw-r--r--src/test/compile-fail/return-uninit.rs1
-rw-r--r--src/test/compile-fail/slot-as-pred.rs1
-rw-r--r--src/test/compile-fail/spawn-non-nil-fn.rs1
-rw-r--r--src/test/compile-fail/tail-non-call.rs1
-rw-r--r--src/test/compile-fail/unbalanced-comment.rs1
-rw-r--r--src/test/compile-fail/unnecessary-io.rs1
-rw-r--r--src/test/compile-fail/unnecessary-unsafe.rs1
-rw-r--r--src/test/compile-fail/unsafe-infects-caller.rs1
-rw-r--r--src/test/compile-fail/use-uninit-2.rs1
-rw-r--r--src/test/compile-fail/use-uninit-3.rs1
-rw-r--r--src/test/compile-fail/use-uninit.rs1
-rw-r--r--src/test/compile-fail/while-bypass.rs1
-rw-r--r--src/test/compile-fail/while-expr.rs1
-rw-r--r--src/test/compile-fail/writing-through-read-alias.rs2
-rw-r--r--src/test/compile-fail/writing-through-uninit-vec.rs1
-rw-r--r--src/test/compile-fail/writing-to-immutable-obj.rs1
-rw-r--r--src/test/compile-fail/writing-to-immutable-rec.rs1
-rw-r--r--src/test/compile-fail/writing-to-immutable-tup.rs1
-rw-r--r--src/test/compile-fail/writing-to-immutable-vec.rs1
-rw-r--r--src/test/run-fail/explicit-fail.rs1
-rw-r--r--src/test/run-fail/fail.rs1
-rw-r--r--src/test/run-fail/linked-failure.rs1
-rw-r--r--src/test/run-fail/non-exhaustive-match.rs1
-rw-r--r--src/test/run-fail/pred.rs1
-rw-r--r--src/test/run-fail/str-overrun.rs1
-rw-r--r--src/test/run-fail/task-comm-14.rs2
-rw-r--r--src/test/run-fail/vec-overrun.rs1
-rw-r--r--src/test/run-fail/vec-underrun.rs1
-rw-r--r--src/test/run-pass/acyclic-unwind.rs1
-rw-r--r--src/test/run-pass/alt-pattern-drop.rs1
-rw-r--r--src/test/run-pass/alt-type-simple.rs2
-rw-r--r--src/test/run-pass/arith-unsigned.rs1
-rw-r--r--src/test/run-pass/basic-1.rs1
-rw-r--r--src/test/run-pass/basic-2.rs1
-rw-r--r--src/test/run-pass/basic.rs1
-rw-r--r--src/test/run-pass/box-compare.rs1
-rw-r--r--src/test/run-pass/child-outlives-parent.rs2
-rw-r--r--src/test/run-pass/clone-with-exterior.rs2
-rw-r--r--src/test/run-pass/comm.rs1
-rw-r--r--src/test/run-pass/constrained-type.rs2
-rw-r--r--src/test/run-pass/destructor-ordering.rs2
-rw-r--r--src/test/run-pass/empty-mutable-vec.rs1
-rw-r--r--src/test/run-pass/float-signature.rs1
-rw-r--r--src/test/run-pass/float.rs1
-rw-r--r--src/test/run-pass/float2.rs1
-rw-r--r--src/test/run-pass/floatlits.rs1
-rw-r--r--src/test/run-pass/fn-lval.rs1
-rw-r--r--src/test/run-pass/generic-bind-2.rs1
-rw-r--r--src/test/run-pass/generic-fn-box.rs1
-rw-r--r--src/test/run-pass/generic-tag.rs1
-rw-r--r--src/test/run-pass/generic-tup.rs1
-rw-r--r--src/test/run-pass/iter-ret.rs2
-rw-r--r--src/test/run-pass/lazychan.rs1
-rw-r--r--src/test/run-pass/leak-tag-copy.rs1
-rw-r--r--src/test/run-pass/lib-bitv.rs1
-rw-r--r--src/test/run-pass/lib-deque.rs1
-rw-r--r--src/test/run-pass/lib-int.rs1
-rw-r--r--src/test/run-pass/lib-io.rs2
-rw-r--r--src/test/run-pass/lib-map.rs1
-rw-r--r--src/test/run-pass/lib-rand.rs1
-rw-r--r--src/test/run-pass/lib-sha1.rs1
-rw-r--r--src/test/run-pass/lib-sort.rs1
-rw-r--r--src/test/run-pass/lib-str-buf.rs1
-rw-r--r--src/test/run-pass/lib-str.rs1
-rw-r--r--src/test/run-pass/lib-task.rs1
-rw-r--r--src/test/run-pass/lib-uint.rs1
-rw-r--r--src/test/run-pass/lib-vec-str-conversions.rs1
-rw-r--r--src/test/run-pass/lib-vec.rs1
-rw-r--r--src/test/run-pass/many.rs2
-rw-r--r--src/test/run-pass/maybe-mutable.rs1
-rw-r--r--src/test/run-pass/mlist-cycle.rs2
-rw-r--r--src/test/run-pass/mlist.rs2
-rw-r--r--src/test/run-pass/multi.rc1
-rw-r--r--src/test/run-pass/mutable-alias-vec.rs1
-rw-r--r--src/test/run-pass/native-mod.rc1
-rw-r--r--src/test/run-pass/native.rc1
-rw-r--r--src/test/run-pass/obj-as.rs3
-rw-r--r--src/test/run-pass/obj-dtor.rs1
-rw-r--r--src/test/run-pass/pred.rs1
-rw-r--r--src/test/run-pass/preempt.rs1
-rw-r--r--src/test/run-pass/rt-circular-buffer.rs1
-rw-r--r--src/test/run-pass/seq-compare.rs1
-rw-r--r--src/test/run-pass/size-and-align.rs1
-rw-r--r--src/test/run-pass/spawn-fn.rs1
-rw-r--r--src/test/run-pass/spawn-module-qualified.rs1
-rw-r--r--src/test/run-pass/spawn.rs1
-rw-r--r--src/test/run-pass/str-append.rs1
-rw-r--r--src/test/run-pass/syntax-extension-fmt.rs1
-rw-r--r--src/test/run-pass/syntax-extension-shell.rs1
-rw-r--r--src/test/run-pass/task-comm-0.rs1
-rw-r--r--src/test/run-pass/task-comm-1.rs1
-rw-r--r--src/test/run-pass/task-comm-10.rs2
-rw-r--r--src/test/run-pass/task-comm-11.rs1
-rw-r--r--src/test/run-pass/task-comm-12.rs2
-rw-r--r--src/test/run-pass/task-comm-13-thread.rs1
-rw-r--r--src/test/run-pass/task-comm-13.rs1
-rw-r--r--src/test/run-pass/task-comm-15.rs2
-rw-r--r--src/test/run-pass/task-comm-2.rs2
-rw-r--r--src/test/run-pass/task-comm-3.rs2
-rw-r--r--src/test/run-pass/task-comm-7.rs1
-rw-r--r--src/test/run-pass/task-comm-8.rs2
-rw-r--r--src/test/run-pass/task-comm-9.rs2
-rw-r--r--src/test/run-pass/task-comm-chan-nil.rs1
-rw-r--r--src/test/run-pass/task-comm.rs2
-rw-r--r--src/test/run-pass/task-killjoin.rs1
-rw-r--r--src/test/run-pass/task-life-0.rs2
-rw-r--r--src/test/run-pass/threads.rs1
-rw-r--r--src/test/run-pass/type-sizes.rs1
-rw-r--r--src/test/run-pass/typestate-cfg-nesting.rs1
-rw-r--r--src/test/run-pass/use-import-export.rs1
-rw-r--r--src/test/run-pass/use.rs1
-rw-r--r--src/test/run-pass/user.rs1
-rw-r--r--src/test/run-pass/utf8.rs1
-rw-r--r--src/test/run-pass/utf8_chars.rs1
-rw-r--r--src/test/run-pass/vec-alloc-append.rs1
-rw-r--r--src/test/run-pass/vec-append.rs1
-rw-r--r--src/test/run-pass/vec-slice.rs3
-rw-r--r--src/test/run-pass/while-and-do-while.rs1
-rw-r--r--src/test/run-pass/while-with-break.rs1
-rw-r--r--src/test/run-pass/yield.rs1
-rw-r--r--src/test/run-pass/yield2.rs1
162 files changed, 245 insertions, 234 deletions
diff --git a/Makefile.in b/Makefile.in
index fd8d8b52923..1cb84047a26 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -568,195 +568,17 @@ docsnap: doc/rust.pdf
 # Testing variables
 ######################################################################
 
-# Float doesn't work in boot
-
-FLOAT_XFAILS := $(S)src/test/run-pass/float.rs \
-                $(S)src/test/run-pass/float2.rs \
-                $(S)src/test/run-pass/float-signature.rs \
-                $(S)src/test/run-pass/floatlits.rs
-
-# Temporarily xfail tests broken by the nominal-tags change.
-
-NOMINAL_TAG_XFAILS := $(S)src/test/run-pass/mlist.rs
-
-# Temporarily xfail tests broken by the constant-tags change.
-
-CONST_TAG_XFAILS := $(S)src/test/run-pass/generic-tag.rs
-
-# Temporarily xfail some of the task tests, while debugging the
-# overhauled inter-domain messaging system.
-
-TASK_XFAILS := $(addprefix $(S)src/test/run-pass/, \
-                 task-comm-8.rs \
-                 task-comm-10.rs \
-                 task-comm-15.rs \
-                 task-comm-12.rs \
-                 task-comm-2.rs \
-                 task-comm-9.rs \
-                 task-comm-chan-nil.rs \
-                 task-life-0.rs \
-                 alt-type-simple.rs \
-                 many.rs)
-
-TEST_XFAILS_BOOT := $(TASK_XFAILS) \
-                    $(NOMINAL_TAG_XFAILS) \
-                    $(CONST_TAG_XFAILS) \
-                    $(FLOAT_XFAILS) \
-                    $(addprefix $(S)src/test/run-pass/, \
-                      arith-unsigned.rs \
-                      box-compare.rs \
-                      child-outlives-parent.rs \
-                      clone-with-exterior.rs \
-                      constrained-type.rs \
-                      destructor-ordering.rs \
-                      obj-as.rs \
-                      vec-slice.rs \
-                      fn-lval.rs \
-                      empty-mutable-vec.rs \
-                      generic-bind-2.rs \
-                      generic-fn-box.rs \
-                      generic-tup.rs \
-                      iter-ret.rs \
-                      leak-tag-copy.rs \
-                      lib-io.rs \
-                      maybe-mutable.rs \
-                      mlist-cycle.rs \
-                      obj-as.rs \
-                      seq-compare.rs \
-                      task-comm.rs \
-                      task-comm-3.rs \
-                      vec-slice.rs \
-                      while-and-do-while.rs) \
-                    $(addprefix $(S)src/test/run-fail/, \
-                      task-comm-14.rs) \
-                    $(addprefix $(S)src/test/compile-fail/, \
-                      bad-expr-path.rs \
-                      import.rs \
-                      import2.rs \
-                      import3.rs \
-                      import4.rs \
-                      bad-recv.rs \
-                      bad-send.rs \
-                      infinite-vec-type-recursion.rs \
-                      tail-non-call.rs \
-                      writing-through-read-alias.rs) \
-                    $(S)src/test/bench/shootout/nbody.rs
-
-TEST_XFAILS_STAGE0 := $(addprefix $(S)src/test/run-pass/, \
-                        acyclic-unwind.rs \
-                        alt-pattern-drop.rs \
-                        alt-type-simple.rs \
-                        basic-1.rs \
-                        basic-2.rs \
-                        basic.rs \
-                        child-outlives-parent.rs \
-                        clone-with-exterior.rs \
-                        comm.rs \
-                        constrained-type.rs \
-                        destructor-ordering.rs \
-                        iter-ret.rs \
-                        lazychan.rs \
-                        lib-bitv.rs \
-                        lib-deque.rs \
-                        lib-int.rs \
-                        lib-io.rs \
-                        lib-map.rs \
-                        lib-rand.rs \
-                        lib-sha1.rs \
-                        lib-sort.rs \
-                        lib-str.rs \
-                        lib-str-buf.rs \
-                        lib-task.rs \
-                        lib-uint.rs \
-                        lib-vec-str-conversions.rs \
-                        lib-vec.rs \
-                        many.rs \
-                        mlist-cycle.rs \
-                        mlist.rs \
-                        mutable-alias-vec.rs \
-                        obj-as.rs \
-                        obj-dtor.rs \
-                        pred.rs \
-                        preempt.rs \
-                        rt-circular-buffer.rs \
-                        size-and-align.rs \
-                        spawn-fn.rs \
-                        spawn-module-qualified.rs \
-                        spawn.rs \
-                        str-append.rs \
-                        syntax-extension-fmt.rs \
-                        syntax-extension-shell.rs \
-                        task-comm-0.rs \
-                        task-comm-1.rs \
-                        task-comm-10.rs \
-                        task-comm-11.rs \
-                        task-comm-12.rs \
-                        task-comm-13-thread.rs \
-                        task-comm-13.rs \
-                        task-comm-15.rs \
-                        task-comm-2.rs \
-                        task-comm-3.rs \
-                        task-comm-7.rs \
-                        task-comm-8.rs \
-                        task-comm-9.rs \
-                        task-comm.rs \
-                        task-killjoin.rs \
-                        task-life-0.rs \
-                        threads.rs \
-                        type-sizes.rs \
-                        typestate-cfg-nesting.rs \
-                        use.rs \
-                        use-import-export.rs \
-                        user.rs \
-                        utf8.rs \
-                        utf8_chars.rs \
-                        vec-alloc-append.rs \
-                        vec-append.rs \
-                        vec-slice.rs \
-                        while-with-break.rs \
-                        yield.rs \
-                        yield2.rs \
-                        multi.rc \
-                        native-mod.rc \
-                        native.rc \
-                        ) \
-                     $(filter-out \
-                      $(addprefix $(S)src/test/compile-fail/, \
-                        alt-tag-nullary.rs \
-                        alt-tag-unary.rs \
-                        arg-count-mismatch.rs \
-                        arg-type-mismatch.rs \
-                        bad-expr-path.rs \
-                        bad-expr-path2.rs \
-                        bogus-tag.rs \
-                        fru-extra-field.rs \
-                        import.rs \
-                        import2.rs \
-                        import3.rs \
-                        import4.rs \
-                        import-loop.rs \
-                        import-loop-2.rs \
-                        multiline-comment-line-tracking.rs \
-                        output-type-mismatch.rs \
-                        rec-missing-fields.rs \
-                        reserved-dec.rs \
-                        reserved-f128.rs \
-                        reserved-f16.rs \
-                        reserved-f80.rs \
-                        reserved-m128.rs \
-                        reserved-m32.rs \
-                        reserved-m64.rs \
-                        tail-non-call.rs \
-                        tail-typeck.rs \
-                        type-shadow.rs \
-                        while-type-error.rs \
-                        wrong-ret-type.rs \
-                        ), \
-                     $(wildcard $(S)src/test/*fail/*.rs test/*fail/*.rc)) \
-                     $(S)src/test/bench/shootout/fannkuchredux.rs \
-                     $(S)src/test/bench/shootout/fasta.rs \
-                     $(S)src/test/bench/shootout/binarytrees.rs \
-                     $(wildcard $(S)src/test/bench/99-bottles/*rs)
+TEST_XFAILS_BOOT = $(shell grep \
+                       --recursive \
+                       --files-with-matches \
+                       --include=*.rs --include=*.rc \
+                       xfail-boot $(S)src/test)
+
+TEST_XFAILS_STAGE0 = $(shell grep \
+                       --recursive \
+                       --files-with-matches \
+                       --include=*.rs --include=*.rc \
+                       xfail-stage0 $(S)src/test)
 
 ifdef MINGW_CROSS
 TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
@@ -767,106 +589,106 @@ TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
 TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
 endif
 
-BENCH_RS := $(wildcard $(S)src/test/bench/shootout/*.rs) \
+BENCH_RS = $(wildcard $(S)src/test/bench/shootout/*.rs) \
             $(wildcard $(S)src/test/bench/99-bottles/*.rs)
-RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
-RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs) $(BENCH_RS)
-RFAIL_RC := $(wildcard $(S)src/test/run-fail/*.rc)
-RFAIL_RS := $(wildcard $(S)src/test/run-fail/*.rs)
-CFAIL_RC := $(wildcard $(S)src/test/compile-fail/*.rc)
-CFAIL_RS := $(wildcard $(S)src/test/compile-fail/*.rs)
+RPASS_RC = $(wildcard $(S)src/test/run-pass/*.rc)
+RPASS_RS = $(wildcard $(S)src/test/run-pass/*.rs) $(BENCH_RS)
+RFAIL_RC = $(wildcard $(S)src/test/run-fail/*.rc)
+RFAIL_RS = $(wildcard $(S)src/test/run-fail/*.rs)
+CFAIL_RC = $(wildcard $(S)src/test/compile-fail/*.rc)
+CFAIL_RS = $(wildcard $(S)src/test/compile-fail/*.rs)
 
 ifdef CHECK_XFAILS
-TEST_RPASS_CRATES_BOOT := $(filter $(TEST_XFAILS_BOOT), $(RPASS_RC))
-TEST_RPASS_CRATES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RC))
-TEST_RPASS_SOURCES_BOOT := $(filter $(TEST_XFAILS_BOOT), $(RPASS_RS))
-TEST_RPASS_SOURCES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RS))
+TEST_RPASS_CRATES_BOOT = $(filter $(TEST_XFAILS_BOOT), $(RPASS_RC))
+TEST_RPASS_CRATES_STAGE0 = $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RC))
+TEST_RPASS_SOURCES_BOOT = $(filter $(TEST_XFAILS_BOOT), $(RPASS_RS))
+TEST_RPASS_SOURCES_STAGE0 = $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RS))
 else
-TEST_RPASS_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RC))
-TEST_RPASS_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RC))
-TEST_RPASS_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RS))
-TEST_RPASS_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RS))
+TEST_RPASS_CRATES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RC))
+TEST_RPASS_CRATES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RC))
+TEST_RPASS_SOURCES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RS))
+TEST_RPASS_SOURCES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RS))
 endif
 
-TEST_RPASS_EXES_BOOT := \
+TEST_RPASS_EXES_BOOT = \
   $(subst $(S)src/,,$(TEST_RPASS_CRATES_BOOT:.rc=.boot$(X))) \
   $(subst $(S)src/,,$(TEST_RPASS_SOURCES_BOOT:.rs=.boot$(X)))
-TEST_RPASS_EXES_STAGE0 := \
+TEST_RPASS_EXES_STAGE0 = \
   $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE0:.rc=.stage0$(X))) \
   $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE0:.rs=.stage0$(X)))
 
-TEST_RPASS_OUTS_BOOT  := \
+TEST_RPASS_OUTS_BOOT  = \
   $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot.out)
-TEST_RPASS_OUTS_STAGE0 := \
+TEST_RPASS_OUTS_STAGE0 = \
   $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0.out)
 
-TEST_RPASS_TMPS_BOOT  := \
+TEST_RPASS_TMPS_BOOT  = \
   $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
-TEST_RPASS_TMPS_STAGE0 := \
+TEST_RPASS_TMPS_STAGE0 = \
   $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
 
 
-TEST_RFAIL_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RC))
-TEST_RFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RC))
-TEST_RFAIL_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RS))
-TEST_RFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RS))
+TEST_RFAIL_CRATES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RC))
+TEST_RFAIL_CRATES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RC))
+TEST_RFAIL_SOURCES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RS))
+TEST_RFAIL_SOURCES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RS))
 
-TEST_RFAIL_EXES_BOOT := \
+TEST_RFAIL_EXES_BOOT = \
   $(subst $(S)src/,,$(TEST_RFAIL_CRATES_BOOT:.rc=.boot$(X))) \
   $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_BOOT:.rs=.boot$(X)))
-TEST_RFAIL_EXES_STAGE0 := \
+TEST_RFAIL_EXES_STAGE0 = \
   $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
   $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
 
-TEST_RFAIL_OUTS_BOOT  := \
+TEST_RFAIL_OUTS_BOOT  = \
   $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot.out)
-TEST_RFAIL_OUTS_STAGE0 := \
+TEST_RFAIL_OUTS_STAGE0 = \
   $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
 
-TEST_RFAIL_TMPS_BOOT  := \
+TEST_RFAIL_TMPS_BOOT  = \
   $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
-TEST_RFAIL_TMPS_STAGE0 := \
+TEST_RFAIL_TMPS_STAGE0 = \
   $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
 
 
-TEST_CFAIL_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RC))
-TEST_CFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RC))
-TEST_CFAIL_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RS))
-TEST_CFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RS))
+TEST_CFAIL_CRATES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RC))
+TEST_CFAIL_CRATES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RC))
+TEST_CFAIL_SOURCES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RS))
+TEST_CFAIL_SOURCES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RS))
 
-TEST_CFAIL_EXES_BOOT := \
+TEST_CFAIL_EXES_BOOT = \
   $(subst $(S)src/,,$(TEST_CFAIL_CRATES_BOOT:.rc=.boot$(X))) \
   $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_BOOT:.rs=.boot$(X)))
-TEST_CFAIL_EXES_STAGE0 := \
+TEST_CFAIL_EXES_STAGE0 = \
   $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
   $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
 
-TEST_CFAIL_OUTS_BOOT := \
+TEST_CFAIL_OUTS_BOOT = \
   $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot.out)
-TEST_CFAIL_OUTS_STAGE0 := \
+TEST_CFAIL_OUTS_STAGE0 = \
   $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
 
-TEST_CFAIL_TMPS_BOOT := \
+TEST_CFAIL_TMPS_BOOT = \
   $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
-TEST_CFAIL_TMPS_STAGE0 := \
+TEST_CFAIL_TMPS_STAGE0 = \
   $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
 
 
-ALL_TEST_CRATES := $(TEST_CFAIL_CRATES_BOOT) \
+ALL_TEST_CRATES = $(TEST_CFAIL_CRATES_BOOT) \
                    $(TEST_RFAIL_CRATES_BOOT) \
                    $(TEST_RPASS_CRATES_BOOT) \
                    $(TEST_CFAIL_CRATES_STAGE0) \
                    $(TEST_RFAIL_CRATES_STAGE0) \
                    $(TEST_RPASS_CRATES_STAGE0)
 
-ALL_TEST_SOURCES := $(TEST_CFAIL_SOURCES_BOOT) \
+ALL_TEST_SOURCES = $(TEST_CFAIL_SOURCES_BOOT) \
                     $(TEST_RFAIL_SOURCES_BOOT) \
                     $(TEST_RPASS_SOURCES_BOOT) \
                     $(TEST_CFAIL_SOURCES_STAGE0) \
                     $(TEST_RFAIL_SOURCES_STAGE0) \
                     $(TEST_RPASS_SOURCES_STAGE0)
 
-ALL_TEST_INPUTS := $(wildcard $(S)src/test/*/*.rs   \
+ALL_TEST_INPUTS = $(wildcard $(S)src/test/*/*.rs   \
                               $(S)src/test/*/*/*.rs \
                               $(S)src/test/*/*.rc)
 
@@ -1131,7 +953,7 @@ PKG_3RDPARTY := rt/valgrind.h rt/memcheck.h \
                 rt/bigint/bigint.h rt/bigint/bigint_int.cpp \
                 rt/bigint/bigint_ext.cpp rt/bigint/low_primes.h
 
-PKG_FILES :=\
+PKG_FILES = \
     $(wildcard $(S)src/etc/*.*)                \
     $(S)LICENSE.txt $(S)README                 \
     $(S)configure $(S)Makefile.in              \
diff --git a/src/test/bench/99-bottles/99bob-iter.rs b/src/test/bench/99-bottles/99bob-iter.rs
index 096389416a8..e43541f4929 100644
--- a/src/test/bench/99-bottles/99bob-iter.rs
+++ b/src/test/bench/99-bottles/99bob-iter.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 /* -*- mode:rust;indent-tabs-mode:nil -*- 
  * Implementation of 99 Bottles of Beer
  * http://99-bottles-of-beer.net/
diff --git a/src/test/bench/99-bottles/99bob-pattern.rs b/src/test/bench/99-bottles/99bob-pattern.rs
index 58d2d2c3e54..539f81526fd 100644
--- a/src/test/bench/99-bottles/99bob-pattern.rs
+++ b/src/test/bench/99-bottles/99bob-pattern.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 /* -*- mode:rust;indent-tabs-mode:nil -*- 
  * Implementation of 99 Bottles of Beer
  * http://99-bottles-of-beer.net/
diff --git a/src/test/bench/99-bottles/99bob-simple.rs b/src/test/bench/99-bottles/99bob-simple.rs
index 3c426f51036..d5adf102c52 100644
--- a/src/test/bench/99-bottles/99bob-simple.rs
+++ b/src/test/bench/99-bottles/99bob-simple.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 /* -*- mode:rust;indent-tabs-mode:nil -*- 
  * Implementation of 99 Bottles of Beer
  * http://99-bottles-of-beer.net/
diff --git a/src/test/bench/99-bottles/99bob-tail.rs b/src/test/bench/99-bottles/99bob-tail.rs
index 16e66d333d3..41e2c536ed1 100644
--- a/src/test/bench/99-bottles/99bob-tail.rs
+++ b/src/test/bench/99-bottles/99bob-tail.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 /* -*- mode:rust;indent-tabs-mode:nil -*- 
  * Implementation of 99 Bottles of Beer
  * http://99-bottles-of-beer.net/
diff --git a/src/test/bench/shootout/binarytrees.rs b/src/test/bench/shootout/binarytrees.rs
index 92bedb8b9e6..0fc7ced4a9f 100644
--- a/src/test/bench/shootout/binarytrees.rs
+++ b/src/test/bench/shootout/binarytrees.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 
 import std._int;
diff --git a/src/test/bench/shootout/fannkuchredux.rs b/src/test/bench/shootout/fannkuchredux.rs
index 2d44067bec3..65f6bdb239d 100644
--- a/src/test/bench/shootout/fannkuchredux.rs
+++ b/src/test/bench/shootout/fannkuchredux.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // Based on Isaac Gouy's fannkuchredux.csharp
 
 use std;
diff --git a/src/test/bench/shootout/fasta.rs b/src/test/bench/shootout/fasta.rs
index f88f4330fce..82d65e84e62 100644
--- a/src/test/bench/shootout/fasta.rs
+++ b/src/test/bench/shootout/fasta.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 /* -*- mode: rust; indent-tabs-mode: nil -*-
  * Implementation of 'fasta' benchmark from
  * Computer Language Benchmarks Game
diff --git a/src/test/bench/shootout/nbody.rs b/src/test/bench/shootout/nbody.rs
index b0ac2d44697..5d9e304a420 100644
--- a/src/test/bench/shootout/nbody.rs
+++ b/src/test/bench/shootout/nbody.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // based on:
 // http://shootout.alioth.debian.org/u32/benchmark.php?test=nbody&lang=java
 
diff --git a/src/test/compile-fail/bad-alt.rs b/src/test/compile-fail/bad-alt.rs
index f2582879ce5..0b5dbbfe996 100644
--- a/src/test/compile-fail/bad-alt.rs
+++ b/src/test/compile-fail/bad-alt.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: Unexpected token 'x'
 
 fn main() {
diff --git a/src/test/compile-fail/bad-env-capture.rs b/src/test/compile-fail/bad-env-capture.rs
index 013bb56e445..8e30ac4407d 100644
--- a/src/test/compile-fail/bad-env-capture.rs
+++ b/src/test/compile-fail/bad-env-capture.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: attempted dynamic environment-capture
 fn foo() {
   let int x;
diff --git a/src/test/compile-fail/bad-expr-path.rs b/src/test/compile-fail/bad-expr-path.rs
index 97c95c01545..01e27c5a15a 100644
--- a/src/test/compile-fail/bad-expr-path.rs
+++ b/src/test/compile-fail/bad-expr-path.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // error-pattern: unresolved name: a
 
 mod m1 {
diff --git a/src/test/compile-fail/bad-main.rs b/src/test/compile-fail/bad-main.rs
index 8e3fa503eaf..d1a5203f5d8 100644
--- a/src/test/compile-fail/bad-main.rs
+++ b/src/test/compile-fail/bad-main.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: bad type signature
 
 fn main(int x) {
diff --git a/src/test/compile-fail/bad-name.rs b/src/test/compile-fail/bad-name.rs
index 44a30219f1d..99324ce12c0 100644
--- a/src/test/compile-fail/bad-name.rs
+++ b/src/test/compile-fail/bad-name.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 
 // error-pattern: malformed name
 
diff --git a/src/test/compile-fail/bad-recv.rs b/src/test/compile-fail/bad-recv.rs
index cccb735da05..031d1059f9d 100644
--- a/src/test/compile-fail/bad-recv.rs
+++ b/src/test/compile-fail/bad-recv.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // error-pattern: mismatched types
 
 fn main() {
diff --git a/src/test/compile-fail/bad-send.rs b/src/test/compile-fail/bad-send.rs
index e699b4e38df..4a97539f011 100644
--- a/src/test/compile-fail/bad-send.rs
+++ b/src/test/compile-fail/bad-send.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // error-pattern: mismatched types
 
 fn main() {
diff --git a/src/test/compile-fail/bad-type-env-capture.rs b/src/test/compile-fail/bad-type-env-capture.rs
index e18e63a76af..53b96278a48 100644
--- a/src/test/compile-fail/bad-type-env-capture.rs
+++ b/src/test/compile-fail/bad-type-env-capture.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: attempted dynamic environment-capture
 fn foo[T]() { obj bar(T b) {} }
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/bind-alias.rs b/src/test/compile-fail/bind-alias.rs
index b2f53252c69..7d85d07f8a0 100644
--- a/src/test/compile-fail/bind-alias.rs
+++ b/src/test/compile-fail/bind-alias.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: binding alias slot
 
 fn f(&int x) {}
diff --git a/src/test/compile-fail/comm-makes-io.rs b/src/test/compile-fail/comm-makes-io.rs
index 57a8e6e86f6..4a0f704a0d2 100644
--- a/src/test/compile-fail/comm-makes-io.rs
+++ b/src/test/compile-fail/comm-makes-io.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: calculated effect is 'impure'
 
 fn main() {
diff --git a/src/test/compile-fail/constructor-as-cast.rs b/src/test/compile-fail/constructor-as-cast.rs
index 2374cd2ce37..6d81b693610 100644
--- a/src/test/compile-fail/constructor-as-cast.rs
+++ b/src/test/compile-fail/constructor-as-cast.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: non-type context
 type base =
   obj {
diff --git a/src/test/compile-fail/dead-code-be.rs b/src/test/compile-fail/dead-code-be.rs
index af1456a4105..5a069c5ae7a 100644
--- a/src/test/compile-fail/dead-code-be.rs
+++ b/src/test/compile-fail/dead-code-be.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: dead
diff --git a/src/test/compile-fail/dead-code-ret.rs b/src/test/compile-fail/dead-code-ret.rs
index 4c52fcaa372..c992e4e5d0a 100644
--- a/src/test/compile-fail/dead-code-ret.rs
+++ b/src/test/compile-fail/dead-code-ret.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: dead
diff --git a/src/test/compile-fail/direct-obj-fn-call.rs b/src/test/compile-fail/direct-obj-fn-call.rs
index fa0677253da..e4184ccda97 100644
--- a/src/test/compile-fail/direct-obj-fn-call.rs
+++ b/src/test/compile-fail/direct-obj-fn-call.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 
 // error-pattern: is not a mod
 
diff --git a/src/test/compile-fail/does-nothing.rs b/src/test/compile-fail/does-nothing.rs
index 805d3142622..e6680193d94 100644
--- a/src/test/compile-fail/does-nothing.rs
+++ b/src/test/compile-fail/does-nothing.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: does nothing
 fn main() {
   log "doing";
diff --git a/src/test/compile-fail/export.rs b/src/test/compile-fail/export.rs
index 7a00f22191d..84e87c2e561 100644
--- a/src/test/compile-fail/export.rs
+++ b/src/test/compile-fail/export.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: unknown module item
 mod foo {
   export x;
diff --git a/src/test/compile-fail/fru-typestate.rs b/src/test/compile-fail/fru-typestate.rs
index 86c68e5b905..74fcdb26520 100644
--- a/src/test/compile-fail/fru-typestate.rs
+++ b/src/test/compile-fail/fru-typestate.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: precondition
diff --git a/src/test/compile-fail/import.rs b/src/test/compile-fail/import.rs
index 71ef0dec9c5..db1eac5c369 100644
--- a/src/test/compile-fail/import.rs
+++ b/src/test/compile-fail/import.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // error-pattern: unresolved name: baz
 import zed.bar;
 import zed.baz;
diff --git a/src/test/compile-fail/import2.rs b/src/test/compile-fail/import2.rs
index 5a9ddcbd815..91d2ade36fc 100644
--- a/src/test/compile-fail/import2.rs
+++ b/src/test/compile-fail/import2.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // error-pattern: unresolved name: zed
 import baz.zed.bar;
 mod baz {
diff --git a/src/test/compile-fail/import3.rs b/src/test/compile-fail/import3.rs
index 16aa43eab83..eede762610c 100644
--- a/src/test/compile-fail/import3.rs
+++ b/src/test/compile-fail/import3.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // error-pattern: main is not a module or crate
 import main.bar;
 
diff --git a/src/test/compile-fail/import4.rs b/src/test/compile-fail/import4.rs
index 3e1208f51e7..bbef8d53eae 100644
--- a/src/test/compile-fail/import4.rs
+++ b/src/test/compile-fail/import4.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // error-pattern: cyclic import
 
 import zed.bar;
diff --git a/src/test/compile-fail/impure-pred.rs b/src/test/compile-fail/impure-pred.rs
index c322850b6dd..17a651cad7a 100644
--- a/src/test/compile-fail/impure-pred.rs
+++ b/src/test/compile-fail/impure-pred.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: impure function used in constraint
diff --git a/src/test/compile-fail/infinite-tag-type-recursion.rs b/src/test/compile-fail/infinite-tag-type-recursion.rs
index 17f8f594f92..8ba0e25be73 100644
--- a/src/test/compile-fail/infinite-tag-type-recursion.rs
+++ b/src/test/compile-fail/infinite-tag-type-recursion.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: tag of infinite size
diff --git a/src/test/compile-fail/infinite-vec-type-recursion.rs b/src/test/compile-fail/infinite-vec-type-recursion.rs
index 9315488b056..4534f119e17 100644
--- a/src/test/compile-fail/infinite-vec-type-recursion.rs
+++ b/src/test/compile-fail/infinite-vec-type-recursion.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: infinite recursive type definition
diff --git a/src/test/compile-fail/io-infects-caller.rs b/src/test/compile-fail/io-infects-caller.rs
index b07f46e6d20..5e8281c53e4 100644
--- a/src/test/compile-fail/io-infects-caller.rs
+++ b/src/test/compile-fail/io-infects-caller.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: calculated effect is 'impure'
 
 impure fn foo() {
diff --git a/src/test/compile-fail/item-name-overload.rs b/src/test/compile-fail/item-name-overload.rs
index f0f585f5eb8..5cff8b986e7 100644
--- a/src/test/compile-fail/item-name-overload.rs
+++ b/src/test/compile-fail/item-name-overload.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: name
diff --git a/src/test/compile-fail/missing-return.rs b/src/test/compile-fail/missing-return.rs
index 34fb4105b8e..4c73a4fd4c9 100644
--- a/src/test/compile-fail/missing-return.rs
+++ b/src/test/compile-fail/missing-return.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: return
 
 fn f() -> int {
diff --git a/src/test/compile-fail/native-makes-unsafe.rs b/src/test/compile-fail/native-makes-unsafe.rs
index d6e77b0d991..d158f56324d 100644
--- a/src/test/compile-fail/native-makes-unsafe.rs
+++ b/src/test/compile-fail/native-makes-unsafe.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: calculated effect is 'unsafe'
 
 native mod foo {
diff --git a/src/test/compile-fail/no-self-dispatch.rs b/src/test/compile-fail/no-self-dispatch.rs
index be90c12fec2..96089e670c0 100644
--- a/src/test/compile-fail/no-self-dispatch.rs
+++ b/src/test/compile-fail/no-self-dispatch.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: unresolved identifier
 obj oT() {
   fn get() -> int {
diff --git a/src/test/compile-fail/not-a-pred.rs b/src/test/compile-fail/not-a-pred.rs
index 4a899512e31..c599f3bcb45 100644
--- a/src/test/compile-fail/not-a-pred.rs
+++ b/src/test/compile-fail/not-a-pred.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: mismatched types
diff --git a/src/test/compile-fail/pred-on-wrong-slots.rs b/src/test/compile-fail/pred-on-wrong-slots.rs
index cf31b8bdf0b..7106df5c80b 100644
--- a/src/test/compile-fail/pred-on-wrong-slots.rs
+++ b/src/test/compile-fail/pred-on-wrong-slots.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: Unsatisfied .* lt(a, c)
diff --git a/src/test/compile-fail/put-in-fn.rs b/src/test/compile-fail/put-in-fn.rs
index 9f704bc35b0..22882ff2aee 100644
--- a/src/test/compile-fail/put-in-fn.rs
+++ b/src/test/compile-fail/put-in-fn.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: iterator function
 
 fn f() -> int {
diff --git a/src/test/compile-fail/return-uninit.rs b/src/test/compile-fail/return-uninit.rs
index 3711716927a..047db518fab 100644
--- a/src/test/compile-fail/return-uninit.rs
+++ b/src/test/compile-fail/return-uninit.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: precondition constraint
 
 fn f() -> int {
diff --git a/src/test/compile-fail/slot-as-pred.rs b/src/test/compile-fail/slot-as-pred.rs
index 1da8df840c1..2ba4a30cae4 100644
--- a/src/test/compile-fail/slot-as-pred.rs
+++ b/src/test/compile-fail/slot-as-pred.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: mismatched types
diff --git a/src/test/compile-fail/spawn-non-nil-fn.rs b/src/test/compile-fail/spawn-non-nil-fn.rs
index 4d869bba239..bd7d7d9f027 100644
--- a/src/test/compile-fail/spawn-non-nil-fn.rs
+++ b/src/test/compile-fail/spawn-non-nil-fn.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: mismatched types
 
 fn f(int x) -> int {
diff --git a/src/test/compile-fail/tail-non-call.rs b/src/test/compile-fail/tail-non-call.rs
index 00a451f647a..e2dbc381fb1 100644
--- a/src/test/compile-fail/tail-non-call.rs
+++ b/src/test/compile-fail/tail-non-call.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // error-pattern: Non-call expression in tail call
 
 fn f() -> int {
diff --git a/src/test/compile-fail/unbalanced-comment.rs b/src/test/compile-fail/unbalanced-comment.rs
index a1916fdccac..f49e7447692 100644
--- a/src/test/compile-fail/unbalanced-comment.rs
+++ b/src/test/compile-fail/unbalanced-comment.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: token
diff --git a/src/test/compile-fail/unnecessary-io.rs b/src/test/compile-fail/unnecessary-io.rs
index fb50a54ccbf..64784661b3c 100644
--- a/src/test/compile-fail/unnecessary-io.rs
+++ b/src/test/compile-fail/unnecessary-io.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: calculated effect is ''
 impure fn main() {
   log "hi";
diff --git a/src/test/compile-fail/unnecessary-unsafe.rs b/src/test/compile-fail/unnecessary-unsafe.rs
index 6705bf34645..9d48f164e23 100644
--- a/src/test/compile-fail/unnecessary-unsafe.rs
+++ b/src/test/compile-fail/unnecessary-unsafe.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: calculated effect is ''
 unsafe fn main() {
   log "hi";
diff --git a/src/test/compile-fail/unsafe-infects-caller.rs b/src/test/compile-fail/unsafe-infects-caller.rs
index 28daea6c9f5..532024e59d0 100644
--- a/src/test/compile-fail/unsafe-infects-caller.rs
+++ b/src/test/compile-fail/unsafe-infects-caller.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: calculated effect is 'unsafe'
 
 native mod foo {
diff --git a/src/test/compile-fail/use-uninit-2.rs b/src/test/compile-fail/use-uninit-2.rs
index 79cebe2811f..c77676b8099 100644
--- a/src/test/compile-fail/use-uninit-2.rs
+++ b/src/test/compile-fail/use-uninit-2.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern:Unsatisfied precondition
 
 fn foo(int x) {
diff --git a/src/test/compile-fail/use-uninit-3.rs b/src/test/compile-fail/use-uninit-3.rs
index e65454518a3..5dd3926ba0d 100644
--- a/src/test/compile-fail/use-uninit-3.rs
+++ b/src/test/compile-fail/use-uninit-3.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern:Unsatisfied precondition
 
 fn foo(int x) {
diff --git a/src/test/compile-fail/use-uninit.rs b/src/test/compile-fail/use-uninit.rs
index 03dafdcc003..bd2e9f416a2 100644
--- a/src/test/compile-fail/use-uninit.rs
+++ b/src/test/compile-fail/use-uninit.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern:Unsatisfied precondition
 
 fn foo(int x) {
diff --git a/src/test/compile-fail/while-bypass.rs b/src/test/compile-fail/while-bypass.rs
index 1de89e909da..b49152b3e98 100644
--- a/src/test/compile-fail/while-bypass.rs
+++ b/src/test/compile-fail/while-bypass.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: precondition constraint
 
 fn f() -> int {
diff --git a/src/test/compile-fail/while-expr.rs b/src/test/compile-fail/while-expr.rs
index 9077c18fd62..295752f8e02 100644
--- a/src/test/compile-fail/while-expr.rs
+++ b/src/test/compile-fail/while-expr.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: precondition constraint
 
 fn main() {
diff --git a/src/test/compile-fail/writing-through-read-alias.rs b/src/test/compile-fail/writing-through-read-alias.rs
index 2a8ec11eaf3..373c60828cd 100644
--- a/src/test/compile-fail/writing-through-read-alias.rs
+++ b/src/test/compile-fail/writing-through-read-alias.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern: writing to immutable type
diff --git a/src/test/compile-fail/writing-through-uninit-vec.rs b/src/test/compile-fail/writing-through-uninit-vec.rs
index 55edbf87875..7757609df78 100644
--- a/src/test/compile-fail/writing-through-uninit-vec.rs
+++ b/src/test/compile-fail/writing-through-uninit-vec.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: Unsatisfied precondition constraint
 
 fn test() {
diff --git a/src/test/compile-fail/writing-to-immutable-obj.rs b/src/test/compile-fail/writing-to-immutable-obj.rs
index ffa2cebe2fd..563fc9cd84e 100644
--- a/src/test/compile-fail/writing-to-immutable-obj.rs
+++ b/src/test/compile-fail/writing-to-immutable-obj.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: writing to immutable type
 obj objy(int x) {
     fn foo() -> () {
diff --git a/src/test/compile-fail/writing-to-immutable-rec.rs b/src/test/compile-fail/writing-to-immutable-rec.rs
index 42206fe4124..8e94dfd9487 100644
--- a/src/test/compile-fail/writing-to-immutable-rec.rs
+++ b/src/test/compile-fail/writing-to-immutable-rec.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: writing to immutable type
 fn main() {
   let rec(int x) r = rec(x=1);
diff --git a/src/test/compile-fail/writing-to-immutable-tup.rs b/src/test/compile-fail/writing-to-immutable-tup.rs
index bd974dcc786..e05aa55b457 100644
--- a/src/test/compile-fail/writing-to-immutable-tup.rs
+++ b/src/test/compile-fail/writing-to-immutable-tup.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: writing to immutable type
 fn main() {
   let tup(int) t = tup(1);
diff --git a/src/test/compile-fail/writing-to-immutable-vec.rs b/src/test/compile-fail/writing-to-immutable-vec.rs
index 341037c346c..dac122b8d80 100644
--- a/src/test/compile-fail/writing-to-immutable-vec.rs
+++ b/src/test/compile-fail/writing-to-immutable-vec.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern: writing to immutable type
 fn main() {
   let vec[int] v = vec(1, 2, 3);
diff --git a/src/test/run-fail/explicit-fail.rs b/src/test/run-fail/explicit-fail.rs
index cb0e37e5ce8..3ab821d5de1 100644
--- a/src/test/run-fail/explicit-fail.rs
+++ b/src/test/run-fail/explicit-fail.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern:explicit
 
 fn main() {
diff --git a/src/test/run-fail/fail.rs b/src/test/run-fail/fail.rs
index 8808b8c890f..e8c9cf71bcb 100644
--- a/src/test/run-fail/fail.rs
+++ b/src/test/run-fail/fail.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // error-pattern:1 == 2
 
 fn main() {
diff --git a/src/test/run-fail/linked-failure.rs b/src/test/run-fail/linked-failure.rs
index 4990f33cf87..df8b49d6cfe 100644
--- a/src/test/run-fail/linked-failure.rs
+++ b/src/test/run-fail/linked-failure.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern:1 == 2
diff --git a/src/test/run-fail/non-exhaustive-match.rs b/src/test/run-fail/non-exhaustive-match.rs
index eb533ef3077..85418022ff0 100644
--- a/src/test/run-fail/non-exhaustive-match.rs
+++ b/src/test/run-fail/non-exhaustive-match.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern:non-exhaustive match failure
diff --git a/src/test/run-fail/pred.rs b/src/test/run-fail/pred.rs
index e5456a5eebd..d4430703c71 100644
--- a/src/test/run-fail/pred.rs
+++ b/src/test/run-fail/pred.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern:predicate check
diff --git a/src/test/run-fail/str-overrun.rs b/src/test/run-fail/str-overrun.rs
index cd455fb4ba7..4388cb3ac80 100644
--- a/src/test/run-fail/str-overrun.rs
+++ b/src/test/run-fail/str-overrun.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern:bounds check
diff --git a/src/test/run-fail/task-comm-14.rs b/src/test/run-fail/task-comm-14.rs
index 786f7428f7b..b56723c2832 100644
--- a/src/test/run-fail/task-comm-14.rs
+++ b/src/test/run-fail/task-comm-14.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 io fn main() {
     let port[int] po = port();
 
diff --git a/src/test/run-fail/vec-overrun.rs b/src/test/run-fail/vec-overrun.rs
index e646a107113..961da730e3b 100644
--- a/src/test/run-fail/vec-overrun.rs
+++ b/src/test/run-fail/vec-overrun.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern:bounds check
diff --git a/src/test/run-fail/vec-underrun.rs b/src/test/run-fail/vec-underrun.rs
index c9073030300..a230d1be7ff 100644
--- a/src/test/run-fail/vec-underrun.rs
+++ b/src/test/run-fail/vec-underrun.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // error-pattern:bounds check
diff --git a/src/test/run-pass/acyclic-unwind.rs b/src/test/run-pass/acyclic-unwind.rs
index 27cffad46d4..4df67c9bd41 100644
--- a/src/test/run-pass/acyclic-unwind.rs
+++ b/src/test/run-pass/acyclic-unwind.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 impure fn f(chan[int] c)
diff --git a/src/test/run-pass/alt-pattern-drop.rs b/src/test/run-pass/alt-pattern-drop.rs
index 4ee2c12bec2..d3c62485fa8 100644
--- a/src/test/run-pass/alt-pattern-drop.rs
+++ b/src/test/run-pass/alt-pattern-drop.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/alt-type-simple.rs b/src/test/run-pass/alt-type-simple.rs
index 85f6ff68459..62193866e72 100644
--- a/src/test/run-pass/alt-type-simple.rs
+++ b/src/test/run-pass/alt-type-simple.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 fn altsimple(any x) {
   alt type (f) {
     case (int i) { print("int"); }
diff --git a/src/test/run-pass/arith-unsigned.rs b/src/test/run-pass/arith-unsigned.rs
index 3fac37142f8..748ff6b7da3 100644
--- a/src/test/run-pass/arith-unsigned.rs
+++ b/src/test/run-pass/arith-unsigned.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // Unsigned integer operations
 
 fn main() {
diff --git a/src/test/run-pass/basic-1.rs b/src/test/run-pass/basic-1.rs
index f61bf895112..5697eea43b3 100644
--- a/src/test/run-pass/basic-1.rs
+++ b/src/test/run-pass/basic-1.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 impure fn a(chan[int] c) {
diff --git a/src/test/run-pass/basic-2.rs b/src/test/run-pass/basic-2.rs
index d2b2e240f8d..d7336684773 100644
--- a/src/test/run-pass/basic-2.rs
+++ b/src/test/run-pass/basic-2.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 impure fn a(chan[int] c) {
diff --git a/src/test/run-pass/basic.rs b/src/test/run-pass/basic.rs
index a92247c9832..7495f037fed 100644
--- a/src/test/run-pass/basic.rs
+++ b/src/test/run-pass/basic.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 impure fn a(chan[int] c) {
diff --git a/src/test/run-pass/box-compare.rs b/src/test/run-pass/box-compare.rs
index 5115d5109a9..619790d7965 100644
--- a/src/test/run-pass/box-compare.rs
+++ b/src/test/run-pass/box-compare.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
   check (@1 < @3);
   check (@@"hello " > @@"hello");
diff --git a/src/test/run-pass/child-outlives-parent.rs b/src/test/run-pass/child-outlives-parent.rs
index d7d7c344302..01ee19afb44 100644
--- a/src/test/run-pass/child-outlives-parent.rs
+++ b/src/test/run-pass/child-outlives-parent.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // Reported as issue #126, child leaks the string.
 
 fn child2(str s) {
diff --git a/src/test/run-pass/clone-with-exterior.rs b/src/test/run-pass/clone-with-exterior.rs
index 7de90425a35..e97c409d50f 100644
--- a/src/test/run-pass/clone-with-exterior.rs
+++ b/src/test/run-pass/clone-with-exterior.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 fn f(@rec(int a, int b) x) {
   check (x.a == 10);
   check (x.b == 12);
diff --git a/src/test/run-pass/comm.rs b/src/test/run-pass/comm.rs
index a6610d57ff0..93ccacfcc2a 100644
--- a/src/test/run-pass/comm.rs
+++ b/src/test/run-pass/comm.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 impure fn main() {
diff --git a/src/test/run-pass/constrained-type.rs b/src/test/run-pass/constrained-type.rs
index 1fc6f49a54c..3c110400438 100644
--- a/src/test/run-pass/constrained-type.rs
+++ b/src/test/run-pass/constrained-type.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 // Reported as issue #141, as a parse error. Ought to work in full though.
diff --git a/src/test/run-pass/destructor-ordering.rs b/src/test/run-pass/destructor-ordering.rs
index f7f5b8c82c3..aed38bc2fe3 100644
--- a/src/test/run-pass/destructor-ordering.rs
+++ b/src/test/run-pass/destructor-ordering.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // This test checks that destructors run in the right order.  Because
 // stateful objects can't have destructors, we have the destructors
 // record their expected order into a channel when they execute (so
diff --git a/src/test/run-pass/empty-mutable-vec.rs b/src/test/run-pass/empty-mutable-vec.rs
index a972fda4e53..237805ca8fd 100644
--- a/src/test/run-pass/empty-mutable-vec.rs
+++ b/src/test/run-pass/empty-mutable-vec.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
     let vec[mutable int] v = vec(mutable);
 }
diff --git a/src/test/run-pass/float-signature.rs b/src/test/run-pass/float-signature.rs
index da18390d69b..55c42a6e187 100644
--- a/src/test/run-pass/float-signature.rs
+++ b/src/test/run-pass/float-signature.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
     fn foo(float n) -> float {
         ret n + 0.12345;
diff --git a/src/test/run-pass/float.rs b/src/test/run-pass/float.rs
index dad2f6d8a0e..950271fb118 100644
--- a/src/test/run-pass/float.rs
+++ b/src/test/run-pass/float.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
   auto pi = 3.1415927;
 
diff --git a/src/test/run-pass/float2.rs b/src/test/run-pass/float2.rs
index 0c111ba9779..9cc3a8ca9cd 100644
--- a/src/test/run-pass/float2.rs
+++ b/src/test/run-pass/float2.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
   auto a = 1.5e6;
   auto b = 1.5E6;
diff --git a/src/test/run-pass/floatlits.rs b/src/test/run-pass/floatlits.rs
index db82b486af0..10b0fb7766a 100644
--- a/src/test/run-pass/floatlits.rs
+++ b/src/test/run-pass/floatlits.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
   auto f = 4.999999999999;
   check (f > 4.90);
diff --git a/src/test/run-pass/fn-lval.rs b/src/test/run-pass/fn-lval.rs
index de0d3f48f0e..4223e022681 100644
--- a/src/test/run-pass/fn-lval.rs
+++ b/src/test/run-pass/fn-lval.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // -*- rust -*-
 
 fn foo((fn(int) -> int) f) {}
diff --git a/src/test/run-pass/generic-bind-2.rs b/src/test/run-pass/generic-bind-2.rs
index 95a8cab48cc..3975867ac29 100644
--- a/src/test/run-pass/generic-bind-2.rs
+++ b/src/test/run-pass/generic-bind-2.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn id[T](&T t) -> T {
   ret t;
 }
diff --git a/src/test/run-pass/generic-fn-box.rs b/src/test/run-pass/generic-fn-box.rs
index e821a784598..1092ea8b65f 100644
--- a/src/test/run-pass/generic-fn-box.rs
+++ b/src/test/run-pass/generic-fn-box.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn f[T](@T x) -> @T {
     ret x;
 }
diff --git a/src/test/run-pass/generic-tag.rs b/src/test/run-pass/generic-tag.rs
index 68d7c18f8d2..12a813e3085 100644
--- a/src/test/run-pass/generic-tag.rs
+++ b/src/test/run-pass/generic-tag.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 tag option[T] {
   some(@T);
   none;
diff --git a/src/test/run-pass/generic-tup.rs b/src/test/run-pass/generic-tup.rs
index 29a66371f11..c387ef1928d 100644
--- a/src/test/run-pass/generic-tup.rs
+++ b/src/test/run-pass/generic-tup.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 
 fn get_third[T](&tup(T,T,T) t) -> T {
   ret t._2;
diff --git a/src/test/run-pass/iter-ret.rs b/src/test/run-pass/iter-ret.rs
index 12eb9b4e645..6d7250614fc 100644
--- a/src/test/run-pass/iter-ret.rs
+++ b/src/test/run-pass/iter-ret.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 iter x() -> int {
 }
 
diff --git a/src/test/run-pass/lazychan.rs b/src/test/run-pass/lazychan.rs
index b5bf8872712..adc14434e18 100644
--- a/src/test/run-pass/lazychan.rs
+++ b/src/test/run-pass/lazychan.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 impure fn main() {
diff --git a/src/test/run-pass/leak-tag-copy.rs b/src/test/run-pass/leak-tag-copy.rs
index 25d87c6e874..5a4ead33365 100644
--- a/src/test/run-pass/leak-tag-copy.rs
+++ b/src/test/run-pass/leak-tag-copy.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 tag t {
   a;
   b(@int);
diff --git a/src/test/run-pass/lib-bitv.rs b/src/test/run-pass/lib-bitv.rs
index c3ffa8ea0ca..3bd5a03ac80 100644
--- a/src/test/run-pass/lib-bitv.rs
+++ b/src/test/run-pass/lib-bitv.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._vec;
 import std.bitv;
diff --git a/src/test/run-pass/lib-deque.rs b/src/test/run-pass/lib-deque.rs
index ab45b397559..b51ff241d2f 100644
--- a/src/test/run-pass/lib-deque.rs
+++ b/src/test/run-pass/lib-deque.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-int.rs b/src/test/run-pass/lib-int.rs
index 2e85abf6509..9fd127ef6fb 100644
--- a/src/test/run-pass/lib-int.rs
+++ b/src/test/run-pass/lib-int.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 
 import std._int;
diff --git a/src/test/run-pass/lib-io.rs b/src/test/run-pass/lib-io.rs
index 0c0bcdcd041..aab6713f7ef 100644
--- a/src/test/run-pass/lib-io.rs
+++ b/src/test/run-pass/lib-io.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-map.rs b/src/test/run-pass/lib-map.rs
index 0ae8cc6b387..319c8a9b684 100644
--- a/src/test/run-pass/lib-map.rs
+++ b/src/test/run-pass/lib-map.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-rand.rs b/src/test/run-pass/lib-rand.rs
index df227f6632c..62d94dc4630 100644
--- a/src/test/run-pass/lib-rand.rs
+++ b/src/test/run-pass/lib-rand.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-sha1.rs b/src/test/run-pass/lib-sha1.rs
index 57e3cdc856b..82c497c8506 100644
--- a/src/test/run-pass/lib-sha1.rs
+++ b/src/test/run-pass/lib-sha1.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-sort.rs b/src/test/run-pass/lib-sort.rs
index e2c3465cdfd..f6076e58585 100644
--- a/src/test/run-pass/lib-sort.rs
+++ b/src/test/run-pass/lib-sort.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 
 fn check_sort(vec[int] v1, vec[int] v2) {
diff --git a/src/test/run-pass/lib-str-buf.rs b/src/test/run-pass/lib-str-buf.rs
index 7ba19e925d7..bd5cb036a69 100644
--- a/src/test/run-pass/lib-str-buf.rs
+++ b/src/test/run-pass/lib-str-buf.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-str.rs b/src/test/run-pass/lib-str.rs
index f3552aad373..52f0f51b087 100644
--- a/src/test/run-pass/lib-str.rs
+++ b/src/test/run-pass/lib-str.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._str;
 
diff --git a/src/test/run-pass/lib-task.rs b/src/test/run-pass/lib-task.rs
index 18499f4e5d0..06e9182c7e6 100644
--- a/src/test/run-pass/lib-task.rs
+++ b/src/test/run-pass/lib-task.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._task;
 
diff --git a/src/test/run-pass/lib-uint.rs b/src/test/run-pass/lib-uint.rs
index 356ca374092..98d3755016b 100644
--- a/src/test/run-pass/lib-uint.rs
+++ b/src/test/run-pass/lib-uint.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-vec-str-conversions.rs b/src/test/run-pass/lib-vec-str-conversions.rs
index 1d6b61a1900..b8da0777dc3 100644
--- a/src/test/run-pass/lib-vec-str-conversions.rs
+++ b/src/test/run-pass/lib-vec-str-conversions.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/lib-vec.rs b/src/test/run-pass/lib-vec.rs
index 4d6166483bc..6fde06ad33d 100644
--- a/src/test/run-pass/lib-vec.rs
+++ b/src/test/run-pass/lib-vec.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 
 fn test_init_elt() {
diff --git a/src/test/run-pass/many.rs b/src/test/run-pass/many.rs
index 2c3d642523e..8fe47133f69 100644
--- a/src/test/run-pass/many.rs
+++ b/src/test/run-pass/many.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 impure fn sub(chan[int] parent, int id) {
diff --git a/src/test/run-pass/maybe-mutable.rs b/src/test/run-pass/maybe-mutable.rs
index c0af0867faa..b859ae7c464 100644
--- a/src/test/run-pass/maybe-mutable.rs
+++ b/src/test/run-pass/maybe-mutable.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // -*- rust -*-
 
 fn len(vec[mutable? int] v) -> uint {
diff --git a/src/test/run-pass/mlist-cycle.rs b/src/test/run-pass/mlist-cycle.rs
index 5dedd3d04aa..050565921b8 100644
--- a/src/test/run-pass/mlist-cycle.rs
+++ b/src/test/run-pass/mlist-cycle.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/mlist.rs b/src/test/run-pass/mlist.rs
index 3754d044c4a..6fc45d7c65b 100644
--- a/src/test/run-pass/mlist.rs
+++ b/src/test/run-pass/mlist.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 // -*- rust -*-
 
 tag mlist {
diff --git a/src/test/run-pass/multi.rc b/src/test/run-pass/multi.rc
index 90f03ee99db..ad08db6ba91 100644
--- a/src/test/run-pass/multi.rc
+++ b/src/test/run-pass/multi.rc
@@ -1,3 +1,4 @@
+// xfail-stage0
 mod multi = "multi-src" {
 
   mod foo; // implicitly = "foo.rs"
diff --git a/src/test/run-pass/mutable-alias-vec.rs b/src/test/run-pass/mutable-alias-vec.rs
index 887fb39125e..367afaf8617 100644
--- a/src/test/run-pass/mutable-alias-vec.rs
+++ b/src/test/run-pass/mutable-alias-vec.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/native-mod.rc b/src/test/run-pass/native-mod.rc
index 4fcf4499e75..17925c798b5 100644
--- a/src/test/run-pass/native-mod.rc
+++ b/src/test/run-pass/native-mod.rc
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 native mod libc = target_libc {
diff --git a/src/test/run-pass/native.rc b/src/test/run-pass/native.rc
index c0f019c5499..8955609643b 100644
--- a/src/test/run-pass/native.rc
+++ b/src/test/run-pass/native.rc
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 native "rust" mod rustrt {
diff --git a/src/test/run-pass/obj-as.rs b/src/test/run-pass/obj-as.rs
index 62eda294838..6e0dac37b8f 100644
--- a/src/test/run-pass/obj-as.rs
+++ b/src/test/run-pass/obj-as.rs
@@ -1,3 +1,6 @@
+// xfail-boot
+// xfail-boot
+// xfail-stage0
 
 obj big() {
   fn one() -> int { ret 1; }
diff --git a/src/test/run-pass/obj-dtor.rs b/src/test/run-pass/obj-dtor.rs
index d1f54f8fa6c..389675da232 100644
--- a/src/test/run-pass/obj-dtor.rs
+++ b/src/test/run-pass/obj-dtor.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 obj worker(chan[int] c) {
   drop {
     log "in dtor";
diff --git a/src/test/run-pass/pred.rs b/src/test/run-pass/pred.rs
index b3338f383d3..c2bea01025e 100644
--- a/src/test/run-pass/pred.rs
+++ b/src/test/run-pass/pred.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn f(int a, int b) : lt(a,b) {
diff --git a/src/test/run-pass/preempt.rs b/src/test/run-pass/preempt.rs
index 06787097189..42d6229d07c 100644
--- a/src/test/run-pass/preempt.rs
+++ b/src/test/run-pass/preempt.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // This checks that preemption works.
 
 impure fn starve_main(chan[int] alive) {
diff --git a/src/test/run-pass/rt-circular-buffer.rs b/src/test/run-pass/rt-circular-buffer.rs
index 542846b4dcd..17078116835 100644
--- a/src/test/run-pass/rt-circular-buffer.rs
+++ b/src/test/run-pass/rt-circular-buffer.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 // Regression tests for circular_buffer when using a unit
diff --git a/src/test/run-pass/seq-compare.rs b/src/test/run-pass/seq-compare.rs
index b3fe570193d..36db2b4667e 100644
--- a/src/test/run-pass/seq-compare.rs
+++ b/src/test/run-pass/seq-compare.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
   check ("hello" < "hellr");
   check ("hello " > "hello");
diff --git a/src/test/run-pass/size-and-align.rs b/src/test/run-pass/size-and-align.rs
index 58d529e8374..5e0a9c207dd 100644
--- a/src/test/run-pass/size-and-align.rs
+++ b/src/test/run-pass/size-and-align.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 tag clam[T] {
diff --git a/src/test/run-pass/spawn-fn.rs b/src/test/run-pass/spawn-fn.rs
index 894a8321528..ea069e31fd0 100644
--- a/src/test/run-pass/spawn-fn.rs
+++ b/src/test/run-pass/spawn-fn.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn x(str s, int n) {
diff --git a/src/test/run-pass/spawn-module-qualified.rs b/src/test/run-pass/spawn-module-qualified.rs
index 68f665df7d8..833e246aa30 100644
--- a/src/test/run-pass/spawn-module-qualified.rs
+++ b/src/test/run-pass/spawn-module-qualified.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 fn main() {
   auto x = spawn m.child(10);
   join x;
diff --git a/src/test/run-pass/spawn.rs b/src/test/run-pass/spawn.rs
index 765d4c9e25a..5dd758baf1c 100644
--- a/src/test/run-pass/spawn.rs
+++ b/src/test/run-pass/spawn.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn main() {
diff --git a/src/test/run-pass/str-append.rs b/src/test/run-pass/str-append.rs
index da4ca07fc26..724a0893c17 100644
--- a/src/test/run-pass/str-append.rs
+++ b/src/test/run-pass/str-append.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs
index ebb09f96ba2..db0d8a19583 100644
--- a/src/test/run-pass/syntax-extension-fmt.rs
+++ b/src/test/run-pass/syntax-extension-fmt.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._str;
 
diff --git a/src/test/run-pass/syntax-extension-shell.rs b/src/test/run-pass/syntax-extension-shell.rs
index 509b6d8b468..f48a1b814a0 100644
--- a/src/test/run-pass/syntax-extension-shell.rs
+++ b/src/test/run-pass/syntax-extension-shell.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 fn main() {
   auto s = #shell { uname -a };
   log s;
diff --git a/src/test/run-pass/task-comm-0.rs b/src/test/run-pass/task-comm-0.rs
index 085f958e018..9030340c19b 100644
--- a/src/test/run-pass/task-comm-0.rs
+++ b/src/test/run-pass/task-comm-0.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 impure fn main() -> () {
     test05();
 }
diff --git a/src/test/run-pass/task-comm-1.rs b/src/test/run-pass/task-comm-1.rs
index 48983b71e1a..61613a20267 100644
--- a/src/test/run-pass/task-comm-1.rs
+++ b/src/test/run-pass/task-comm-1.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 fn main() -> () {
    test00(); 
 }
diff --git a/src/test/run-pass/task-comm-10.rs b/src/test/run-pass/task-comm-10.rs
index e0164596390..6932f7e0ba4 100644
--- a/src/test/run-pass/task-comm-10.rs
+++ b/src/test/run-pass/task-comm-10.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 impure fn start(chan[chan[str]] c) {
     let port[str] p = port();
     c <| chan(p);
diff --git a/src/test/run-pass/task-comm-11.rs b/src/test/run-pass/task-comm-11.rs
index 41069c7fd86..6de447ae934 100644
--- a/src/test/run-pass/task-comm-11.rs
+++ b/src/test/run-pass/task-comm-11.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 impure fn start(chan[chan[str]] c) {
     let port[str] p = port();
     c <| chan(p);
diff --git a/src/test/run-pass/task-comm-12.rs b/src/test/run-pass/task-comm-12.rs
index ceb6ba01729..5d89b5d3c47 100644
--- a/src/test/run-pass/task-comm-12.rs
+++ b/src/test/run-pass/task-comm-12.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 use std;
 import std._task;
 
diff --git a/src/test/run-pass/task-comm-13-thread.rs b/src/test/run-pass/task-comm-13-thread.rs
index e7cfc24720d..2fb32f95332 100644
--- a/src/test/run-pass/task-comm-13-thread.rs
+++ b/src/test/run-pass/task-comm-13-thread.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._task;
 
diff --git a/src/test/run-pass/task-comm-13.rs b/src/test/run-pass/task-comm-13.rs
index 6b29ec1ee2a..719edbb7eab 100644
--- a/src/test/run-pass/task-comm-13.rs
+++ b/src/test/run-pass/task-comm-13.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._task;
 
diff --git a/src/test/run-pass/task-comm-15.rs b/src/test/run-pass/task-comm-15.rs
index b5bd733144c..1eee1a0927a 100644
--- a/src/test/run-pass/task-comm-15.rs
+++ b/src/test/run-pass/task-comm-15.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 impure fn start(chan[int] c, int n) {
     let int i = n;
 
diff --git a/src/test/run-pass/task-comm-2.rs b/src/test/run-pass/task-comm-2.rs
index 864d49de1e0..a6fc911587a 100644
--- a/src/test/run-pass/task-comm-2.rs
+++ b/src/test/run-pass/task-comm-2.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 fn main() -> () {    
     log "===== SPAWNING and JOINING TASKS =====";
     test00(false);
diff --git a/src/test/run-pass/task-comm-3.rs b/src/test/run-pass/task-comm-3.rs
index d833c3a5810..b172a099712 100644
--- a/src/test/run-pass/task-comm-3.rs
+++ b/src/test/run-pass/task-comm-3.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 impure fn main() -> () {
    log "===== WITHOUT THREADS =====";
    test00(false);
diff --git a/src/test/run-pass/task-comm-7.rs b/src/test/run-pass/task-comm-7.rs
index 099f8d6b6d4..599d2d832a6 100644
--- a/src/test/run-pass/task-comm-7.rs
+++ b/src/test/run-pass/task-comm-7.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 impure fn main() -> () {
    test00();
 }
diff --git a/src/test/run-pass/task-comm-8.rs b/src/test/run-pass/task-comm-8.rs
index 87fa3d89548..1bc02660acd 100644
--- a/src/test/run-pass/task-comm-8.rs
+++ b/src/test/run-pass/task-comm-8.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 impure fn main() -> () {
    test00();
 }
diff --git a/src/test/run-pass/task-comm-9.rs b/src/test/run-pass/task-comm-9.rs
index 370a36e34b8..cf375853394 100644
--- a/src/test/run-pass/task-comm-9.rs
+++ b/src/test/run-pass/task-comm-9.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 impure fn main() -> () {
    test00();
 }
diff --git a/src/test/run-pass/task-comm-chan-nil.rs b/src/test/run-pass/task-comm-chan-nil.rs
index c8f5a90f59e..a341d939769 100644
--- a/src/test/run-pass/task-comm-chan-nil.rs
+++ b/src/test/run-pass/task-comm-chan-nil.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 // -*- rust -*-
 
 // rustboot can't transmit nils across channels because they don't have
diff --git a/src/test/run-pass/task-comm.rs b/src/test/run-pass/task-comm.rs
index d5f9a3a0dae..04751e37478 100644
--- a/src/test/run-pass/task-comm.rs
+++ b/src/test/run-pass/task-comm.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 
 impure fn main() -> () {
     test00(true);
diff --git a/src/test/run-pass/task-killjoin.rs b/src/test/run-pass/task-killjoin.rs
index 558c1687106..6a9f272fe1c 100644
--- a/src/test/run-pass/task-killjoin.rs
+++ b/src/test/run-pass/task-killjoin.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // Create a task that is supervised by another task,
 // join the supervised task from the supervising task,
 // then fail the supervised task. The supervised task
diff --git a/src/test/run-pass/task-life-0.rs b/src/test/run-pass/task-life-0.rs
index f15792fbcf7..567f63a9561 100644
--- a/src/test/run-pass/task-life-0.rs
+++ b/src/test/run-pass/task-life-0.rs
@@ -1,3 +1,5 @@
+// xfail-boot
+// xfail-stage0
 fn main() -> () {
     spawn child("Hello");
 }
diff --git a/src/test/run-pass/threads.rs b/src/test/run-pass/threads.rs
index aa6e763fd0e..3b6d8c0b39d 100644
--- a/src/test/run-pass/threads.rs
+++ b/src/test/run-pass/threads.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn main() {
diff --git a/src/test/run-pass/type-sizes.rs b/src/test/run-pass/type-sizes.rs
index a257ee0930e..67b8b57871f 100644
--- a/src/test/run-pass/type-sizes.rs
+++ b/src/test/run-pass/type-sizes.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 
 import size_of = std.sys.rustrt.size_of;
 
diff --git a/src/test/run-pass/typestate-cfg-nesting.rs b/src/test/run-pass/typestate-cfg-nesting.rs
index 8f0506469b1..73399525f9c 100644
--- a/src/test/run-pass/typestate-cfg-nesting.rs
+++ b/src/test/run-pass/typestate-cfg-nesting.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 
 fn f() {
 
diff --git a/src/test/run-pass/use-import-export.rs b/src/test/run-pass/use-import-export.rs
index 0b3302691a4..5149593115e 100644
--- a/src/test/run-pass/use-import-export.rs
+++ b/src/test/run-pass/use-import-export.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 
 mod foo {
   export x;
diff --git a/src/test/run-pass/use.rs b/src/test/run-pass/use.rs
index ac46061c40f..a71957f20e4 100644
--- a/src/test/run-pass/use.rs
+++ b/src/test/run-pass/use.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 use libc();
 use zed(name = "std");
diff --git a/src/test/run-pass/user.rs b/src/test/run-pass/user.rs
index e72d0bca7c3..b8a8144c227 100644
--- a/src/test/run-pass/user.rs
+++ b/src/test/run-pass/user.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std (name = "std",
diff --git a/src/test/run-pass/utf8.rs b/src/test/run-pass/utf8.rs
index 5fd4dcfe96c..68f5fa9f680 100644
--- a/src/test/run-pass/utf8.rs
+++ b/src/test/run-pass/utf8.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 fn main() {
   let char yen = '¥';         // 0xa5
   let char c_cedilla = 'ç';   // 0xe7
diff --git a/src/test/run-pass/utf8_chars.rs b/src/test/run-pass/utf8_chars.rs
index 04f8f574133..08671093edf 100644
--- a/src/test/run-pass/utf8_chars.rs
+++ b/src/test/run-pass/utf8_chars.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 use std;
 import std._str;
 import std._vec;
diff --git a/src/test/run-pass/vec-alloc-append.rs b/src/test/run-pass/vec-alloc-append.rs
index 8dba98120bb..83d58d73978 100644
--- a/src/test/run-pass/vec-alloc-append.rs
+++ b/src/test/run-pass/vec-alloc-append.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // This is a test for issue #109.
 
 use std;
diff --git a/src/test/run-pass/vec-append.rs b/src/test/run-pass/vec-append.rs
index ca906e5568e..0f9f56dd954 100644
--- a/src/test/run-pass/vec-append.rs
+++ b/src/test/run-pass/vec-append.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 use std;
diff --git a/src/test/run-pass/vec-slice.rs b/src/test/run-pass/vec-slice.rs
index 332eff346f9..55174142308 100644
--- a/src/test/run-pass/vec-slice.rs
+++ b/src/test/run-pass/vec-slice.rs
@@ -1,3 +1,6 @@
+// xfail-boot
+// xfail-boot
+// xfail-stage0
 fn main() {
   let vec[int] v = vec(1,2,3,4,5);
   auto v2 = v.(1,2);
diff --git a/src/test/run-pass/while-and-do-while.rs b/src/test/run-pass/while-and-do-while.rs
index ebf7809929b..e48ab2fc246 100644
--- a/src/test/run-pass/while-and-do-while.rs
+++ b/src/test/run-pass/while-and-do-while.rs
@@ -1,3 +1,4 @@
+// xfail-boot
 fn main() {
   let int x = 10;
   let int y = 0;
diff --git a/src/test/run-pass/while-with-break.rs b/src/test/run-pass/while-with-break.rs
index 0e27f252ebb..40efebc81bc 100644
--- a/src/test/run-pass/while-with-break.rs
+++ b/src/test/run-pass/while-with-break.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn main() {
diff --git a/src/test/run-pass/yield.rs b/src/test/run-pass/yield.rs
index d2ae592a80a..7b931afb73e 100644
--- a/src/test/run-pass/yield.rs
+++ b/src/test/run-pass/yield.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn main() {
diff --git a/src/test/run-pass/yield2.rs b/src/test/run-pass/yield2.rs
index 11285822a7e..f1a543416d0 100644
--- a/src/test/run-pass/yield2.rs
+++ b/src/test/run-pass/yield2.rs
@@ -1,3 +1,4 @@
+// xfail-stage0
 // -*- rust -*-
 
 fn main() {