llvm::raw_ostream
is an abstract class with two important pure virtual functions implemented by subclasses; write_impl()
which holds the logic for writing data to the underlying stream and current_pos()
which returns the position currently being written to in the stream.
LLVM provides the following output stream implementations:
outs()
for writing to stdout
errs()
for writing to stderr
nulls()
which discards the output (like writing to /dev/null)
raw_fd_ostream(StringRef, std::error_code)
for writing to a file descriptor
raw_string_ostream(std::string)
for writing to a std::string
raw_os_ostream(std::ostream &)
for writing to a std::ostream
The first 3 streams directly return a reference to their stream objects. For example:
llvm::raw_ostream &output = llvm::outs();
For the other streams, you construct objects the old way. For example:
std::string str;
llvm::raw_string_ostream output(str);
For printing, every llvm::Value*
has a print
method that accepts a raw_ostream
object.