I thought about it but I searched high and low in the docs and via Google to see whether it was valid to fail tests in TearDown and couldn't find anything. I've used many unit test frameworks (for example, Python unittest) where this is not allowed so I assumed it wasn't.
However, if it works that's a feasible alternative. If TearDown fails then what is shown? What test is marked as failed? I guess I'd need to try it out.
As a quick hack what I did was rename() the output file after each invocation of RUN_ALL_TESTS(), which worked (since my XML parser just looks for *.xml files and doesn't care about the exact name) but is a bit cheesy :).
I get that it's not easy to deal with multiple RUN_ALL_TESTS() writing to the same file, due to the structure of XML (you can't just more output at the end, necessarily). I just wish it was possible to reset the GTEST_FLAG(output) option after RUN_ALL_TESTS() is run, and have the next RUN_ALL_TESTS() recognize it.
Thanks for the hints Josh!