about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-07-02 14:44:31 -0700
committerBrian Anderson <banderson@mozilla.com>2012-07-02 15:23:41 -0700
commit569467eb0d110dd299cb2efcce13e998d1d9c11f (patch)
treef9214ae504b0402df4e55ef6bf3a3e8bc6a831b8
parent3ced5b0da2d0bb0498858553acefd09e347c1665 (diff)
parent29eb788b1f957f84d1b19a6ddcb7d5f4852d4973 (diff)
downloadrust-569467eb0d110dd299cb2efcce13e998d1d9c11f.tar.gz
rust-569467eb0d110dd299cb2efcce13e998d1d9c11f.zip
Merge remote-tracking branch 'Dretch/prettydocs'
Conflicts:
	src/compiletest/errors.rs
	src/libsyntax/parse/attr.rs
	src/libsyntax/parse/comments.rs
	src/test/compile-fail/ambig_impl_unify.rs
	src/test/compile-fail/assign-super.rs
	src/test/compile-fail/bad-for-loop.rs
	src/test/compile-fail/bad-var-env-capture-in-block-arg.rs
	src/test/compile-fail/block-arg-as-stmt-with-value.rs
	src/test/compile-fail/borrowck-assign-comp-idx.rs
	src/test/compile-fail/borrowck-lend-flow.rs
	src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
	src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs
	src/test/compile-fail/borrowck-loan-rcvr.rs
	src/test/compile-fail/borrowck-loan-vec-content.rs
	src/test/compile-fail/borrowck-mut-vec-as-imm-slice-bad.rs
	src/test/compile-fail/cap-clause-with-stack-closure.rs
	src/test/compile-fail/do1.rs
	src/test/compile-fail/do2.rs
	src/test/compile-fail/empty-vec-trailing-comma.rs
	src/test/compile-fail/evec-subtyping.rs
	src/test/compile-fail/issue-1896.rs
	src/test/compile-fail/issue-2149.rs
	src/test/compile-fail/issue-2150.rs
	src/test/compile-fail/issue-2487-b.rs
	src/test/compile-fail/kindck-implicit-close-over-mut-var.rs
	src/test/compile-fail/liveness-issue-2163.rs
	src/test/compile-fail/liveness-use-in-index-lvalue.rs
	src/test/compile-fail/no-reuse-move-arc.rs
	src/test/compile-fail/no-send-res-ports.rs
	src/test/compile-fail/non-const.rs
	src/test/compile-fail/pure-higher-order.rs
	src/test/compile-fail/pure-loop-body.rs
	src/test/compile-fail/regions-addr-of-upvar-self.rs
	src/test/compile-fail/regions-escape-loop-via-vec.rs
	src/test/compile-fail/regions-scoping.rs
	src/test/compile-fail/seq-args.rs
	src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs
	src/test/compile-fail/tstate-unsat-in-fn-expr.rs
	src/test/compile-fail/vec-add.rs
	src/test/compile-fail/vec-concat-bug.rs
	src/test/compile-fail/vector-no-ann.rs
