<div dir="ltr"><div>Thanks for the clarification.</div><div><br></div><div>What I am hinting at is, the Csmith project caught many bugs in C compilers by using random testing -- feeding random programs and testing if the optimizations preserved program behavior.<br></div><div><br></div><div>Haskell, having tens of optimizations, could be a potential application of the same technique.</div><div><br></div><div>I have no familiarity with the GHC or with any compilers in general; I am just looking for something to study.</div><div><br></div><div>My questions in its most direct form is, as in your view, could GHC optimizations hide bugs that could be potentially be revealed by exploring program spaces?<br></div></div><br><div class="gmail_quote"><div dir="ltr">Em dom, 2 de set de 2018 às 16:58, Sven Panne <<a href="mailto:svenpanne@gmail.com">svenpanne@gmail.com</a>> escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">Am So., 2. Sep. 2018 um 20:05 Uhr schrieb Rodrigo Stevaux <<a href="mailto:roehst@gmail.com" target="_blank">roehst@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Omer, thanks for the reply. The tests you run are for regression testing, that is, non-functional aspects, is my understanding right? [...]</div></blockquote><div><br></div><div>Quite the opposite, the usual steps are:</div><div><br></div><div>   * A bug is reported.</div><div>   * A regression test is added to GHC's test suite, reproducing the bug (<a href="https://ghc.haskell.org/trac/ghc/wiki/Building/RunningTests/Adding" target="_blank">https://ghc.haskell.org/trac/ghc/wiki/Building/RunningTests/Adding</a>).</div><div>   * The bug is fixed.</div><div><br></div><div>This way it is made sure that the bug doesn't come back later. Do this for a few decades, and you have a very comprehensive test suite for functional aspects. :-) The reasoning behind this: Blindly adding tests is wasted effort most of time, because this way you often test things which only very rarely break: Bugs OTOH hint you very concretely at problematic/tricky/complicated parts of your SW.</div><div><br></div><div>Catching increases in runtime/memory consumption is a slightly different story, because you have to come up with "typical" scenarios to make useful comparisons. You can have synthetic scenarios for very specific parts of the compiler, too, like pattern matching with tons of constructors, or using gigantic literals, or type checking deeply nested tricky things, etc., but I am not sure if such things are usually called "regression tests".</div><div><br></div><div>Cheers,</div><div>   S.</div><div><br></div><div><br></div></div></div></div>
</blockquote></div>