GaloisInc/daedalus

Audit for stdout printing in lieu of stderr

Opened this issue · 3 comments

Related to #294, @yav mentioned that warnings (and possibly other things?) might get printed to stdout in place rather than being collected and returned or printed to stderr instead. This issue is a reminder to do an audit to see if there are spots that should get updated to print to stderr or whether warnings should be gathered up and printed by the daedalus tool.

One possible issue with warning-gathering that comes to mind is that if the warnings are only meaningful when interleaved with other existing console output, it might be best to keep printing them in place. But if it's okay to summarize all of the warnings after the tool has completed running, then it would be best to gather them all up and print them after everything else is done.

@yav - what do you think about the interleaving question I raised above? Is that something we need to be concerned about? Just from running the tool lately, it looks like the warnings are all that get emitted during processing, so my hunch is that it would be fine to gather them up.

Looking into this a little bit, I found that exe/Main.hs already gathers warnings and prints them all at once when generating C++ code,

generateCPP ... =
    let (hpp,cpp,warns) = C.cProgram ccfg prog
    mapM_ (\w -> ddlPrint ("[WARNING]" <+> w)) warns

but for the Haskell generation code path, warnings get emitted directly by Daedalus.Driver.tcModule.

Also, I did take a look around for print and putStrLn and didn't see a lot of evidence that there is any other printing going on that we would need to worry about.