<div dir="ltr"><div>Hello,</div><div><br></div><div>I have to apologize because I've fooled myself. Everything works fine in the Haskell side.</div><div>The problem was that I tried to pass a float value to printf which is a variadic C function.</div><div>According to the C standard / stack overflow:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="margin-left:40px"><em> because <code>printf</code> and its friends are variadic functions, so a <code>float</code> parameter undergoes automatic conversion to <code>double</code> as part of the default argument promotions (see section 6.5.2.2 of the C99 standard).</em></div></blockquote><div><br></div><div>Sorry for the confusion.<br></div><div>Thanks,</div><div>Csaba<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 22, 2020 at 10:27 PM Csaba Hruska <<a href="mailto:csaba.hruska@gmail.com">csaba.hruska@gmail.com</a>> wrote:<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"><div>I added Stg and Cmm linter to my custom pipeline and they report no errors.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 22, 2020 at 4:40 PM Csaba Hruska <<a href="mailto:csaba.hruska@gmail.com" target="_blank">csaba.hruska@gmail.com</a>> wrote:<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"><div dir="ltr"><div>Here are the pretty printed STG in GHC syntax:</div><div><i><b>WORKING (DoubleRep): prints 3.14</b><br></i></div><div><i>x0 :: Any<br>[GblId] =<br>    "Value: MyConA %d %d\n"#;<br><br>x1 :: Any<br>[GblId] =<br>    "Value: MyConB %lf\n"#;<br><br>main :: Any<br>[GblId] =<br>    [] \u [void_0E]<br>        case MyConB [3.14##] of x100 {<br>          __DEFAULT -><br>              case x100 of x101 {<br>                MyConA x200 x202 -> __pkg_ccall [x0 x200 x202];<br>                MyConB x203 -> __pkg_ccall [x1 x203];<br>              };<br>        };</i></div><div><i><b><br></b></i></div><div><i><b>WRONG (FloatRep) : prints 0.00 instead of 3.14<br></b></i></div><div><i>x0 :: Any<br>[GblId] =<br>    "Value: MyConA %d %d\n"#;<br><br>x1 :: Any<br>[GblId] =<br>    "Value: MyConB %f\n"#;<br><br>main :: Any<br>[GblId] =<br>    [] \u [void_0E]<br>        case MyConB [3.14#] of x100 {<br>          __DEFAULT -><br>              case x100 of x101 {<br>                MyConA x200 x202 -> __pkg_ccall [x0 x200 x202];<br>                MyConB x203 -> __pkg_ccall [x1 x203];<br>              };<br>        };</i><br></div></div><div>Thanks,</div><div>Csaba</div><div><br></div><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 22, 2020 at 4:21 PM Csaba Hruska <<a href="mailto:csaba.hruska@gmail.com" target="_blank">csaba.hruska@gmail.com</a>> wrote:<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"><div>Sorry, I should have noted that the gist has a description comment at the bottom.</div><div><a href="https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1#gistcomment-3148797" target="_blank">https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1#gistcomment-3148797</a></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 22, 2020 at 3:21 PM Ömer Sinan Ağacan <<a href="mailto:omeragacan@gmail.com" target="_blank">omeragacan@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">What is the problem you're having? What do you mean by "run into problems"?<br>
What's going wrong?<br>
<br>
It'd be helpful if you could show us your program in STG syntax.<br>
<br>
> Is it valid to use FloatRep argument in a boxed ADT on 64 bit?<br>
<br>
It should be valid, yes.<br>
<br>
I'd also try with `-dstg-lint -dcmm-lint`.<br>
<br>
Ömer<br>
<br>
Csaba Hruska <<a href="mailto:csaba.hruska@gmail.com" target="_blank">csaba.hruska@gmail.com</a>>, 22 Oca 2020 Çar, 14:56<br>
tarihinde şunu yazdı:<br>
><br>
> Hello,<br>
><br>
> I try to use GHC backend via STG. For that reason I build small STG program AST maually. So far the generated programs worked fine (compile/link/run).<br>
> However I run into problems when a lifted ADT has a FloatRep argument.<br>
> Interestingly it works for DoubleRep.<br>
> I'm using GHC 8.6.1 64 bit to generate the code for the constructed STG AST.<br>
> I wonder if I break an invariant or is this actually a bug?<br>
> Is it valid to use FloatRep argument in a boxed ADT on 64 bit?<br>
> I made a gist with the Haskell source and the generated Cmm code is also included.<br>
><br>
> <a href="https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1" rel="noreferrer" target="_blank">https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1</a><br>
><br>
> Working program (DoubleRep):<br>
> <a href="https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1#file-stgsample-hs-L134-L198" rel="noreferrer" target="_blank">https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1#file-stgsample-hs-L134-L198</a><br>
><br>
> Wrong program (FloatRep):<br>
> <a href="https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1#file-stgsample-hs-L64-L132" rel="noreferrer" target="_blank">https://gist.github.com/csabahruska/e9e143390c863f7b10b0298a7ae80ac1#file-stgsample-hs-L64-L132</a><br>
><br>
> Thanks,<br>
> Csaba<br>
><br>
><br>
> _______________________________________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>
</blockquote></div></div></div>
</blockquote></div>
</blockquote></div>