<div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Is it possible that GHC generates STG with invalid binding semantics for certain cases that the Cmm codegen fix or ignore?</div><div>This could explain my observations.<br></div><div>I've checked the Stg linter source (StgLint.hs ; GHC 8.2.2 and github master) and it does not check StgRhsClosure free var and binder list at all.</div><div>And the scope checker function (addInScopeVars) does not check for duplicates.</div><div><br></div><div>Any thoughts?</div><div><br></div><div>Cheers,</div><div>Csaba<br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Nov 3, 2018 at 9:53 AM Csaba Hruska <<a href="mailto:csaba.hruska@gmail.com">csaba.hruska@gmail.com</a>> wrote:<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 dir="ltr"><div>Hi,</div><div><br></div><div>Can StgRhsClosure's freevar list ([occ]) or argument list ([bndr]) contain duplicates?</div><div><br></div><div>Cheers,</div><div>Csaba<br></div><div><span style="font-family:monospace,monospace"><font size="1"><br></font></span></div><div><span style="font-family:monospace,monospace"><font size="1">data GenStgRhs bndr occ</font></span><br><span style="font-family:monospace,monospace"><font size="1">  = StgRhsClosure</font></span><br><span style="font-family:monospace,monospace"><font size="1">        CostCentreStack         -- CCS to be attached (default is CurrentCCS)</font></span><br><span style="font-family:monospace,monospace"><font size="1">        StgBinderInfo           -- Info about how this binder is used (see below)</font></span><br><span style="font-family:monospace,monospace"><font size="1">        <b>[occ]</b>                   -- non-global free vars; a list, rather than</font></span><br><span style="font-family:monospace,monospace"><font size="1">                                -- a set, because order is important</font></span><br><span style="font-family:monospace,monospace"><font size="1">        !UpdateFlag             -- ReEntrant | Updatable | SingleEntry</font></span><br><span style="font-family:monospace,monospace"><font size="1">        <b>[bndr]</b>                  -- arguments; if empty, then not a function;</font></span><br><span style="font-family:monospace,monospace"><font size="1">                                -- as above, order is important.</font></span><br><span style="font-family:monospace,monospace"><font size="1">        (GenStgExpr bndr occ)   -- body</font></span><br></div><div><div style="margin-left:40px"><span style="font-family:monospace,monospace"></span></div><br></div></div></div></div>
</blockquote></div>