Binary output to cout on Windows

I’m trying to resolve an issue that occurs in the native Windows implementation of LLVM (it probably doesn’t occur in Cygwin, but I haven’t checked). Namely, when calling

llvm-as < input.ll > output.bc OR llvm-as < input.ll | opt

outputting to cout is adding \r (the CR character) to newlines. This specifically causes problems in WriterContext::write(…) in lib/Support/Compressor.cpp. Is anyone aware of a way to use a binary mode on cout in Windows (compiled with Visual Studio .NET 2003), or at least disable the inclusion of \r? It would be nice to allow the pipe functionality if it can be done cleanly.


Hi Michael,

LLVM uses the standard C++ library for this output. If LLVM opens the
file, it is opened in binary mode. However, LLVM is inheriting this file
descriptor from the shell in your example (std::cout) so we don't/can't
change the open mode. You might want to try this instead:

llvm-as < input.ll -o output.bc OR llvm-as < input.ll -o - | opt