What is the correct way to create a raw_ostream object and use it for printing? I read various articles and the only example I can find is (How to redirect llvm::outs() to file?)
raw_ostream *output = &outs();
which made use of llvm::outs.
Sorry for asking this because I am not too familiar with C++ but had to understand how LLVM works.
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 stdouterrs()
for writing to stderrnulls()
which discards the output (like writing to /dev/null)raw_fd_ostream(StringRef, std::error_code)
for writing to a file descriptorraw_string_ostream(std::string)
for writing to a std::stringraw_os_ostream(std::ostream &)
for writing to a std::ostreamThe 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.