[LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()

Chris Lattner clattner at apple.com
Fri Jun 1 16:28:55 PDT 2012


On Jun 1, 2012, at 3:48 PM, Justin Holewinski wrote:
> This isn't the right approach.  Nothing in the library part of the compiler should be hard coding a stream to write to.  What are you trying to accomplish?
> 
> There are a lot of places where warning/debug information is passed directly to errs().  For example, take the Linker class.  You can tell it to omit errors/warnings, but it would be preferable to let it emit the errors/warnings to some compiler-controlled stream for message triaging.

Yes, this is broken.  The fix should be in the linker though, not in errs().

> Perhaps I'm just getting the wrong impression from the current LLVM code base.  Take this snippet from LinkModules.cpp:
> 
>   if (!SrcM->getDataLayout().empty() && !DstM->getDataLayout().empty() &&
>       SrcM->getDataLayout() != DstM->getDataLayout())
>     errs() << "WARNING: Linking two modules of different data layouts!\n";
>   if (!SrcM->getTargetTriple().empty() &&
>       DstM->getTargetTriple() != SrcM->getTargetTriple()) {
>     errs() << "WARNING: Linking two modules of different target triples: ";
>     if (!SrcM->getModuleIdentifier().empty())
>       errs() << SrcM->getModuleIdentifier() << ": ";
>     errs() << "'" << SrcM->getTargetTriple() << "' and '"
>            << DstM->getTargetTriple() << "'\n";
>   }
> 
> Would I be correct in assuming that this is actually "bad" code since it's a library function that writes directly to stderr?

Yes, this is extremely unfriendly to using the linker as a library.  It would be much better for the linker to return its error in a proper way (i.e. extending llvm/Support/system_error.h like llvm/Object/Error.h does).

> Is the recommended approach to pass a stream to the constructor of any pass or function that wants to emit output outside of debug mode?  My concern with this approach is that the compiler would then need to know which passes expect an output stream, and which do not.  The supplied patch allows passes to output information without having to worry about where the output is going, it is up to the compiler to specify where this output goes.  

The right fix for this is to fix the code to not report errors textually.

-Chris

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120601/4c470137/attachment.html>


More information about the llvm-dev mailing list