The interface looks sound to me with one exception: it's not safe to conflate !-pipe with -save-temps, because that opens up the possibility of a tempfile race -- if an attacker sees that the compiler is producing /tmp/ccQWERTY.s, then they should not be able to predict that the assembler will produce /tmp/ccQWERTY.o.
Also, why the parentheses around the numbers? zw