The attached patch add the ability to programmatically re-direct outs()/errs() to an arbitrary raw_ostream instance, maintaining the raw_ostream instances in a stack structure so clients can push/pop streams at will. The stack is also maintained in thread-local storage, so different threads can re-direct individually. This allows for two use cases:
1. Compilers can attach custom streams to outs()/errs() to intercept output from LLVM without needing to play with STDOUT/STDERR.
2. Compilers can receive LLVM output from different threads individually, instead of having all diagnostics dumped to a single stream.
Unit tests are included in the patch.
0001-Add-the-ability-to-assign-custom-streams-to-outs-err.patch (7.29 KB)