-rw-r--r--src/compiletest/errors.rs4
-rwxr-xr-xsrc/etc/sugarise-doc-comments.py82
-rw-r--r--src/libcore/str.rs54
-rw-r--r--src/libsyntax/ast.rs3
-rw-r--r--src/libsyntax/attr.rs27
-rw-r--r--src/libsyntax/fold.rs3
-rw-r--r--src/libsyntax/parse/attr.rs86
-rw-r--r--src/libsyntax/parse/comments.rs128
-rw-r--r--src/libsyntax/parse/lexer.rs66
-rw-r--r--src/libsyntax/parse/token.rs5
-rw-r--r--src/libsyntax/print/pprust.rs16
-rw-r--r--src/rustc/driver/session.rs3
-rw-r--r--src/rustc/metadata/decoder.rs3
-rw-r--r--src/rustdoc/attr_parser.rs5
-rw-r--r--src/test/compile-fail/alt-join.rs2
-rw-r--r--src/test/compile-fail/alt-pattern-field-mismatch-2.rs2
-rw-r--r--src/test/compile-fail/alt-pattern-field-mismatch.rs2
-rw-r--r--src/test/compile-fail/ambig_impl_1.rs6
-rw-r--r--src/test/compile-fail/ambig_impl_2_exe.rs6
-rw-r--r--src/test/compile-fail/ambig_impl_bounds.rs6
-rw-r--r--src/test/compile-fail/ambig_impl_unify.rs6
-rw-r--r--src/test/compile-fail/assign-imm-local-twice.rs4
-rw-r--r--src/test/compile-fail/assign-super.rs2
-rw-r--r--src/test/compile-fail/assign-to-method.rs2
-rw-r--r--src/test/compile-fail/attempted-access-non-fatal.rs4
-rw-r--r--src/test/compile-fail/attr-before-ext.rs2
-rw-r--r--src/test/compile-fail/attr-before-let.rs2
-rw-r--r--src/test/compile-fail/bad-bang-ann-3.rs2
-rw-r--r--src/test/compile-fail/bad-bang-ann.rs2
-rw-r--r--src/test/compile-fail/bad-for-loop.rs2
-rw-r--r--src/test/compile-fail/bad-method-typaram-kind.rs2
-rw-r--r--src/test/compile-fail/bad-value-ident-false.rs2
-rw-r--r--src/test/compile-fail/bad-value-ident-true.rs2
-rw-r--r--src/test/compile-fail/bad-var-env-capture-in-block-arg.rs2
-rw-r--r--src/test/compile-fail/bang-tailexpr.rs2
-rw-r--r--src/test/compile-fail/binop-typeck.rs2
-rw-r--r--src/test/compile-fail/block-arg-as-stmt-with-value.rs2
-rw-r--r--src/test/compile-fail/block-coerce-no-2.rs2
-rw-r--r--src/test/compile-fail/block-coerce-no.rs2
-rw-r--r--src/test/compile-fail/borrowck-assign-comp-idx.rs8
-rw-r--r--src/test/compile-fail/borrowck-assign-comp.rs12
-rw-r--r--src/test/compile-fail/borrowck-assign-to-constants.rs4
-rw-r--r--src/test/compile-fail/borrowck-assign-to-enum.rs2
-rw-r--r--src/test/compile-fail/borrowck-assign-to-subfield.rs4
-rw-r--r--src/test/compile-fail/borrowck-binding-mutbl.rs4
-rw-r--r--src/test/compile-fail/borrowck-issue-2657-1.rs4
-rw-r--r--src/test/compile-fail/borrowck-issue-2657-2.rs2
-rw-r--r--src/test/compile-fail/borrowck-lend-args.rs4
-rw-r--r--src/test/compile-fail/borrowck-lend-flow.rs28
-rw-r--r--src/test/compile-fail/borrowck-loan-blocks-move-cc.rs8
-rw-r--r--src/test/compile-fail/borrowck-loan-blocks-move.rs4
-rw-r--r--src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs4
-rw-r--r--src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs12
-rw-r--r--src/test/compile-fail/borrowck-loan-rcvr.rs16
-rw-r--r--src/test/compile-fail/borrowck-loan-vec-content.rs4
-rw-r--r--src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs2
-rw-r--r--src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs2
-rw-r--r--src/test/compile-fail/borrowck-mut-vec-as-imm-slice-bad.rs4
-rw-r--r--src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs4
-rw-r--r--src/test/compile-fail/borrowck-pat-enum-in-box.rs4
-rw-r--r--src/test/compile-fail/borrowck-pat-enum.rs4
-rw-r--r--src/test/compile-fail/borrowck-pat-reassign-binding.rs4
-rw-r--r--src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs4
-rw-r--r--src/test/compile-fail/borrowck-pure-scope-in-call.rs8
-rw-r--r--src/test/compile-fail/borrowck-unchecked-with-borrow.rs4
-rw-r--r--src/test/compile-fail/borrowck-uniq-via-box.rs36
-rw-r--r--src/test/compile-fail/borrowck-uniq-via-lend.rs8
-rw-r--r--src/test/compile-fail/borrowck-uniq-via-ref.rs36
-rw-r--r--src/test/compile-fail/cap-clause-move-upvar.rs2
-rw-r--r--src/test/compile-fail/cap-clause-with-stack-closure.rs4
-rw-r--r--src/test/compile-fail/class-implements-int.rs2
-rw-r--r--src/test/compile-fail/class-missing-self.rs4
-rw-r--r--src/test/compile-fail/do-lambda-requires-braces.rs2
-rw-r--r--src/test/compile-fail/do1.rs2
-rw-r--r--src/test/compile-fail/do2.rs2
-rw-r--r--src/test/compile-fail/empty-vec-trailing-comma.rs2
-rw-r--r--src/test/compile-fail/enum-in-scope.rs2
-rw-r--r--src/test/compile-fail/estr-subtyping.rs18
-rw-r--r--src/test/compile-fail/evec-subtyping.rs18
-rw-r--r--src/test/compile-fail/fn-compare-mismatch.rs2
-rw-r--r--src/test/compile-fail/fn-variance-1.rs4
-rw-r--r--src/test/compile-fail/fn-variance-2.rs2
-rw-r--r--src/test/compile-fail/fn-variance-3.rs2
-rw-r--r--src/test/compile-fail/fully-qualified-type-name1.rs2
-rw-r--r--src/test/compile-fail/fully-qualified-type-name2.rs2
-rw-r--r--src/test/compile-fail/fully-qualified-type-name3.rs2
-rw-r--r--src/test/compile-fail/fully-qualified-type-name4.rs2
-rw-r--r--src/test/compile-fail/iface-cast.rs2
-rw-r--r--src/test/compile-fail/iface-impl-different-num-params.rs2
-rw-r--r--src/test/compile-fail/iface-test-2.rs8
-rw-r--r--src/test/compile-fail/iface-test.rs6
-rw-r--r--src/test/compile-fail/impure-pred.rs2
-rw-r--r--src/test/compile-fail/index_message.rs2
-rw-r--r--src/test/compile-fail/integer-literal-suffix-inference.rs72
-rw-r--r--src/test/compile-fail/issue-1362.rs2
-rw-r--r--src/test/compile-fail/issue-1448-1.rs2
-rw-r--r--src/test/compile-fail/issue-1448-2.rs2
-rw-r--r--src/test/compile-fail/issue-1697.rs4
-rw-r--r--src/test/compile-fail/issue-1763.rs2
-rw-r--r--src/test/compile-fail/issue-1896.rs2
-rw-r--r--src/test/compile-fail/issue-1962.rs2
-rw-r--r--src/test/compile-fail/issue-2063-resource.rs4
-rw-r--r--src/test/compile-fail/issue-2063.rs2
-rw-r--r--src/test/compile-fail/issue-2111.rs2
-rw-r--r--src/test/compile-fail/issue-2149.rs4
-rw-r--r--src/test/compile-fail/issue-2150.rs4
-rw-r--r--src/test/compile-fail/issue-2151.rs2
-rw-r--r--src/test/compile-fail/issue-2330.rs2
-rw-r--r--src/test/compile-fail/issue-2354.rs2
-rw-r--r--src/test/compile-fail/issue-2467.rs4
-rw-r--r--src/test/compile-fail/issue-2487-b.rs2
-rw-r--r--src/test/compile-fail/issue-2509-a.rs2
-rw-r--r--src/test/compile-fail/issue-2590.rs2
-rw-r--r--src/test/compile-fail/issue-2718-a.rs2
-rw-r--r--src/test/compile-fail/issue-511.rs6
-rw-r--r--src/test/compile-fail/issue-897-2.rs4
-rw-r--r--src/test/compile-fail/issue-897.rs4
-rw-r--r--src/test/compile-fail/kindck-implicit-close-over-mut-var.rs4
-rw-r--r--src/test/compile-fail/kindck-nonsendable-1.rs6
-rw-r--r--src/test/compile-fail/liveness-and-init.rs2
-rw-r--r--src/test/compile-fail/liveness-assign-imm-local-in-loop.rs4
-rw-r--r--src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs4
-rw-r--r--src/test/compile-fail/liveness-assign-imm-local-in-swap.rs8
-rw-r--r--src/test/compile-fail/liveness-assign-imm-local-with-init.rs4
-rw-r--r--src/test/compile-fail/liveness-block-unint.rs2
-rw-r--r--src/test/compile-fail/liveness-break-uninit-2.rs4
-rw-r--r--src/test/compile-fail/liveness-break-uninit.rs4
-rw-r--r--src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs2
-rw-r--r--src/test/compile-fail/liveness-ctor-field-never-init.rs2
-rw-r--r--src/test/compile-fail/liveness-ctor-uninit-field.rs2
-rw-r--r--src/test/compile-fail/liveness-ctor-uninit-var.rs2
-rw-r--r--src/test/compile-fail/liveness-dead.rs6
-rw-r--r--src/test/compile-fail/liveness-if-no-else.rs2
-rw-r--r--src/test/compile-fail/liveness-if-with-else.rs2
-rw-r--r--src/test/compile-fail/liveness-init-in-called-fn-expr.rs2
-rw-r--r--src/test/compile-fail/liveness-init-in-fn-expr.rs2
-rw-r--r--src/test/compile-fail/liveness-init-in-fru.rs2
-rw-r--r--src/test/compile-fail/liveness-init-op-equal.rs2
-rw-r--r--src/test/compile-fail/liveness-init-plus-equal.rs2
-rw-r--r--src/test/compile-fail/liveness-issue-2163.rs2
-rw-r--r--src/test/compile-fail/liveness-move-from-args.rs6
-rw-r--r--src/test/compile-fail/liveness-move-from-mode.rs4
-rw-r--r--src/test/compile-fail/liveness-move-in-loop.rs4
-rw-r--r--src/test/compile-fail/liveness-move-in-while.rs4
-rw-r--r--src/test/compile-fail/liveness-or-init.rs2
-rw-r--r--src/test/compile-fail/liveness-return.rs2
-rw-r--r--src/test/compile-fail/liveness-swap-uninit.rs2
-rw-r--r--src/test/compile-fail/liveness-uninit-after-item.rs2
-rw-r--r--src/test/compile-fail/liveness-uninit.rs2
-rw-r--r--src/test/compile-fail/liveness-unused.rs14
-rw-r--r--src/test/compile-fail/liveness-use-after-move.rs4
-rw-r--r--src/test/compile-fail/liveness-use-after-send.rs4
-rw-r--r--src/test/compile-fail/liveness-use-in-index-lvalue.rs2
-rw-r--r--src/test/compile-fail/liveness-while-break.rs2
-rw-r--r--src/test/compile-fail/liveness-while-cond.rs2
-rw-r--r--src/test/compile-fail/liveness-while.rs2
-rw-r--r--src/test/compile-fail/loop-does-not-diverge.rs2
-rw-r--r--src/test/compile-fail/lub-in-args.rs4
-rw-r--r--src/test/compile-fail/main-wrong-type-2.rs2
-rw-r--r--src/test/compile-fail/main-wrong-type.rs2
-rw-r--r--src/test/compile-fail/map-types.rs2
-rw-r--r--src/test/compile-fail/mode-inference-fail.rs2
-rw-r--r--src/test/compile-fail/mutable-arguments.rs20
-rw-r--r--src/test/compile-fail/mutable-huh-box-assign.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-field-assign.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-ptr-assign.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-unique-assign.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-variance-vec1.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-variance-vec2.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-variance-vec3.rs2
-rw-r--r--src/test/compile-fail/mutable-huh-variance-vec4.rs14
-rw-r--r--src/test/compile-fail/mutable-huh-vec-assign.rs2
-rw-r--r--src/test/compile-fail/native-unsafe-fn-called.rs2
-rw-r--r--src/test/compile-fail/native-unsafe-fn.rs2
-rw-r--r--src/test/compile-fail/no-reuse-move-arc.rs4
-rw-r--r--src/test/compile-fail/no-send-res-ports.rs2
-rw-r--r--src/test/compile-fail/noexporttypeexe.rs2
-rw-r--r--src/test/compile-fail/non-const.rs12
-rw-r--r--src/test/compile-fail/non-copyable-void.rs2
-rw-r--r--src/test/compile-fail/non-exhaustive-match.rs12
-rw-r--r--src/test/compile-fail/not-enough-arguments.rs2
-rw-r--r--src/test/compile-fail/occurs-check.rs2
-rw-r--r--src/test/compile-fail/omitted-arg-in-item-fn.rs2
-rw-r--r--src/test/compile-fail/omitted-arg-wrong-types.rs4
-rw-r--r--src/test/compile-fail/pat-shadow-in-nested-binding.rs2
-rw-r--r--src/test/compile-fail/placement-new-bad-method-type.rs2
-rw-r--r--src/test/compile-fail/pptypedef.rs2
-rw-r--r--src/test/compile-fail/prim-with-args.rs48
-rw-r--r--src/test/compile-fail/pure-higher-order.rs8
-rw-r--r--src/test/compile-fail/pure-loop-body.rs2
-rw-r--r--src/test/compile-fail/pure-modifies-aliased.rs6
-rw-r--r--src/test/compile-fail/pure-overloaded-op.rs6
-rw-r--r--src/test/compile-fail/pure-subtyping.rs22
-rw-r--r--src/test/compile-fail/qquote-1.rs2
-rw-r--r--src/test/compile-fail/qquote-2.rs2
-rw-r--r--src/test/compile-fail/rec-expected.rs2
-rw-r--r--src/test/compile-fail/region-unused.rs2
-rw-r--r--src/test/compile-fail/regions-addr-of-arg.rs2
-rw-r--r--src/test/compile-fail/regions-addr-of-self.rs2
-rw-r--r--src/test/compile-fail/regions-addr-of-upvar-self.rs2
-rw-r--r--src/test/compile-fail/regions-appearance-constraint.rs2
-rw-r--r--src/test/compile-fail/regions-blk.rs2
-rw-r--r--src/test/compile-fail/regions-borrow.rs2
-rw-r--r--src/test/compile-fail/regions-bounds.rs10
-rw-r--r--src/test/compile-fail/regions-creating-enums.rs4
-rw-r--r--src/test/compile-fail/regions-creating-enums3.rs2
-rw-r--r--src/test/compile-fail/regions-creating-enums4.rs2
-rw-r--r--src/test/compile-fail/regions-escape-into-other-fn.rs2
-rw-r--r--src/test/compile-fail/regions-escape-loop-via-variable.rs2
-rw-r--r--src/test/compile-fail/regions-escape-loop-via-vec.rs8
-rw-r--r--src/test/compile-fail/regions-fn-subtyping.rs2
-rw-r--r--src/test/compile-fail/regions-fns.rs4
-rw-r--r--src/test/compile-fail/regions-iface-1.rs2
-rw-r--r--src/test/compile-fail/regions-iface-2.rs2
-rw-r--r--src/test/compile-fail/regions-iface-3.rs4
-rw-r--r--src/test/compile-fail/regions-in-consts.rs4
-rw-r--r--src/test/compile-fail/regions-in-enums.rs8
-rw-r--r--src/test/compile-fail/regions-in-rsrcs.rs16
-rw-r--r--src/test/compile-fail/regions-in-type-items.rs10
-rw-r--r--src/test/compile-fail/regions-nested-fns.rs8
-rw-r--r--src/test/compile-fail/regions-out-of-scope-slice.rs2
-rw-r--r--src/test/compile-fail/regions-scoping.rs30
-rw-r--r--src/test/compile-fail/regions-var-type-out-of-scope.rs2
-rw-r--r--src/test/compile-fail/selftype-astparam.rs2
-rw-r--r--src/test/compile-fail/selftype-ifacetype.rs2
-rw-r--r--src/test/compile-fail/sendfn-is-not-a-lambda.rs2
-rw-r--r--src/test/compile-fail/seq-args.rs2
-rw-r--r--src/test/compile-fail/swap-no-lval.rs4
-rw-r--r--src/test/compile-fail/terr-in-field.rs2
-rw-r--r--src/test/compile-fail/terr-sorts.rs2
-rw-r--r--src/test/compile-fail/tps-invariant-class.rs2
-rw-r--r--src/test/compile-fail/tps-invariant-enum.rs2
-rw-r--r--src/test/compile-fail/tps-invariant-iface.rs4
-rw-r--r--src/test/compile-fail/tstate-and-init.rs2
-rw-r--r--src/test/compile-fail/tstate-block-uninit.rs2
-rw-r--r--src/test/compile-fail/tstate-break-uninit-2.rs4
-rw-r--r--src/test/compile-fail/tstate-break-uninit.rs4
-rw-r--r--src/test/compile-fail/tstate-ctor-unsat.rs2
-rw-r--r--src/test/compile-fail/tstate-fru.rs2
-rw-r--r--src/test/compile-fail/tstate-if-no-else.rs2
-rw-r--r--src/test/compile-fail/tstate-if-with-else.rs2
-rw-r--r--src/test/compile-fail/tstate-loop-constraints.rs2
-rw-r--r--src/test/compile-fail/tstate-or-init.rs2
-rw-r--r--src/test/compile-fail/tstate-return.rs2
-rw-r--r--src/test/compile-fail/tstate-unsat-after-item.rs2
-rw-r--r--src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs2
-rw-r--r--src/test/compile-fail/tstate-unsat-in-fn-expr.rs2
-rw-r--r--src/test/compile-fail/tstate-unsat.rs2
-rw-r--r--src/test/compile-fail/tstate-while-break.rs2
-rw-r--r--src/test/compile-fail/tstate-while-cond.rs2
-rw-r--r--src/test/compile-fail/tstate-while.rs2
-rw-r--r--src/test/compile-fail/tutorial-suffix-inference-test.rs6
-rw-r--r--src/test/compile-fail/type-mismatch.rs2
-rw-r--r--src/test/compile-fail/unique-unique-kind.rs2
-rw-r--r--src/test/compile-fail/unsafe-fn-assign-deref-ptr.rs2
-rw-r--r--src/test/compile-fail/unsafe-fn-autoderef.rs2
-rw-r--r--src/test/compile-fail/unsafe-fn-called-from-safe.rs2
-rw-r--r--src/test/compile-fail/unsafe-fn-deref-ptr.rs2
-rw-r--r--src/test/compile-fail/unsafe-fn-used-as-value.rs2
-rw-r--r--src/test/compile-fail/unsendable-class.rs6
-rw-r--r--src/test/compile-fail/vec-add.rs60
-rw-r--r--src/test/compile-fail/vec-concat-bug.rs2
-rw-r--r--src/test/compile-fail/vector-no-ann.rs2
-rw-r--r--src/test/compile-fail/warn-path-statement.rs2
-rw-r--r--src/test/pretty/doc-comments.rs32
-rw-r--r--src/test/run-pass/liveness-assign-imm-local-after-ret.rs2
-rw-r--r--src/test/run-pass/pred-not-bool.rs2
-rw-r--r--src/test/run-pass/unreachable-code-1.rs2
268 files changed, 1051 insertions, 656 deletions
diff --git a/src/compiletest/errors.rs b/src/compiletest/errors.rs
index 17d3d92b7d2..3ccedc60921 100644
--- a/src/compiletest/errors.rs
+++ b/src/compiletest/errors.rs
@@ -21,14 +21,14 @@ fn load_errors(testfile: str) -> ~[expected_error] {
 }
 
 fn parse_expected(line_num: uint, line: str) -> ~[expected_error] unsafe {
-    let error_tag = "//!";
+    let error_tag = "//~";
     let mut idx;
     alt str::find_str(line, error_tag) {
          option::none { ret ~[]; }
          option::some(nn) { idx = (nn as uint) + str::len(error_tag); }
     }
 
-    // "//!^^^ kind msg" denotes a message expected
+    // "//~^^^ kind msg" denotes a message expected
     // three lines above current line:
     let mut adjust_line = 0u;
     let len = str::len(line);
diff --git a/src/etc/sugarise-doc-comments.py b/src/etc/sugarise-doc-comments.py
new file mode 100755
index 00000000000..04c8a4ebff2
--- /dev/null
+++ b/src/etc/sugarise-doc-comments.py
@@ -0,0 +1,82 @@
+#!/usr/bin/python
+
+#
+# this script attempts to turn doc comment attributes (#[doc = "..."])
+# into sugared-doc-comments (/** ... */ and /// ...)
+#
+# it sugarises all .rs/.rc files underneath the working directory
+#
+
+import sys, os, fnmatch, re
+
+
+DOC_PATTERN = '^(?P<indent>[\\t ]*)#\\[(\\s*)doc(\\s*)=' + \
+              '(\\s*)"(?P<text>(\\"|[^"])*?)"(\\s*)\\]' + \
+              '(?P<semi>;)?'
+
+ESCAPES = [("\\'", "'"),
+           ('\\"', '"'),
+           ("\\n", "\n"),
+           ("\\r", "\r"),
+           ("\\t", "\t")]
+
+
+def unescape(s):
+    for (find, repl) in ESCAPES:
+        s = s.replace(find, repl)
+    return s
+
+
+def block_trim(s):
+    lns = s.splitlines()
+
+    # remove leading/trailing whitespace-lines
+    while lns and not lns[0].strip():
+        lns = lns[1:]
+    while lns and not lns[-1].strip():
+        lns = lns[:-1]
+
+    # remove leading horizontal whitespace
+    n = sys.maxint
+    for ln in lns:
+        if ln.strip():
+            n = min(n, len(re.search('^\s*', ln).group()))
+    if n != sys.maxint:
+        lns = [ln[n:] for ln in lns]
+
+    # strip trailing whitespace
+    lns = [ln.rstrip() for ln in lns]
+
+    return lns
+
+
+def replace_doc(m):
+    indent = m.group('indent')
+    text = block_trim(unescape(m.group('text')))
+
+    if len(text) > 1:
+        inner = '!' if m.group('semi') else '*'
+        starify = lambda s: indent + ' *' + (' ' + s if s else '')
+        text = '\n'.join(map(starify, text))
+        repl = indent + '/*' + inner + '\n' + text + '\n' + indent + ' */'
+    else:
+        inner = '!' if m.group('semi') else '/'
+        repl = indent + '//' + inner + ' ' + text[0]
+
+    return repl
+
+
+def sugarise_file(path):
+    s = open(path).read()
+
+    r = re.compile(DOC_PATTERN, re.MULTILINE | re.DOTALL)
+    ns = re.sub(r, replace_doc, s)
+
+    if s != ns:
+        open(path, 'w').write(ns)
+
+
+for (dirpath, dirnames, filenames) in os.walk('.'):
+    for name in fnmatch.filter(filenames, '*.r[sc]'):
+        sugarise_file(os.path.join(dirpath, name))
+
diff --git a/src/libcore/str.rs b/src/libcore/str.rs
index e0c257f9c0a..3618772027e 100644
--- a/src/libcore/str.rs
+++ b/src/libcore/str.rs
@@ -58,8 +58,8 @@ export
    all, any,
    all_between, any_between,
    map,
-   each,
-   each_char,
+   each, eachi,
+   each_char, each_chari,
    bytes_iter,
    chars_iter,
    split_char_iter,
@@ -73,7 +73,7 @@ export
    find_char, find_char_from, find_char_between,
    rfind_char, rfind_char_from, rfind_char_between,
    find_str, find_str_from, find_str_between,
-   contains,
+   contains, contains_char,
    starts_with,
    ends_with,
 
@@ -672,9 +672,15 @@ pure fn bytes_iter(ss: str/&, it: fn(u8)) {
 #[doc = "Iterate over the bytes in a string"]
 #[inline(always)]
 pure fn each(s: str/&, it: fn(u8) -> bool) {
+    eachi(s, |_i, b| it(b) )
+}
+
+#[doc = "Iterate over the bytes in a string, with indices"]
+#[inline(always)]
+pure fn eachi(s: str/&, it: fn(uint, u8) -> bool) {
     let mut i = 0u, l = len(s);
     while (i < l) {
-        if !it(s[i]) { break; }
+        if !it(i, s[i]) { break; }
         i += 1u;
     }
 }
@@ -682,12 +688,19 @@ pure fn each(s: str/&, it: fn(u8) -> bool) {
 #[doc = "Iterates over the chars in a string"]
 #[inline(always)]
 pure fn each_char(s: str/&, it: fn(char) -> bool) {
-    let mut pos = 0u;
+    each_chari(s, |_i, c| it(c))
+}
+
+#[doc = "Iterates over the chars in a string, with indices"]
+#[inline(always)]
+pure fn each_chari(s: str/&, it: fn(uint, char) -> bool) {
+    let mut pos = 0u, ch_pos = 0u;
     let len = len(s);
     while pos < len {
         let {ch, next} = char_range_at(s, pos);
         pos = next;
-        if !it(ch) { break; }
+        if !it(ch_pos, ch) { break; }
+        ch_pos += 1u;
     }
 }
 
@@ -1147,6 +1160,18 @@ pure fn contains(haystack: str/&a, needle: str/&b) -> bool {
 }
 
 #[doc = "
+Returns true if a string contains a char.
+
+# Arguments
+
+* haystack - The string to look in
+* needle - The char to look for
+"]
+pure fn contains_char(haystack: str/&, needle: char) -> bool {
+    option::is_some(find_char(haystack, needle))
+}
+
+#[doc = "
 Returns true if one string starts with another
 
 # Arguments
@@ -1879,12 +1904,21 @@ impl extensions/& for str/& {
     #[doc = "Returns true if one string contains another"]
     #[inline]
     fn contains(needle: str/&a) -> bool { contains(self, needle) }
+    #[doc = "Returns true if a string contains a char"]
+    #[inline]
+    fn contains_char(needle: char) -> bool { contains_char(self, needle) }
     #[doc = "Iterate over the bytes in a string"]
     #[inline]
     fn each(it: fn(u8) -> bool) { each(self, it) }
+    #[doc = "Iterate over the bytes in a string, with indices"]
+    #[inline]
+    fn eachi(it: fn(uint, u8) -> bool) { eachi(self, it) }
     #[doc = "Iterate over the chars in a string"]
     #[inline]
     fn each_char(it: fn(char) -> bool) { each_char(self, it) }
+    #[doc = "Iterate over the chars in a string, with indices"]
+    #[inline]
+    fn each_chari(it: fn(uint, char) -> bool) { each_chari(self, it) }
     #[doc = "Returns true if one string ends with another"]
     #[inline]
     fn ends_with(needle: str/&) -> bool { ends_with(self, needle) }
@@ -2645,6 +2679,14 @@ mod tests {
     }
 
     #[test]
+    fn test_contains_char() {
+        assert contains_char("abc", 'b');
+        assert contains_char("a", 'a');
+        assert !contains_char("abc", 'd');
+        assert !contains_char("", 'a');
+    }
+
+    #[test]
     fn test_chars_iter() {
         let mut i = 0;
         do chars_iter("x\u03c0y") |ch| {
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index ba6900afabc..90dbc1a82f2 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -652,8 +652,9 @@ type attribute = spanned<attribute_>;
 #[auto_serialize]
 enum attr_style { attr_outer, attr_inner, }
 
+// doc-comments are promoted to attributes that have is_sugared_doc = true
 #[auto_serialize]
-type attribute_ = {style: attr_style, value: meta_item};
+type attribute_ = {style: attr_style, value: meta_item, is_sugared_doc: bool};
 
 /*
   iface_refs appear in both impls and in classes that implement ifaces.
diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs
index 13aa281ffb0..e1cfa4830ae 100644
--- a/src/libsyntax/attr.rs
+++ b/src/libsyntax/attr.rs
@@ -4,7 +4,8 @@ import std::map;
 import std::map::hashmap;
 import either::either;
 import diagnostic::span_handler;
-import ast_util::dummy_spanned;
+import ast_util::{spanned, dummy_spanned};
+import parse::comments::{doc_comment_style, strip_doc_comment_decoration};
 
 // Constructors
 export mk_name_value_item_str;
@@ -12,10 +13,12 @@ export mk_name_value_item;
 export mk_list_item;
 export mk_word_item;
 export mk_attr;
+export mk_sugared_doc_attr;
 
 // Conversion
 export attr_meta;
 export attr_metas;
+export desugar_doc_attr;
 
 // Accessors
 export get_attr_name;
@@ -66,9 +69,19 @@ fn mk_word_item(+name: ast::ident) -> @ast::meta_item {
 }
 
 fn mk_attr(item: @ast::meta_item) -> ast::attribute {
-    ret dummy_spanned({style: ast::attr_inner, value: *item});
+    ret dummy_spanned({style: ast::attr_inner, value: *item,
+                       is_sugared_doc: false});
 }
 
+fn mk_sugared_doc_attr(text: str, lo: uint, hi: uint) -> ast::attribute {
+    let lit = spanned(lo, hi, ast::lit_str(@text));
+    let attr = {
+        style: doc_comment_style(text),
+        value: spanned(lo, hi, ast::meta_name_value(@"doc", lit)),
+        is_sugared_doc: true
+    };
+    ret spanned(lo, hi, attr);
+}
 
 /* Conversion */
 
@@ -81,6 +94,16 @@ fn attr_metas(attrs: ~[ast::attribute]) -> ~[@ast::meta_item] {
     ret mitems;
 }
 
+fn desugar_doc_attr(attr: ast::attribute) -> ast::attribute {
+    if attr.node.is_sugared_doc {
+        let comment = get_meta_item_value_str(@attr.node.value).get();
+        let meta = mk_name_value_item_str(@"doc",
+                                     strip_doc_comment_decoration(*comment));
+        ret mk_attr(meta);
+    } else {
+        attr
+    }
+}
 
 /* Accessors */
 
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index cbe8edb2b51..c949c2e17aa 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -102,7 +102,8 @@ fn fold_meta_item_(&&mi: @meta_item, fld: ast_fold) -> @meta_item {
 fn fold_attribute_(at: attribute, fld: ast_fold) ->
    attribute {
     ret {node: {style: at.node.style,
-                value: *fold_meta_item_(@at.node.value, fld)},
+                value: *fold_meta_item_(@at.node.value, fld),
+                is_sugared_doc: at.node.is_sugared_doc },
          span: fld.new_span(at.span)};
 }
 //used in noop_fold_foreign_item and noop_fold_fn_decl
diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs
index 13c72d1e315..d804a927edb 100644
--- a/src/libsyntax/parse/attr.rs
+++ b/src/libsyntax/parse/attr.rs
@@ -15,7 +15,8 @@ impl parser_attr for parser {
         -> attr_or_ext
     {
         let expect_item_next = vec::is_not_empty(first_item_attrs);
-        if self.token == token::POUND {
+        alt self.token {
+          token::POUND {
             let lo = self.span.lo;
             if self.look_ahead(1u) == token::LBRACKET {
                 self.bump();
@@ -30,15 +31,40 @@ impl parser_attr for parser {
                 self.bump();
                 ret some(right(self.parse_syntax_ext_naked(lo)));
             } else { ret none; }
-        } else { ret none; }
+        }
+        token::DOC_COMMENT(_) {
+          ret some(left(self.parse_outer_attributes()));
+        }
+        _ {
+          ret none;
+        }
+      }
     }
 
     // Parse attributes that appear before an item
     fn parse_outer_attributes() -> ~[ast::attribute] {
         let mut attrs: ~[ast::attribute] = ~[];
-        while self.token == token::POUND
-            && self.look_ahead(1u) == token::LBRACKET {
-            vec::push(attrs, self.parse_attribute(ast::attr_outer));
+        loop {
+            alt copy self.token {
+              token::POUND {
+                if self.look_ahead(1u) != token::LBRACKET {
+                    break;
+                }
+                attrs += [self.parse_attribute(ast::attr_outer)]/~;
+              }
+              token::DOC_COMMENT(s) {
+                let attr = ::attr::mk_sugared_doc_attr(
+                        *self.get_str(s), self.span.lo, self.span.hi);
+                if attr.node.style != ast::attr_outer {
+                  self.fatal("expected outer comment");
+                }
+                attrs += [attr]/~;
+                self.bump();
+              }
+              _ {
+                break;
+              }
+            }
         }
         ret attrs;
     }
@@ -55,7 +81,8 @@ impl parser_attr for parser {
         let meta_item = self.parse_meta_item();
         self.expect(token::RBRACKET);
         let mut hi = self.span.hi;
-        ret spanned(lo, hi, {style: style, value: *meta_item});
+        ret spanned(lo, hi, {style: style, value: *meta_item,
+                             is_sugared_doc: false});
     }
 
     // Parse attributes that appear after the opening of an item, each
@@ -68,22 +95,41 @@ impl parser_attr for parser {
         {inner: ~[ast::attribute], next: ~[ast::attribute]} {
         let mut inner_attrs: ~[ast::attribute] = ~[];
         let mut next_outer_attrs: ~[ast::attribute] = ~[];
-        while self.token == token::POUND {
-            if self.look_ahead(1u) != token::LBRACKET {
-                // This is an extension
-                break;
-            }
-            let attr = self.parse_attribute(ast::attr_inner);
-            if self.token == token::SEMI {
+        loop {
+            alt copy self.token {
+              token::POUND {
+                if self.look_ahead(1u) != token::LBRACKET {
+                    // This is an extension
+                    break;
+                }
+                let attr = self.parse_attribute(ast::attr_inner);
+                if self.token == token::SEMI {
+                    self.bump();
+                    inner_attrs += [attr]/~;
+                } else {
+                    // It's not really an inner attribute
+                    let outer_attr =
+                        spanned(attr.span.lo, attr.span.hi,
+                            {style: ast::attr_outer, value: attr.node.value,
+                             is_sugared_doc: false});
+                    next_outer_attrs += [outer_attr]/~;
+                    break;
+                }
+              }
+              token::DOC_COMMENT(s) {
+                let attr = ::attr::mk_sugared_doc_attr(
+                        *self.get_str(s), self.span.lo, self.span.hi);
                 self.bump();
-                vec::push(inner_attrs, attr);
-            } else {
-                // It's not really an inner attribute
-                let outer_attr =
-                    spanned(attr.span.lo, attr.span.hi,
-                            {style: ast::attr_outer, value: attr.node.value});
-                vec::push(next_outer_attrs, outer_attr);
+                if attr.node.style == ast::attr_inner {
+                  inner_attrs += [attr]/~;
+                } else {
+                  next_outer_attrs += [attr]/~;
+                  break;
+                }
+              }
+              _ {
                 break;
+              }
             }
         }
         ret {inner: inner_attrs, next: next_outer_attrs};
diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs
index 3fbb16b5574..e188331dd24 100644
--- a/src/libsyntax/parse/comments.rs
+++ b/src/libsyntax/parse/comments.rs
@@ -8,6 +8,7 @@ export cmnt;
 export lit;
 export cmnt_style;
 export gather_comments_and_literals;
+export is_doc_comment, doc_comment_style, strip_doc_comment_decoration;
 
 enum cmnt_style {
     isolated, // No code on either side of each line of the comment
@@ -18,6 +19,81 @@ enum cmnt_style {
 
 type cmnt = {style: cmnt_style, lines: ~[str], pos: uint};
 
+fn is_doc_comment(s: str) -> bool {
+    s.starts_with("///") ||
+    s.starts_with("//!") ||
+    s.starts_with("/**") ||
+    s.starts_with("/*!")
+}
+
+fn doc_comment_style(comment: str) -> ast::attr_style {
+    assert is_doc_comment(comment);
+    if comment.starts_with("//!") || comment.starts_with("/*!") {
+        ast::attr_inner
+    } else {
+        ast::attr_outer
+    }
+}
+
+fn strip_doc_comment_decoration(comment: str) -> str {
+
+    /// remove whitespace-only lines from the start/end of lines
+    fn vertical_trim(lines: [str]/~) -> [str]/~ {
+        let mut i = 0u, j = lines.len();
+        while i < j && lines[i].trim().is_empty() {
+            i += 1u;
+        }
+        while j > i && lines[j - 1u].trim().is_empty() {
+            j -= 1u;
+        }
+        ret lines.slice(i, j);
+    }
+
+    // drop leftmost columns that contain only values in chars
+    fn block_trim(lines: [str]/~, chars: str, max: option<uint>) -> [str]/~ {
+
+        let mut i = max.get_default(uint::max_value);
+        for lines.each |line| {
+            if line.trim().is_empty() {
+                cont;
+            }
+            for line.each_chari |j, c| {
+                if j >= i {
+                    break;
+                }
+                if !chars.contains_char(c) {
+                    i = j;
+                    break;
+                }
+            }
+        }
+
+        ret do lines.map |line| {
+            let chars = str::chars(line);
+            if i > chars.len() {
+                ""
+            } else {
+                str::from_chars(chars.slice(i, chars.len()))
+            }
+        };
+    }
+
+    if comment.starts_with("//") {
+        ret comment.slice(3u, comment.len()).trim();
+    }
+
+    if comment.starts_with("/*") {
+        let lines = str::lines_any(comment.slice(3u, comment.len() - 2u));
+        let lines = vertical_trim(lines);
+        let lines = block_trim(lines, "\t ", none);
+        let lines = block_trim(lines, "*", some(1u));
+        let lines = block_trim(lines, "\t ", none);
+        ret str::connect(lines, "\n");
+    }
+
+    fail "not a doc-comment: " + comment;
+}
+
 fn read_to_eol(rdr: string_reader) -> str {
     let mut val = "";
     while rdr.curr != '\n' && !is_eof(rdr) {
@@ -57,29 +133,41 @@ fn consume_whitespace_counting_blank_lines(rdr: string_reader,
     }
 }
 
-fn read_shebang_comment(rdr: string_reader, code_to_the_left: bool) -> cmnt {
+
+fn read_shebang_comment(rdr: string_reader, code_to_the_left: bool,
+                                                        &comments: [cmnt]/~) {
     #debug(">>> shebang comment");
     let p = rdr.chpos;
     #debug("<<< shebang comment");
-    ret {style: if code_to_the_left { trailing } else { isolated },
-         lines: ~[read_one_line_comment(rdr)],
-         pos: p};
+    vec::push(comments, {
+        style: if code_to_the_left { trailing } else { isolated },
+        lines: ~[read_one_line_comment(rdr)],
+        pos: p
+    });
 }
 
-fn read_line_comments(rdr: string_reader, code_to_the_left: bool) -> cmnt {
+fn read_line_comments(rdr: string_reader, code_to_the_left: bool,
+                                                        &comments: [cmnt]/~) {
     #debug(">>> line comments");
     let p = rdr.chpos;
     let mut lines: ~[str] = ~[];
     while rdr.curr == '/' && nextch(rdr) == '/' {
         let line = read_one_line_comment(rdr);
         log(debug, line);
+        if is_doc_comment(line) { // doc-comments are not put in comments
+            break;
+        }
         vec::push(lines, line);
         consume_non_eol_whitespace(rdr);
     }
     #debug("<<< line comments");
-    ret {style: if code_to_the_left { trailing } else { isolated },
-         lines: lines,
-         pos: p};
+    if !lines.is_empty() {
+        vec::push(comments, {
+            style: if code_to_the_left { trailing } else { isolated },
+            lines: lines,
+            pos: p
+        });
+    }
 }
 
 fn all_whitespace(s: str, begin: uint, end: uint) -> bool {
@@ -101,13 +189,27 @@ fn trim_whitespace_prefix_and_push_line(&lines: ~[str],
     vec::push(lines, s1);
 }
 
-fn read_block_comment(rdr: string_reader, code_to_the_left: bool) -> cmnt {
+fn read_block_comment(rdr: string_reader, code_to_the_left: bool,
+                                                        &comments: [cmnt]/~) {
     #debug(">>> block comment");
     let p = rdr.chpos;
     let mut lines: ~[str] = ~[];
     let mut col: uint = rdr.col;
     bump(rdr);
     bump(rdr);
+
+    // doc-comments are not really comments, they are attributes
+    if rdr.curr == '*' || rdr.curr == '!' {
+        while !(rdr.curr == '*' && nextch(rdr) == '/') && !is_eof(rdr) {
+            bump(rdr);
+        }
+        if !is_eof(rdr) {
+            bump(rdr);
+            bump(rdr);
+        }
+        ret;
+    }
+
     let mut curr_line = "/*";
     let mut level: int = 1;
     while level > 0 {
@@ -143,7 +245,7 @@ fn read_block_comment(rdr: string_reader, code_to_the_left: bool) -> cmnt {
         style = mixed;
     }
     #debug("<<< block comment");
-    ret {style: style, lines: lines, pos: p};
+    vec::push(comments, {style: style, lines: lines, pos: p});
 }
 
 fn peeking_at_comment(rdr: string_reader) -> bool {
@@ -156,11 +258,11 @@ fn consume_comment(rdr: string_reader, code_to_the_left: bool,
                    &comments: ~[cmnt]) {
     #debug(">>> consume comment");
     if rdr.curr == '/' && nextch(rdr) == '/' {
-        vec::push(comments, read_line_comments(rdr, code_to_the_left));
+        read_line_comments(rdr, code_to_the_left, comments);
     } else if rdr.curr == '/' && nextch(rdr) == '*' {
-        vec::push(comments, read_block_comment(rdr, code_to_the_left));
+        read_block_comment(rdr, code_to_the_left, comments);
     } else if rdr.curr == '#' && nextch(rdr) == '!' {
-        vec::push(comments, read_shebang_comment(rdr, code_to_the_left));
+        read_shebang_comment(rdr, code_to_the_left, comments);
     } else { fail; }
     #debug("<<< consume comment");
 }
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index 9da63508b12..8a32ecdac64 100644
--- a/src/libsyntax/parse/lexer.rs
+++ b/src/libsyntax/parse/lexer.rs
@@ -161,7 +161,11 @@ impl tt_reader_as_reader of reader for tt_reader {
 }
 
 fn string_advance_token(&&r: string_reader) {
-    consume_whitespace_and_comments(r);
+    for consume_whitespace_and_comments(r).each |comment| {
+        r.peek_tok = comment.tok;
+        r.peek_span = comment.sp;
+        ret;
+    }
 
     if is_eof(r) {
         r.peek_tok = token::EOF;
@@ -277,22 +281,41 @@ fn is_hex_digit(c: char) -> bool {
 
 fn is_bin_digit(c: char) -> bool { ret c == '0' || c == '1'; }
 
-fn consume_whitespace_and_comments(rdr: string_reader) {
+// might return a sugared-doc-attr
+fn consume_whitespace_and_comments(rdr: string_reader)
+                                -> option<{tok: token::token, sp: span}> {
     while is_whitespace(rdr.curr) { bump(rdr); }
     ret consume_any_line_comment(rdr);
 }
 
-fn consume_any_line_comment(rdr: string_reader) {
+// might return a sugared-doc-attr
+fn consume_any_line_comment(rdr: string_reader)
+                                -> option<{tok: token::token, sp: span}> {
     if rdr.curr == '/' {
         alt nextch(rdr) {
           '/' {
-            while rdr.curr != '\n' && !is_eof(rdr) { bump(rdr); }
-            // Restart whitespace munch.
-
-            ret consume_whitespace_and_comments(rdr);
+            bump(rdr);
+            bump(rdr);
+            // line comments starting with "///" or "//!" are doc-comments
+            if rdr.curr == '/' || rdr.curr == '!' {
+                let start_chpos = rdr.chpos - 2u;
+                let mut acc = "//";
+                while rdr.curr != '\n' && !is_eof(rdr) {
+                    str::push_char(acc, rdr.curr);
+                    bump(rdr);
+                }
+                ret some({
+                    tok: token::DOC_COMMENT(intern(*rdr.interner, @acc)),
+                    sp: ast_util::mk_sp(start_chpos, rdr.chpos)
+                });
+            } else {
+                while rdr.curr != '\n' && !is_eof(rdr) { bump(rdr); }
+                // Restart whitespace munch.
+                ret consume_whitespace_and_comments(rdr);
+            }
           }
           '*' { bump(rdr); bump(rdr); ret consume_block_comment(rdr); }
-          _ { ret; }
+          _ {}
         }
     } else if rdr.curr == '#' {
         if nextch(rdr) == '!' {
@@ -305,9 +328,34 @@ fn consume_any_line_comment(rdr: string_reader) {
             }
         }
     }
+    ret none;
 }
 
-fn consume_block_comment(rdr: string_reader) {
+// might return a sugared-doc-attr
+fn consume_block_comment(rdr: string_reader)
+                                -> option<{tok: token::token, sp: span}> {
+
+    // block comments starting with "/**" or "/*!" are doc-comments
+    if rdr.curr == '*' || rdr.curr == '!' {
+        let start_chpos = rdr.chpos - 2u;
+        let mut acc = "/*";
+        while !(rdr.curr == '*' && nextch(rdr) == '/') && !is_eof(rdr) {
+            str::push_char(acc, rdr.curr);
+            bump(rdr);
+        }
+        if is_eof(rdr) {
+            rdr.fatal("unterminated block doc-comment");
+        } else {
+            acc += "*/";
+            bump(rdr);
+            bump(rdr);
+            ret some({
+                tok: token::DOC_COMMENT(intern(*rdr.interner, @acc)),
+                sp: ast_util::mk_sp(start_chpos, rdr.chpos)
+            });
+        }
+    }
+
     let mut level: int = 1;
     while level > 0 {
         if is_eof(rdr) { rdr.fatal("unterminated block comment"); }
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index a5d119d8986..a2bd503ffca 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -80,6 +80,7 @@ enum token {
 
     //ACTUALLY(whole_nonterminal),
 
+    DOC_COMMENT(str_num),
     EOF,
 }
 
@@ -170,11 +171,15 @@ fn to_str(in: interner<@str>, t: token) -> str {
             + str::escape_default(*interner::get(in, s))
             + "\""
       }
+
       /* Name components */
       IDENT(s, _) {
         *interner::get(in, s)
       }
       UNDERSCORE { "_" }
+
+      /* Other */
+      DOC_COMMENT(s) { *interner::get(in, s) }
       EOF { "<eof>" }
     }
 }
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 05e959c3321..2680fa1a981 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -647,7 +647,9 @@ fn print_inner_attributes(s: ps, attrs: ~[ast::attribute]) {
         alt attr.node.style {
           ast::attr_inner {
             print_attribute(s, attr);
-            word(s.s, ";");
+            if !attr.node.is_sugared_doc {
+                word(s.s, ";");
+            }
             count += 1;
           }
           _ {/* fallthrough */ }
@@ -659,9 +661,15 @@ fn print_inner_attributes(s: ps, attrs: ~[ast::attribute]) {
 fn print_attribute(s: ps, attr: ast::attribute) {
     hardbreak_if_not_bol(s);
     maybe_print_comment(s, attr.span.lo);
-    word(s.s, "#[");
-    print_meta_item(s, @attr.node.value);
-    word(s.s, "]");
+    if attr.node.is_sugared_doc {
+        let meta = attr::attr_meta(attr);
+        let comment = attr::get_meta_item_value_str(meta).get();
+        word(s.s, *comment);
+    } else {
+        word(s.s, "#[");
+        print_meta_item(s, @attr.node.value);
+        word(s.s, "]");
+    }
 }
 
 
diff --git a/src/rustc/driver/session.rs b/src/rustc/driver/session.rs
index 92e7b6bf598..5c0dc72f33a 100644
--- a/src/rustc/driver/session.rs
+++ b/src/rustc/driver/session.rs
@@ -233,7 +233,8 @@ mod test {
                 ast::meta_name_value(
                     @"crate_type",
                     ast_util::respan(ast_util::dummy_sp(),
-                                     ast::lit_str(@t))))
+                                     ast::lit_str(@t)))),
+            is_sugared_doc: false
         })
     }
 
diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs
index d069b4046bc..ccb3472325b 100644
--- a/src/rustc/metadata/decoder.rs
+++ b/src/rustc/metadata/decoder.rs
@@ -613,7 +613,8 @@ fn get_attributes(md: ebml::doc) -> ~[ast::attribute] {
             assert (vec::len(meta_items) == 1u);
             let meta_item = meta_items[0];
             vec::push(attrs,
-                      {node: {style: ast::attr_outer, value: *meta_item},
+                      {node: {style: ast::attr_outer, value: *meta_item,
+                              is_sugared_doc: false},
                        span: ast_util::dummy_sp()});
         };
       }
diff --git a/src/rustdoc/attr_parser.rs b/src/rustdoc/attr_parser.rs
index 9046496b9e5..56c42902ac2 100644
--- a/src/rustdoc/attr_parser.rs
+++ b/src/rustdoc/attr_parser.rs
@@ -44,7 +44,10 @@ fn doc_meta(
        doc attribute"];
 
     let doc_attrs = attr::find_attrs_by_name(attrs, "doc");
-    let doc_metas = attr::attr_metas(doc_attrs);
+    let doc_metas = do doc_attrs.map |attr| {
+        attr::attr_meta(attr::desugar_doc_attr(attr))
+    };
+
     if vec::is_not_empty(doc_metas) {
         if vec::len(doc_metas) != 1u {
             #warn("ignoring %u doc attributes", vec::len(doc_metas) - 1u);
diff --git a/src/test/compile-fail/alt-join.rs b/src/test/compile-fail/alt-join.rs
index bc1357372b0..cd39d90b9bd 100644
--- a/src/test/compile-fail/alt-join.rs
+++ b/src/test/compile-fail/alt-join.rs
@@ -6,6 +6,6 @@ fn my_fail() -> ! { fail; }
 fn main() {
     alt true { false { my_fail(); } true { } }
 
-    log(debug, x); //! ERROR unresolved name: x
+    log(debug, x); //~ ERROR unresolved name: x
     let x: int;
 }
diff --git a/src/test/compile-fail/alt-pattern-field-mismatch-2.rs b/src/test/compile-fail/alt-pattern-field-mismatch-2.rs
index 75e0763e4a6..b8d4dab9539 100644
--- a/src/test/compile-fail/alt-pattern-field-mismatch-2.rs
+++ b/src/test/compile-fail/alt-pattern-field-mismatch-2.rs
@@ -10,7 +10,7 @@ fn main() {
           rgb(_, _, _) { }
           cmyk(_, _, _, _) { }
           no_color(_) { }
-          //!^ ERROR this pattern has 1 field, but the corresponding variant has no fields
+          //~^ ERROR this pattern has 1 field, but the corresponding variant has no fields
         }
     }
 }
diff --git a/src/test/compile-fail/alt-pattern-field-mismatch.rs b/src/test/compile-fail/alt-pattern-field-mismatch.rs
index 086267a85b3..2e24f6a5c89 100644
--- a/src/test/compile-fail/alt-pattern-field-mismatch.rs
+++ b/src/test/compile-fail/alt-pattern-field-mismatch.rs
@@ -8,7 +8,7 @@ fn main() {
     fn foo(c: color) {
         alt c {
           rgb(_, _) { }
-          //!^ ERROR this pattern has 2 fields, but the corresponding variant has 3 fields
+          //~^ ERROR this pattern has 2 fields, but the corresponding variant has 3 fields
           cmyk(_, _, _, _) { }
           no_color { }
         }
diff --git a/src/test/compile-fail/ambig_impl_1.rs b/src/test/compile-fail/ambig_impl_1.rs
index 0eed1c8f89f..51247c7e8e9 100644
--- a/src/test/compile-fail/ambig_impl_1.rs
+++ b/src/test/compile-fail/ambig_impl_1.rs
@@ -1,3 +1,3 @@
-impl methods1 for uint { fn me() -> uint { self } } //! NOTE candidate #1 is `methods1::me`
-impl methods2 for uint { fn me() -> uint { self } } //! NOTE candidate #2 is `methods2::me`
-fn main() { 1u.me(); } //! ERROR multiple applicable methods in scope
+impl methods1 for uint { fn me() -> uint { self } } //~ NOTE candidate #1 is `methods1::me`
+impl methods2 for uint { fn me() -> uint { self } } //~ NOTE candidate #2 is `methods2::me`
+fn main() { 1u.me(); } //~ ERROR multiple applicable methods in scope
diff --git a/src/test/compile-fail/ambig_impl_2_exe.rs b/src/test/compile-fail/ambig_impl_2_exe.rs
index 5bd20db144f..7cb79ff789e 100644
--- a/src/test/compile-fail/ambig_impl_2_exe.rs
+++ b/src/test/compile-fail/ambig_impl_2_exe.rs
@@ -2,6 +2,6 @@
 // aux-build:ambig_impl_2_lib.rs
 use ambig_impl_2_lib;
 import ambig_impl_2_lib::methods1;
-impl methods2 for uint { fn me() -> uint { self } } //! NOTE candidate #2 is `methods2::me`
-fn main() { 1u.me(); } //! ERROR multiple applicable methods in scope
-//!^ NOTE candidate #1 is `ambig_impl_2_lib::methods1::me`
+impl methods2 for uint { fn me() -> uint { self } } //~ NOTE candidate #2 is `methods2::me`
+fn main() { 1u.me(); } //~ ERROR multiple applicable methods in scope
+//~^ NOTE candidate #1 is `ambig_impl_2_lib::methods1::me`
diff --git a/src/test/compile-fail/ambig_impl_bounds.rs b/src/test/compile-fail/ambig_impl_bounds.rs
index d14e57a21f4..9d7a9634a07 100644
--- a/src/test/compile-fail/ambig_impl_bounds.rs
+++ b/src/test/compile-fail/ambig_impl_bounds.rs
@@ -2,9 +2,9 @@ iface A { fn foo(); }
 iface B { fn foo(); }
 
 fn foo<T: A B>(t: T) {
-    t.foo(); //! ERROR multiple applicable methods in scope
-    //!^ NOTE candidate #1 derives from the bound `A`
-    //!^^ NOTE candidate #2 derives from the bound `B`
+    t.foo(); //~ ERROR multiple applicable methods in scope
+    //~^ NOTE candidate #1 derives from the bound `A`
+    //~^^ NOTE candidate #2 derives from the bound `B`
 }
 
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/ambig_impl_unify.rs b/src/test/compile-fail/ambig_impl_unify.rs
index 9c0e1882168..bb2009fc931 100644
--- a/src/test/compile-fail/ambig_impl_unify.rs
+++ b/src/test/compile-fail/ambig_impl_unify.rs
@@ -1,12 +1,12 @@
 impl methods for ~[uint] {
-    fn foo() -> int {1} //! NOTE candidate #1 is `methods::foo`
+    fn foo() -> int {1} //~ NOTE candidate #1 is `methods::foo`
 }
 
 impl methods for ~[int] {
-    fn foo() -> int {2} //! NOTE candidate #2 is `methods::foo`
+    fn foo() -> int {2} //~ NOTE candidate #2 is `methods::foo`
 }
 
 fn main() {
     let x = ~[];
-    x.foo(); //! ERROR multiple applicable methods in scope
+    x.foo(); //~ ERROR multiple applicable methods in scope
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/assign-imm-local-twice.rs b/src/test/compile-fail/assign-imm-local-twice.rs
index 7472ebe7eff..54b130ae26f 100644
--- a/src/test/compile-fail/assign-imm-local-twice.rs
+++ b/src/test/compile-fail/assign-imm-local-twice.rs
@@ -1,8 +1,8 @@
 fn test() {
     let v: int;
-    v = 1; //! NOTE prior assignment occurs here
+    v = 1; //~ NOTE prior assignment occurs here
     #debug["v=%d", v];
-    v = 2; //! ERROR re-assignment of immutable variable
+    v = 2; //~ ERROR re-assignment of immutable variable
     #debug["v=%d", v];
 }
 
diff --git a/src/test/compile-fail/assign-super.rs b/src/test/compile-fail/assign-super.rs
index 2f348b2944b..fab93a259c2 100644
--- a/src/test/compile-fail/assign-super.rs
+++ b/src/test/compile-fail/assign-super.rs
@@ -1,5 +1,5 @@
 fn main() {
     let mut x: ~[mut int] = ~[mut 3];
     let y: ~[int] = ~[3];
-    x = y; //! ERROR values differ in mutability
+    x = y; //~ ERROR values differ in mutability
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/assign-to-method.rs b/src/test/compile-fail/assign-to-method.rs
index f7577d21c7e..772a3a945fd 100644
--- a/src/test/compile-fail/assign-to-method.rs
+++ b/src/test/compile-fail/assign-to-method.rs
@@ -11,5 +11,5 @@ class cat {
 
 fn main() {
   let nyan : cat = cat(52u, 99);
-  nyan.speak = fn@() { #debug["meow"]; }; //! ERROR assigning to method
+  nyan.speak = fn@() { #debug["meow"]; }; //~ ERROR assigning to method
 }
diff --git a/src/test/compile-fail/attempted-access-non-fatal.rs b/src/test/compile-fail/attempted-access-non-fatal.rs
index 7ead10b3f63..a4183ec310f 100644
--- a/src/test/compile-fail/attempted-access-non-fatal.rs
+++ b/src/test/compile-fail/attempted-access-non-fatal.rs
@@ -1,6 +1,6 @@
 // Check that bogus field access is non-fatal
 fn main() {
     let x = 0;
-    log(debug, x.foo); //! ERROR attempted access of field
-    log(debug, x.bar); //! ERROR attempted access of field
+    log(debug, x.foo); //~ ERROR attempted access of field
+    log(debug, x.bar); //~ ERROR attempted access of field
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/attr-before-ext.rs b/src/test/compile-fail/attr-before-ext.rs
index 8409ab8ef52..2f4b8111bc9 100644
--- a/src/test/compile-fail/attr-before-ext.rs
+++ b/src/test/compile-fail/attr-before-ext.rs
@@ -1,4 +1,4 @@
 fn main() {
     #[attr]
-    #debug("hi"); //! ERROR expected item
+    #debug("hi"); //~ ERROR expected item
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/attr-before-let.rs b/src/test/compile-fail/attr-before-let.rs
index 814ad400d6b..f99170e654d 100644
--- a/src/test/compile-fail/attr-before-let.rs
+++ b/src/test/compile-fail/attr-before-let.rs
@@ -1,4 +1,4 @@
 fn main() {
     #[attr]
-    let _i = 0; //! ERROR expected item
+    let _i = 0; //~ ERROR expected item
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/bad-bang-ann-3.rs b/src/test/compile-fail/bad-bang-ann-3.rs
index bab121bd6d3..3a88afd5346 100644
--- a/src/test/compile-fail/bad-bang-ann-3.rs
+++ b/src/test/compile-fail/bad-bang-ann-3.rs
@@ -3,7 +3,7 @@
 
 fn bad_bang(i: uint) -> ! {
     ret 7u;
-    //!^ ERROR expected `_|_` but found `uint`
+    //~^ ERROR expected `_|_` but found `uint`
 }
 
 fn main() { bad_bang(5u); }
diff --git a/src/test/compile-fail/bad-bang-ann.rs b/src/test/compile-fail/bad-bang-ann.rs
index b6e2dea4e5a..a2ad98df959 100644
--- a/src/test/compile-fail/bad-bang-ann.rs
+++ b/src/test/compile-fail/bad-bang-ann.rs
@@ -3,7 +3,7 @@
 
 fn bad_bang(i: uint) -> ! {
     if i < 0u { } else { fail; }
-    //!^ ERROR expected `_|_` but found `()`
+    //~^ ERROR expected `_|_` but found `()`
 }
 
 fn main() { bad_bang(5u); }
diff --git a/src/test/compile-fail/bad-for-loop.rs b/src/test/compile-fail/bad-for-loop.rs
index 617af110991..65a7ee4211c 100644
--- a/src/test/compile-fail/bad-for-loop.rs
+++ b/src/test/compile-fail/bad-for-loop.rs
@@ -1,4 +1,4 @@
 fn main() {
     fn baz(_x: fn() -> int) {}
-    for baz |_e| { } //! ERROR should return `bool`
+    for baz |_e| { } //~ ERROR should return `bool`
 }
diff --git a/src/test/compile-fail/bad-method-typaram-kind.rs b/src/test/compile-fail/bad-method-typaram-kind.rs
index 55b259daf1e..9934702fdea 100644
--- a/src/test/compile-fail/bad-method-typaram-kind.rs
+++ b/src/test/compile-fail/bad-method-typaram-kind.rs
@@ -1,5 +1,5 @@
 fn foo<T>() {
-    1u.bar::<T>(); //! ERROR: missing `copy`
+    1u.bar::<T>(); //~ ERROR: missing `copy`
 }
 
 impl methods for uint {
diff --git a/src/test/compile-fail/bad-value-ident-false.rs b/src/test/compile-fail/bad-value-ident-false.rs
index fa744c6823d..9498f1c341f 100644
--- a/src/test/compile-fail/bad-value-ident-false.rs
+++ b/src/test/compile-fail/bad-value-ident-false.rs
@@ -1,2 +1,2 @@
-fn false() { } //! ERROR found `false` in restricted position
+fn false() { } //~ ERROR found `false` in restricted position
 fn main() { }
\ No newline at end of file
diff --git a/src/test/compile-fail/bad-value-ident-true.rs b/src/test/compile-fail/bad-value-ident-true.rs
index 9a4a155c97d..96f172b3285 100644
--- a/src/test/compile-fail/bad-value-ident-true.rs
+++ b/src/test/compile-fail/bad-value-ident-true.rs
@@ -1,2 +1,2 @@
-fn true() { } //! ERROR found `true` in restricted position
+fn true() { } //~ ERROR found `true` in restricted position
 fn main() { }
\ No newline at end of file
diff --git a/src/test/compile-fail/bad-var-env-capture-in-block-arg.rs b/src/test/compile-fail/bad-var-env-capture-in-block-arg.rs
index e4671431e4c..898c164e9dc 100644
--- a/src/test/compile-fail/bad-var-env-capture-in-block-arg.rs
+++ b/src/test/compile-fail/bad-var-env-capture-in-block-arg.rs
@@ -2,6 +2,6 @@ fn main() {
     let x = 3;
     fn blah(_a: native fn()) {}
     blah(|| {
-        log(debug, x); //! ERROR attempted dynamic environment capture
+        log(debug, x); //~ ERROR attempted dynamic environment capture
     });
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/bang-tailexpr.rs b/src/test/compile-fail/bang-tailexpr.rs
index 83909b6753f..f3d78f2f6c2 100644
--- a/src/test/compile-fail/bang-tailexpr.rs
+++ b/src/test/compile-fail/bang-tailexpr.rs
@@ -1,4 +1,4 @@
 fn f() -> ! {
-    3i //! ERROR expected `_|_` but found `int`
+    3i //~ ERROR expected `_|_` but found `int`
 }
 fn main() { }
diff --git a/src/test/compile-fail/binop-typeck.rs b/src/test/compile-fail/binop-typeck.rs
index e2669be751b..f48734a48f9 100644
--- a/src/test/compile-fail/binop-typeck.rs
+++ b/src/test/compile-fail/binop-typeck.rs
@@ -4,5 +4,5 @@ fn main() {
     let x = true;
     let y = 1;
     let z = x + y;
-    //!^ ERROR binary operation + cannot be applied to type `bool`
+    //~^ ERROR binary operation + cannot be applied to type `bool`
 }
diff --git a/src/test/compile-fail/block-arg-as-stmt-with-value.rs b/src/test/compile-fail/block-arg-as-stmt-with-value.rs
index 72128316f0a..b8e34aefd6f 100644
--- a/src/test/compile-fail/block-arg-as-stmt-with-value.rs
+++ b/src/test/compile-fail/block-arg-as-stmt-with-value.rs
@@ -3,7 +3,7 @@ fn compute1() -> float {
     let v = ~[0f, 1f, 2f, 3f];
 
     do vec::foldl(0f, v) |x, y| { x + y } - 10f
-    //!^ ERROR mismatched types: expected `()`
+    //~^ ERROR mismatched types: expected `()`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/block-coerce-no-2.rs b/src/test/compile-fail/block-coerce-no-2.rs
index 613d1c0028c..780a91b664c 100644
--- a/src/test/compile-fail/block-coerce-no-2.rs
+++ b/src/test/compile-fail/block-coerce-no-2.rs
@@ -9,5 +9,5 @@ fn main() {
     }
 
     f(g);
-    //!^ ERROR mismatched types: expected `extern fn(extern fn(extern fn()))`
+    //~^ ERROR mismatched types: expected `extern fn(extern fn(extern fn()))`
 }
diff --git a/src/test/compile-fail/block-coerce-no.rs b/src/test/compile-fail/block-coerce-no.rs
index d1d1731e8c5..e789775fe7d 100644
--- a/src/test/compile-fail/block-coerce-no.rs
+++ b/src/test/compile-fail/block-coerce-no.rs
@@ -6,7 +6,7 @@ fn coerce(b: fn()) -> native fn() {
            g: fn()) -> native fn() { ret f(g); }
     fn fn_id(f: native fn()) -> native fn() { ret f }
     ret lol(fn_id, b);
-    //!^ ERROR mismatched types: expected `extern fn(fn()) -> extern fn()`
+    //~^ ERROR mismatched types: expected `extern fn(fn()) -> extern fn()`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-assign-comp-idx.rs b/src/test/compile-fail/borrowck-assign-comp-idx.rs
index 3c8d9ececb8..1ec0b923431 100644
--- a/src/test/compile-fail/borrowck-assign-comp-idx.rs
+++ b/src/test/compile-fail/borrowck-assign-comp-idx.rs
@@ -4,9 +4,9 @@ fn a() {
     let mut p = ~[mut 1];
 
     // Create an immutable pointer into p's contents:
-    let _q: &int = &p[0]; //! NOTE loan of mutable vec content granted here
+    let _q: &int = &p[0]; //~ NOTE loan of mutable vec content granted here
 
-    p[0] = 5; //! ERROR assigning to mutable vec content prohibited due to outstanding loan
+    p[0] = 5; //~ ERROR assigning to mutable vec content prohibited due to outstanding loan
 }
 
 fn borrow(_x: &[int], _f: fn()) {}
@@ -17,8 +17,8 @@ fn b() {
 
     let mut p = ~[mut 1];
 
-    do borrow(p) || { //! NOTE loan of mutable vec content granted here
-        p[0] = 5; //! ERROR assigning to mutable vec content prohibited due to outstanding loan
+    do borrow(p) || { //~ NOTE loan of mutable vec content granted here
+        p[0] = 5; //~ ERROR assigning to mutable vec content prohibited due to outstanding loan
     }
 }
 
diff --git a/src/test/compile-fail/borrowck-assign-comp.rs b/src/test/compile-fail/borrowck-assign-comp.rs
index 2e045b84c60..55a29393cae 100644
--- a/src/test/compile-fail/borrowck-assign-comp.rs
+++ b/src/test/compile-fail/borrowck-assign-comp.rs
@@ -2,12 +2,12 @@ type point = { x: int, y: int };
 
 fn a() {
     let mut p = {x: 3, y: 4};
-    let _q = &p; //! NOTE loan of mutable local variable granted here
+    let _q = &p; //~ NOTE loan of mutable local variable granted here
 
     // This assignment is illegal because the field x is not
     // inherently mutable; since `p` was made immutable, `p.x` is now
     // immutable.  Otherwise the type of &_q.x (&int) would be wrong.
-    p.x = 5; //! ERROR assigning to mutable field prohibited due to outstanding loan
+    p.x = 5; //~ ERROR assigning to mutable field prohibited due to outstanding loan
 }
 
 fn b() {
@@ -24,8 +24,8 @@ fn c() {
     // and then try to overwrite `p` as a whole.
 
     let mut p = {x: 3, mut y: 4};
-    let _q = &p.y; //! NOTE loan of mutable local variable granted here
-    p = {x: 5, mut y: 7};//! ERROR assigning to mutable local variable prohibited due to outstanding loan
+    let _q = &p.y; //~ NOTE loan of mutable local variable granted here
+    p = {x: 5, mut y: 7};//~ ERROR assigning to mutable local variable prohibited due to outstanding loan
     copy p;
 }
 
@@ -34,8 +34,8 @@ fn d() {
     // address of a subcomponent and then modify that subcomponent:
 
     let mut p = {x: 3, mut y: 4};
-    let _q = &p.y; //! NOTE loan of mutable field granted here
-    p.y = 5; //! ERROR assigning to mutable field prohibited due to outstanding loan
+    let _q = &p.y; //~ NOTE loan of mutable field granted here
+    p.y = 5; //~ ERROR assigning to mutable field prohibited due to outstanding loan
     copy p;
 }
 
diff --git a/src/test/compile-fail/borrowck-assign-to-constants.rs b/src/test/compile-fail/borrowck-assign-to-constants.rs
index 59ced0275c0..44ca3b043db 100644
--- a/src/test/compile-fail/borrowck-assign-to-constants.rs
+++ b/src/test/compile-fail/borrowck-assign-to-constants.rs
@@ -2,6 +2,6 @@ const foo: int = 5;
 
 fn main() {
     // assigning to various global constants
-    none = some(3); //! ERROR assigning to static item
-    foo = 6; //! ERROR assigning to static item
+    none = some(3); //~ ERROR assigning to static item
+    foo = 6; //~ ERROR assigning to static item
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/borrowck-assign-to-enum.rs b/src/test/compile-fail/borrowck-assign-to-enum.rs
index 927bcfdc85e..d7770a30d75 100644
--- a/src/test/compile-fail/borrowck-assign-to-enum.rs
+++ b/src/test/compile-fail/borrowck-assign-to-enum.rs
@@ -2,5 +2,5 @@ enum foo = int;
 
 fn main() {
     let x = foo(3);
-    *x = 4; //! ERROR assigning to enum content
+    *x = 4; //~ ERROR assigning to enum content
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/borrowck-assign-to-subfield.rs b/src/test/compile-fail/borrowck-assign-to-subfield.rs
index 275d8ed7e70..8a14efc09a6 100644
--- a/src/test/compile-fail/borrowck-assign-to-subfield.rs
+++ b/src/test/compile-fail/borrowck-assign-to-subfield.rs
@@ -14,7 +14,7 @@ fn main() {
 
     // in these cases we pass through a box, so the mut
     // of the box is dominant
-    p.x.a = 2;     //! ERROR assigning to immutable field
-    p.y.a = 2;     //! ERROR assigning to const field
+    p.x.a = 2;     //~ ERROR assigning to immutable field
+    p.y.a = 2;     //~ ERROR assigning to const field
     p.z.a = 2;
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/borrowck-binding-mutbl.rs b/src/test/compile-fail/borrowck-binding-mutbl.rs
index ae5880adb58..8a188fe9239 100644
--- a/src/test/compile-fail/borrowck-binding-mutbl.rs
+++ b/src/test/compile-fail/borrowck-binding-mutbl.rs
@@ -6,8 +6,8 @@ fn main() {
 
     alt x {
       {f: v} => {
-        impure(v); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-        //!^ NOTE impure due to access to impure function
+        impure(v); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+        //~^ NOTE impure due to access to impure function
       }
     }
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/borrowck-issue-2657-1.rs b/src/test/compile-fail/borrowck-issue-2657-1.rs
index 00c579dc45e..520ae1bf646 100644
--- a/src/test/compile-fail/borrowck-issue-2657-1.rs
+++ b/src/test/compile-fail/borrowck-issue-2657-1.rs
@@ -1,8 +1,8 @@
 fn main() {
 let x = some(~1);
-alt x { //! NOTE loan of immutable local variable granted here
+alt x { //~ NOTE loan of immutable local variable granted here
   some(y) {
-    let _a <- x; //! ERROR moving out of immutable local variable prohibited due to outstanding loan
+    let _a <- x; //~ ERROR moving out of immutable local variable prohibited due to outstanding loan
   }
   _ {}
 }
diff --git a/src/test/compile-fail/borrowck-issue-2657-2.rs b/src/test/compile-fail/borrowck-issue-2657-2.rs
index d8d068ee8fd..07e4ca8229b 100644
--- a/src/test/compile-fail/borrowck-issue-2657-2.rs
+++ b/src/test/compile-fail/borrowck-issue-2657-2.rs
@@ -2,7 +2,7 @@ fn main() {
 let x = some(~1);
 alt x {
   some(y) {
-    let _b <- y; //! ERROR moving out of pattern binding
+    let _b <- y; //~ ERROR moving out of pattern binding
   }
   _ {}
 }
diff --git a/src/test/compile-fail/borrowck-lend-args.rs b/src/test/compile-fail/borrowck-lend-args.rs
index ef8914b134f..4fbc51183ce 100644
--- a/src/test/compile-fail/borrowck-lend-args.rs
+++ b/src/test/compile-fail/borrowck-lend-args.rs
@@ -5,8 +5,8 @@ fn borrow_from_arg_imm_ref(&&v: ~int) {
 }
 
 fn borrow_from_arg_mut_ref(&v: ~int) {
-    borrow(v); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn borrow_from_arg_move(-v: ~int) {
diff --git a/src/test/compile-fail/borrowck-lend-flow.rs b/src/test/compile-fail/borrowck-lend-flow.rs
index 04bb2dcafab..e867d525e1a 100644
--- a/src/test/compile-fail/borrowck-lend-flow.rs
+++ b/src/test/compile-fail/borrowck-lend-flow.rs
@@ -19,23 +19,23 @@ fn post_aliased_const() {
 fn post_aliased_mut() {
     // SPURIOUS--flow
     let mut v = ~3;
-    borrow(v); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
-    let _w = &mut v; //! NOTE prior loan as mutable granted here
+    borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
+    let _w = &mut v; //~ NOTE prior loan as mutable granted here
 }
 
 fn post_aliased_scope(cond: bool) {
     // NDM--scope of &
     let mut v = ~3;
-    borrow(v);  //! ERROR loan of mutable local variable as immutable conflicts with prior loan
-    if cond { inc(&mut v); } //! NOTE prior loan as mutable granted here
+    borrow(v);  //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
+    if cond { inc(&mut v); } //~ NOTE prior loan as mutable granted here
 }
 
 fn loop_aliased_mut() {
     let mut v = ~3, w = ~4;
     let mut _x = &mut w;
     loop {
-        borrow(v); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
-        _x = &mut v; //! NOTE prior loan as mutable granted here
+        borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
+        _x = &mut v; //~ NOTE prior loan as mutable granted here
     }
 }
 
@@ -43,8 +43,8 @@ fn while_aliased_mut(cond: bool) {
     let mut v = ~3, w = ~4;
     let mut _x = &mut w;
     while cond {
-        borrow(v); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
-        _x = &mut v; //! NOTE prior loan as mutable granted here
+        borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
+        _x = &mut v; //~ NOTE prior loan as mutable granted here
     }
 }
 
@@ -52,9 +52,9 @@ fn while_aliased_mut_cond(cond: bool, cond2: bool) {
     let mut v = ~3, w = ~4;
     let mut _x = &mut w;
     while cond {
-        borrow(v); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
+        borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
         if cond2 {
-            _x = &mut v; //! NOTE prior loan as mutable granted here
+            _x = &mut v; //~ NOTE prior loan as mutable granted here
         }
     }
 }
@@ -63,8 +63,8 @@ fn loop_in_block() {
     let mut v = ~3, w = ~4;
     let mut _x = &mut w;
     for uint::range(0u, 10u) |_i| {
-        borrow(v); //! ERROR loan of mutable variable declared in an outer block as immutable conflicts with prior loan
-        _x = &mut v; //! NOTE prior loan as mutable granted here
+        borrow(v); //~ ERROR loan of mutable variable declared in an outer block as immutable conflicts with prior loan
+        _x = &mut v; //~ NOTE prior loan as mutable granted here
     }
 }
 
@@ -77,8 +77,8 @@ fn at_most_once_block() {
     let mut v = ~3, w = ~4;
     let mut _x = &mut w;
     do at_most_once || {
-        borrow(v); //! ERROR loan of mutable variable declared in an outer block as immutable conflicts with prior loan
-        _x = &mut v; //! NOTE prior loan as mutable granted here
+        borrow(v); //~ ERROR loan of mutable variable declared in an outer block as immutable conflicts with prior loan
+        _x = &mut v; //~ NOTE prior loan as mutable granted here
     }
 }
 
diff --git a/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs b/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
index 9a6ea30553f..0f5d61b510c 100644
--- a/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
+++ b/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
@@ -4,16 +4,16 @@ fn borrow(v: &int, f: fn(x: &int)) {
 
 fn box_imm() {
     let mut v = ~3;
-    let _w = &mut v; //! NOTE loan of mutable local variable granted here
+    let _w = &mut v; //~ NOTE loan of mutable local variable granted here
     do task::spawn |move v| {
-        //!^ ERROR moving out of mutable local variable prohibited due to outstanding loan
+        //~^ ERROR moving out of mutable local variable prohibited due to outstanding loan
         #debug["v=%d", *v];
     }
 
     let mut v = ~3;
-    let _w = &mut v; //! NOTE loan of mutable local variable granted here
+    let _w = &mut v; //~ NOTE loan of mutable local variable granted here
     task::spawn(fn~(move v) {
-        //!^ ERROR moving out of mutable local variable prohibited due to outstanding loan
+        //~^ ERROR moving out of mutable local variable prohibited due to outstanding loan
         #debug["v=%d", *v];
     });
 }
diff --git a/src/test/compile-fail/borrowck-loan-blocks-move.rs b/src/test/compile-fail/borrowck-loan-blocks-move.rs
index b5044754ac0..5cecbf9284f 100644
--- a/src/test/compile-fail/borrowck-loan-blocks-move.rs
+++ b/src/test/compile-fail/borrowck-loan-blocks-move.rs
@@ -3,8 +3,8 @@ fn take(-_v: ~int) {
 
 fn box_imm() {
     let v = ~3;
-    let _w = &v; //! NOTE loan of immutable local variable granted here
-    take(v); //! ERROR moving out of immutable local variable prohibited due to outstanding loan
+    let _w = &v; //~ NOTE loan of immutable local variable granted here
+    take(v); //~ ERROR moving out of immutable local variable prohibited due to outstanding loan
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs b/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs
index 27359cfef90..ad9eb9c4874 100644
--- a/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs
+++ b/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs
@@ -4,8 +4,8 @@ fn borrow(v: &int, f: fn(x: &int)) {
 
 fn box_imm() {
     let mut v = ~3;
-    do borrow(v) |w| { //! NOTE loan of mutable local variable granted here
-        v = ~4; //! ERROR assigning to mutable variable declared in an outer block prohibited due to outstanding loan
+    do borrow(v) |w| { //~ NOTE loan of mutable local variable granted here
+        v = ~4; //~ ERROR assigning to mutable variable declared in an outer block prohibited due to outstanding loan
         assert *v == 3;
         assert *w == 4;
     }
diff --git a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs
index a268b37ca72..f75b256079e 100644
--- a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs
+++ b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs
@@ -18,11 +18,11 @@ fn b() {
 
     // Here I create an outstanding loan and check that we get conflicts:
 
-    &mut p; //! NOTE prior loan as mutable granted here
-    //!^ NOTE prior loan as mutable granted here
+    &mut p; //~ NOTE prior loan as mutable granted here
+    //~^ NOTE prior loan as mutable granted here
 
-    p + 3; //! ERROR loan of mutable local variable as immutable conflicts with prior loan
-    p * 3; //! ERROR loan of mutable local variable as immutable conflicts with prior loan
+    p + 3; //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
+    p * 3; //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
 }
 
 fn c() {
@@ -35,8 +35,8 @@ fn c() {
 
 
     // ...but not impure fns
-    *q * 3; //! ERROR illegal borrow unless pure: creating immutable alias to aliasable, mutable memory
-    //!^ NOTE impure due to access to impure function
+    *q * 3; //~ ERROR illegal borrow unless pure: creating immutable alias to aliasable, mutable memory
+    //~^ NOTE impure due to access to impure function
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-loan-rcvr.rs b/src/test/compile-fail/borrowck-loan-rcvr.rs
index 638692ee7c4..df93fd44c6e 100644
--- a/src/test/compile-fail/borrowck-loan-rcvr.rs
+++ b/src/test/compile-fail/borrowck-loan-rcvr.rs
@@ -19,8 +19,8 @@ fn a() {
     p.impurem();
 
     // But in this case we do not honor the loan:
-    do p.blockm || { //! NOTE loan of mutable local variable granted here
-        p.x = 10; //! ERROR assigning to mutable field prohibited due to outstanding loan
+    do p.blockm || { //~ NOTE loan of mutable local variable granted here
+        p.x = 10; //~ ERROR assigning to mutable field prohibited due to outstanding loan
     }
 }
 
@@ -29,11 +29,11 @@ fn b() {
 
     // Here I create an outstanding loan and check that we get conflicts:
 
-    &mut p; //! NOTE prior loan as mutable granted here
-    //!^ NOTE prior loan as mutable granted here
+    &mut p; //~ NOTE prior loan as mutable granted here
+    //~^ NOTE prior loan as mutable granted here
 
-    p.purem(); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
-    p.impurem(); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
+    p.purem(); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
+    p.impurem(); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
 }
 
 fn c() {
@@ -45,8 +45,8 @@ fn c() {
     (*q).purem();
 
     // ...but not impure fns
-    (*q).impurem(); //! ERROR illegal borrow unless pure: creating immutable alias to aliasable, mutable memory
-    //!^ NOTE impure due to access to impure function
+    (*q).impurem(); //~ ERROR illegal borrow unless pure: creating immutable alias to aliasable, mutable memory
+    //~^ NOTE impure due to access to impure function
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-loan-vec-content.rs b/src/test/compile-fail/borrowck-loan-vec-content.rs
index 37f7b2161dc..07f197afa74 100644
--- a/src/test/compile-fail/borrowck-loan-vec-content.rs
+++ b/src/test/compile-fail/borrowck-loan-vec-content.rs
@@ -14,8 +14,8 @@ fn has_mut_vec_and_does_not_try_to_change_it() {
 
 fn has_mut_vec_but_tries_to_change_it() {
     let v = ~[mut 1, 2, 3];
-    do takes_imm_elt(&v[0]) || { //! NOTE loan of mutable vec content granted here
-        v[1] = 4; //! ERROR assigning to mutable vec content prohibited due to outstanding loan
+    do takes_imm_elt(&v[0]) || { //~ NOTE loan of mutable vec content granted here
+        v[1] = 4; //~ ERROR assigning to mutable vec content prohibited due to outstanding loan
     }
 }
 
diff --git a/src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs b/src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs
index 03fbb6b975c..fc8ff1ffe07 100644
--- a/src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs
+++ b/src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs
@@ -1,5 +1,5 @@
 fn foo(x: *~int) -> ~int {
-    let y <- *x; //! ERROR dereference of unsafe pointer requires unsafe function or block
+    let y <- *x; //~ ERROR dereference of unsafe pointer requires unsafe function or block
     ret y;
 }
 
diff --git a/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs b/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs
index d9436d90f9c..d3e6bb68a48 100644
--- a/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs
+++ b/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs
@@ -1,6 +1,6 @@
 fn main() {
     let x: int = 3;
-    let y: &mut int = &mut x; //! ERROR taking mut reference to immutable local variable
+    let y: &mut int = &mut x; //~ ERROR taking mut reference to immutable local variable
     *y = 5;
     log (debug, *y);
 }
diff --git a/src/test/compile-fail/borrowck-mut-vec-as-imm-slice-bad.rs b/src/test/compile-fail/borrowck-mut-vec-as-imm-slice-bad.rs
index a2d27a6c77d..ad9877c2674 100644
--- a/src/test/compile-fail/borrowck-mut-vec-as-imm-slice-bad.rs
+++ b/src/test/compile-fail/borrowck-mut-vec-as-imm-slice-bad.rs
@@ -5,8 +5,8 @@ fn want_slice(v: &[int]) -> int {
 }
 
 fn has_mut_vec(+v: @~[mut int]) -> int {
-    want_slice(*v) //! ERROR illegal borrow unless pure: creating immutable alias to aliasable, mutable memory
-        //!^ NOTE impure due to access to impure function
+    want_slice(*v) //~ ERROR illegal borrow unless pure: creating immutable alias to aliasable, mutable memory
+        //~^ NOTE impure due to access to impure function
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs b/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs
index a546ef867e1..a4aeb976e95 100644
--- a/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs
+++ b/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs
@@ -5,9 +5,9 @@ enum cycle {
 fn main() {
     let x = ~node({mut a: ~empty});
     // Create a cycle!
-    alt check *x { //! NOTE loan of immutable local variable granted here
+    alt check *x { //~ NOTE loan of immutable local variable granted here
       node(y) {
-        y.a <- x; //! ERROR moving out of immutable local variable prohibited due to outstanding loan
+        y.a <- x; //~ ERROR moving out of immutable local variable prohibited due to outstanding loan
       }
     };
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/borrowck-pat-enum-in-box.rs b/src/test/compile-fail/borrowck-pat-enum-in-box.rs
index 29de06a1104..86ff452c356 100644
--- a/src/test/compile-fail/borrowck-pat-enum-in-box.rs
+++ b/src/test/compile-fail/borrowck-pat-enum-in-box.rs
@@ -27,8 +27,8 @@ fn process(_i: int) {}
 
 fn match_const_box_and_do_bad_things(v: &const @const option<int>) {
     alt *v {
-      @some(i) { //! ERROR illegal borrow unless pure: enum variant in aliasable, mutable location
-        process(i) //! NOTE impure due to access to impure function
+      @some(i) { //~ ERROR illegal borrow unless pure: enum variant in aliasable, mutable location
+        process(i) //~ NOTE impure due to access to impure function
       }
       @none {}
     }
diff --git a/src/test/compile-fail/borrowck-pat-enum.rs b/src/test/compile-fail/borrowck-pat-enum.rs
index 8e87e5d7420..091467283c5 100644
--- a/src/test/compile-fail/borrowck-pat-enum.rs
+++ b/src/test/compile-fail/borrowck-pat-enum.rs
@@ -33,8 +33,8 @@ fn match_const_reg_unused(v: &const option<int>) {
 
 fn match_const_reg_impure(v: &const option<int>) {
     alt *v {
-      some(i) {impure(i)} //! ERROR illegal borrow unless pure: enum variant in aliasable, mutable location
-      //!^ NOTE impure due to access to impure function
+      some(i) {impure(i)} //~ ERROR illegal borrow unless pure: enum variant in aliasable, mutable location
+      //~^ NOTE impure due to access to impure function
       none {}
     }
 }
diff --git a/src/test/compile-fail/borrowck-pat-reassign-binding.rs b/src/test/compile-fail/borrowck-pat-reassign-binding.rs
index cf1199557bd..7ce3ff8f028 100644
--- a/src/test/compile-fail/borrowck-pat-reassign-binding.rs
+++ b/src/test/compile-fail/borrowck-pat-reassign-binding.rs
@@ -2,11 +2,11 @@
 
 fn main() {
     let mut x: option<int> = none;
-    alt x { //! NOTE loan of mutable local variable granted here
+    alt x { //~ NOTE loan of mutable local variable granted here
       none {}
       some(i) {
         // Not ok: i is an outstanding ptr into x.
-        x = some(i+1); //! ERROR assigning to mutable local variable prohibited due to outstanding loan
+        x = some(i+1); //~ ERROR assigning to mutable local variable prohibited due to outstanding loan
       }
     }
     copy x; // just to prevent liveness warnings
diff --git a/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs b/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs
index db8129d005a..1e1de3e39cf 100644
--- a/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs
+++ b/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs
@@ -2,14 +2,14 @@
 
 fn main() {
     let mut x = none;
-    alt x { //! NOTE loan of mutable local variable granted here
+    alt x { //~ NOTE loan of mutable local variable granted here
       none {
         // It is ok to reassign x here, because there is in
         // fact no outstanding loan of x!
         x = some(0);
       }
       some(i) {
-        x = some(1); //! ERROR assigning to mutable local variable prohibited due to outstanding loan
+        x = some(1); //~ ERROR assigning to mutable local variable prohibited due to outstanding loan
       }
     }
     copy x; // just to prevent liveness warnings
diff --git a/src/test/compile-fail/borrowck-pure-scope-in-call.rs b/src/test/compile-fail/borrowck-pure-scope-in-call.rs
index 4469dca3620..71a3988b2ee 100644
--- a/src/test/compile-fail/borrowck-pure-scope-in-call.rs
+++ b/src/test/compile-fail/borrowck-pure-scope-in-call.rs
@@ -4,8 +4,8 @@ fn test1(x: @mut ~int) {
     // Here, evaluating the second argument actually invalidates the
     // first borrow, even though it occurs outside of the scope of the
     // borrow!
-    pure_borrow(*x, *x = ~5);  //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to assigning to dereference of mutable @ pointer
+    pure_borrow(*x, *x = ~5);  //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to assigning to dereference of mutable @ pointer
 }
 
 fn test2() {
@@ -13,8 +13,8 @@ fn test2() {
 
     // Same, but for loanable data:
 
-    pure_borrow(x, x = ~5);  //! ERROR assigning to mutable local variable prohibited due to outstanding loan
-    //!^ NOTE loan of mutable local variable granted here
+    pure_borrow(x, x = ~5);  //~ ERROR assigning to mutable local variable prohibited due to outstanding loan
+    //~^ NOTE loan of mutable local variable granted here
 
     copy x;
 }
diff --git a/src/test/compile-fail/borrowck-unchecked-with-borrow.rs b/src/test/compile-fail/borrowck-unchecked-with-borrow.rs
index a5f8b947bf2..c0a2466199f 100644
--- a/src/test/compile-fail/borrowck-unchecked-with-borrow.rs
+++ b/src/test/compile-fail/borrowck-unchecked-with-borrow.rs
@@ -4,9 +4,9 @@ fn impure(_i: int) {}
 fn foo(v: &const option<int>) {
     alt *v {
       some(i) {
-        //!^ ERROR illegal borrow unless pure: enum variant in aliasable, mutable location
+        //~^ ERROR illegal borrow unless pure: enum variant in aliasable, mutable location
         unchecked {
-            impure(i); //! NOTE impure due to access to impure function
+            impure(i); //~ NOTE impure due to access to impure function
         }
       }
       none {
diff --git a/src/test/compile-fail/borrowck-uniq-via-box.rs b/src/test/compile-fail/borrowck-uniq-via-box.rs
index cf0f5439afc..6fcdf369aba 100644
--- a/src/test/compile-fail/borrowck-uniq-via-box.rs
+++ b/src/test/compile-fail/borrowck-uniq-via-box.rs
@@ -1,23 +1,23 @@
 fn borrow(_v: &int) {}
 
 fn box_mut(v: @mut ~int) {
-    borrow(*v); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(*v); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_rec_mut(v: @{mut f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_mut_rec(v: @mut {f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_mut_recs(v: @mut {f: {g: {h: ~int}}}) {
-    borrow(v.f.g.h); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f.g.h); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_imm(v: @~int) {
@@ -33,28 +33,28 @@ fn box_imm_recs(v: @{f: {g: {h: ~int}}}) {
 }
 
 fn box_const(v: @const ~int) {
-    borrow(*v); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(*v); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_rec_const(v: @{const f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_recs_const(v: @{f: {g: {const h: ~int}}}) {
-    borrow(v.f.g.h); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f.g.h); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_const_rec(v: @const {f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_const_recs(v: @const {f: {g: {h: ~int}}}) {
-    borrow(v.f.g.h); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f.g.h); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-uniq-via-lend.rs b/src/test/compile-fail/borrowck-uniq-via-lend.rs
index 78bba1576e8..fcc8d2c8775 100644
--- a/src/test/compile-fail/borrowck-uniq-via-lend.rs
+++ b/src/test/compile-fail/borrowck-uniq-via-lend.rs
@@ -29,8 +29,8 @@ fn aliased_const() {
 
 fn aliased_mut() {
     let mut v = ~3;
-    let _w = &mut v; //! NOTE prior loan as mutable granted here
-    borrow(v); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
+    let _w = &mut v; //~ NOTE prior loan as mutable granted here
+    borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
 }
 
 fn aliased_other() {
@@ -42,8 +42,8 @@ fn aliased_other() {
 fn aliased_other_reassign() {
     let mut v = ~3, w = ~4;
     let mut _x = &mut w;
-    _x = &mut v; //! NOTE prior loan as mutable granted here
-    borrow(v); //! ERROR loan of mutable local variable as immutable conflicts with prior loan
+    _x = &mut v; //~ NOTE prior loan as mutable granted here
+    borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan
 }
 
 fn main() {
diff --git a/src/test/compile-fail/borrowck-uniq-via-ref.rs b/src/test/compile-fail/borrowck-uniq-via-ref.rs
index 156106b880c..fe825165183 100644
--- a/src/test/compile-fail/borrowck-uniq-via-ref.rs
+++ b/src/test/compile-fail/borrowck-uniq-via-ref.rs
@@ -1,23 +1,23 @@
 fn borrow(_v: &int) {}
 
 fn box_mut(v: &mut ~int) {
-    borrow(*v); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(*v); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_rec_mut(v: &{mut f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_mut_rec(v: &mut {f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_mut_recs(v: &mut {f: {g: {h: ~int}}}) {
-    borrow(v.f.g.h); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f.g.h); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_imm(v: &~int) {
@@ -33,28 +33,28 @@ fn box_imm_recs(v: &{f: {g: {h: ~int}}}) {
 }
 
 fn box_const(v: &const ~int) {
-    borrow(*v); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(*v); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_rec_const(v: &{const f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_recs_const(v: &{f: {g: {const h: ~int}}}) {
-    borrow(v.f.g.h); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f.g.h); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_const_rec(v: &const {f: ~int}) {
-    borrow(v.f); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn box_const_recs(v: &const {f: {g: {h: ~int}}}) {
-    borrow(v.f.g.h); //! ERROR illegal borrow unless pure: unique value in aliasable, mutable location
-    //!^ NOTE impure due to access to impure function
+    borrow(v.f.g.h); //~ ERROR illegal borrow unless pure: unique value in aliasable, mutable location
+    //~^ NOTE impure due to access to impure function
 }
 
 fn main() {
diff --git a/src/test/compile-fail/cap-clause-move-upvar.rs b/src/test/compile-fail/cap-clause-move-upvar.rs
index 3920298c355..c070c80edf9 100644
--- a/src/test/compile-fail/cap-clause-move-upvar.rs
+++ b/src/test/compile-fail/cap-clause-move-upvar.rs
@@ -1,7 +1,7 @@
 fn main() {
     let x = 5;
     let _y = fn~(move x) -> int {
-        let _z = fn~(move x) -> int { x }; //! ERROR moving out of variable declared in an outer block
+        let _z = fn~(move x) -> int { x }; //~ ERROR moving out of variable declared in an outer block
         22
     };
 }
diff --git a/src/test/compile-fail/cap-clause-with-stack-closure.rs b/src/test/compile-fail/cap-clause-with-stack-closure.rs
index 24abb7dae59..fbfbfb198cc 100644
--- a/src/test/compile-fail/cap-clause-with-stack-closure.rs
+++ b/src/test/compile-fail/cap-clause-with-stack-closure.rs
@@ -6,9 +6,9 @@ fn main() {
     foo(|| bar(x) );
 
     let x = @3;
-    foo(|copy x| bar(x) ); //! ERROR cannot capture values explicitly with a block closure
+    foo(|copy x| bar(x) ); //~ ERROR cannot capture values explicitly with a block closure
 
     let x = @3;
-    foo(|move x| bar(x) ); //! ERROR cannot capture values explicitly with a block closure
+    foo(|move x| bar(x) ); //~ ERROR cannot capture values explicitly with a block closure
 }
 
diff --git a/src/test/compile-fail/class-implements-int.rs b/src/test/compile-fail/class-implements-int.rs
index 1768b8c4bf0..469fee7863b 100644
--- a/src/test/compile-fail/class-implements-int.rs
+++ b/src/test/compile-fail/class-implements-int.rs
@@ -1,4 +1,4 @@
-class cat : int { //! ERROR can only implement interface types
+class cat : int { //~ ERROR can only implement interface types
   let meows: uint;
   new(in_x : uint) { self.meows = in_x; }
 }
diff --git a/src/test/compile-fail/class-missing-self.rs b/src/test/compile-fail/class-missing-self.rs
index 280ba47031e..5e27afaf164 100644
--- a/src/test/compile-fail/class-missing-self.rs
+++ b/src/test/compile-fail/class-missing-self.rs
@@ -4,8 +4,8 @@ class cat {
     fn sleep() { loop{} }
     fn meow() {
       #error("Meow");
-      meows += 1u; //! ERROR unresolved name
-      sleep();     //! ERROR unresolved name
+      meows += 1u; //~ ERROR unresolved name
+      sleep();     //~ ERROR unresolved name
     }
   }
 
diff --git a/src/test/compile-fail/do-lambda-requires-braces.rs b/src/test/compile-fail/do-lambda-requires-braces.rs
index 25f10e5e8b9..c0fc3766006 100644
--- a/src/test/compile-fail/do-lambda-requires-braces.rs
+++ b/src/test/compile-fail/do-lambda-requires-braces.rs
@@ -1,5 +1,5 @@
 fn main() {
     do something
-        |x| do somethingelse //! ERROR: expecting '{' but found 'do'
+        |x| do somethingelse //~ ERROR: expecting '{' but found 'do'
         |y| say(x, y)
 }
diff --git a/src/test/compile-fail/do1.rs b/src/test/compile-fail/do1.rs
index 49ffcd86a5f..a6a5bdd041f 100644
--- a/src/test/compile-fail/do1.rs
+++ b/src/test/compile-fail/do1.rs
@@ -1,3 +1,3 @@
 fn main() {
-    let x = do y; //! ERROR: expecting '{' but found
+    let x = do y; //~ ERROR: expecting '{' but found
 }
diff --git a/src/test/compile-fail/do2.rs b/src/test/compile-fail/do2.rs
index 8bea4fcf934..919d186c40d 100644
--- a/src/test/compile-fail/do2.rs
+++ b/src/test/compile-fail/do2.rs
@@ -1,5 +1,5 @@
 fn f(f: fn@(int) -> bool) -> bool { f(10i) }
 
 fn main() {
-    assert do f() |i| { i == 10i } == 10i; //! ERROR: expected `bool` but found `int`
+    assert do f() |i| { i == 10i } == 10i; //~ ERROR: expected `bool` but found `int`
 }
diff --git a/src/test/compile-fail/empty-vec-trailing-comma.rs b/src/test/compile-fail/empty-vec-trailing-comma.rs
index 7badfef4c97..2abd554ed6c 100644
--- a/src/test/compile-fail/empty-vec-trailing-comma.rs
+++ b/src/test/compile-fail/empty-vec-trailing-comma.rs
@@ -1,3 +1,3 @@
 fn main() {
-    let v = ~[,]; //! ERROR unexpected token: ','
+    let v = ~[,]; //~ ERROR unexpected token: ','
 }
diff --git a/src/test/compile-fail/enum-in-scope.rs b/src/test/compile-fail/enum-in-scope.rs
index 38e95c21e8f..e1d86936d02 100644
--- a/src/test/compile-fail/enum-in-scope.rs
+++ b/src/test/compile-fail/enum-in-scope.rs
@@ -1,5 +1,5 @@
 enum hello = int;
 
 fn main() {
-    let hello = 0; //!ERROR declaration of `hello` shadows an enum that's in
+    let hello = 0; //~ERROR declaration of `hello` shadows an enum that's in
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/estr-subtyping.rs b/src/test/compile-fail/estr-subtyping.rs
index 69b6d45baf7..e5f963733dc 100644
--- a/src/test/compile-fail/estr-subtyping.rs
+++ b/src/test/compile-fail/estr-subtyping.rs
@@ -4,26 +4,26 @@ fn wants_three(x: str/3) { }
 
 fn has_box(x: str/@) {
    wants_box(x);
-   wants_uniq(x); //! ERROR str storage differs: expected ~ but found @
-   wants_three(x); //! ERROR str storage differs: expected 3 but found @
+   wants_uniq(x); //~ ERROR str storage differs: expected ~ but found @
+   wants_three(x); //~ ERROR str storage differs: expected 3 but found @
 }
 
 fn has_uniq(x: str/~) {
-   wants_box(x); //! ERROR str storage differs: expected @ but found ~
+   wants_box(x); //~ ERROR str storage differs: expected @ but found ~
    wants_uniq(x);
-   wants_three(x); //! ERROR str storage differs: expected 3 but found ~
+   wants_three(x); //~ ERROR str storage differs: expected 3 but found ~
 }
 
 fn has_three(x: str/3) {
-   wants_box(x); //! ERROR str storage differs: expected @ but found 3
-   wants_uniq(x); //! ERROR str storage differs: expected ~ but found 3
+   wants_box(x); //~ ERROR str storage differs: expected @ but found 3
+   wants_uniq(x); //~ ERROR str storage differs: expected ~ but found 3
    wants_three(x);
 }
 
 fn has_four(x: str/4) {
-   wants_box(x); //! ERROR str storage differs: expected @ but found 4
-   wants_uniq(x); //! ERROR str storage differs: expected ~ but found 4
-   wants_three(x); //! ERROR str storage differs: expected 3 but found 4
+   wants_box(x); //~ ERROR str storage differs: expected @ but found 4
+   wants_uniq(x); //~ ERROR str storage differs: expected ~ but found 4
+   wants_three(x); //~ ERROR str storage differs: expected 3 but found 4
 }
 
 fn main() {
diff --git a/src/test/compile-fail/evec-subtyping.rs b/src/test/compile-fail/evec-subtyping.rs
index f3d7f20048b..2eabfa0c48c 100644
--- a/src/test/compile-fail/evec-subtyping.rs
+++ b/src/test/compile-fail/evec-subtyping.rs
@@ -4,26 +4,26 @@ fn wants_three(x: [uint]/3) { }
 
 fn has_box(x: @[uint]) {
    wants_box(x);
-   wants_uniq(x); //! ERROR [] storage differs: expected ~ but found @
-   wants_three(x); //! ERROR [] storage differs: expected 3 but found @
+   wants_uniq(x); //~ ERROR [] storage differs: expected ~ but found @
+   wants_three(x); //~ ERROR [] storage differs: expected 3 but found @
 }
 
 fn has_uniq(x: ~[uint]) {
-   wants_box(x); //! ERROR [] storage differs: expected @ but found ~
+   wants_box(x); //~ ERROR [] storage differs: expected @ but found ~
    wants_uniq(x);
-   wants_three(x); //! ERROR [] storage differs: expected 3 but found ~
+   wants_three(x); //~ ERROR [] storage differs: expected 3 but found ~
 }
 
 fn has_three(x: [uint]/3) {
-   wants_box(x); //! ERROR [] storage differs: expected @ but found 3
-   wants_uniq(x); //! ERROR [] storage differs: expected ~ but found 3
+   wants_box(x); //~ ERROR [] storage differs: expected @ but found 3
+   wants_uniq(x); //~ ERROR [] storage differs: expected ~ but found 3
    wants_three(x);
 }
 
 fn has_four(x: [uint]/4) {
-   wants_box(x); //! ERROR [] storage differs: expected @ but found 4
-   wants_uniq(x); //! ERROR [] storage differs: expected ~ but found 4
-   wants_three(x); //! ERROR [] storage differs: expected 3 but found 4
+   wants_box(x); //~ ERROR [] storage differs: expected @ but found 4
+   wants_uniq(x); //~ ERROR [] storage differs: expected ~ but found 4
+   wants_three(x); //~ ERROR [] storage differs: expected 3 but found 4
 }
 
 fn main() {
diff --git a/src/test/compile-fail/fn-compare-mismatch.rs b/src/test/compile-fail/fn-compare-mismatch.rs
index 3dd0654f2fb..bc78b475843 100644
--- a/src/test/compile-fail/fn-compare-mismatch.rs
+++ b/src/test/compile-fail/fn-compare-mismatch.rs
@@ -2,5 +2,5 @@ fn main() {
     fn f() { }
     fn g(i: int) { }
     let x = f == g;
-    //!^ ERROR expected `extern fn()` but found `extern fn(int)`
+    //~^ ERROR expected `extern fn()` but found `extern fn(int)`
 }
diff --git a/src/test/compile-fail/fn-variance-1.rs b/src/test/compile-fail/fn-variance-1.rs
index cb2dbde3d48..01abd73bb47 100644
--- a/src/test/compile-fail/fn-variance-1.rs
+++ b/src/test/compile-fail/fn-variance-1.rs
@@ -7,11 +7,11 @@ fn apply<T>(t: T, f: fn(T)) {
 }
 
 fn main() {
-    apply(@3, takes_mut); //! ERROR (values differ in mutability)
+    apply(@3, takes_mut); //~ ERROR (values differ in mutability)
     apply(@3, takes_const);
     apply(@3, takes_imm);
 
     apply(@mut 3, takes_mut);
     apply(@mut 3, takes_const);
-    apply(@mut 3, takes_imm); //! ERROR (values differ in mutability)
+    apply(@mut 3, takes_imm); //~ ERROR (values differ in mutability)
 }
diff --git a/src/test/compile-fail/fn-variance-2.rs b/src/test/compile-fail/fn-variance-2.rs
index 9d4254a708e..6d9bdabae86 100644
--- a/src/test/compile-fail/fn-variance-2.rs
+++ b/src/test/compile-fail/fn-variance-2.rs
@@ -18,5 +18,5 @@ fn main() {
     let g: @const int = r();
 
     // Bad.
-    let h: @int = r(); //! ERROR (values differ in mutability)
+    let h: @int = r(); //~ ERROR (values differ in mutability)
 }
diff --git a/src/test/compile-fail/fn-variance-3.rs b/src/test/compile-fail/fn-variance-3.rs
index d5989822f94..f9fe3d31fcc 100644
--- a/src/test/compile-fail/fn-variance-3.rs
+++ b/src/test/compile-fail/fn-variance-3.rs
@@ -20,5 +20,5 @@ fn main() {
     // mutability check will fail, because the
     // type of r has been inferred to be
     // fn(@const int) -> @const int
-    *r(@mut 3) = 4; //! ERROR assigning to dereference of const @ pointer
+    *r(@mut 3) = 4; //~ ERROR assigning to dereference of const @ pointer
 }
diff --git a/src/test/compile-fail/fully-qualified-type-name1.rs b/src/test/compile-fail/fully-qualified-type-name1.rs
index db574f6f2bc..cb56cbacb48 100644
--- a/src/test/compile-fail/fully-qualified-type-name1.rs
+++ b/src/test/compile-fail/fully-qualified-type-name1.rs
@@ -3,5 +3,5 @@
 fn main() {
     let x: option<uint>;
     x = 5;
-    //!^ ERROR mismatched types: expected `core::option::option<uint>`
+    //~^ ERROR mismatched types: expected `core::option::option<uint>`
 }
diff --git a/src/test/compile-fail/fully-qualified-type-name2.rs b/src/test/compile-fail/fully-qualified-type-name2.rs
index a9293da2eff..db6521cbd78 100644
--- a/src/test/compile-fail/fully-qualified-type-name2.rs
+++ b/src/test/compile-fail/fully-qualified-type-name2.rs
@@ -10,7 +10,7 @@ mod y {
 
 fn bar(x: x::foo) -> y::foo {
     ret x;
-    //!^ ERROR mismatched types: expected `y::foo` but found `x::foo`
+    //~^ ERROR mismatched types: expected `y::foo` but found `x::foo`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/fully-qualified-type-name3.rs b/src/test/compile-fail/fully-qualified-type-name3.rs
index 411dc2e9e76..6bd764af179 100644
--- a/src/test/compile-fail/fully-qualified-type-name3.rs
+++ b/src/test/compile-fail/fully-qualified-type-name3.rs
@@ -5,7 +5,7 @@ type T2 = int;
 
 fn bar(x: T1) -> T2 {
     ret x;
-    //!^ ERROR mismatched types: expected `T2` but found `T1`
+    //~^ ERROR mismatched types: expected `T2` but found `T1`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/fully-qualified-type-name4.rs b/src/test/compile-fail/fully-qualified-type-name4.rs
index 73941c45498..73560432032 100644
--- a/src/test/compile-fail/fully-qualified-type-name4.rs
+++ b/src/test/compile-fail/fully-qualified-type-name4.rs
@@ -4,7 +4,7 @@ import core::task::task;
 
 fn bar(x: uint) -> task {
     ret x;
-    //!^ ERROR mismatched types: expected `core::task::task`
+    //~^ ERROR mismatched types: expected `core::task::task`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/iface-cast.rs b/src/test/compile-fail/iface-cast.rs
index 5c859f21229..a82bb0b80d2 100644
--- a/src/test/compile-fail/iface-cast.rs
+++ b/src/test/compile-fail/iface-cast.rs
@@ -2,7 +2,7 @@ iface foo<T> { }
 
 fn bar(x: foo<uint>) -> foo<int> {
     ret (x as foo::<int>);
-    //!^ ERROR mismatched types: expected `foo<int>` but found `foo<uint>`
+    //~^ ERROR mismatched types: expected `foo<int>` but found `foo<uint>`
 }
 
 fn main() {}
diff --git a/src/test/compile-fail/iface-impl-different-num-params.rs b/src/test/compile-fail/iface-impl-different-num-params.rs
index 7eadb1fe98e..094dc7ac062 100644
--- a/src/test/compile-fail/iface-impl-different-num-params.rs
+++ b/src/test/compile-fail/iface-impl-different-num-params.rs
@@ -3,7 +3,7 @@ iface foo {
 }
 impl of foo for int {
     fn bar() -> int {
-        //!^ ERROR method `bar` has 0 parameters but the iface has 1
+        //~^ ERROR method `bar` has 0 parameters but the iface has 1
         self
     }
 }
diff --git a/src/test/compile-fail/iface-test-2.rs b/src/test/compile-fail/iface-test-2.rs
index 96e5979084e..b2ee357ffc5 100644
--- a/src/test/compile-fail/iface-test-2.rs
+++ b/src/test/compile-fail/iface-test-2.rs
@@ -4,8 +4,8 @@ impl of bar for uint { fn dup() -> uint { self } fn blah<X>() {} }
 impl of bar for uint { fn dup() -> uint { self } fn blah<X>() {} }
 
 fn main() {
-    10.dup::<int>(); //! ERROR does not take type parameters
-    10.blah::<int, int>(); //! ERROR incorrect number of type parameters
-    10u.dup(); //! ERROR multiple applicable methods
-    (10 as bar).dup(); //! ERROR contains a self type
+    10.dup::<int>(); //~ ERROR does not take type parameters
+    10.blah::<int, int>(); //~ ERROR incorrect number of type parameters
+    10u.dup(); //~ ERROR multiple applicable methods
+    (10 as bar).dup(); //~ ERROR contains a self type
 }
diff --git a/src/test/compile-fail/iface-test.rs b/src/test/compile-fail/iface-test.rs
index 86c5a478d81..1d45832d6df 100644
--- a/src/test/compile-fail/iface-test.rs
+++ b/src/test/compile-fail/iface-test.rs
@@ -1,9 +1,9 @@
 iface foo { fn foo(); }
 
-impl of foo for uint {} //! ERROR missing method `foo`
+impl of foo for uint {} //~ ERROR missing method `foo`
 
-impl of foo for uint { fn foo() -> int {} } //! ERROR incompatible type
+impl of foo for uint { fn foo() -> int {} } //~ ERROR incompatible type
 
-impl of int for uint { fn foo() {} } //! ERROR can only implement interface
+impl of int for uint { fn foo() {} } //~ ERROR can only implement interface
 
 fn main() {}
diff --git a/src/test/compile-fail/impure-pred.rs b/src/test/compile-fail/impure-pred.rs
index 41990fe167c..aef5080e3ae 100644
--- a/src/test/compile-fail/impure-pred.rs
+++ b/src/test/compile-fail/impure-pred.rs
@@ -3,7 +3,7 @@
 fn g() { }
 
 pure fn f(_q: int) -> bool {
-    g(); //! ERROR access to impure function prohibited in pure context
+    g(); //~ ERROR access to impure function prohibited in pure context
     ret true;
 }
 
diff --git a/src/test/compile-fail/index_message.rs b/src/test/compile-fail/index_message.rs
index 4c8a9f10e66..d138efbe5e2 100644
--- a/src/test/compile-fail/index_message.rs
+++ b/src/test/compile-fail/index_message.rs
@@ -1,4 +1,4 @@
 fn main() {
     let z = ();
-    log(debug, z[0]); //! ERROR cannot index a value of type `()`
+    log(debug, z[0]); //~ ERROR cannot index a value of type `()`
 }
diff --git a/src/test/compile-fail/integer-literal-suffix-inference.rs b/src/test/compile-fail/integer-literal-suffix-inference.rs
index 96c7983c2ba..8efc2650fa7 100644
--- a/src/test/compile-fail/integer-literal-suffix-inference.rs
+++ b/src/test/compile-fail/integer-literal-suffix-inference.rs
@@ -29,62 +29,62 @@ fn main() {
     fn id_u64(n: u64) -> u64 { n }
 
     id_i8(a8); // ok
-    id_i8(a16); //! ERROR mismatched types: expected `i8` but found `i16`
-    id_i8(a32); //! ERROR mismatched types: expected `i8` but found `i32`
-    id_i8(a64); //! ERROR mismatched types: expected `i8` but found `i64`
+    id_i8(a16); //~ ERROR mismatched types: expected `i8` but found `i16`
+    id_i8(a32); //~ ERROR mismatched types: expected `i8` but found `i32`
+    id_i8(a64); //~ ERROR mismatched types: expected `i8` but found `i64`
 
-    id_i16(a8); //! ERROR mismatched types: expected `i16` but found `i8`
+    id_i16(a8); //~ ERROR mismatched types: expected `i16` but found `i8`
     id_i16(a16); // ok
-    id_i16(a32); //! ERROR mismatched types: expected `i16` but found `i32`
-    id_i16(a64); //! ERROR mismatched types: expected `i16` but found `i64`
+    id_i16(a32); //~ ERROR mismatched types: expected `i16` but found `i32`
+    id_i16(a64); //~ ERROR mismatched types: expected `i16` but found `i64`
 
-    id_i32(a8); //! ERROR mismatched types: expected `i32` but found `i8`
-    id_i32(a16); //! ERROR mismatched types: expected `i32` but found `i16`
+    id_i32(a8); //~ ERROR mismatched types: expected `i32` but found `i8`
+    id_i32(a16); //~ ERROR mismatched types: expected `i32` but found `i16`
     id_i32(a32); // ok
-    id_i32(a64); //! ERROR mismatched types: expected `i32` but found `i64`
+    id_i32(a64); //~ ERROR mismatched types: expected `i32` but found `i64`
 
-    id_i64(a8); //! ERROR mismatched types: expected `i64` but found `i8`
-    id_i64(a16); //! ERROR mismatched types: expected `i64` but found `i16`
-    id_i64(a32); //! ERROR mismatched types: expected `i64` but found `i32`
+    id_i64(a8); //~ ERROR mismatched types: expected `i64` but found `i8`
+    id_i64(a16); //~ ERROR mismatched types: expected `i64` but found `i16`
+    id_i64(a32); //~ ERROR mismatched types: expected `i64` but found `i32`
     id_i64(a64); // ok
 
     id_i8(c8); // ok
-    id_i8(c16); //! ERROR mismatched types: expected `i8` but found `i16`
-    id_i8(c32); //! ERROR mismatched types: expected `i8` but found `i32`
-    id_i8(c64); //! ERROR mismatched types: expected `i8` but found `i64`
+    id_i8(c16); //~ ERROR mismatched types: expected `i8` but found `i16`
+    id_i8(c32); //~ ERROR mismatched types: expected `i8` but found `i32`
+    id_i8(c64); //~ ERROR mismatched types: expected `i8` but found `i64`
 
-    id_i16(c8); //! ERROR mismatched types: expected `i16` but found `i8`
+    id_i16(c8); //~ ERROR mismatched types: expected `i16` but found `i8`
     id_i16(c16); // ok
-    id_i16(c32); //! ERROR mismatched types: expected `i16` but found `i32`
-    id_i16(c64); //! ERROR mismatched types: expected `i16` but found `i64`
+    id_i16(c32); //~ ERROR mismatched types: expected `i16` but found `i32`
+    id_i16(c64); //~ ERROR mismatched types: expected `i16` but found `i64`
 
-    id_i32(c8); //! ERROR mismatched types: expected `i32` but found `i8`
-    id_i32(c16); //! ERROR mismatched types: expected `i32` but found `i16`
+    id_i32(c8); //~ ERROR mismatched types: expected `i32` but found `i8`
+    id_i32(c16); //~ ERROR mismatched types: expected `i32` but found `i16`
     id_i32(c32); // ok
-    id_i32(c64); //! ERROR mismatched types: expected `i32` but found `i64`
+    id_i32(c64); //~ ERROR mismatched types: expected `i32` but found `i64`
 
-    id_i64(a8); //! ERROR mismatched types: expected `i64` but found `i8`
-    id_i64(a16); //! ERROR mismatched types: expected `i64` but found `i16`
-    id_i64(a32); //! ERROR mismatched types: expected `i64` but found `i32`
+    id_i64(a8); //~ ERROR mismatched types: expected `i64` but found `i8`
+    id_i64(a16); //~ ERROR mismatched types: expected `i64` but found `i16`
+    id_i64(a32); //~ ERROR mismatched types: expected `i64` but found `i32`
     id_i64(a64); // ok
 
     id_u8(b8); // ok
-    id_u8(b16); //! ERROR mismatched types: expected `u8` but found `u16`
-    id_u8(b32); //! ERROR mismatched types: expected `u8` but found `u32`
-    id_u8(b64); //! ERROR mismatched types: expected `u8` but found `u64`
+    id_u8(b16); //~ ERROR mismatched types: expected `u8` but found `u16`
+    id_u8(b32); //~ ERROR mismatched types: expected `u8` but found `u32`
+    id_u8(b64); //~ ERROR mismatched types: expected `u8` but found `u64`
 
-    id_u16(b8); //! ERROR mismatched types: expected `u16` but found `u8`
+    id_u16(b8); //~ ERROR mismatched types: expected `u16` but found `u8`
     id_u16(b16); // ok
-    id_u16(b32); //! ERROR mismatched types: expected `u16` but found `u32`
-    id_u16(b64); //! ERROR mismatched types: expected `u16` but found `u64`
+    id_u16(b32); //~ ERROR mismatched types: expected `u16` but found `u32`
+    id_u16(b64); //~ ERROR mismatched types: expected `u16` but found `u64`
 
-    id_u32(b8); //! ERROR mismatched types: expected `u32` but found `u8`
-    id_u32(b16); //! ERROR mismatched types: expected `u32` but found `u16`
+    id_u32(b8); //~ ERROR mismatched types: expected `u32` but found `u8`
+    id_u32(b16); //~ ERROR mismatched types: expected `u32` but found `u16`
     id_u32(b32); // ok
-    id_u32(b64); //! ERROR mismatched types: expected `u32` but found `u64`
+    id_u32(b64); //~ ERROR mismatched types: expected `u32` but found `u64`
 
-    id_u64(b8); //! ERROR mismatched types: expected `u64` but found `u8`
-    id_u64(b16); //! ERROR mismatched types: expected `u64` but found `u16`
-    id_u64(b32); //! ERROR mismatched types: expected `u64` but found `u32`
+    id_u64(b8); //~ ERROR mismatched types: expected `u64` but found `u8`
+    id_u64(b16); //~ ERROR mismatched types: expected `u64` but found `u16`
+    id_u64(b32); //~ ERROR mismatched types: expected `u64` but found `u32`
     id_u64(b64); // ok
 }
diff --git a/src/test/compile-fail/issue-1362.rs b/src/test/compile-fail/issue-1362.rs
index 890e230e829..c11b98cfe52 100644
--- a/src/test/compile-fail/issue-1362.rs
+++ b/src/test/compile-fail/issue-1362.rs
@@ -1,7 +1,7 @@
 // Regression test for issue #1362 - without that fix the span will be bogus
 // no-reformat
 fn main() {
-  let x: uint = 20i; //! ERROR mismatched types
+  let x: uint = 20i; //~ ERROR mismatched types
 }
 // NOTE: Do not add any extra lines as the line number the error is
 // on is significant; an error later in the source file might not
diff --git a/src/test/compile-fail/issue-1448-1.rs b/src/test/compile-fail/issue-1448-1.rs
index 8c3617a99da..89189fc1fca 100644
--- a/src/test/compile-fail/issue-1448-1.rs
+++ b/src/test/compile-fail/issue-1448-1.rs
@@ -3,5 +3,5 @@
 fn main() {
     #macro[[#apply[f, [x, ...]], f(x, ...)]];
     fn add(a: int, b: int) -> int { ret a + b; }
-    assert (#apply[add, [y, 15]] == 16); //! ERROR unresolved name: y
+    assert (#apply[add, [y, 15]] == 16); //~ ERROR unresolved name: y
 }
diff --git a/src/test/compile-fail/issue-1448-2.rs b/src/test/compile-fail/issue-1448-2.rs
index 9677a74a1b6..d91d48ac172 100644
--- a/src/test/compile-fail/issue-1448-2.rs
+++ b/src/test/compile-fail/issue-1448-2.rs
@@ -1,5 +1,5 @@
 // Regresion test for issue #1448 and #1386
 
 fn main() {
-    #debug["%u", 10i]; //! ERROR mismatched types
+    #debug["%u", 10i]; //~ ERROR mismatched types
 }
diff --git a/src/test/compile-fail/issue-1697.rs b/src/test/compile-fail/issue-1697.rs
index 6579cd507dd..63b316813ff 100644
--- a/src/test/compile-fail/issue-1697.rs
+++ b/src/test/compile-fail/issue-1697.rs
@@ -1,7 +1,7 @@
 // Testing that we don't fail abnormally after hitting the errors
 
-import unresolved::*; //! ERROR unresolved modulename
-//!^ ERROR unresolved does not name a module
+import unresolved::*; //~ ERROR unresolved modulename
+//~^ ERROR unresolved does not name a module
 
 fn main() {
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/issue-1763.rs b/src/test/compile-fail/issue-1763.rs
index 17510164a5f..ba4828f88bc 100644
--- a/src/test/compile-fail/issue-1763.rs
+++ b/src/test/compile-fail/issue-1763.rs
@@ -1,6 +1,6 @@
 // Issue #1763 - infer types correctly
 
-type actor<T> = { //! ERROR type parameter `T` is unused
+type actor<T> = { //~ ERROR type parameter `T` is unused
     unused: bool
 };
 
diff --git a/src/test/compile-fail/issue-1896.rs b/src/test/compile-fail/issue-1896.rs
index d9d536418f3..f01d5b23f84 100644
--- a/src/test/compile-fail/issue-1896.rs
+++ b/src/test/compile-fail/issue-1896.rs
@@ -3,6 +3,6 @@ type t<T> = { f: fn() -> T };
 fn f<T>(_x: t<T>) {}
 
 fn main() {
-  let x: t<()> = { f: || () }; //! ERROR expressions with stack closure
+  let x: t<()> = { f: || () }; //~ ERROR expressions with stack closure
     f(x);
 }
diff --git a/src/test/compile-fail/issue-1962.rs b/src/test/compile-fail/issue-1962.rs
index ff47022ab65..aaf3c7653fb 100644
--- a/src/test/compile-fail/issue-1962.rs
+++ b/src/test/compile-fail/issue-1962.rs
@@ -1,7 +1,7 @@
 // compile-flags: -W err-while-true
 fn main() {
   let mut i = 0;
-  while true  { //! ERROR denote infinite loops with loop
+  while true  { //~ ERROR denote infinite loops with loop
     i += 1;
     if i == 5 { break; }
   }
diff --git a/src/test/compile-fail/issue-2063-resource.rs b/src/test/compile-fail/issue-2063-resource.rs
index 0fb4f2caf6c..9f489101f1b 100644
--- a/src/test/compile-fail/issue-2063-resource.rs
+++ b/src/test/compile-fail/issue-2063-resource.rs
@@ -1,12 +1,12 @@
 // test that autoderef of a type like this does not
 // cause compiler to loop.  Note that no instances
 // of such a type could ever be constructed.
-class t { //! ERROR this type cannot be instantiated
+class t { //~ ERROR this type cannot be instantiated
   let x: x;
   let to_str: ();
   new(x: x) { self.x = x; self.to_str = (); }
 }
-enum x = @t; //! ERROR this type cannot be instantiated
+enum x = @t; //~ ERROR this type cannot be instantiated
 
 fn main() {
 }
diff --git a/src/test/compile-fail/issue-2063.rs b/src/test/compile-fail/issue-2063.rs
index b061ed9d733..07b7d1ad3f4 100644
--- a/src/test/compile-fail/issue-2063.rs
+++ b/src/test/compile-fail/issue-2063.rs
@@ -1,7 +1,7 @@
 // test that autoderef of a type like this does not
 // cause compiler to loop.  Note that no instances
 // of such a type could ever be constructed.
-enum t = @t; //! ERROR this type cannot be instantiated
+enum t = @t; //~ ERROR this type cannot be instantiated
 
 // I use an impl here because it will cause
 // the compiler to attempt autoderef and then
diff --git a/src/test/compile-fail/issue-2111.rs b/src/test/compile-fail/issue-2111.rs
index 5e289af9f51..957d84eaa84 100644
--- a/src/test/compile-fail/issue-2111.rs
+++ b/src/test/compile-fail/issue-2111.rs
@@ -1,5 +1,5 @@
 fn foo(a: option<uint>, b: option<uint>) {
-  alt (a,b) { //! ERROR: non-exhaustive patterns: none not covered
+  alt (a,b) { //~ ERROR: non-exhaustive patterns: none not covered
     (some(a), some(b)) if a == b { }
     (some(_), none) |
     (none, some(_)) { }
diff --git a/src/test/compile-fail/issue-2149.rs b/src/test/compile-fail/issue-2149.rs
index 4927144e259..df2138fc15a 100644
--- a/src/test/compile-fail/issue-2149.rs
+++ b/src/test/compile-fail/issue-2149.rs
@@ -2,8 +2,8 @@ impl monad<A> for ~[A] {
     fn bind<B>(f: fn(A) -> ~[B]) {
         let mut r = fail;
         for self.each |elt| { r += f(elt); }
-        //!^ WARNING unreachable expression
-        //!^^ ERROR the type of this value must be known
+        //~^ WARNING unreachable expression
+        //~^^ ERROR the type of this value must be known
    }
 }
 fn main() {
diff --git a/src/test/compile-fail/issue-2150.rs b/src/test/compile-fail/issue-2150.rs
index f70fcf520d2..79f0598baac 100644
--- a/src/test/compile-fail/issue-2150.rs
+++ b/src/test/compile-fail/issue-2150.rs
@@ -1,8 +1,8 @@
 fn fail_len(v: ~[const int]) -> uint {
     let mut i = fail;
     for v.each |x| { i += 1u; }
-    //!^ WARNING unreachable statement
-    //!^^ ERROR the type of this value must be known
+    //~^ WARNING unreachable statement
+    //~^^ ERROR the type of this value must be known
     ret i;
 }
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/issue-2151.rs b/src/test/compile-fail/issue-2151.rs
index 81182c4e9ab..f97f57639b1 100644
--- a/src/test/compile-fail/issue-2151.rs
+++ b/src/test/compile-fail/issue-2151.rs
@@ -1,6 +1,6 @@
 fn main() {
     do vec::iter(fail) |i| {
         log (debug, i * 2);
-        //!^ ERROR the type of this value must be known
+        //~^ ERROR the type of this value must be known
    };
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/issue-2330.rs b/src/test/compile-fail/issue-2330.rs
index 355b90bb2aa..b0b21051714 100644
--- a/src/test/compile-fail/issue-2330.rs
+++ b/src/test/compile-fail/issue-2330.rs
@@ -5,7 +5,7 @@ iface channel<T> {
 }
 
 // `chan` is not an iface, it's an enum
-impl of chan for int { //! ERROR can only implement interface types
+impl of chan for int { //~ ERROR can only implement interface types
     fn send(v: int) { fail }
 }
 
diff --git a/src/test/compile-fail/issue-2354.rs b/src/test/compile-fail/issue-2354.rs
index 5b557cb1d75..cf7a36224bb 100644
--- a/src/test/compile-fail/issue-2354.rs
+++ b/src/test/compile-fail/issue-2354.rs
@@ -4,7 +4,7 @@
   near the corresponding open brace. But currently it's reported at the end.
   xfailed for now (see Issue #2354)
  */
-fn foo() { //! ERROR this open brace is not closed
+fn foo() { //~ ERROR this open brace is not closed
   alt some(x) {
       some(y) { fail; }
       none    { fail; }
diff --git a/src/test/compile-fail/issue-2467.rs b/src/test/compile-fail/issue-2467.rs
index 2429273e1ec..f22fd18d356 100644
--- a/src/test/compile-fail/issue-2467.rs
+++ b/src/test/compile-fail/issue-2467.rs
@@ -1,5 +1,5 @@
-enum test { thing = 3u } //! ERROR mismatched types
-//!^ ERROR expected signed integer constant
+enum test { thing = 3u } //~ ERROR mismatched types
+//~^ ERROR expected signed integer constant
 fn main() {
     log(error, thing as int);
     assert(thing as int == 3);
diff --git a/src/test/compile-fail/issue-2487-b.rs b/src/test/compile-fail/issue-2487-b.rs
index 4a7a6d4d440..f36c52ce354 100644
--- a/src/test/compile-fail/issue-2487-b.rs
+++ b/src/test/compile-fail/issue-2487-b.rs
@@ -7,7 +7,7 @@ class socket {
 
     fn set_identity()  {
         do closure || {
-        setsockopt_bytes(self.sock) //! ERROR copying a noncopyable value
+        setsockopt_bytes(self.sock) //~ ERROR copying a noncopyable value
       } 
     }
 }
diff --git a/src/test/compile-fail/issue-2509-a.rs b/src/test/compile-fail/issue-2509-a.rs
index de34d3e3b38..e1c6002af12 100644
--- a/src/test/compile-fail/issue-2509-a.rs
+++ b/src/test/compile-fail/issue-2509-a.rs
@@ -1,4 +1,4 @@
-class c { //! ERROR a class must have at least one field
+class c { //~ ERROR a class must have at least one field
     new() { }
 }
 
diff --git a/src/test/compile-fail/issue-2590.rs b/src/test/compile-fail/issue-2590.rs
index c27fee9f8a8..d6e3022acc3 100644
--- a/src/test/compile-fail/issue-2590.rs
+++ b/src/test/compile-fail/issue-2590.rs
@@ -6,7 +6,7 @@ type parser = {
 
 impl parser for parser {
     fn parse() -> [mut int] {
-        dvec::unwrap(self.tokens) //! ERROR illegal move from self
+        dvec::unwrap(self.tokens) //~ ERROR illegal move from self
     }
 }
 
diff --git a/src/test/compile-fail/issue-2718-a.rs b/src/test/compile-fail/issue-2718-a.rs
index 1eb8d4a1b69..b068f9e1dc2 100644
--- a/src/test/compile-fail/issue-2718-a.rs
+++ b/src/test/compile-fail/issue-2718-a.rs
@@ -6,7 +6,7 @@ class send_packet<T: copy> {
 
 mod pingpong {
     type ping = send_packet<pong>;
-    enum pong = send_packet<ping>; //! ERROR illegal recursive enum type; wrap the inner value in a box to make it representable
+    enum pong = send_packet<ping>; //~ ERROR illegal recursive enum type; wrap the inner value in a box to make it representable
 }
 
 fn main() {}
diff --git a/src/test/compile-fail/issue-511.rs b/src/test/compile-fail/issue-511.rs
index 793bb48c79a..9dea2443187 100644
--- a/src/test/compile-fail/issue-511.rs
+++ b/src/test/compile-fail/issue-511.rs
@@ -7,7 +7,7 @@ fn f<T>(&o: option<T>) {
 
 fn main() {
     f::<int>(option::none);
-    //!^ ERROR taking mut reference to static item
-    //!^^ ERROR illegal borrow unless pure: creating mutable alias to aliasable, immutable memory
-    //!^^^ NOTE impure due to access to impure function
+    //~^ ERROR taking mut reference to static item
+    //~^^ ERROR illegal borrow unless pure: creating mutable alias to aliasable, immutable memory
+    //~^^^ NOTE impure due to access to impure function
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/issue-897-2.rs b/src/test/compile-fail/issue-897-2.rs
index ee9ff378804..ce6737cc962 100644
--- a/src/test/compile-fail/issue-897-2.rs
+++ b/src/test/compile-fail/issue-897-2.rs
@@ -1,6 +1,6 @@
 fn g() -> ! { fail; }
 fn f() -> ! {
-    ret 42i; //! ERROR expected `_|_` but found `int`
-    g(); //! WARNING unreachable statement
+    ret 42i; //~ ERROR expected `_|_` but found `int`
+    g(); //~ WARNING unreachable statement
 }
 fn main() { }
diff --git a/src/test/compile-fail/issue-897.rs b/src/test/compile-fail/issue-897.rs
index 35a56b255af..1adf8534cca 100644
--- a/src/test/compile-fail/issue-897.rs
+++ b/src/test/compile-fail/issue-897.rs
@@ -1,5 +1,5 @@
 fn f() -> ! {
-    ret 42i; //! ERROR expected `_|_` but found `int`
-    fail; //! WARNING unreachable statement
+    ret 42i; //~ ERROR expected `_|_` but found `int`
+    fail; //~ WARNING unreachable statement
 }
 fn main() { }
diff --git a/src/test/compile-fail/kindck-implicit-close-over-mut-var.rs b/src/test/compile-fail/kindck-implicit-close-over-mut-var.rs
index 7e3265f36e3..07e0a6aecdd 100644
--- a/src/test/compile-fail/kindck-implicit-close-over-mut-var.rs
+++ b/src/test/compile-fail/kindck-implicit-close-over-mut-var.rs
@@ -4,7 +4,7 @@ fn foo() {
     // Here, i is *moved* into the closure: Not actually OK
     let mut i = 0;
     do task::spawn || {
-        use(i); //! ERROR mutable variables cannot be implicitly captured
+        use(i); //~ ERROR mutable variables cannot be implicitly captured
     }
 }
 
@@ -14,7 +14,7 @@ fn bar() {
     let mut i = 0;
     while i < 10 {
         do task::spawn || {
-            use(i); //! ERROR mutable variables cannot be implicitly captured
+            use(i); //~ ERROR mutable variables cannot be implicitly captured
         }
         i += 1;
     }
diff --git a/src/test/compile-fail/kindck-nonsendable-1.rs b/src/test/compile-fail/kindck-nonsendable-1.rs
index 29f34c5a51e..fce28489cbf 100644
--- a/src/test/compile-fail/kindck-nonsendable-1.rs
+++ b/src/test/compile-fail/kindck-nonsendable-1.rs
@@ -2,7 +2,7 @@ fn foo(_x: @uint) {}
 
 fn main() {
     let x = @3u;
-    let _ = fn~() { foo(x); }; //! ERROR not a sendable value
-    let _ = fn~(copy x) { foo(x); }; //! ERROR not a sendable value
-    let _ = fn~(move x) { foo(x); }; //! ERROR not a sendable value
+    let _ = fn~() { foo(x); }; //~ ERROR not a sendable value
+    let _ = fn~(copy x) { foo(x); }; //~ ERROR not a sendable value
+    let _ = fn~(move x) { foo(x); }; //~ ERROR not a sendable value
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/liveness-and-init.rs b/src/test/compile-fail/liveness-and-init.rs
index aea30e3465c..7deafdce363 100644
--- a/src/test/compile-fail/liveness-and-init.rs
+++ b/src/test/compile-fail/liveness-and-init.rs
@@ -2,5 +2,5 @@ fn main() {
     let i: int;
 
     log(debug, false && { i = 5; true });
-    log(debug, i); //! ERROR use of possibly uninitialized variable: `i`
+    log(debug, i); //~ ERROR use of possibly uninitialized variable: `i`
 }
diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs b/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs
index 2fc1bca5a63..41b9fd4f1d9 100644
--- a/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs
+++ b/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs
@@ -1,8 +1,8 @@
 fn test() {
     let v: int;
     loop {
-        v = 1; //! ERROR re-assignment of immutable variable
-        //!^ NOTE prior assignment occurs here
+        v = 1; //~ ERROR re-assignment of immutable variable
+        //~^ NOTE prior assignment occurs here
         copy v; // just to prevent liveness warnings
     }
 }
diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs b/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs
index adb42333523..baf0d55f057 100644
--- a/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs
+++ b/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs
@@ -1,7 +1,7 @@
 fn test() {
     let v: int;
-    v = 2;  //! NOTE prior assignment occurs here
-    v += 1; //! ERROR re-assignment of immutable variable
+    v = 2;  //~ NOTE prior assignment occurs here
+    v += 1; //~ ERROR re-assignment of immutable variable
     copy v;
 }
 
diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs b/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs
index c432d03bed3..d2388f200d6 100644
--- a/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs
+++ b/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs
@@ -1,17 +1,17 @@
 fn test1() {
     let v: int;
     let mut w: int;
-    v = 1; //! NOTE prior assignment occurs here
+    v = 1; //~ NOTE prior assignment occurs here
     w = 2;
-    v <-> w; //! ERROR re-assignment of immutable variable
+    v <-> w; //~ ERROR re-assignment of immutable variable
 }
 
 fn test2() {
     let v: int;
     let mut w: int;
-    v = 1; //! NOTE prior assignment occurs here
+    v = 1; //~ NOTE prior assignment occurs here
     w = 2;
-    w <-> v; //! ERROR re-assignment of immutable variable
+    w <-> v; //~ ERROR re-assignment of immutable variable
 }
 
 fn main() {
diff --git a/src/test/compile-fail/liveness-assign-imm-local-with-init.rs b/src/test/compile-fail/liveness-assign-imm-local-with-init.rs
index 045ce5baa46..1b46e97dbd2 100644
--- a/src/test/compile-fail/liveness-assign-imm-local-with-init.rs
+++ b/src/test/compile-fail/liveness-assign-imm-local-with-init.rs
@@ -1,7 +1,7 @@
 fn test() {
-    let v: int = 1; //! NOTE prior assignment occurs here
+    let v: int = 1; //~ NOTE prior assignment occurs here
     copy v;
-    v = 2; //! ERROR re-assignment of immutable variable
+    v = 2; //~ ERROR re-assignment of immutable variable
     copy v;
 }
 
diff --git a/src/test/compile-fail/liveness-block-unint.rs b/src/test/compile-fail/liveness-block-unint.rs
index 698f9f7cf79..e341ed33c2f 100644
--- a/src/test/compile-fail/liveness-block-unint.rs
+++ b/src/test/compile-fail/liveness-block-unint.rs
@@ -2,6 +2,6 @@ fn force(f: fn()) { f(); }
 fn main() {
     let x: int;
     force(fn&() {
-        log(debug, x); //! ERROR capture of possibly uninitialized variable: `x`
+        log(debug, x); //~ ERROR capture of possibly uninitialized variable: `x`
     });
 }
diff --git a/src/test/compile-fail/liveness-break-uninit-2.rs b/src/test/compile-fail/liveness-break-uninit-2.rs
index 4b18845f878..fc1c941836e 100644
--- a/src/test/compile-fail/liveness-break-uninit-2.rs
+++ b/src/test/compile-fail/liveness-break-uninit-2.rs
@@ -3,10 +3,10 @@ fn foo() -> int {
 
     while 1 != 2  {
         break;
-        x = 0; //! WARNING unreachable statement
+        x = 0; //~ WARNING unreachable statement
     }
 
-    log(debug, x); //! ERROR use of possibly uninitialized variable: `x`
+    log(debug, x); //~ ERROR use of possibly uninitialized variable: `x`
 
     ret 17;
 }
diff --git a/src/test/compile-fail/liveness-break-uninit.rs b/src/test/compile-fail/liveness-break-uninit.rs
index 5bba9535e53..56753a3a95c 100644
--- a/src/test/compile-fail/liveness-break-uninit.rs
+++ b/src/test/compile-fail/liveness-break-uninit.rs
@@ -3,10 +3,10 @@ fn foo() -> int {
 
     loop {
         break;
-        x = 0;  //! WARNING unreachable statement
+        x = 0;  //~ WARNING unreachable statement
     }
 
-    log(debug, x); //! ERROR use of possibly uninitialized variable: `x`
+    log(debug, x); //~ ERROR use of possibly uninitialized variable: `x`
 
     ret 17;
 }
diff --git a/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs b/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs
index 9c982292816..0480bc71798 100644
--- a/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs
+++ b/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs
@@ -3,7 +3,7 @@ class cat {
   fn meow() {}
   new() {
      self.meow();
-     //!^ ERROR use of possibly uninitialized field: `self.how_hungry`
+     //~^ ERROR use of possibly uninitialized field: `self.how_hungry`
   }
 }
 
diff --git a/src/test/compile-fail/liveness-ctor-field-never-init.rs b/src/test/compile-fail/liveness-ctor-field-never-init.rs
index b979bdd9255..d71dff98064 100644
--- a/src/test/compile-fail/liveness-ctor-field-never-init.rs
+++ b/src/test/compile-fail/liveness-ctor-field-never-init.rs
@@ -1,6 +1,6 @@
 class cat {
   let how_hungry : int;
-  new() {} //! ERROR field `self.how_hungry` is never initialized
+  new() {} //~ ERROR field `self.how_hungry` is never initialized
 }
 
 fn main() {
diff --git a/src/test/compile-fail/liveness-ctor-uninit-field.rs b/src/test/compile-fail/liveness-ctor-uninit-field.rs
index 080d4678a2f..3d4a88db262 100644
--- a/src/test/compile-fail/liveness-ctor-uninit-field.rs
+++ b/src/test/compile-fail/liveness-ctor-uninit-field.rs
@@ -6,7 +6,7 @@ class cat {
   new() {
      self.a = 3;
      self.b = self.a;
-     self.a += self.c; //! ERROR use of possibly uninitialized field: `self.c`
+     self.a += self.c; //~ ERROR use of possibly uninitialized field: `self.c`
   }
 }
 
diff --git a/src/test/compile-fail/liveness-ctor-uninit-var.rs b/src/test/compile-fail/liveness-ctor-uninit-var.rs
index 3bbccd62ae3..d03c7888974 100644
--- a/src/test/compile-fail/liveness-ctor-uninit-var.rs
+++ b/src/test/compile-fail/liveness-ctor-uninit-var.rs
@@ -12,7 +12,7 @@ class cat {
   new(in_x : uint, in_y : int) {
     let foo;
     self.meows = in_x + (in_y as uint);
-    self.how_hungry = foo; //! ERROR use of possibly uninitialized variable: `foo`
+    self.how_hungry = foo; //~ ERROR use of possibly uninitialized variable: `foo`
   }
 }
 
diff --git a/src/test/compile-fail/liveness-dead.rs b/src/test/compile-fail/liveness-dead.rs
index bda153b5ad4..a115d7c4e34 100644
--- a/src/test/compile-fail/liveness-dead.rs
+++ b/src/test/compile-fail/liveness-dead.rs
@@ -3,7 +3,7 @@ fn f1(&x: int) {
 }
 
 fn f2() {
-    let mut x = 3; //! WARNING value assigned to `x` is never read
+    let mut x = 3; //~ WARNING value assigned to `x` is never read
     x = 4;
     copy x;
 }
@@ -11,10 +11,10 @@ fn f2() {
 fn f3() {
     let mut x = 3;
     copy x;
-    x = 4; //! WARNING value assigned to `x` is never read
+    x = 4; //~ WARNING value assigned to `x` is never read
 }
 
 fn main() { // leave this in here just to trigger compile-fail:
     let x: int;
-    copy x; //! ERROR use of possibly uninitialized variable: `x`
+    copy x; //~ ERROR use of possibly uninitialized variable: `x`
 }
diff --git a/src/test/compile-fail/liveness-if-no-else.rs b/src/test/compile-fail/liveness-if-no-else.rs
index 5cbd24a6a5b..dfdcfa266fc 100644
--- a/src/test/compile-fail/liveness-if-no-else.rs
+++ b/src/test/compile-fail/liveness-if-no-else.rs
@@ -2,5 +2,5 @@ fn foo(x: int) { log(debug, x); }
 
 fn main() {
 	let x: int; if 1 > 2 { x = 10; }
-	foo(x); //! ERROR use of possibly uninitialized variable: `x`
+	foo(x); //~ ERROR use of possibly uninitialized variable: `x`
 }
diff --git a/src/test/compile-fail/liveness-if-with-else.rs b/src/test/compile-fail/liveness-if-with-else.rs
index dbb3e6b1645..7f7003dbbe4 100644
--- a/src/test/compile-fail/liveness-if-with-else.rs
+++ b/src/test/compile-fail/liveness-if-with-else.rs
@@ -7,5 +7,5 @@ fn main() {
     } else {
         x = 10;
     }
-    foo(x); //! ERROR use of possibly uninitialized variable: `x`
+    foo(x); //~ ERROR use of possibly uninitialized variable: `x`
 }
diff --git a/src/test/compile-fail/liveness-init-in-called-fn-expr.rs b/src/test/compile-fail/liveness-init-in-called-fn-expr.rs
index 28351ceeb08..5716a380936 100644
--- a/src/test/compile-fail/liveness-init-in-called-fn-expr.rs
+++ b/src/test/compile-fail/liveness-init-in-called-fn-expr.rs
@@ -1,7 +1,7 @@
 fn main() {
     let j = fn@() -> int {
         let i: int;
-        ret i; //! ERROR use of possibly uninitialized variable: `i`
+        ret i; //~ ERROR use of possibly uninitialized variable: `i`
     };
     j();
 }
diff --git a/src/test/compile-fail/liveness-init-in-fn-expr.rs b/src/test/compile-fail/liveness-init-in-fn-expr.rs
index 8c68ba750a8..cffba2132c2 100644
--- a/src/test/compile-fail/liveness-init-in-fn-expr.rs
+++ b/src/test/compile-fail/liveness-init-in-fn-expr.rs
@@ -1,7 +1,7 @@
 fn main() {
     let f = fn@() -> int {
         let i: int;
-        ret i; //! ERROR use of possibly uninitialized variable: `i`
+        ret i; //~ ERROR use of possibly uninitialized variable: `i`
     };
     log(error, f());
 }
diff --git a/src/test/compile-fail/liveness-init-in-fru.rs b/src/test/compile-fail/liveness-init-in-fru.rs
index a9a80e9ad6e..f6ba7c32792 100644
--- a/src/test/compile-fail/liveness-init-in-fru.rs
+++ b/src/test/compile-fail/liveness-init-in-fru.rs
@@ -4,6 +4,6 @@ type point = {x: int, y: int};
 
 fn main() {
     let mut origin: point;
-    origin = {x: 10 with origin}; //! ERROR use of possibly uninitialized variable: `origin`
+    origin = {x: 10 with origin}; //~ ERROR use of possibly uninitialized variable: `origin`
     copy origin;
 }
diff --git a/src/test/compile-fail/liveness-init-op-equal.rs b/src/test/compile-fail/liveness-init-op-equal.rs
index 8d397e73b1f..89b07847e73 100644
--- a/src/test/compile-fail/liveness-init-op-equal.rs
+++ b/src/test/compile-fail/liveness-init-op-equal.rs
@@ -1,6 +1,6 @@
 fn test() {
     let v: int;
-    v += 1; //! ERROR use of possibly uninitialized variable: `v`
+    v += 1; //~ ERROR use of possibly uninitialized variable: `v`
     copy v;
 }
 
diff --git a/src/test/compile-fail/liveness-init-plus-equal.rs b/src/test/compile-fail/liveness-init-plus-equal.rs
index dacc1f4f922..afb384b24d5 100644
--- a/src/test/compile-fail/liveness-init-plus-equal.rs
+++ b/src/test/compile-fail/liveness-init-plus-equal.rs
@@ -1,6 +1,6 @@
 fn test() {
     let mut v: int;
-    v = v + 1; //! ERROR use of possibly uninitialized variable: `v`
+    v = v + 1; //~ ERROR use of possibly uninitialized variable: `v`
     copy v;
 }
 
diff --git a/src/test/compile-fail/liveness-issue-2163.rs b/src/test/compile-fail/liveness-issue-2163.rs
index 7177470e136..a0c52f1b4a9 100644
--- a/src/test/compile-fail/liveness-issue-2163.rs
+++ b/src/test/compile-fail/liveness-issue-2163.rs
@@ -1,6 +1,6 @@
 // xfail-test After the closure syntax change this started failing with the wrong error message
 fn main(_s: ~[str]) {
     let a: ~[int] = ~[];
-    do vec::each(a) |_x| { //! ERROR not all control paths return a value
+    do vec::each(a) |_x| { //~ ERROR not all control paths return a value
     }
 }
diff --git a/src/test/compile-fail/liveness-move-from-args.rs b/src/test/compile-fail/liveness-move-from-args.rs
index 0c3e594040b..27e7e51b405 100644
--- a/src/test/compile-fail/liveness-move-from-args.rs
+++ b/src/test/compile-fail/liveness-move-from-args.rs
@@ -1,15 +1,15 @@
 fn take(-_x: int) { }
 
 fn from_by_value_arg(++x: int) {
-    take(x);  //! ERROR illegal move from argument `x`, which is not copy or move mode
+    take(x);  //~ ERROR illegal move from argument `x`, which is not copy or move mode
 }
 
 fn from_by_mut_ref_arg(&x: int) {
-    take(x);  //! ERROR illegal move from argument `x`, which is not copy or move mode
+    take(x);  //~ ERROR illegal move from argument `x`, which is not copy or move mode
 }
 
 fn from_by_ref_arg(&&x: int) {
-    take(x);  //! ERROR illegal move from argument `x`, which is not copy or move mode
+    take(x);  //~ ERROR illegal move from argument `x`, which is not copy or move mode
 }
 
 fn from_copy_arg(+x: int) {
diff --git a/src/test/compile-fail/liveness-move-from-mode.rs b/src/test/compile-fail/liveness-move-from-mode.rs
index f0db4926734..a837d337f98 100644
--- a/src/test/compile-fail/liveness-move-from-mode.rs
+++ b/src/test/compile-fail/liveness-move-from-mode.rs
@@ -4,7 +4,7 @@ fn main() {
 
     let x: int = 25;
     loop {
-        take(x); //! ERROR use of moved variable: `x`
-        //!^ NOTE move of variable occurred here
+        take(x); //~ ERROR use of moved variable: `x`
+        //~^ NOTE move of variable occurred here
     }
 }
diff --git a/src/test/compile-fail/liveness-move-in-loop.rs b/src/test/compile-fail/liveness-move-in-loop.rs
index 1bdfc392bd9..d9233e41e38 100644
--- a/src/test/compile-fail/liveness-move-in-loop.rs
+++ b/src/test/compile-fail/liveness-move-in-loop.rs
@@ -7,8 +7,8 @@ fn main() {
         loop {
             loop {
                 loop {
-                    x <- y; //! ERROR use of moved variable
-                    //!^ NOTE move of variable occurred here
+                    x <- y; //~ ERROR use of moved variable
+                    //~^ NOTE move of variable occurred here
 
                     copy x;
                 }
diff --git a/src/test/compile-fail/liveness-move-in-while.rs b/src/test/compile-fail/liveness-move-in-while.rs
index d5a95b08bd8..261eb310890 100644
--- a/src/test/compile-fail/liveness-move-in-while.rs
+++ b/src/test/compile-fail/liveness-move-in-while.rs
@@ -5,7 +5,7 @@ fn main() {
     loop {
         log(debug, y);
         while true { while true { while true { x <- y; copy x; } } }
-        //!^ ERROR use of moved variable: `y`
-        //!^^ NOTE move of variable occurred here
+        //~^ ERROR use of moved variable: `y`
+        //~^^ NOTE move of variable occurred here
     }
 }
diff --git a/src/test/compile-fail/liveness-or-init.rs b/src/test/compile-fail/liveness-or-init.rs
index 5912378cf42..138dbc0a7a8 100644
--- a/src/test/compile-fail/liveness-or-init.rs
+++ b/src/test/compile-fail/liveness-or-init.rs
@@ -2,5 +2,5 @@ fn main() {
     let i: int;
 
     log(debug, false || { i = 5; true });
-    log(debug, i); //! ERROR use of possibly uninitialized variable: `i`
+    log(debug, i); //~ ERROR use of possibly uninitialized variable: `i`
 }
diff --git a/src/test/compile-fail/liveness-return.rs b/src/test/compile-fail/liveness-return.rs
index cee1444ca63..830eb9f8e89 100644
--- a/src/test/compile-fail/liveness-return.rs
+++ b/src/test/compile-fail/liveness-return.rs
@@ -1,6 +1,6 @@
 fn f() -> int {
 	let x: int;
-	ret x; //! ERROR use of possibly uninitialized variable: `x`
+	ret x; //~ ERROR use of possibly uninitialized variable: `x`
 }
 
 fn main() { f(); }
diff --git a/src/test/compile-fail/liveness-swap-uninit.rs b/src/test/compile-fail/liveness-swap-uninit.rs
index d3a5395bfff..5291c9925b6 100644
--- a/src/test/compile-fail/liveness-swap-uninit.rs
+++ b/src/test/compile-fail/liveness-swap-uninit.rs
@@ -1,6 +1,6 @@
 fn main() {
     let mut x = 3;
     let y;
-    x <-> y; //! ERROR use of possibly uninitialized variable: `y`
+    x <-> y; //~ ERROR use of possibly uninitialized variable: `y`
     copy x;
 }
diff --git a/src/test/compile-fail/liveness-uninit-after-item.rs b/src/test/compile-fail/liveness-uninit-after-item.rs
index 678a063284e..af8afda4e62 100644
--- a/src/test/compile-fail/liveness-uninit-after-item.rs
+++ b/src/test/compile-fail/liveness-uninit-after-item.rs
@@ -1,6 +1,6 @@
 fn main() {
     let bar;
     fn baz(_x: int) { }
-    baz(bar); //! ERROR use of possibly uninitialized variable: `bar`
+    baz(bar); //~ ERROR use of possibly uninitialized variable: `bar`
 }
 
diff --git a/src/test/compile-fail/liveness-uninit.rs b/src/test/compile-fail/liveness-uninit.rs
index 1930a2e3352..59bb9e847dc 100644
--- a/src/test/compile-fail/liveness-uninit.rs
+++ b/src/test/compile-fail/liveness-uninit.rs
@@ -2,5 +2,5 @@ fn foo(x: int) { log(debug, x); }
 
 fn main() {
 	let x: int;
-	foo(x); //! ERROR use of possibly uninitialized variable: `x`
+	foo(x); //~ ERROR use of possibly uninitialized variable: `x`
 }
diff --git a/src/test/compile-fail/liveness-unused.rs b/src/test/compile-fail/liveness-unused.rs
index a1ad07f6ecb..7db0a9fe171 100644
--- a/src/test/compile-fail/liveness-unused.rs
+++ b/src/test/compile-fail/liveness-unused.rs
@@ -1,26 +1,26 @@
 fn f1(x: int) {
-    //!^ WARNING unused variable: `x`
+    //~^ WARNING unused variable: `x`
 }
 
 fn f1b(&x: int) {
-    //!^ WARNING unused variable: `x`
+    //~^ WARNING unused variable: `x`
 }
 
 fn f2() {
     let x = 3;
-    //!^ WARNING unused variable: `x`
+    //~^ WARNING unused variable: `x`
 }
 
 fn f3() {
     let mut x = 3;
-    //!^ WARNING variable `x` is assigned to, but never used
+    //~^ WARNING variable `x` is assigned to, but never used
     x += 4;
-    //!^ WARNING value assigned to `x` is never read
+    //~^ WARNING value assigned to `x` is never read
 }
 
 fn f3b() {
     let mut z = 3;
-    //!^ WARNING variable `z` is assigned to, but never used
+    //~^ WARNING variable `z` is assigned to, but never used
     loop {
         z += 4;
     }
@@ -40,5 +40,5 @@ fn even(i: int) : is_even(i) -> int { i }
 fn main() {
     let i: int = 4;
     log(debug, false && { check is_even(i); true });
-    even(i); //! ERROR unsatisfied precondition
+    even(i); //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/liveness-use-after-move.rs b/src/test/compile-fail/liveness-use-after-move.rs
index 34a932a5a16..f060fe8307f 100644
--- a/src/test/compile-fail/liveness-use-after-move.rs
+++ b/src/test/compile-fail/liveness-use-after-move.rs
@@ -1,6 +1,6 @@
 fn main() {
     let x = @5;
-    let y <- x; //! NOTE move of variable occurred here
-    log(debug, *x); //! ERROR use of moved variable: `x`
+    let y <- x; //~ NOTE move of variable occurred here
+    log(debug, *x); //~ ERROR use of moved variable: `x`
     copy y;
 }
diff --git a/src/test/compile-fail/liveness-use-after-send.rs b/src/test/compile-fail/liveness-use-after-send.rs
index 3827598c0a7..6dfa9a997ff 100644
--- a/src/test/compile-fail/liveness-use-after-send.rs
+++ b/src/test/compile-fail/liveness-use-after-send.rs
@@ -9,8 +9,8 @@ enum _chan<T> = int;
 // Tests that "log(debug, message);" is flagged as using
 // message after the send deinitializes it
 fn test00_start(ch: _chan<int>, message: int, _count: int) {
-    send(ch, message); //! NOTE move of variable occurred here
-    log(debug, message); //! ERROR use of moved variable: `message`
+    send(ch, message); //~ NOTE move of variable occurred here
+    log(debug, message); //~ ERROR use of moved variable: `message`
 }
 
 fn main() { fail; }
diff --git a/src/test/compile-fail/liveness-use-in-index-lvalue.rs b/src/test/compile-fail/liveness-use-in-index-lvalue.rs
index ba04fbc0a66..8aee7acf819 100644
--- a/src/test/compile-fail/liveness-use-in-index-lvalue.rs
+++ b/src/test/compile-fail/liveness-use-in-index-lvalue.rs
@@ -1,6 +1,6 @@
 fn test() {
     let w: ~[int];
-    w[5] = 0; //! ERROR use of possibly uninitialized variable: `w`
+    w[5] = 0; //~ ERROR use of possibly uninitialized variable: `w`
 }
 
 fn main() { test(); }
diff --git a/src/test/compile-fail/liveness-while-break.rs b/src/test/compile-fail/liveness-while-break.rs
index 755deb31fba..c963e2dee4e 100644
--- a/src/test/compile-fail/liveness-while-break.rs
+++ b/src/test/compile-fail/liveness-while-break.rs
@@ -4,7 +4,7 @@ fn test(cond: bool) {
         v = 3;
         break;
     }
-    #debug["%d", v]; //! ERROR use of possibly uninitialized variable: `v`
+    #debug["%d", v]; //~ ERROR use of possibly uninitialized variable: `v`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/liveness-while-cond.rs b/src/test/compile-fail/liveness-while-cond.rs
index a0a90e9550c..28a5fb18a7f 100644
--- a/src/test/compile-fail/liveness-while-cond.rs
+++ b/src/test/compile-fail/liveness-while-cond.rs
@@ -1,4 +1,4 @@
 fn main() {
     let x: bool;
-    while x { } //! ERROR use of possibly uninitialized variable: `x`
+    while x { } //~ ERROR use of possibly uninitialized variable: `x`
 }
diff --git a/src/test/compile-fail/liveness-while.rs b/src/test/compile-fail/liveness-while.rs
index b69012bc3f2..9cd61330bae 100644
--- a/src/test/compile-fail/liveness-while.rs
+++ b/src/test/compile-fail/liveness-while.rs
@@ -1,7 +1,7 @@
 fn f() -> int {
     let mut x: int;
     while 1 == 1 { x = 10; }
-    ret x; //! ERROR use of possibly uninitialized variable: `x`
+    ret x; //~ ERROR use of possibly uninitialized variable: `x`
 }
 
 fn main() { f(); }
diff --git a/src/test/compile-fail/loop-does-not-diverge.rs b/src/test/compile-fail/loop-does-not-diverge.rs
index e0cf57c1588..06a227cffd2 100644
--- a/src/test/compile-fail/loop-does-not-diverge.rs
+++ b/src/test/compile-fail/loop-does-not-diverge.rs
@@ -4,7 +4,7 @@ fn forever() -> ! {
   loop {
     break;
   }
-  ret 42i; //! ERROR expected `_|_` but found `int`
+  ret 42i; //~ ERROR expected `_|_` but found `int`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/lub-in-args.rs b/src/test/compile-fail/lub-in-args.rs
index a55680cd308..c94739d6011 100644
--- a/src/test/compile-fail/lub-in-args.rs
+++ b/src/test/compile-fail/lub-in-args.rs
@@ -12,6 +12,6 @@ fn main() {
     // shortcoming of the current inference algorithm.  These errors
     // are *not* desirable.
 
-    two_args(x, y); //! ERROR (values differ in mutability)
-    two_args(a, b); //! ERROR (values differ in mutability)
+    two_args(x, y); //~ ERROR (values differ in mutability)
+    two_args(a, b); //~ ERROR (values differ in mutability)
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/main-wrong-type-2.rs b/src/test/compile-fail/main-wrong-type-2.rs
index 338956f7796..106b0daf4b3 100644
--- a/src/test/compile-fail/main-wrong-type-2.rs
+++ b/src/test/compile-fail/main-wrong-type-2.rs
@@ -1,3 +1,3 @@
 fn main() -> char {
-//!^ ERROR Wrong type in main function: found `extern fn() -> char`
+//~^ ERROR Wrong type in main function: found `extern fn() -> char`
 }
diff --git a/src/test/compile-fail/main-wrong-type.rs b/src/test/compile-fail/main-wrong-type.rs
index 859a70e0a51..b920f02e069 100644
--- a/src/test/compile-fail/main-wrong-type.rs
+++ b/src/test/compile-fail/main-wrong-type.rs
@@ -1,3 +1,3 @@
 fn main(foo: {x: int, y: int}) {
-//!^ ERROR Wrong type in main function: found `extern fn({x: int,y: int})`
+//~^ ERROR Wrong type in main function: found `extern fn({x: int,y: int})`
 }
diff --git a/src/test/compile-fail/map-types.rs b/src/test/compile-fail/map-types.rs
index c4005048bf1..084cbf9529c 100644
--- a/src/test/compile-fail/map-types.rs
+++ b/src/test/compile-fail/map-types.rs
@@ -8,5 +8,5 @@ import std::map::map;
 fn main() {
     let x: map<str,str> = map::str_hash::<str>() as map::<str,str>;
     let y: map<uint,str> = x;
-    //!^ ERROR mismatched types: expected `std::map::map<uint,str>`
+    //~^ ERROR mismatched types: expected `std::map::map<uint,str>`
 }
diff --git a/src/test/compile-fail/mode-inference-fail.rs b/src/test/compile-fail/mode-inference-fail.rs
index 732c9a4311f..0a42bef5968 100644
--- a/src/test/compile-fail/mode-inference-fail.rs
+++ b/src/test/compile-fail/mode-inference-fail.rs
@@ -7,5 +7,5 @@ fn apply_int(f: fn(int) -> int, a: int) -> int { f(a) }
 fn main() {
     let f = {|i| i};
     assert apply_int(f, 2) == 2;
-    assert apply(f, 2) == 2; //! ERROR expected argument mode ++
+    assert apply(f, 2) == 2; //~ ERROR expected argument mode ++
 }
diff --git a/src/test/compile-fail/mutable-arguments.rs b/src/test/compile-fail/mutable-arguments.rs
index 79e7f412163..4fcb73e8516 100644
--- a/src/test/compile-fail/mutable-arguments.rs
+++ b/src/test/compile-fail/mutable-arguments.rs
@@ -5,25 +5,25 @@ fn mutate_by_mut_ref(&x: uint) {
 }
 
 fn mutate_by_ref(&&x: uint) {
-    //!^ WARNING unused variable: `x`
-    x = 0u; //! ERROR assigning to argument
+    //~^ WARNING unused variable: `x`
+    x = 0u; //~ ERROR assigning to argument
 }
 
 fn mutate_by_val(++x: uint) {
-    //!^ WARNING unused variable: `x`
-    x = 0u; //! ERROR assigning to argument
+    //~^ WARNING unused variable: `x`
+    x = 0u; //~ ERROR assigning to argument
 }
 
 fn mutate_by_copy(+x: uint) {
-    //!^ WARNING unused variable: `x`
-    x = 0u; //! ERROR assigning to argument
-    //!^ WARNING value assigned to `x` is never read
+    //~^ WARNING unused variable: `x`
+    x = 0u; //~ ERROR assigning to argument
+    //~^ WARNING value assigned to `x` is never read
 }
 
 fn mutate_by_move(-x: uint) {
-    //!^ WARNING unused variable: `x`
-    x = 0u; //! ERROR assigning to argument
-    //!^ WARNING value assigned to `x` is never read
+    //~^ WARNING unused variable: `x`
+    x = 0u; //~ ERROR assigning to argument
+    //~^ WARNING value assigned to `x` is never read
 }
 
 fn main() {
diff --git a/src/test/compile-fail/mutable-huh-box-assign.rs b/src/test/compile-fail/mutable-huh-box-assign.rs
index 5b5150b985c..c9484e62c1e 100644
--- a/src/test/compile-fail/mutable-huh-box-assign.rs
+++ b/src/test/compile-fail/mutable-huh-box-assign.rs
@@ -1,6 +1,6 @@
 fn main() {
     fn f(&&v: @const int) {
-        *v = 1 //! ERROR assigning to dereference of const @ pointer
+        *v = 1 //~ ERROR assigning to dereference of const @ pointer
     }
 
     let v = @0;
diff --git a/src/test/compile-fail/mutable-huh-field-assign.rs b/src/test/compile-fail/mutable-huh-field-assign.rs
index e1bf6fe665b..44da70f463c 100644
--- a/src/test/compile-fail/mutable-huh-field-assign.rs
+++ b/src/test/compile-fail/mutable-huh-field-assign.rs
@@ -1,7 +1,7 @@
 fn main() {
     fn f(&&v: {const field: int}) {
         // This shouldn't be possible
-        v.field = 1 //! ERROR assigning to const field
+        v.field = 1 //~ ERROR assigning to const field
     }
 
     let v = {field: 0};
diff --git a/src/test/compile-fail/mutable-huh-ptr-assign.rs b/src/test/compile-fail/mutable-huh-ptr-assign.rs
index 77ba86d6d6f..1aa965869be 100644
--- a/src/test/compile-fail/mutable-huh-ptr-assign.rs
+++ b/src/test/compile-fail/mutable-huh-ptr-assign.rs
@@ -2,7 +2,7 @@ use std;
 
 fn main() {
     unsafe fn f(&&v: *const int) {
-        *v = 1 //! ERROR assigning to dereference of const * pointer
+        *v = 1 //~ ERROR assigning to dereference of const * pointer
     }
 
     unsafe {
diff --git a/src/test/compile-fail/mutable-huh-unique-assign.rs b/src/test/compile-fail/mutable-huh-unique-assign.rs
index 591ea069b07..1b9b7a22191 100644
--- a/src/test/compile-fail/mutable-huh-unique-assign.rs
+++ b/src/test/compile-fail/mutable-huh-unique-assign.rs
@@ -1,6 +1,6 @@
 fn main() {
     fn f(&&v: ~const int) {
-        *v = 1 //! ERROR assigning to dereference of const ~ pointer
+        *v = 1 //~ ERROR assigning to dereference of const ~ pointer
     }
 
     let v = ~0;
diff --git a/src/test/compile-fail/mutable-huh-variance-vec1.rs b/src/test/compile-fail/mutable-huh-variance-vec1.rs
index 76165074846..18ca917e8b6 100644
--- a/src/test/compile-fail/mutable-huh-variance-vec1.rs
+++ b/src/test/compile-fail/mutable-huh-variance-vec1.rs
@@ -8,5 +8,5 @@ fn main() {
         v[0] = [mut 3]
     }
 
-    f(v); //! ERROR (values differ in mutability)
+    f(v); //~ ERROR (values differ in mutability)
 }
diff --git a/src/test/compile-fail/mutable-huh-variance-vec2.rs b/src/test/compile-fail/mutable-huh-variance-vec2.rs
index 78d0af1a6f3..0135c08c128 100644
--- a/src/test/compile-fail/mutable-huh-variance-vec2.rs
+++ b/src/test/compile-fail/mutable-huh-variance-vec2.rs
@@ -8,5 +8,5 @@ fn main() {
         v[0] = [3]
     }
 
-    f(v); //! ERROR (values differ in mutability)
+    f(v); //~ ERROR (values differ in mutability)
 }
diff --git a/src/test/compile-fail/mutable-huh-variance-vec3.rs b/src/test/compile-fail/mutable-huh-variance-vec3.rs
index 203ea8ca818..fde3d8a152a 100644
--- a/src/test/compile-fail/mutable-huh-variance-vec3.rs
+++ b/src/test/compile-fail/mutable-huh-variance-vec3.rs
@@ -8,5 +8,5 @@ fn main() {
         v[0][1] = [mut 3]
     }
 
-    f(v); //! ERROR (values differ in mutability)
+    f(v); //~ ERROR (values differ in mutability)
 }
diff --git a/src/test/compile-fail/mutable-huh-variance-vec4.rs b/src/test/compile-fail/mutable-huh-variance-vec4.rs
index ee5889f61d2..f234bc677c4 100644
--- a/src/test/compile-fail/mutable-huh-variance-vec4.rs
+++ b/src/test/compile-fail/mutable-huh-variance-vec4.rs
@@ -27,20 +27,20 @@ fn main() {
 
     f(v);
     g(v);
-    h(v); //! ERROR (values differ in mutability)
-    i(v); //! ERROR (values differ in mutability)
-    j(v); //! ERROR (values differ in mutability)
+    h(v); //~ ERROR (values differ in mutability)
+    i(v); //~ ERROR (values differ in mutability)
+    j(v); //~ ERROR (values differ in mutability)
 
-    f(w); //! ERROR (values differ in mutability)
+    f(w); //~ ERROR (values differ in mutability)
     g(w);
     h(w);
-    i(w); //! ERROR (values differ in mutability)
-    j(w); //! ERROR (values differ in mutability)
+    i(w); //~ ERROR (values differ in mutability)
+    j(w); //~ ERROR (values differ in mutability)
 
     // Note that without adding f() or h() to the mix, it is valid for
     // x to have the type ~[mut ~[const int]], and thus we can safely
     // call g() and i() but not j():
     g(x);
     i(x);
-    j(x); //! ERROR (values differ in mutability)
+    j(x); //~ ERROR (values differ in mutability)
 }
diff --git a/src/test/compile-fail/mutable-huh-vec-assign.rs b/src/test/compile-fail/mutable-huh-vec-assign.rs
index 3d81d1bd864..aad87ccbb6e 100644
--- a/src/test/compile-fail/mutable-huh-vec-assign.rs
+++ b/src/test/compile-fail/mutable-huh-vec-assign.rs
@@ -1,7 +1,7 @@
 fn main() {
     fn f(&&v: ~[const int]) {
         // This shouldn't be possible
-        v[0] = 1 //! ERROR assigning to const vec content
+        v[0] = 1 //~ ERROR assigning to const vec content
     }
 
     let v = ~[0];
diff --git a/src/test/compile-fail/native-unsafe-fn-called.rs b/src/test/compile-fail/native-unsafe-fn-called.rs
index ee44500fee3..b24a4cf6918 100644
--- a/src/test/compile-fail/native-unsafe-fn-called.rs
+++ b/src/test/compile-fail/native-unsafe-fn-called.rs
@@ -7,6 +7,6 @@ native mod test {
 
 fn main() {
     test::free();
-    //!^ ERROR access to unsafe function requires unsafe function or block
+    //~^ ERROR access to unsafe function requires unsafe function or block
 }
 
diff --git a/src/test/compile-fail/native-unsafe-fn.rs b/src/test/compile-fail/native-unsafe-fn.rs
index 8615c7795a9..fd2ace23457 100644
--- a/src/test/compile-fail/native-unsafe-fn.rs
+++ b/src/test/compile-fail/native-unsafe-fn.rs
@@ -7,7 +7,7 @@ native mod test {
 
 fn main() {
     let x = test::free;
-    //!^ ERROR access to unsafe function requires unsafe function or block
+    //~^ ERROR access to unsafe function requires unsafe function or block
 }
 
 
diff --git a/src/test/compile-fail/no-reuse-move-arc.rs b/src/test/compile-fail/no-reuse-move-arc.rs
index ca45ce26f16..31fc99e276a 100644
--- a/src/test/compile-fail/no-reuse-move-arc.rs
+++ b/src/test/compile-fail/no-reuse-move-arc.rs
@@ -4,12 +4,12 @@ fn main() {
     let v = ~[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
     let arc_v = arc::arc(v);
 
-    do task::spawn() |move arc_v| { //! NOTE move of variable occurred here
+    do task::spawn() |move arc_v| { //~ NOTE move of variable occurred here
         let v = *arc::get(&arc_v);
         assert v[3] == 4;
     };
 
-    assert (*arc::get(&arc_v))[2] == 3; //! ERROR use of moved variable: `arc_v`
+    assert (*arc::get(&arc_v))[2] == 3; //~ ERROR use of moved variable: `arc_v`
 
     log(info, arc_v);
 }
diff --git a/src/test/compile-fail/no-send-res-ports.rs b/src/test/compile-fail/no-send-res-ports.rs
index a89f11be343..b6304693149 100644
--- a/src/test/compile-fail/no-send-res-ports.rs
+++ b/src/test/compile-fail/no-send-res-ports.rs
@@ -7,7 +7,7 @@ fn main() {
    
     let x = ~mut some(foo(comm::port()));
 
-    do task::spawn |move x| { //! ERROR not a sendable value
+    do task::spawn |move x| { //~ ERROR not a sendable value
         let mut y = none;
         *x <-> y;
         log(error, y);
diff --git a/src/test/compile-fail/noexporttypeexe.rs b/src/test/compile-fail/noexporttypeexe.rs
index b88f3b34c61..22de85cdbfb 100644
--- a/src/test/compile-fail/noexporttypeexe.rs
+++ b/src/test/compile-fail/noexporttypeexe.rs
@@ -8,6 +8,6 @@ fn main() {
     // because the def_id associated with the type was
     // not convertible to a path.
   let x: int = noexporttypelib::foo();
-    //!^ ERROR expected `int` but found `core::option::option<int>`
+    //~^ ERROR expected `int` but found `core::option::option<int>`
 }
 
diff --git a/src/test/compile-fail/non-const.rs b/src/test/compile-fail/non-const.rs
index f2b76bbe306..885ac1a8f94 100644
--- a/src/test/compile-fail/non-const.rs
+++ b/src/test/compile-fail/non-const.rs
@@ -16,15 +16,15 @@ class r2 {
 
 fn main() {
     foo({f: 3});
-    foo({mut f: 3}); //! ERROR missing `const`
+    foo({mut f: 3}); //~ ERROR missing `const`
     foo(~[1]);
-    foo(~[mut 1]); //! ERROR missing `const`
+    foo(~[mut 1]); //~ ERROR missing `const`
     foo(~1);
-    foo(~mut 1); //! ERROR missing `const`
+    foo(~mut 1); //~ ERROR missing `const`
     foo(@1);
-    foo(@mut 1); //! ERROR missing `const`
+    foo(@mut 1); //~ ERROR missing `const`
     foo(r(1)); // this is okay now.
-    foo(r2(@mut 1)); //! ERROR missing `const`
+    foo(r2(@mut 1)); //~ ERROR missing `const`
     foo("123");
-    foo({f: {mut f: 1}}); //! ERROR missing `const`
+    foo({f: {mut f: 1}}); //~ ERROR missing `const`
 }
diff --git a/src/test/compile-fail/non-copyable-void.rs b/src/test/compile-fail/non-copyable-void.rs
index db3f50c8ef5..59136683e6f 100644
--- a/src/test/compile-fail/non-copyable-void.rs
+++ b/src/test/compile-fail/non-copyable-void.rs
@@ -3,6 +3,6 @@ fn main() {
     let y : *libc::c_void = x as *libc::c_void;
     unsafe {
         let _z = *y;
-        //!^ ERROR copying a noncopyable value
+        //~^ ERROR copying a noncopyable value
     }
 }
diff --git a/src/test/compile-fail/non-exhaustive-match.rs b/src/test/compile-fail/non-exhaustive-match.rs
index 8863be41474..0d004df5c1a 100644
--- a/src/test/compile-fail/non-exhaustive-match.rs
+++ b/src/test/compile-fail/non-exhaustive-match.rs
@@ -2,21 +2,21 @@ enum t { a, b, }
 
 fn main() {
     let x = a;
-    alt x { b { } } //! ERROR non-exhaustive patterns
-    alt true { //! ERROR non-exhaustive patterns
+    alt x { b { } } //~ ERROR non-exhaustive patterns
+    alt true { //~ ERROR non-exhaustive patterns
       true {}
     }
-    alt @some(10) { //! ERROR non-exhaustive patterns
+    alt @some(10) { //~ ERROR non-exhaustive patterns
       @none {}
     }
-    alt (2, 3, 4) { //! ERROR non-exhaustive patterns
+    alt (2, 3, 4) { //~ ERROR non-exhaustive patterns
       (_, _, 4) {}
     }
-    alt (a, a) { //! ERROR non-exhaustive patterns
+    alt (a, a) { //~ ERROR non-exhaustive patterns
       (a, b) {}
       (b, a) {}
     }
-    alt a { //! ERROR b not covered
+    alt a { //~ ERROR b not covered
       a {}
     }
     // This is exhaustive, though the algorithm got it wrong at one point
diff --git a/src/test/compile-fail/not-enough-arguments.rs b/src/test/compile-fail/not-enough-arguments.rs
index 2aeda5a7652..36480253c97 100644
--- a/src/test/compile-fail/not-enough-arguments.rs
+++ b/src/test/compile-fail/not-enough-arguments.rs
@@ -8,5 +8,5 @@ fn foo(a: int, b: int, c: int, d:int) {
 
 fn main() {
   foo(1, 2, 3);
-  //!^ ERROR this function takes 4 parameters but 3
+  //~^ ERROR this function takes 4 parameters but 3
 }
diff --git a/src/test/compile-fail/occurs-check.rs b/src/test/compile-fail/occurs-check.rs
index a802967bc7a..49b6d42a129 100644
--- a/src/test/compile-fail/occurs-check.rs
+++ b/src/test/compile-fail/occurs-check.rs
@@ -1,4 +1,4 @@
 fn main() {
-    let f; //! ERROR cyclic type of infinite size
+    let f; //~ ERROR cyclic type of infinite size
     f = @f;
 }
diff --git a/src/test/compile-fail/omitted-arg-in-item-fn.rs b/src/test/compile-fail/omitted-arg-in-item-fn.rs
index 85674b92a1d..157718a26a6 100644
--- a/src/test/compile-fail/omitted-arg-in-item-fn.rs
+++ b/src/test/compile-fail/omitted-arg-in-item-fn.rs
@@ -1,4 +1,4 @@
 // xfail-test
 
-fn foo(x) { //! ERROR expecting ':' but found ')'
+fn foo(x) { //~ ERROR expecting ':' but found ')'
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/omitted-arg-wrong-types.rs b/src/test/compile-fail/omitted-arg-wrong-types.rs
index 7f5fb30f63b..e6ad54f219d 100644
--- a/src/test/compile-fail/omitted-arg-wrong-types.rs
+++ b/src/test/compile-fail/omitted-arg-wrong-types.rs
@@ -4,8 +4,8 @@ fn let_in<T>(x: T, f: fn(T)) {}
 
 fn main() {
     let_in(3u, fn&(i) { assert i == 3; });
-    //!^ ERROR expected `uint` but found `int`
+    //~^ ERROR expected `uint` but found `int`
 
     let_in(3, fn&(i) { assert i == 3u; });
-    //!^ ERROR expected `int` but found `uint`
+    //~^ ERROR expected `int` but found `uint`
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/pat-shadow-in-nested-binding.rs b/src/test/compile-fail/pat-shadow-in-nested-binding.rs
index 60fb9b831ab..c4ba5131879 100644
--- a/src/test/compile-fail/pat-shadow-in-nested-binding.rs
+++ b/src/test/compile-fail/pat-shadow-in-nested-binding.rs
@@ -1,5 +1,5 @@
 enum foo = uint;
 
 fn main() {
-    let (foo, _) = (2, 3); //! ERROR declaration of `foo` shadows an enum that's in scope
+    let (foo, _) = (2, 3); //~ ERROR declaration of `foo` shadows an enum that's in scope
 }
diff --git a/src/test/compile-fail/placement-new-bad-method-type.rs b/src/test/compile-fail/placement-new-bad-method-type.rs
index 562faf84136..10db67161d1 100644
--- a/src/test/compile-fail/placement-new-bad-method-type.rs
+++ b/src/test/compile-fail/placement-new-bad-method-type.rs
@@ -11,5 +11,5 @@ impl methods for malloc_pool {
 fn main() {
     let p = &malloc_pool(());
     let x = new(*p) 4u;
-    //!^ ERROR mismatched types: expected `fn(uint, uint) -> *()`
+    //~^ ERROR mismatched types: expected `fn(uint, uint) -> *()`
 }
diff --git a/src/test/compile-fail/pptypedef.rs b/src/test/compile-fail/pptypedef.rs
index 941535ef0f1..90d0df078b8 100644
--- a/src/test/compile-fail/pptypedef.rs
+++ b/src/test/compile-fail/pptypedef.rs
@@ -4,5 +4,5 @@ fn bar(_t: foo) {}
 
 fn main() {
     // we used to print foo<int>:
-    bar(some(3u)); //! ERROR mismatched types: expected `foo`
+    bar(some(3u)); //~ ERROR mismatched types: expected `foo`
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/prim-with-args.rs b/src/test/compile-fail/prim-with-args.rs
index 955d17cb33b..6edb9cb59d8 100644
--- a/src/test/compile-fail/prim-with-args.rs
+++ b/src/test/compile-fail/prim-with-args.rs
@@ -1,29 +1,29 @@
 fn main() {
 
-let x: int<int>; //! ERROR Type parameters are not allowed on this type.
-let x: i8<int>; //! ERROR Type parameters are not allowed on this type.
-let x: i16<int>; //! ERROR Type parameters are not allowed on this type.
-let x: i32<int>; //! ERROR Type parameters are not allowed on this type.
-let x: i64<int>; //! ERROR Type parameters are not allowed on this type.
-let x: uint<int>; //! ERROR Type parameters are not allowed on this type.
-let x: u8<int>; //! ERROR Type parameters are not allowed on this type.
-let x: u16<int>; //! ERROR Type parameters are not allowed on this type.
-let x: u32<int>; //! ERROR Type parameters are not allowed on this type.
-let x: u64<int>; //! ERROR Type parameters are not allowed on this type.
-let x: float<int>; //! ERROR Type parameters are not allowed on this type.
-let x: char<int>; //! ERROR Type parameters are not allowed on this type.
+let x: int<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: i8<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: i16<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: i32<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: i64<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: uint<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: u8<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: u16<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: u32<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: u64<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: float<int>; //~ ERROR Type parameters are not allowed on this type.
+let x: char<int>; //~ ERROR Type parameters are not allowed on this type.
 
-let x: int/&; //! ERROR Region parameters are not allowed on this type.
-let x: i8/&; //! ERROR Region parameters are not allowed on this type.
-let x: i16/&; //! ERROR Region parameters are not allowed on this type.
-let x: i32/&; //! ERROR Region parameters are not allowed on this type.
-let x: i64/&; //! ERROR Region parameters are not allowed on this type.
-let x: uint/&; //! ERROR Region parameters are not allowed on this type.
-let x: u8/&; //! ERROR Region parameters are not allowed on this type.
-let x: u16/&; //! ERROR Region parameters are not allowed on this type.
-let x: u32/&; //! ERROR Region parameters are not allowed on this type.
-let x: u64/&; //! ERROR Region parameters are not allowed on this type.
-let x: float/&; //! ERROR Region parameters are not allowed on this type.
-let x: char/&; //! ERROR Region parameters are not allowed on this type.
+let x: int/&; //~ ERROR Region parameters are not allowed on this type.
+let x: i8/&; //~ ERROR Region parameters are not allowed on this type.
+let x: i16/&; //~ ERROR Region parameters are not allowed on this type.
+let x: i32/&; //~ ERROR Region parameters are not allowed on this type.
+let x: i64/&; //~ ERROR Region parameters are not allowed on this type.
+let x: uint/&; //~ ERROR Region parameters are not allowed on this type.
+let x: u8/&; //~ ERROR Region parameters are not allowed on this type.
+let x: u16/&; //~ ERROR Region parameters are not allowed on this type.
+let x: u32/&; //~ ERROR Region parameters are not allowed on this type.
+let x: u64/&; //~ ERROR Region parameters are not allowed on this type.
+let x: float/&; //~ ERROR Region parameters are not allowed on this type.
+let x: char/&; //~ ERROR Region parameters are not allowed on this type.
 
 }
diff --git a/src/test/compile-fail/pure-higher-order.rs b/src/test/compile-fail/pure-higher-order.rs
index 5d5ced198f1..13455b1d74f 100644
--- a/src/test/compile-fail/pure-higher-order.rs
+++ b/src/test/compile-fail/pure-higher-order.rs
@@ -19,20 +19,20 @@ pure fn range3(from: uint, to: uint, f: fn(uint)) {
 }
 
 pure fn range4(from: uint, to: uint) {
-    range(from, to, print) //! ERROR access to impure function prohibited in pure context
+    range(from, to, print) //~ ERROR access to impure function prohibited in pure context
 }
 
 pure fn range5(from: uint, to: uint, x: {f: fn(uint)}) {
-    range(from, to, x.f) //! ERROR access to impure function prohibited in pure context
+    range(from, to, x.f) //~ ERROR access to impure function prohibited in pure context
 }
 
 pure fn range6(from: uint, to: uint, x: @{f: fn(uint)}) {
-    range(from, to, x.f) //! ERROR access to impure function prohibited in pure context
+    range(from, to, x.f) //~ ERROR access to impure function prohibited in pure context
 }
 
 pure fn range7(from: uint, to: uint) {
     do range(from, to) |i| {
-        print(i); //! ERROR access to impure function prohibited in pure context
+        print(i); //~ ERROR access to impure function prohibited in pure context
     }
 }
 
diff --git a/src/test/compile-fail/pure-loop-body.rs b/src/test/compile-fail/pure-loop-body.rs
index 986e0801e74..e418a2f201f 100644
--- a/src/test/compile-fail/pure-loop-body.rs
+++ b/src/test/compile-fail/pure-loop-body.rs
@@ -14,7 +14,7 @@ pure fn range2(from: uint, to: uint, f: fn(uint)) {
 
 pure fn range3(from: uint, to: uint, f: {x: fn(uint)}) {
     for range(from, to) |i| {
-        f.x(i*2u); //! ERROR access to impure function prohibited
+        f.x(i*2u); //~ ERROR access to impure function prohibited
     }
 }
 
diff --git a/src/test/compile-fail/pure-modifies-aliased.rs b/src/test/compile-fail/pure-modifies-aliased.rs
index e8f469a8c8c..d63169d512f 100644
--- a/src/test/compile-fail/pure-modifies-aliased.rs
+++ b/src/test/compile-fail/pure-modifies-aliased.rs
@@ -1,16 +1,16 @@
 // Check that pure functions cannot modify aliased state.
 
 pure fn modify_in_ref(&&sum: {mut f: int}) {
-    sum.f = 3; //! ERROR assigning to mutable field prohibited in pure context
+    sum.f = 3; //~ ERROR assigning to mutable field prohibited in pure context
 }
 
 pure fn modify_in_box(sum: @mut {f: int}) {
-    sum.f = 3; //! ERROR assigning to mutable field prohibited in pure context
+    sum.f = 3; //~ ERROR assigning to mutable field prohibited in pure context
 }
 
 impl foo for int {
     pure fn modify_in_box_rec(sum: @{mut f: int}) {
-        sum.f = self; //! ERROR assigning to mutable field prohibited in pure context
+        sum.f = self; //~ ERROR assigning to mutable field prohibited in pure context
     }
 }
 
diff --git a/src/test/compile-fail/pure-overloaded-op.rs b/src/test/compile-fail/pure-overloaded-op.rs
index cb7bdeb6442..3f29e385202 100644
--- a/src/test/compile-fail/pure-overloaded-op.rs
+++ b/src/test/compile-fail/pure-overloaded-op.rs
@@ -15,12 +15,12 @@ impl foo for point {
 pure fn a(p: point) -> int { p + 3 }
 
 pure fn b(p: point) -> int { p * 3 }
-//!^ ERROR access to impure function prohibited in pure context
+//~^ ERROR access to impure function prohibited in pure context
 
 pure fn c(p: point) -> int { p[3] }
-//!^ ERROR access to impure function prohibited in pure context
+//~^ ERROR access to impure function prohibited in pure context
 
 pure fn d(p: point) -> int { -p }
-//!^ ERROR access to impure function prohibited in pure context
+//~^ ERROR access to impure function prohibited in pure context
 
 fn main() {}
diff --git a/src/test/compile-fail/pure-subtyping.rs b/src/test/compile-fail/pure-subtyping.rs
index da0cab02e6b..6725bd19e44 100644
--- a/src/test/compile-fail/pure-subtyping.rs
+++ b/src/test/compile-fail/pure-subtyping.rs
@@ -2,14 +2,14 @@
 
 fn assign_to_pure(x: pure fn(), y: fn(), z: unsafe fn()) {
     let a: pure fn() = x;
-    let b: pure fn() = y; //! ERROR expected pure fn but found impure fn
-    let c: pure fn() = z; //! ERROR expected pure fn but found unsafe fn
+    let b: pure fn() = y; //~ ERROR expected pure fn but found impure fn
+    let c: pure fn() = z; //~ ERROR expected pure fn but found unsafe fn
 }
 
 fn assign_to_impure(x: pure fn(), y: fn(), z: unsafe fn()) {
     let h: fn() = x;
     let i: fn() = y;
-    let j: fn() = z; //! ERROR expected impure fn but found unsafe fn
+    let j: fn() = z; //~ ERROR expected impure fn but found unsafe fn
 }
 
 fn assign_to_unsafe(x: pure fn(), y: fn(), z: unsafe fn()) {
@@ -20,16 +20,16 @@ fn assign_to_unsafe(x: pure fn(), y: fn(), z: unsafe fn()) {
 
 fn assign_to_pure2(x: pure fn@(), y: fn@(), z: unsafe fn@()) {
     let a: pure fn() = x;
-    let b: pure fn() = y; //! ERROR expected pure fn but found impure fn
-    let c: pure fn() = z; //! ERROR expected pure fn but found unsafe fn
+    let b: pure fn() = y; //~ ERROR expected pure fn but found impure fn
+    let c: pure fn() = z; //~ ERROR expected pure fn but found unsafe fn
 
-    let a: pure fn~() = x; //! ERROR closure protocol mismatch (fn~ vs fn@)
-    let b: pure fn~() = y; //! ERROR closure protocol mismatch (fn~ vs fn@)
-    let c: pure fn~() = z; //! ERROR closure protocol mismatch (fn~ vs fn@)
+    let a: pure fn~() = x; //~ ERROR closure protocol mismatch (fn~ vs fn@)
+    let b: pure fn~() = y; //~ ERROR closure protocol mismatch (fn~ vs fn@)
+    let c: pure fn~() = z; //~ ERROR closure protocol mismatch (fn~ vs fn@)
 
-    let a: unsafe fn~() = x; //! ERROR closure protocol mismatch (fn~ vs fn@)
-    let b: unsafe fn~() = y; //! ERROR closure protocol mismatch (fn~ vs fn@)
-    let c: unsafe fn~() = z; //! ERROR closure protocol mismatch (fn~ vs fn@)
+    let a: unsafe fn~() = x; //~ ERROR closure protocol mismatch (fn~ vs fn@)
+    let b: unsafe fn~() = y; //~ ERROR closure protocol mismatch (fn~ vs fn@)
+    let c: unsafe fn~() = z; //~ ERROR closure protocol mismatch (fn~ vs fn@)
 }
 
 fn main() {
diff --git a/src/test/compile-fail/qquote-1.rs b/src/test/compile-fail/qquote-1.rs
index f3fce1317c7..43a3536ed16 100644
--- a/src/test/compile-fail/qquote-1.rs
+++ b/src/test/compile-fail/qquote-1.rs
@@ -40,7 +40,7 @@ fn main() {
     let abc = #ast{23};
     check_pp(abc,  pprust::print_expr, "23");
 
-    let expr3 = #ast{2 - $(abcd) + 7}; //! ERROR unresolved name: abcd
+    let expr3 = #ast{2 - $(abcd) + 7}; //~ ERROR unresolved name: abcd
     check_pp(expr3,  pprust::print_expr, "2 - 23 + 7");
 }
 
diff --git a/src/test/compile-fail/qquote-2.rs b/src/test/compile-fail/qquote-2.rs
index 6589e44dc5e..c83d26c3a57 100644
--- a/src/test/compile-fail/qquote-2.rs
+++ b/src/test/compile-fail/qquote-2.rs
@@ -37,7 +37,7 @@ fn mk_ctxt() -> fake_ext_ctxt {
 fn main() {
     let ext_cx = mk_ctxt();
 
-    let stmt = #ast(stmt){let x int = 20;}; //! ERROR expected end-of-string
+    let stmt = #ast(stmt){let x int = 20;}; //~ ERROR expected end-of-string
     check_pp(*stmt,  pprust::print_stmt, "");
 }
 
diff --git a/src/test/compile-fail/rec-expected.rs b/src/test/compile-fail/rec-expected.rs
index acbb7f03531..1f69ffc7a4d 100644
--- a/src/test/compile-fail/rec-expected.rs
+++ b/src/test/compile-fail/rec-expected.rs
@@ -3,7 +3,7 @@ type bar = {b: int};
 
 fn want_foo(f: foo) {}
 fn have_bar(b: bar) {
-    want_foo(b); //! ERROR expected a record with field `a`
+    want_foo(b); //~ ERROR expected a record with field `a`
 }
 
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/region-unused.rs b/src/test/compile-fail/region-unused.rs
index 617315853af..bf48e3f0da2 100644
--- a/src/test/compile-fail/region-unused.rs
+++ b/src/test/compile-fail/region-unused.rs
@@ -1,3 +1,3 @@
-type foo/& = {f: int}; //! ERROR lifetime `self` unused
+type foo/& = {f: int}; //~ ERROR lifetime `self` unused
 
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/regions-addr-of-arg.rs b/src/test/compile-fail/regions-addr-of-arg.rs
index 4c14937de68..09b5008aa99 100644
--- a/src/test/compile-fail/regions-addr-of-arg.rs
+++ b/src/test/compile-fail/regions-addr-of-arg.rs
@@ -1,5 +1,5 @@
 fn foo(a: int) {
-    let _p: &static.int = &a; //! ERROR mismatched types
+    let _p: &static.int = &a; //~ ERROR mismatched types
 }
 
 fn bar(a: int) {
diff --git a/src/test/compile-fail/regions-addr-of-self.rs b/src/test/compile-fail/regions-addr-of-self.rs
index b9943bc18e0..39e9f568758 100644
--- a/src/test/compile-fail/regions-addr-of-self.rs
+++ b/src/test/compile-fail/regions-addr-of-self.rs
@@ -6,7 +6,7 @@ class dog {
     }
 
     fn chase_cat() {
-        let p: &static.mut uint = &mut self.cats_chased; //! ERROR mismatched types
+        let p: &static.mut uint = &mut self.cats_chased; //~ ERROR mismatched types
         *p += 1u;
     }
 
diff --git a/src/test/compile-fail/regions-addr-of-upvar-self.rs b/src/test/compile-fail/regions-addr-of-upvar-self.rs
index 4920d1c71f5..7fa455487e1 100644
--- a/src/test/compile-fail/regions-addr-of-upvar-self.rs
+++ b/src/test/compile-fail/regions-addr-of-upvar-self.rs
@@ -7,7 +7,7 @@ class dog {
 
     fn chase_cat() {
         for uint::range(0u, 10u) |i| {
-            let p: &static.mut uint = &mut self.food; //! ERROR mismatched types
+            let p: &static.mut uint = &mut self.food; //~ ERROR mismatched types
             *p = 3u;
         }
     }
diff --git a/src/test/compile-fail/regions-appearance-constraint.rs b/src/test/compile-fail/regions-appearance-constraint.rs
index c37d3c1d219..300aece8c3c 100644
--- a/src/test/compile-fail/regions-appearance-constraint.rs
+++ b/src/test/compile-fail/regions-appearance-constraint.rs
@@ -17,7 +17,7 @@ fn testfn(cond: bool) {
     let mut y = @4;
 
     let mut a = &*x;
-    //!^ ERROR reference is not valid outside of its lifetime
+    //~^ ERROR reference is not valid outside of its lifetime
 
     let mut exp = 3;
     if cond {
diff --git a/src/test/compile-fail/regions-blk.rs b/src/test/compile-fail/regions-blk.rs
index 0d0cdb6d93f..9e6b5d0d342 100644
--- a/src/test/compile-fail/regions-blk.rs
+++ b/src/test/compile-fail/regions-blk.rs
@@ -7,7 +7,7 @@ fn foo(cond: bool) {
         z = &x;
     } else {
         let w: &blk.int = &x;
-        z = w; //! ERROR mismatched types
+        z = w; //~ ERROR mismatched types
     }
 }
 
diff --git a/src/test/compile-fail/regions-borrow.rs b/src/test/compile-fail/regions-borrow.rs
index 5bcfc984162..5e893246cdc 100644
--- a/src/test/compile-fail/regions-borrow.rs
+++ b/src/test/compile-fail/regions-borrow.rs
@@ -3,6 +3,6 @@ fn foo(x: &uint) -> &uint { x }
 fn main() {
     let p = @3u;
     let r = foo(p);
-    //!^ ERROR reference is not valid
+    //~^ ERROR reference is not valid
     assert *p == *r;
 }
diff --git a/src/test/compile-fail/regions-bounds.rs b/src/test/compile-fail/regions-bounds.rs
index c62db9b8fff..9eef8c1a643 100644
--- a/src/test/compile-fail/regions-bounds.rs
+++ b/src/test/compile-fail/regions-bounds.rs
@@ -7,20 +7,20 @@ iface an_iface/& { }
 class a_class/& { let x:int; new(x:int) { self.x = x; } }
 
 fn a_fn1(e: an_enum/&a) -> an_enum/&b {
-    ret e; //! ERROR mismatched types: expected `an_enum/&b` but found `an_enum/&a`
+    ret e; //~ ERROR mismatched types: expected `an_enum/&b` but found `an_enum/&a`
 }
 
 fn a_fn2(e: an_iface/&a) -> an_iface/&b {
-    ret e; //! ERROR mismatched types: expected `an_iface/&b` but found `an_iface/&a`
+    ret e; //~ ERROR mismatched types: expected `an_iface/&b` but found `an_iface/&a`
 }
 
 fn a_fn3(e: a_class/&a) -> a_class/&b {
-    ret e; //! ERROR mismatched types: expected `a_class/&b` but found `a_class/&a`
+    ret e; //~ ERROR mismatched types: expected `a_class/&b` but found `a_class/&a`
 }
 
 fn a_fn4(e: int/&a) -> int/&b {
-    //!^ ERROR Region parameters are not allowed on this type.
-    //!^^ ERROR Region parameters are not allowed on this type.
+    //~^ ERROR Region parameters are not allowed on this type.
+    //~^^ ERROR Region parameters are not allowed on this type.
     ret e;
 }
 
diff --git a/src/test/compile-fail/regions-creating-enums.rs b/src/test/compile-fail/regions-creating-enums.rs
index 226039f4c2a..3873dcb6d0a 100644
--- a/src/test/compile-fail/regions-creating-enums.rs
+++ b/src/test/compile-fail/regions-creating-enums.rs
@@ -20,12 +20,12 @@ fn compute(x: &ast) -> uint {
 fn map_nums(x: &ast, f: fn(uint) -> uint) -> &ast {
     alt *x {
       num(x) {
-        ret &num(f(x)); //! ERROR mismatched types: expected `&ast/&` but found
+        ret &num(f(x)); //~ ERROR mismatched types: expected `&ast/&` but found
       }
       add(x, y) {
         let m_x = map_nums(x, f);
         let m_y = map_nums(y, f);
-        ret &add(m_x, m_y);  //! ERROR mismatched types: expected `&ast/&` but found
+        ret &add(m_x, m_y);  //~ ERROR mismatched types: expected `&ast/&` but found
       }
     }
 }
diff --git a/src/test/compile-fail/regions-creating-enums3.rs b/src/test/compile-fail/regions-creating-enums3.rs
index d650441aab7..7f162b494aa 100644
--- a/src/test/compile-fail/regions-creating-enums3.rs
+++ b/src/test/compile-fail/regions-creating-enums3.rs
@@ -4,7 +4,7 @@ enum ast/& {
 }
 
 fn mk_add_bad1(x: &a.ast, y: &b.ast) -> ast/&a {
-    add(x, y) //! ERROR mismatched types: expected `&a.ast/&a` but found `&b.ast/&b`
+    add(x, y) //~ ERROR mismatched types: expected `&a.ast/&a` but found `&b.ast/&b`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/regions-creating-enums4.rs b/src/test/compile-fail/regions-creating-enums4.rs
index f80334d3fea..a95b6f9f4bd 100644
--- a/src/test/compile-fail/regions-creating-enums4.rs
+++ b/src/test/compile-fail/regions-creating-enums4.rs
@@ -4,7 +4,7 @@ enum ast/& {
 }
 
 fn mk_add_bad2(x: &a.ast, y: &a.ast, z: &ast) -> ast {
-    add(x, y) //! ERROR mismatched types: expected `ast/&` but found `ast/&a`
+    add(x, y) //~ ERROR mismatched types: expected `ast/&` but found `ast/&a`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/regions-escape-into-other-fn.rs b/src/test/compile-fail/regions-escape-into-other-fn.rs
index fc3247de055..67c7dd3317a 100644
--- a/src/test/compile-fail/regions-escape-into-other-fn.rs
+++ b/src/test/compile-fail/regions-escape-into-other-fn.rs
@@ -3,5 +3,5 @@ fn bar(x: &uint) -> uint { *x }
 
 fn main() {
     let p = @3u;
-    bar(foo(p)); //! ERROR reference is not valid
+    bar(foo(p)); //~ ERROR reference is not valid
 }
diff --git a/src/test/compile-fail/regions-escape-loop-via-variable.rs b/src/test/compile-fail/regions-escape-loop-via-variable.rs
index bf0c625abab..04900da8ae5 100644
--- a/src/test/compile-fail/regions-escape-loop-via-variable.rs
+++ b/src/test/compile-fail/regions-escape-loop-via-variable.rs
@@ -4,7 +4,7 @@ fn main() {
     // Here, the variable `p` gets inferred to a type with a lifetime
     // of the loop body.  The regionck then determines that this type
     // is invalid.
-    let mut p = //! ERROR reference is not valid
+    let mut p = //~ ERROR reference is not valid
         &x;
 
     loop {
diff --git a/src/test/compile-fail/regions-escape-loop-via-vec.rs b/src/test/compile-fail/regions-escape-loop-via-vec.rs
index 69bfe7bd020..5f57a3e87b1 100644
--- a/src/test/compile-fail/regions-escape-loop-via-vec.rs
+++ b/src/test/compile-fail/regions-escape-loop-via-vec.rs
@@ -2,16 +2,16 @@
 // This generates a ton of error msgs at the moment.
 fn broken() -> int {
     let mut x = 3;
-    let mut y = ~[&mut x]; //! ERROR reference is not valid
+    let mut y = ~[&mut x]; //~ ERROR reference is not valid
     while x < 10 {
         let mut z = x;
         y += ~[&mut z];
         x += 1;
     }
     vec::foldl(0, y, |v, p| v + *p )
-    //!^ ERROR reference is not valid
-    //!^^ ERROR reference is not valid
-    //!^^^ ERROR reference is not valid
+    //~^ ERROR reference is not valid
+    //~^^ ERROR reference is not valid
+    //~^^^ ERROR reference is not valid
 }
 
 fn main() { }
\ No newline at end of file
diff --git a/src/test/compile-fail/regions-fn-subtyping.rs b/src/test/compile-fail/regions-fn-subtyping.rs
index 3cbee781bba..571b5da41fe 100644
--- a/src/test/compile-fail/regions-fn-subtyping.rs
+++ b/src/test/compile-fail/regions-fn-subtyping.rs
@@ -7,7 +7,7 @@ fn has_same_region(f: fn(x: &a.int, g: fn(y: &a.int))) {
     // accept any region.  That is, the type that `has_same_region`
     // expects is *not* a subtype of the type that `wants_two_regions`
     // expects.
-    wants_two_regions(f); //! ERROR mismatched types
+    wants_two_regions(f); //~ ERROR mismatched types
 }
 
 fn wants_two_regions(_f: fn(x: &int, g: fn(y: &int))) {
diff --git a/src/test/compile-fail/regions-fns.rs b/src/test/compile-fail/regions-fns.rs
index 0f636d27dc4..fc8a631c6b7 100644
--- a/src/test/compile-fail/regions-fns.rs
+++ b/src/test/compile-fail/regions-fns.rs
@@ -2,7 +2,7 @@
 // with lifetime r, and a is a pointer with unspecified lifetime.
 fn not_ok_1(a: &uint) {
     let mut g: fn@(x: &uint) = fn@(x: &r.uint) {};
-    //!^ ERROR mismatched types
+    //~^ ERROR mismatched types
     g(a);
 }
 
@@ -11,7 +11,7 @@ fn not_ok_1(a: &uint) {
 fn not_ok_2(s: &s.uint)
 {
     let mut g: fn@(x: &uint) = fn@(x: &r.uint) {};
-    //!^ ERROR mismatched types
+    //~^ ERROR mismatched types
     g(s);
 }
 
diff --git a/src/test/compile-fail/regions-iface-1.rs b/src/test/compile-fail/regions-iface-1.rs
index a2a2e39a2f8..f6d4d5885f9 100644
--- a/src/test/compile-fail/regions-iface-1.rs
+++ b/src/test/compile-fail/regions-iface-1.rs
@@ -11,7 +11,7 @@ impl/& of get_ctxt for has_ctxt {
 
     // Here an error occurs because we used `&self` but
     // the definition used `&`:
-    fn get_ctxt() -> &self.ctxt { //! ERROR method `get_ctxt` has an incompatible type
+    fn get_ctxt() -> &self.ctxt { //~ ERROR method `get_ctxt` has an incompatible type
         self.c
     }
 
diff --git a/src/test/compile-fail/regions-iface-2.rs b/src/test/compile-fail/regions-iface-2.rs
index 76f4d24291a..3ebba4e2d2f 100644
--- a/src/test/compile-fail/regions-iface-2.rs
+++ b/src/test/compile-fail/regions-iface-2.rs
@@ -13,7 +13,7 @@ impl/& of get_ctxt for has_ctxt {
 fn make_gc() -> get_ctxt  {
     let ctxt = { v: 22u };
     let hc = { c: &ctxt };
-    ret hc as get_ctxt; //! ERROR mismatched types: expected `get_ctxt/&`
+    ret hc as get_ctxt; //~ ERROR mismatched types: expected `get_ctxt/&`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/regions-iface-3.rs b/src/test/compile-fail/regions-iface-3.rs
index ae8d0130dff..efd15583ab6 100644
--- a/src/test/compile-fail/regions-iface-3.rs
+++ b/src/test/compile-fail/regions-iface-3.rs
@@ -3,11 +3,11 @@ iface get_ctxt/& {
 }
 
 fn make_gc1(gc: get_ctxt/&a) -> get_ctxt/&b  {
-    ret gc; //! ERROR mismatched types: expected `get_ctxt/&b` but found `get_ctxt/&a`
+    ret gc; //~ ERROR mismatched types: expected `get_ctxt/&b` but found `get_ctxt/&a`
 }
 
 fn make_gc2(gc: get_ctxt/&a) -> get_ctxt/&b  {
-    ret gc as get_ctxt; //! ERROR mismatched types: expected `get_ctxt/&b` but found `get_ctxt/&a`
+    ret gc as get_ctxt; //~ ERROR mismatched types: expected `get_ctxt/&b` but found `get_ctxt/&a`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/regions-in-consts.rs b/src/test/compile-fail/regions-in-consts.rs
index c48fec0f8ac..83a117d951a 100644
--- a/src/test/compile-fail/regions-in-consts.rs
+++ b/src/test/compile-fail/regions-in-consts.rs
@@ -1,7 +1,7 @@
 // xfail-test
 
-const c_x: &blk.int = 22; //! ERROR only the static region is allowed here
-const c_y: &static.int = &22; //! ERROR only the static region is allowed here
+const c_x: &blk.int = 22; //~ ERROR only the static region is allowed here
+const c_y: &static.int = &22; //~ ERROR only the static region is allowed here
 
 fn main() {
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/regions-in-enums.rs b/src/test/compile-fail/regions-in-enums.rs
index 4126ef75547..d7b1ddf1e18 100644
--- a/src/test/compile-fail/regions-in-enums.rs
+++ b/src/test/compile-fail/regions-in-enums.rs
@@ -1,13 +1,13 @@
 enum no0 {
-    x0(&uint) //! ERROR to use region types here, the containing type must be declared with a region bound
+    x0(&uint) //~ ERROR to use region types here, the containing type must be declared with a region bound
 }
 
 enum no1 {
-    x1(&self.uint) //! ERROR to use region types here, the containing type must be declared with a region bound
+    x1(&self.uint) //~ ERROR to use region types here, the containing type must be declared with a region bound
 }
 
 enum no2 {
-    x2(&foo.uint) //! ERROR named regions other than `self` are not allowed as part of a type declaration
+    x2(&foo.uint) //~ ERROR named regions other than `self` are not allowed as part of a type declaration
 }
 
 enum yes0/& {
@@ -19,7 +19,7 @@ enum yes1/& {
 }
 
 enum yes2/& {
-    x5(&foo.uint) //! ERROR named regions other than `self` are not allowed as part of a type declaration
+    x5(&foo.uint) //~ ERROR named regions other than `self` are not allowed as part of a type declaration
 }
 
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/regions-in-rsrcs.rs b/src/test/compile-fail/regions-in-rsrcs.rs
index fe1482f92e8..55990fb0568 100644
--- a/src/test/compile-fail/regions-in-rsrcs.rs
+++ b/src/test/compile-fail/regions-in-rsrcs.rs
@@ -1,18 +1,18 @@
 class no0 {
-  let x: &uint; //! ERROR to use region types here, the containing type must be declared with a region bound
-  new(x: &uint) { self.x = x; } //! ERROR to use region types here, the containing type must be declared with a region bound
+  let x: &uint; //~ ERROR to use region types here, the containing type must be declared with a region bound
+  new(x: &uint) { self.x = x; } //~ ERROR to use region types here, the containing type must be declared with a region bound
   drop {}
 }
 
 class no1 {
-  let x: &self.uint; //! ERROR to use region types here, the containing type must be declared with a region bound
-  new(x: &self.uint) { self.x = x; } //! ERROR to use region types here, the containing type must be declared with a region bound
+  let x: &self.uint; //~ ERROR to use region types here, the containing type must be declared with a region bound
+  new(x: &self.uint) { self.x = x; } //~ ERROR to use region types here, the containing type must be declared with a region bound
   drop {}
 }
 
 class no2 {
-  let x: &foo.uint; //! ERROR named regions other than `self` are not allowed as part of a type declaration
-  new(x: &foo.uint) { self.x = x; } //! ERROR named regions other than `self` are not allowed as part of a type declaration
+  let x: &foo.uint; //~ ERROR named regions other than `self` are not allowed as part of a type declaration
+  new(x: &foo.uint) { self.x = x; } //~ ERROR named regions other than `self` are not allowed as part of a type declaration
   drop {}
 }
 
@@ -29,8 +29,8 @@ class yes1/& {
 }
 
 class yes2/& {
-  let x: &foo.uint; //! ERROR named regions other than `self` are not allowed as part of a type declaration
-  new(x: &foo.uint) { self.x = x; } //! ERROR named regions other than `self` are not allowed as part of a type declaration
+  let x: &foo.uint; //~ ERROR named regions other than `self` are not allowed as part of a type declaration
+  new(x: &foo.uint) { self.x = x; } //~ ERROR named regions other than `self` are not allowed as part of a type declaration
   drop {}
 }
 
diff --git a/src/test/compile-fail/regions-in-type-items.rs b/src/test/compile-fail/regions-in-type-items.rs
index c4619001e7c..bbc5da2004d 100644
--- a/src/test/compile-fail/regions-in-type-items.rs
+++ b/src/test/compile-fail/regions-in-type-items.rs
@@ -1,13 +1,13 @@
 type item_ty_no0 = {
-    x: &uint //! ERROR to use region types here, the containing type must be declared with a region bound
+    x: &uint //~ ERROR to use region types here, the containing type must be declared with a region bound
 };
 
 type item_ty_no1 = {
-    x: &self.uint //! ERROR to use region types here, the containing type must be declared with a region bound
+    x: &self.uint //~ ERROR to use region types here, the containing type must be declared with a region bound
 };
 
 type item_ty_no2 = {
-    x: &foo.uint //! ERROR named regions other than `self` are not allowed as part of a type declaration
+    x: &foo.uint //~ ERROR named regions other than `self` are not allowed as part of a type declaration
 };
 
 type item_ty_yes0/& = {
@@ -18,8 +18,8 @@ type item_ty_yes1/& = {
     x: &self.uint
 };
 
-type item_ty_yes2/& = { //! ERROR lifetime `self` unused inside reference-parameterized type
-    x: &foo.uint //! ERROR named regions other than `self` are not allowed as part of a type declaration
+type item_ty_yes2/& = { //~ ERROR lifetime `self` unused inside reference-parameterized type
+    x: &foo.uint //~ ERROR named regions other than `self` are not allowed as part of a type declaration
 };
 
 fn main() {}
\ No newline at end of file
diff --git a/src/test/compile-fail/regions-nested-fns.rs b/src/test/compile-fail/regions-nested-fns.rs
index 3f0a871a342..c6393d89d2b 100644
--- a/src/test/compile-fail/regions-nested-fns.rs
+++ b/src/test/compile-fail/regions-nested-fns.rs
@@ -7,13 +7,13 @@ fn nested(x: &x.int) {
     ignore(fn&(z: &z.int) {
         ay = x;
         ay = &y;
-        ay = z; //! ERROR references with lifetime
+        ay = z; //~ ERROR references with lifetime
     });
 
     ignore(fn&(z: &z.int) -> &z.int {
-        if false { ret x; }  //! ERROR references with lifetime
-        if false { ret &y; } //! ERROR references with lifetime
-        if false { ret ay; } //! ERROR references with lifetime
+        if false { ret x; }  //~ ERROR references with lifetime
+        if false { ret &y; } //~ ERROR references with lifetime
+        if false { ret ay; } //~ ERROR references with lifetime
         ret z;
     });
 }
diff --git a/src/test/compile-fail/regions-out-of-scope-slice.rs b/src/test/compile-fail/regions-out-of-scope-slice.rs
index c9d9fc61752..c6936cf8392 100644
--- a/src/test/compile-fail/regions-out-of-scope-slice.rs
+++ b/src/test/compile-fail/regions-out-of-scope-slice.rs
@@ -3,7 +3,7 @@
 fn foo(cond: bool) {
     // Here we will infer a type that uses the
     // region of the if stmt then block, but in the scope:
-    let mut x; //! ERROR foo
+    let mut x; //~ ERROR foo
 
     if cond {
         x = &[1,2,3]blk;
diff --git a/src/test/compile-fail/regions-scoping.rs b/src/test/compile-fail/regions-scoping.rs
index 0e83f30e8a3..6e2bd60c4cc 100644
--- a/src/test/compile-fail/regions-scoping.rs
+++ b/src/test/compile-fail/regions-scoping.rs
@@ -9,19 +9,19 @@ fn nested(x: &x.int) {  // (1)
                   z: &z.int) -> &z.int) // A fresh region `z` (3)
             -> &x.int {
 
-            if false { ret z(x, x, x); } //! ERROR mismatched types: expected `&y.int` but found `&x.int`
-            if false { ret z(x, x, y); } //! ERROR mismatched types: expected `&y.int` but found `&x.int`
-                                        //!^ ERROR mismatched types: expected `&x.int` but found `&y.int`
+            if false { ret z(x, x, x); } //~ ERROR mismatched types: expected `&y.int` but found `&x.int`
+            if false { ret z(x, x, y); } //~ ERROR mismatched types: expected `&y.int` but found `&x.int`
+                                        //~^ ERROR mismatched types: expected `&x.int` but found `&y.int`
             if false { ret z(x, y, x); }
-            if false { ret z(x, y, y); } //! ERROR mismatched types: expected `&x.int` but found `&y.int`
-            if false { ret z(y, x, x); } //! ERROR mismatched types: expected `&x.int` but found `&y.int`
-                                        //!^ ERROR mismatched types: expected `&y.int` but found `&x.int`
-            if false { ret z(y, x, y); } //! ERROR mismatched types: expected `&x.int` but found `&y.int`
-                                        //!^ ERROR mismatched types: expected `&y.int` but found `&x.int`
-                                       //!^^ ERROR mismatched types: expected `&x.int` but found `&y.int`
-            if false { ret z(y, y, x); } //! ERROR mismatched types: expected `&x.int` but found `&y.int`
-            if false { ret z(y, y, y); } //! ERROR mismatched types: expected `&x.int` but found `&y.int`
-                                        //!^ ERROR mismatched types: expected `&x.int` but found `&y.int`
+            if false { ret z(x, y, y); } //~ ERROR mismatched types: expected `&x.int` but found `&y.int`
+            if false { ret z(y, x, x); } //~ ERROR mismatched types: expected `&x.int` but found `&y.int`
+                                        //~^ ERROR mismatched types: expected `&y.int` but found `&x.int`
+            if false { ret z(y, x, y); } //~ ERROR mismatched types: expected `&x.int` but found `&y.int`
+                                        //~^ ERROR mismatched types: expected `&y.int` but found `&x.int`
+                                       //~^^ ERROR mismatched types: expected `&x.int` but found `&y.int`
+            if false { ret z(y, y, x); } //~ ERROR mismatched types: expected `&x.int` but found `&y.int`
+            if false { ret z(y, y, y); } //~ ERROR mismatched types: expected `&x.int` but found `&y.int`
+                                        //~^ ERROR mismatched types: expected `&x.int` but found `&y.int`
             fail;
         }
     ) |foo| {
@@ -33,10 +33,10 @@ fn nested(x: &x.int) {  // (1)
         let z = 3i;
         let d: &x.int = foo(x, x, |_x, _y, z| z );
         let e: &x.int = foo(x, &z, |_x, _y, z| z );
-        let f: &x.int = foo(&z, &z, |_x, _y, z| z ); //! ERROR mismatched types: expected `&x.int` but found
+        let f: &x.int = foo(&z, &z, |_x, _y, z| z ); //~ ERROR mismatched types: expected `&x.int` but found
 
-        foo(x, &z, |x, _y, _z| x ); //! ERROR mismatched types: expected `&z.int` but found `&x.int`
-        foo(x, &z, |_x, y, _z| y ); //! ERROR mismatched types: expected `&z.int` but found `&<block at
+        foo(x, &z, |x, _y, _z| x ); //~ ERROR mismatched types: expected `&z.int` but found `&x.int`
+        foo(x, &z, |_x, y, _z| y ); //~ ERROR mismatched types: expected `&z.int` but found `&<block at
     }
 }
 
diff --git a/src/test/compile-fail/regions-var-type-out-of-scope.rs b/src/test/compile-fail/regions-var-type-out-of-scope.rs
index b8aecb05e89..bb40a436fba 100644
--- a/src/test/compile-fail/regions-var-type-out-of-scope.rs
+++ b/src/test/compile-fail/regions-var-type-out-of-scope.rs
@@ -3,7 +3,7 @@
 fn foo(cond: bool) {
     // Here we will infer a type that uses the
     // region of the if stmt then block:
-    let mut x; //! ERROR foo
+    let mut x; //~ ERROR foo
 
     if cond {
         x = &3;
diff --git a/src/test/compile-fail/selftype-astparam.rs b/src/test/compile-fail/selftype-astparam.rs
index f0d79ccc589..8136e0c7440 100644
--- a/src/test/compile-fail/selftype-astparam.rs
+++ b/src/test/compile-fail/selftype-astparam.rs
@@ -11,5 +11,5 @@ fn do_add<A:add>(x: A, y: A) -> A { x + y }
 fn main() {
     let x = 3 as add;
     let y = 4 as add;
-    do_add(x, y); //! ERROR a boxed iface with self types may not be passed as a bounded type
+    do_add(x, y); //~ ERROR a boxed iface with self types may not be passed as a bounded type
 }
diff --git a/src/test/compile-fail/selftype-ifacetype.rs b/src/test/compile-fail/selftype-ifacetype.rs
index 2772b359849..bbaf49e85bf 100644
--- a/src/test/compile-fail/selftype-ifacetype.rs
+++ b/src/test/compile-fail/selftype-ifacetype.rs
@@ -3,7 +3,7 @@ iface add {
 }
 
 fn do_add(x: add, y: add) -> add {
-    x + y //! ERROR can not call a method that contains a self type through a boxed iface
+    x + y //~ ERROR can not call a method that contains a self type through a boxed iface
 }
 
 fn main() {}
diff --git a/src/test/compile-fail/sendfn-is-not-a-lambda.rs b/src/test/compile-fail/sendfn-is-not-a-lambda.rs
index 09d33197909..5aee9cd6fa7 100644
--- a/src/test/compile-fail/sendfn-is-not-a-lambda.rs
+++ b/src/test/compile-fail/sendfn-is-not-a-lambda.rs
@@ -4,5 +4,5 @@ fn test(f: fn@(uint) -> uint) -> uint {
 
 fn main() {
     let f = fn~(x: uint) -> uint { ret 4u; };
-    log(debug, test(f)); //! ERROR expected `fn@(uint) -> uint`
+    log(debug, test(f)); //~ ERROR expected `fn@(uint) -> uint`
 }
diff --git a/src/test/compile-fail/seq-args.rs b/src/test/compile-fail/seq-args.rs
index 3ba9962fcd6..db2cb9b7a17 100644
--- a/src/test/compile-fail/seq-args.rs
+++ b/src/test/compile-fail/seq-args.rs
@@ -2,7 +2,7 @@ use std;
 fn main() {
 iface seq { }
 
-impl <T> of seq<T> for ~[T] { //! ERROR wrong number of type arguments
+impl <T> of seq<T> for ~[T] { //~ ERROR wrong number of type arguments
     /* ... */
 }
 impl of seq<bool> for u32 {
diff --git a/src/test/compile-fail/swap-no-lval.rs b/src/test/compile-fail/swap-no-lval.rs
index 8366aa5421e..b7a5fce6b5a 100644
--- a/src/test/compile-fail/swap-no-lval.rs
+++ b/src/test/compile-fail/swap-no-lval.rs
@@ -1,5 +1,5 @@
 fn main() {
     5 <-> 3;
-    //!^ ERROR swapping to and from non-lvalue
-    //!^^ ERROR swapping to and from non-lvalue
+    //~^ ERROR swapping to and from non-lvalue
+    //~^^ ERROR swapping to and from non-lvalue
 }
diff --git a/src/test/compile-fail/terr-in-field.rs b/src/test/compile-fail/terr-in-field.rs
index 0b676e35db7..84cb3bc9ac5 100644
--- a/src/test/compile-fail/terr-in-field.rs
+++ b/src/test/compile-fail/terr-in-field.rs
@@ -3,7 +3,7 @@ type bar = {a: int, b: uint};
 
 fn want_foo(f: foo) {}
 fn have_bar(b: bar) {
-    want_foo(b); //! ERROR (in field `b`, int vs uint)
+    want_foo(b); //~ ERROR (in field `b`, int vs uint)
 }
 
 fn main() {}
diff --git a/src/test/compile-fail/terr-sorts.rs b/src/test/compile-fail/terr-sorts.rs
index 6ab384673c1..d7d8bd48b38 100644
--- a/src/test/compile-fail/terr-sorts.rs
+++ b/src/test/compile-fail/terr-sorts.rs
@@ -3,7 +3,7 @@ type bar = @foo;
 
 fn want_foo(f: foo) {}
 fn have_bar(b: bar) {
-    want_foo(b); //! ERROR (record vs @-ptr)
+    want_foo(b); //~ ERROR (record vs @-ptr)
 }
 
 fn main() {}
diff --git a/src/test/compile-fail/tps-invariant-class.rs b/src/test/compile-fail/tps-invariant-class.rs
index 0c4b3b54b83..a3ecbec5b11 100644
--- a/src/test/compile-fail/tps-invariant-class.rs
+++ b/src/test/compile-fail/tps-invariant-class.rs
@@ -13,7 +13,7 @@ fn set_box_impl<T>(b: box_impl<@const T>, v: @const T) {
 fn main() {
     let b = box_impl::<@int>(@3);
     set_box_impl(b, @mut 5);
-    //!^ ERROR values differ in mutability
+    //~^ ERROR values differ in mutability
 
     // No error when type of parameter actually IS @const int
     let b = box_impl::<@const int>(@3);
diff --git a/src/test/compile-fail/tps-invariant-enum.rs b/src/test/compile-fail/tps-invariant-enum.rs
index 16375bd8b47..4c9691a1c58 100644
--- a/src/test/compile-fail/tps-invariant-enum.rs
+++ b/src/test/compile-fail/tps-invariant-enum.rs
@@ -9,7 +9,7 @@ fn set_box_impl<T>(b: box_impl<@const T>, v: @const T) {
 fn main() {
     let b = box_impl::<@int>({mut f: @3});
     set_box_impl(b, @mut 5);
-    //!^ ERROR values differ in mutability
+    //~^ ERROR values differ in mutability
 
     // No error when type of parameter actually IS @const int
     let x: @const int = @3; // only way I could find to upcast
diff --git a/src/test/compile-fail/tps-invariant-iface.rs b/src/test/compile-fail/tps-invariant-iface.rs
index 49ab080998e..81caef856c2 100644
--- a/src/test/compile-fail/tps-invariant-iface.rs
+++ b/src/test/compile-fail/tps-invariant-iface.rs
@@ -23,7 +23,7 @@ fn set_box_impl<T>(b: box_impl<@const T>, v: @const T) {
 fn main() {
     let b = box_impl::<@int>({mut f: @3});
     set_box_iface(b as box_iface::<@int>, @mut 5);
-    //!^ ERROR values differ in mutability
+    //~^ ERROR values differ in mutability
     set_box_impl(b, @mut 5);
-    //!^ ERROR values differ in mutability
+    //~^ ERROR values differ in mutability
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/tstate-and-init.rs b/src/test/compile-fail/tstate-and-init.rs
index 7b254fe2e19..d6e01f20ff4 100644
--- a/src/test/compile-fail/tstate-and-init.rs
+++ b/src/test/compile-fail/tstate-and-init.rs
@@ -3,5 +3,5 @@ fn even(i: int) : is_even(i) -> int { i }
 fn main() {
     let i: int = 4;
     log(debug, false && { check is_even(i); true });
-    even(i); //! ERROR unsatisfied precondition
+    even(i); //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/tstate-block-uninit.rs b/src/test/compile-fail/tstate-block-uninit.rs
index 3fbf812a9dc..91a31fed6cf 100644
--- a/src/test/compile-fail/tstate-block-uninit.rs
+++ b/src/test/compile-fail/tstate-block-uninit.rs
@@ -6,6 +6,6 @@ fn force(f: fn()) { f(); }
 fn main() {
     let x: int = 4;
     force(fn&() {
-        even(x); //! ERROR unsatisfied precondition
+        even(x); //~ ERROR unsatisfied precondition
     });
 }
diff --git a/src/test/compile-fail/tstate-break-uninit-2.rs b/src/test/compile-fail/tstate-break-uninit-2.rs
index 8ea5446c809..7d75009098f 100644
--- a/src/test/compile-fail/tstate-break-uninit-2.rs
+++ b/src/test/compile-fail/tstate-break-uninit-2.rs
@@ -6,10 +6,10 @@ fn foo() -> int {
 
     while 1 != 2 {
         break;
-        check is_even(x); //! WARNING unreachable statement
+        check is_even(x); //~ WARNING unreachable statement
     }
 
-    even(x); //! ERROR unsatisfied precondition
+    even(x); //~ ERROR unsatisfied precondition
     ret 17;
 }
 
diff --git a/src/test/compile-fail/tstate-break-uninit.rs b/src/test/compile-fail/tstate-break-uninit.rs
index 55146447b44..b0d51deb5df 100644
--- a/src/test/compile-fail/tstate-break-uninit.rs
+++ b/src/test/compile-fail/tstate-break-uninit.rs
@@ -6,10 +6,10 @@ fn foo() -> int {
 
     loop {
         break;
-        check is_even(x); //! WARNING unreachable statement
+        check is_even(x); //~ WARNING unreachable statement
     }
 
-    even(x); //! ERROR unsatisfied precondition
+    even(x); //~ ERROR unsatisfied precondition
     ret 17;
 }
 
diff --git a/src/test/compile-fail/tstate-ctor-unsat.rs b/src/test/compile-fail/tstate-ctor-unsat.rs
index d249865cd49..e72e57f901b 100644
--- a/src/test/compile-fail/tstate-ctor-unsat.rs
+++ b/src/test/compile-fail/tstate-ctor-unsat.rs
@@ -15,7 +15,7 @@ class cat {
   new(in_x : uint, in_y : int) {
     let foo = 3;
     self.meows = in_x + (in_y as uint);
-    self.how_hungry = even(foo); //! ERROR unsatisfied precondition
+    self.how_hungry = even(foo); //~ ERROR unsatisfied precondition
   }
 }
 
diff --git a/src/test/compile-fail/tstate-fru.rs b/src/test/compile-fail/tstate-fru.rs
index 70c39d434ff..c5335ce1f85 100644
--- a/src/test/compile-fail/tstate-fru.rs
+++ b/src/test/compile-fail/tstate-fru.rs
@@ -9,6 +9,6 @@ fn main() {
     let origin: point;
     origin = {x: 0, y: 0};
     let right: point = {x: 10 with tested(origin)};
-        //!^ ERROR precondition
+        //~^ ERROR precondition
     copy right;
 }
diff --git a/src/test/compile-fail/tstate-if-no-else.rs b/src/test/compile-fail/tstate-if-no-else.rs
index fbc02bf591a..e9873110a44 100644
--- a/src/test/compile-fail/tstate-if-no-else.rs
+++ b/src/test/compile-fail/tstate-if-no-else.rs
@@ -6,5 +6,5 @@ fn foo(x: int) { log(debug, x); }
 fn main() {
 	let x: int = 10;
         if 1 > 2 { check is_even(x); }
-        even(x); //! ERROR unsatisfied precondition
+        even(x); //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/tstate-if-with-else.rs b/src/test/compile-fail/tstate-if-with-else.rs
index 74edb4b8d8b..c813d84d465 100644
--- a/src/test/compile-fail/tstate-if-with-else.rs
+++ b/src/test/compile-fail/tstate-if-with-else.rs
@@ -10,5 +10,5 @@ fn main() {
     } else {
         check is_even(x);
     }
-    even(x); //! ERROR unsatisfied precondition
+    even(x); //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/tstate-loop-constraints.rs b/src/test/compile-fail/tstate-loop-constraints.rs
index 34ff0753d86..731a7d0b6d8 100644
--- a/src/test/compile-fail/tstate-loop-constraints.rs
+++ b/src/test/compile-fail/tstate-loop-constraints.rs
@@ -10,7 +10,7 @@ fn main() {
                 check is_even(x);
                 even(x); // OK
                 loop {
-                    even(x); //! ERROR unsatisfied precondition
+                    even(x); //~ ERROR unsatisfied precondition
                     x = 11; 
                 }
             }
diff --git a/src/test/compile-fail/tstate-or-init.rs b/src/test/compile-fail/tstate-or-init.rs
index c26925929a6..f24dd9d888e 100644
--- a/src/test/compile-fail/tstate-or-init.rs
+++ b/src/test/compile-fail/tstate-or-init.rs
@@ -3,5 +3,5 @@ fn even(i: int) : is_even(i) -> int { i }
 fn main() {
     let i: int = 4;
     log(debug, false || { check is_even(i); true });
-    even(i); //! ERROR unsatisfied precondition
+    even(i); //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/tstate-return.rs b/src/test/compile-fail/tstate-return.rs
index 6d786bacd7b..0ac68559f8b 100644
--- a/src/test/compile-fail/tstate-return.rs
+++ b/src/test/compile-fail/tstate-return.rs
@@ -3,7 +3,7 @@ fn even(i: int) : is_even(i) -> int { i }
 
 fn f() -> int {
 	let x: int = 4;
-	ret even(x); //! ERROR unsatisfied precondition
+	ret even(x); //~ ERROR unsatisfied precondition
 }
 
 fn main() { f(); }
diff --git a/src/test/compile-fail/tstate-unsat-after-item.rs b/src/test/compile-fail/tstate-unsat-after-item.rs
index 03fc1d326f6..6722736dea0 100644
--- a/src/test/compile-fail/tstate-unsat-after-item.rs
+++ b/src/test/compile-fail/tstate-unsat-after-item.rs
@@ -4,6 +4,6 @@ fn even(i: int) : is_even(i) -> int { i }
 fn main() {
     let x = 4;
     fn baz(_x: int) { }
-    baz(even(x)); //! ERROR unsatisfied precondition
+    baz(even(x)); //~ ERROR unsatisfied precondition
 }
 
diff --git a/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs b/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs
index a93a6cac524..e19393c40f5 100644
--- a/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs
+++ b/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs
@@ -3,7 +3,7 @@ fn foo(v: [int]) : vec::is_empty(v) { #debug("%d", v[0]); }
 fn main() {
     let f = fn@() {
         let v = ~[1];
-        foo(v); //! ERROR unsatisfied precondition constraint
+        foo(v); //~ ERROR unsatisfied precondition constraint
     }();
     log(error, f);
 }
diff --git a/src/test/compile-fail/tstate-unsat-in-fn-expr.rs b/src/test/compile-fail/tstate-unsat-in-fn-expr.rs
index 130c89b8c11..c56662f8562 100644
--- a/src/test/compile-fail/tstate-unsat-in-fn-expr.rs
+++ b/src/test/compile-fail/tstate-unsat-in-fn-expr.rs
@@ -3,7 +3,7 @@ fn foo(v: [int]) : vec::is_empty(v) { #debug("%d", v[0]); }
 fn main() {
     let f = fn@() {
         let v = ~[1];
-        foo(v); //! ERROR unsatisfied precondition constraint
+        foo(v); //~ ERROR unsatisfied precondition constraint
     };
     log(error, f());
 }
diff --git a/src/test/compile-fail/tstate-unsat.rs b/src/test/compile-fail/tstate-unsat.rs
index 44a3e88fdee..210feb28b92 100644
--- a/src/test/compile-fail/tstate-unsat.rs
+++ b/src/test/compile-fail/tstate-unsat.rs
@@ -3,5 +3,5 @@ fn even(i: int) : is_even(i) -> int { i }
 
 fn main() {
     let x: int = 4;
-    even(x); //! ERROR unsatisfied precondition
+    even(x); //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/tstate-while-break.rs b/src/test/compile-fail/tstate-while-break.rs
index 6a25929a85b..49905d50348 100644
--- a/src/test/compile-fail/tstate-while-break.rs
+++ b/src/test/compile-fail/tstate-while-break.rs
@@ -7,7 +7,7 @@ fn test(cond: bool) {
         check is_even(v);
         break;
     }
-    even(v); //! ERROR unsatisfied precondition
+    even(v); //~ ERROR unsatisfied precondition
 }
 
 fn main() {
diff --git a/src/test/compile-fail/tstate-while-cond.rs b/src/test/compile-fail/tstate-while-cond.rs
index ae5436aa4e8..afc77fa42c6 100644
--- a/src/test/compile-fail/tstate-while-cond.rs
+++ b/src/test/compile-fail/tstate-while-cond.rs
@@ -3,5 +3,5 @@ fn even(i: int) : is_even(i) -> int { i }
 
 fn main() {
     let x: int = 4;
-    while even(x) != 0 { } //! ERROR unsatisfied precondition
+    while even(x) != 0 { } //~ ERROR unsatisfied precondition
 }
diff --git a/src/test/compile-fail/tstate-while.rs b/src/test/compile-fail/tstate-while.rs
index 6091a0237a2..f99c966aaf4 100644
--- a/src/test/compile-fail/tstate-while.rs
+++ b/src/test/compile-fail/tstate-while.rs
@@ -4,7 +4,7 @@ fn even(i: int) : is_even(i) -> int { i }
 fn f() {
     let mut x: int = 10;
     while 1 == 1 { x = 10; }
-    even(x); //! ERROR unsatisfied precondition
+    even(x); //~ ERROR unsatisfied precondition
 }
 
 fn main() { f(); }
diff --git a/src/test/compile-fail/tutorial-suffix-inference-test.rs b/src/test/compile-fail/tutorial-suffix-inference-test.rs
index fa07be952c1..41fe5864ec3 100644
--- a/src/test/compile-fail/tutorial-suffix-inference-test.rs
+++ b/src/test/compile-fail/tutorial-suffix-inference-test.rs
@@ -7,9 +7,9 @@ fn main() {
 
     identity_u8(x);  // after this, `x` is assumed to have type `u8`
     identity_u16(x);
-    //!^ ERROR mismatched types: expected `u16` but found `u8`
+    //~^ ERROR mismatched types: expected `u16` but found `u8`
     identity_u16(y);
-    //!^ ERROR mismatched types: expected `u16` but found `i32`
+    //~^ ERROR mismatched types: expected `u16` but found `i32`
 
     let a = 3i;
     
@@ -17,6 +17,6 @@ fn main() {
 
     identity_i(a); // ok
     identity_u16(a); 
-    //!^ ERROR mismatched types: expected `u16` but found `int`
+    //~^ ERROR mismatched types: expected `u16` but found `int`
 
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/type-mismatch.rs b/src/test/compile-fail/type-mismatch.rs
index 08deb8a2d7c..d9c2654ff2b 100644
--- a/src/test/compile-fail/type-mismatch.rs
+++ b/src/test/compile-fail/type-mismatch.rs
@@ -4,5 +4,5 @@ fn main() {
     let x = true;
     let y = 1;
     let z = x + y;
-    //!^ ERROR binary operation + cannot be applied to type `bool`
+    //~^ ERROR binary operation + cannot be applied to type `bool`
 }
diff --git a/src/test/compile-fail/unique-unique-kind.rs b/src/test/compile-fail/unique-unique-kind.rs
index 9373ae70230..afa8134e083 100644
--- a/src/test/compile-fail/unique-unique-kind.rs
+++ b/src/test/compile-fail/unique-unique-kind.rs
@@ -3,5 +3,5 @@ fn f<T: send>(_i: T) {
 
 fn main() {
     let i = ~@100;
-    f(i); //! ERROR missing `send`
+    f(i); //~ ERROR missing `send`
 }
diff --git a/src/test/compile-fail/unsafe-fn-assign-deref-ptr.rs b/src/test/compile-fail/unsafe-fn-assign-deref-ptr.rs
index 089c4a74505..03af39ab7fc 100644
--- a/src/test/compile-fail/unsafe-fn-assign-deref-ptr.rs
+++ b/src/test/compile-fail/unsafe-fn-assign-deref-ptr.rs
@@ -1,7 +1,7 @@
 // -*- rust -*-
 
 fn f(p: *u8) {
-    *p = 0u8; //! ERROR dereference of unsafe pointer requires unsafe function or block
+    *p = 0u8; //~ ERROR dereference of unsafe pointer requires unsafe function or block
     ret;
 }
 
diff --git a/src/test/compile-fail/unsafe-fn-autoderef.rs b/src/test/compile-fail/unsafe-fn-autoderef.rs
index cc6faa07557..b4ab76dc0c9 100644
--- a/src/test/compile-fail/unsafe-fn-autoderef.rs
+++ b/src/test/compile-fail/unsafe-fn-autoderef.rs
@@ -15,7 +15,7 @@ fn f(p: *rec) -> int {
     // are prohibited by various checks, such as that the enum is
     // instantiable and so forth).
 
-    ret p.f; //! ERROR attempted access of field `f` on type `*rec`
+    ret p.f; //~ ERROR attempted access of field `f` on type `*rec`
 }
 
 fn main() {
diff --git a/src/test/compile-fail/unsafe-fn-called-from-safe.rs b/src/test/compile-fail/unsafe-fn-called-from-safe.rs
index 2353be31c2b..d7681a2ec60 100644
--- a/src/test/compile-fail/unsafe-fn-called-from-safe.rs
+++ b/src/test/compile-fail/unsafe-fn-called-from-safe.rs
@@ -3,5 +3,5 @@
 unsafe fn f() { ret; }
 
 fn main() {
-    f(); //! ERROR access to unsafe function requires unsafe function or block
+    f(); //~ ERROR access to unsafe function requires unsafe function or block
 }
diff --git a/src/test/compile-fail/unsafe-fn-deref-ptr.rs b/src/test/compile-fail/unsafe-fn-deref-ptr.rs
index dd6a9c7a405..e66bf5eb687 100644
--- a/src/test/compile-fail/unsafe-fn-deref-ptr.rs
+++ b/src/test/compile-fail/unsafe-fn-deref-ptr.rs
@@ -1,7 +1,7 @@
 // -*- rust -*-
 
 fn f(p: *u8) -> u8 {
-    ret *p; //! ERROR dereference of unsafe pointer requires unsafe function or block
+    ret *p; //~ ERROR dereference of unsafe pointer requires unsafe function or block
 }
 
 fn main() {
diff --git a/src/test/compile-fail/unsafe-fn-used-as-value.rs b/src/test/compile-fail/unsafe-fn-used-as-value.rs
index dfcc2c85fcf..7dc0ce4a12b 100644
--- a/src/test/compile-fail/unsafe-fn-used-as-value.rs
+++ b/src/test/compile-fail/unsafe-fn-used-as-value.rs
@@ -3,6 +3,6 @@
 unsafe fn f() { ret; }
 
 fn main() {
-    let x = f; //! ERROR access to unsafe function requires unsafe function or block
+    let x = f; //~ ERROR access to unsafe function requires unsafe function or block
     x();
 }
diff --git a/src/test/compile-fail/unsendable-class.rs b/src/test/compile-fail/unsendable-class.rs
index 689253ddeef..de5715321e8 100644
--- a/src/test/compile-fail/unsendable-class.rs
+++ b/src/test/compile-fail/unsendable-class.rs
@@ -9,7 +9,7 @@ class foo {
 
 fn main() {
   let cat = "kitty";
-  let po = comm::port();         //! ERROR missing `send`
-  let ch = comm::chan(po);       //! ERROR missing `send`
-  comm::send(ch, foo(42, @cat)); //! ERROR missing `send`
+  let po = comm::port();         //~ ERROR missing `send`
+  let ch = comm::chan(po);       //~ ERROR missing `send`
+  comm::send(ch, foo(42, @cat)); //~ ERROR missing `send`
 }
\ No newline at end of file
diff --git a/src/test/compile-fail/vec-add.rs b/src/test/compile-fail/vec-add.rs
index 7ab965142b0..16af1cb7471 100644
--- a/src/test/compile-fail/vec-add.rs
+++ b/src/test/compile-fail/vec-add.rs
@@ -30,74 +30,74 @@ fn add(i: ~[int], m: ~[mut int], c: ~[const int]) {
        m + c,
        c);
 
-   add(m + ~[3], //! ERROR mismatched types
+   add(m + ~[3], //~ ERROR mismatched types
        m + ~[3],
        m + ~[3]);
 
    add(i + ~[3],
-       i + ~[3], //! ERROR mismatched types
+       i + ~[3], //~ ERROR mismatched types
        i + ~[3]);
 
-   add(c + ~[3], //! ERROR mismatched types
-                //!^ ERROR binary operation + cannot be applied
-       c + ~[3], //! ERROR binary operation + cannot be applied
-                //!^ mismatched types
+   add(c + ~[3], //~ ERROR mismatched types
+                //~^ ERROR binary operation + cannot be applied
+       c + ~[3], //~ ERROR binary operation + cannot be applied
+                //~^ mismatched types
        ~[3]);
 
-   add(m + ~[mut 3], //! ERROR mismatched types
+   add(m + ~[mut 3], //~ ERROR mismatched types
        m + ~[mut 3],
        m + ~[mut 3]);
 
    add(i + ~[mut 3],
-       i + ~[mut 3], //! ERROR mismatched types
+       i + ~[mut 3], //~ ERROR mismatched types
        i + ~[mut 3]);
 
-   add(c + ~[mut 3], //! ERROR binary operation + cannot be applied
-                    //!^ mismatched types
-       c + ~[mut 3], //! ERROR binary operation + cannot be applied
-                    //!^ mismatched types
+   add(c + ~[mut 3], //~ ERROR binary operation + cannot be applied
+                    //~^ mismatched types
+       c + ~[mut 3], //~ ERROR binary operation + cannot be applied
+                    //~^ mismatched types
        ~[mut 3]);
 
-   add(m + i, //! ERROR mismatched types
+   add(m + i, //~ ERROR mismatched types
        m + i,
        m + i);
 
    add(i + i,
-       i + i, //! ERROR mismatched types
+       i + i, //~ ERROR mismatched types
        i + i);
 
-   add(c + i, //! ERROR binary operation + cannot be applied
-              //!^ ERROR mismatched types
-       c + i, //! ERROR binary operation + cannot be applied
-              //!^ ERROR mismatched types
+   add(c + i, //~ ERROR binary operation + cannot be applied
+              //~^ ERROR mismatched types
+       c + i, //~ ERROR binary operation + cannot be applied
+              //~^ ERROR mismatched types
        i);
 
-   add(m + m, //! ERROR mismatched types
+   add(m + m, //~ ERROR mismatched types
        m + m,
        m + m);
 
    add(i + m,
-       i + m, //! ERROR mismatched types
+       i + m, //~ ERROR mismatched types
        i + m);
 
-   add(c + m, //! ERROR binary operation + cannot be applied
-              //!^ ERROR mismatched types
-       c + m, //! ERROR binary operation + cannot be applied
-              //!^ ERROR mismatched types
+   add(c + m, //~ ERROR binary operation + cannot be applied
+              //~^ ERROR mismatched types
+       c + m, //~ ERROR binary operation + cannot be applied
+              //~^ ERROR mismatched types
        m);
 
-   add(m + c, //! ERROR mismatched types
+   add(m + c, //~ ERROR mismatched types
        m + c,
        m + c);
 
    add(i + c,
-       i + c, //! ERROR mismatched types
+       i + c, //~ ERROR mismatched types
        i + c);
 
-   add(c + c, //! ERROR binary operation + cannot be applied
-              //!^ ERROR mismatched types
-       c + c, //! ERROR binary operation + cannot be applied
-              //!^ ERROR mismatched types
+   add(c + c, //~ ERROR binary operation + cannot be applied
+              //~^ ERROR mismatched types
+       c + c, //~ ERROR binary operation + cannot be applied
+              //~^ ERROR mismatched types
        c);
 }
 
diff --git a/src/test/compile-fail/vec-concat-bug.rs b/src/test/compile-fail/vec-concat-bug.rs
index 974e01c0615..33873c087a5 100644
--- a/src/test/compile-fail/vec-concat-bug.rs
+++ b/src/test/compile-fail/vec-concat-bug.rs
@@ -3,7 +3,7 @@ fn concat<T: copy>(v: ~[const ~[const T]]) -> ~[T] {
 
     // Earlier versions of our type checker accepted this:
     vec::iter(v, |&&inner: ~[T]| {
-        //!^ ERROR values differ in mutability
+        //~^ ERROR values differ in mutability
         r += inner;
     });
 
diff --git a/src/test/compile-fail/vector-no-ann.rs b/src/test/compile-fail/vector-no-ann.rs
index 2274275b5c4..6918a248742 100644
--- a/src/test/compile-fail/vector-no-ann.rs
+++ b/src/test/compile-fail/vector-no-ann.rs
@@ -1,3 +1,3 @@
 fn main() {
-    let _foo = ~[]; //! ERROR unconstrained type
+    let _foo = ~[]; //~ ERROR unconstrained type
 }
diff --git a/src/test/compile-fail/warn-path-statement.rs b/src/test/compile-fail/warn-path-statement.rs
index ba8c241689d..d5645c4358f 100644
--- a/src/test/compile-fail/warn-path-statement.rs
+++ b/src/test/compile-fail/warn-path-statement.rs
@@ -2,5 +2,5 @@
 fn main() {
 
     let x = 10;
-    x; //! ERROR path statement with no effect
+    x; //~ ERROR path statement with no effect
 }
\ No newline at end of file
diff --git a/src/test/pretty/doc-comments.rs b/src/test/pretty/doc-comments.rs
new file mode 100644
index 00000000000..175940f008a
--- /dev/null
+++ b/src/test/pretty/doc-comments.rs
@@ -0,0 +1,32 @@
+// pp-exact
+
+// some single-line non-doc comment
+
+/// some single line outer-docs
+fn a() { }
+
+fn b() {
+    //~ some single line inner-docs
+}
+
+/*
+ * some multi-line non-doc comment
+ */
+
+/**
+ * some multi-line outer-docs
+ */
+fn c() { }
+
+fn d() {
+    /*!
+     * some multi-line inner-docs
+     */
+}
+
+#[doc = "unsugared outer doc-comments work also"]
+fn e() { }
+
+fn f() {
+    #[doc = "as do inner ones"];
+}
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 4b1cc591713..028bf10201b 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
@@ -2,7 +2,7 @@ fn test() {
     let _v: int;
     _v = 1;
     ret;
-    _v = 2; //! WARNING: unreachable statement
+    _v = 2; //~ WARNING: unreachable statement
 }
 
 fn main() {
diff --git a/src/test/run-pass/pred-not-bool.rs b/src/test/run-pass/pred-not-bool.rs
index 58281b40b5e..67b5a877c05 100644
--- a/src/test/run-pass/pred-not-bool.rs
+++ b/src/test/run-pass/pred-not-bool.rs
@@ -1,6 +1,6 @@
 // this checks that a pred with a non-bool return
 // type is rejected, even if the pred is never used
 
-pure fn bad(a: int) -> int { ret 37; } //! ERROR Non-boolean return type
+pure fn bad(a: int) -> int { ret 37; } //~ ERROR Non-boolean return type
 
 fn main() { }
diff --git a/src/test/run-pass/unreachable-code-1.rs b/src/test/run-pass/unreachable-code-1.rs
index 38b97b47e4b..fba080ac7f5 100644
--- a/src/test/run-pass/unreachable-code-1.rs
+++ b/src/test/run-pass/unreachable-code-1.rs
@@ -4,7 +4,7 @@ fn id(x: bool) -> bool { x }
 
 fn call_id() {
     let c <- fail;
-    id(c); //! WARNING unreachable statement
+    id(c); //~ WARNING unreachable statement
 }
 
 fn call_id_3() { id(ret) && id(ret); }