<div dir="ltr"><div>So I tried this:</div><div><br></div><div><a href="http://source.squeak.org/VMMaker/VMMaker.oscog-nice.2578.diff" target="_blank">https://source.squeak.org/VMMaker/VMMaker.oscog-nice.2580.diff</a></div><div><br></div><div>regenerated the ns source code:</div><div><br></div><div><a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/30315747a4fe0d7adfcc667e23d3e67216884fdf">https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/30315747a4fe0d7adfcc667e23d3e67216884fdf</a></div><div><br></div><div>then got traditional random newspeak bootstrap/test failures, so this was not the CI problem...</div><div><br></div><div><a href="https://travis-ci.org/OpenSmalltalk/opensmalltalk-vm/jobs/609592334">https://travis-ci.org/OpenSmalltalk/opensmalltalk-vm/jobs/609592334</a></div><div><br></div><div><br></div><div><pre id="gmail-log" class="gmail-ansi"><div class="gmail-log-line"><span id="gmail-0-6515">+/home/travis/build/OpenSmalltalk/opensmalltalk-vm/products/nscogspurlinux/bin/nsvm -headless ns-2019-11-09.32.image NewspeakBootstrap.st</span></div></pre><pre id="gmail-log" class="gmail-ansi"><div class="gmail-log-line"><span id="gmail-0-6516">Warning, attempt to use method with selector (null) and selector parserToForwardTo</span></div></pre><pre id="gmail-log" class="gmail-ansi"><div class="gmail-log-line"><span id="gmail-0-6517">Warning, attempt to use method with selector (null) and selector atIndex:inTable:occupiedSlotDo:emptySlotDo:deletedSlotDo:</span></div></pre><pre id="gmail-log" class="gmail-ansi"><span id="gmail-0-6518">Warning, attempt to use method with selector (null) and selector atIndex:inTable:occupiedSlotDo:emptySlotDo:deletedSlotDo:<br><br>...<br></span></pre><div class="gmail-log-line"><span id="gmail-0-6543">Loading changeset Tools-eem.300.3.cs. Done in 14 ms.</span></div><div class="gmail-log-line"><span id="gmail-0-6544">Deserializing bootstrap runtime. Done in 238 ms.</span></div><div class="gmail-log-line"><span id="gmail-0-6545">Instantiating bootstrap runtime. Done in 1 ms.</span></div><div class="gmail-log-line"><span id="gmail-0-6546">Compiling module APIManager.ns. Done in 100 ms.</span></div><div class="gmail-log-line"><span id="gmail-0-6547">Compiling module AccessModifierTestApp.ns9 November 2019 10:12:18.322723 am</span></div><div class="gmail-log-line"><span id="gmail-0-6548"></span></div><div class="gmail-log-line"><span id="gmail-0-6549">VM: unix - Smalltalk</span></div><div class="gmail-log-line"><span id="gmail-0-6550">Image: Squeak5.1 [latest update: #16548]</span></div><div class="gmail-log-line"><span id="gmail-0-6551"></span></div><div class="gmail-log-line"><span id="gmail-0-6552">SecurityManager state:</span></div><div class="gmail-log-line"><span id="gmail-0-6553">Restricted: false</span></div><div class="gmail-log-line"><span id="gmail-0-6554">FileAccess: true</span></div><div class="gmail-log-line"><span id="gmail-0-6555">SocketAccess: true</span></div><div class="gmail-log-line"><span id="gmail-0-6556">Working Dir /tmp/tmp.yFdIe0kqdQ/nsboot</span></div><div class="gmail-log-line"><span id="gmail-0-6557">Trusted Dir /tmp/tmp.yFdIe0kqdQ/nsboot/secure</span></div><div class="gmail-log-line"><span id="gmail-0-6558">Untrusted Dir /tmp/tmp.yFdIe0kqdQ/nsboot/My Squeak</span></div><div class="gmail-log-line"><span id="gmail-0-6559"></span></div><div class="gmail-log-line"><span id="gmail-0-6560">UnresolvedSendAST`731589(Object)>>doesNotUnderstand: #'init`start:'</span></div><div class="gmail-log-line"><span id="gmail-0-6561">      Receiver: <<error during printing>></span></div><div class="gmail-log-line"><span id="gmail-0-6562">    Arguments and temporary variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6563"><<error during printing></span></div><div class="gmail-log-line"><span id="gmail-0-6564">  Receiver's instance variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6565">                start:  nil</span></div><div class="gmail-log-line"><span id="gmail-0-6566">                end:    nil</span></div><div class="gmail-log-line"><span id="gmail-0-6567">                message:        nil</span></div><div class="gmail-log-line"><span id="gmail-0-6568">                receiver:       nil</span></div><div class="gmail-log-line"><span id="gmail-0-6569"></span></div><div class="gmail-log-line"><span id="gmail-0-6570">UnresolvedSendAST`731589(AST)>>initializer`new</span></div><div class="gmail-log-line"><span id="gmail-0-6571">  Receiver: <<error during printing>></span></div><div class="gmail-log-line"><span id="gmail-0-6572">    Arguments and temporary variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6573"><<error during printing></span></div><div class="gmail-log-line"><span id="gmail-0-6574">  Receiver's instance variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6575">                start:  nil</span></div><div class="gmail-log-line"><span id="gmail-0-6576">                end:    nil</span></div><div class="gmail-log-line"><span id="gmail-0-6577">                message:        nil</span></div><div class="gmail-log-line"><span id="gmail-0-6578">                receiver:       nil</span></div><div class="gmail-log-line"><span id="gmail-0-6579"></span></div><div class="gmail-log-line"><span id="gmail-0-6580">UnresolvedSendAST`731589(UnresolvedSendAST)>>initializer`new</span></div><div class="gmail-log-line"><span id="gmail-0-6581">    Receiver: <<error during printing>></span></div><div class="gmail-log-line"><span id="gmail-0-6582">    Arguments and temporary variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6583"><<error during printing></span></div><div class="gmail-log-line"><span id="gmail-0-6584">  Receiver's instance variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6585">                start:  nil</span></div><div class="gmail-log-line"><span id="gmail-0-6586">                end:    nil</span></div><div class="gmail-log-line"><span id="gmail-0-6587">                message:        nil</span></div><div class="gmail-log-line"><span id="gmail-0-6588">                receiver:       nil</span></div><div class="gmail-log-line"><span id="gmail-0-6589"></span></div><div class="gmail-log-line"><span id="gmail-0-6590">UnresolvedSendAST`731589 class(UnresolvedSendAST class)>>new</span></div><div class="gmail-log-line"><span id="gmail-0-6591">    Receiver: UnresolvedSendAST`731589</span></div><div class="gmail-log-line"><span id="gmail-0-6592"> Arguments and temporary variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6593"><<error during printing></span></div><div class="gmail-log-line"><span id="gmail-0-6594">  Receiver's instance variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6595">                superclass:     SendAST`731589</span></div><div class="gmail-log-line"><span id="gmail-0-6596">             methodDict:     a MethodDictionary(#apply:->(UnresolvedSendAST mixin>>#apply: "a CompiledMethod...etc...</span></div><div class="gmail-log-line"><span id="gmail-0-6597">             format:         65540</span></div><div class="gmail-log-line"><span id="gmail-0-6598">              mixinSlot:      UnresolvedSendAST mixin</span></div><div class="gmail-log-line"><span id="gmail-0-6599">            enclosingObjectSlot:    NewspeakASTs#731589</span></div><div class="gmail-log-line"><span id="gmail-0-6600">                subclassesSlot:         nil</span></div><div class="gmail-log-line"><span id="gmail-0-6601">                nameSlot:       #'UnresolvedSendAST`731589'</span></div><div class="gmail-log-line"><span id="gmail-0-6602"></span></div><div class="gmail-log-line"><span id="gmail-0-6603">Parser`2523583(Parser)>>hereSendFromMsg:</span></div><div class="gmail-log-line"><span id="gmail-0-6604">        Receiver: <<error during printing>></span></div><div class="gmail-log-line"><span id="gmail-0-6605">    Arguments and temporary variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6606"><<error during printing></span></div><div class="gmail-log-line"><span id="gmail-0-6607">  Receiver's instance variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6608">                name:   name</span></div><div class="gmail-log-line"><span id="gmail-0-6609">               forwardReferenceTable:  MutableHashedMap(#letter -> ForwardReferenceParser`3011573...etc...</span></div><div class="gmail-log-line"><span id="gmail-0-6610">             selfMirror:     <<error during printing>></span></div><div class="gmail-log-line"><span id="gmail-0-6611"></span></div><div class="gmail-log-line"><span id="gmail-0-6612">[] in Parser`2523583(Parser)>>slotName</span></div><div class="gmail-log-line"><span id="gmail-0-6613">        Receiver: <<error during printing>></span></div><div class="gmail-log-line"><span id="gmail-0-6614">    Arguments and temporary variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6615"><<error during printing></span></div><div class="gmail-log-line"><span id="gmail-0-6616">  Receiver's instance variables: </span></div><div class="gmail-log-line"><span id="gmail-0-6617">                name:   name</span></div><div class="gmail-log-line"><span id="gmail-0-6618">               forwardReferenceTable:  MutableHashedMap(#letter -> ForwardReferenceParser`3011573...etc...</span></div><div class="gmail-log-line"><span id="gmail-0-6619">             selfMirror:     <<error during printing>></span></div><span id="gmail-0-6620"></span><pre id="gmail-log" class="gmail-ansi"><span id="gmail-0-6518">...<br><br></span></pre></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le sam. 9 nov. 2019 à 09:57, Nicolas Cellier <<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>> a écrit :<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>Follow-up:</div><div><br></div><div>I tried to generate empty function rather than broken function:</div><div><br></div><div><a href="http://source.squeak.org/VMMaker/VMMaker.oscog-nice.2577.diff" target="_blank">http://source.squeak.org/VMMaker/VMMaker.oscog-nice.2577.diff</a></div><div><br></div><div>This failed because the non local return did result in such generated code:</div><div><br></div><div>        return result;</div><div>        return 0;</div><div>    }</div><div><br></div><div>So I tried to remove the function entirely:</div><div><div><br></div><div><a href="http://source.squeak.org/VMMaker/VMMaker.oscog-nice.2578.diff" target="_blank">http://source.squeak.org/VMMaker/VMMaker.oscog-nice.2578.diff</a></div></div><div><br></div><div>This failed, because the function is used (that's why it was not eliminated):</div><div><br></div><div><a href="https://travis-ci.org/OpenSmalltalk/opensmalltalk-vm/jobs/609457879" target="_blank">https://travis-ci.org/OpenSmalltalk/opensmalltalk-vm/jobs/609457879</a></div><div><pre id="gmail-m_4548059150384454954gmail-log"><div><span id="gmail-m_4548059150384454954gmail-0-2637">Undefined symbols for architecture x86_64:</span></div></pre><pre id="gmail-m_4548059150384454954gmail-log"><div><span id="gmail-m_4548059150384454954gmail-0-2638">  "_genSendDirectedSupernumArgs", referenced from:</span></div></pre><pre id="gmail-m_4548059150384454954gmail-log"><div><span id="gmail-m_4548059150384454954gmail-0-2639">      _genExtSendSuperBytecode in cogit.o</span></div></pre><pre id="gmail-m_4548059150384454954gmail-log"><div><span id="gmail-m_4548059150384454954gmail-0-2640">ld: symbol(s) not found for architecture x86_64</span></div></pre><pre id="gmail-m_4548059150384454954gmail-log"><div><span id="gmail-m_4548059150384454954gmail-0-2641">clang: error: linker command failed with exit code 1 (use -v to see invocation)</span></div></pre><pre id="gmail-m_4548059150384454954gmail-log"><div><span id="gmail-m_4548059150384454954gmail-0-2642">make: *** [build/vm/NewspeakVirtualMachine] Error 1</span><span id="gmail-m_4548059150384454954gmail-0-2643"></span></div></pre><pre id="gmail-m_4548059150384454954gmail-log"><span id="gmail-m_4548059150384454954gmail-0-2644">The command "$CHROOT ./scripts/ci/travis_build.sh" failed and exited with 1 during .</span><span id="gmail-m_4548059150384454954gmail-0-2645"></span></pre></div></div><div>Of course, I should have seen it in Smalltalk:</div><div>genExtSendSuperBytecode<br>     "239               11101111        i i i i i j j j Send To Superclass Literal Selector #iiiii (+ Extend A * 32) with jjj (+ Extend B * 8) Arguments"<br>            | isDirected litIndex nArgs |<br>     (isDirected := extB >= 64) ifTrue:<br></div><div>    ...snip...<br></div><div>            ^isDirected <br>        ifTrue: [self genSendDirectedSuper: litIndex numArgs: nArgs]<br>                     ifFalse: [...</div><div><br></div><div>And this is used in NewspeakV4 bytecode set too:</div><div>initializeBytecodeTableForNewspeakV4</div><div>        ...snip...<br></div><div>                       (2 239 239 genExtSendSuperBytecode isMapped)</div><div><br></div><div>Funnily (sadly?), when I removed the generation of genDirectedSuper:numArgs: send, the generator started to generate the (now unused) global scope variables!</div><div><br></div><div><a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/e2027f4941b64d5713a97fb95c64eef63ef3f48a" target="_blank">https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/e2027f4941b64d5713a97fb95c64eef63ef3f48a</a></div><div><br></div><div>My conclusion is:<br></div><div>- NewspeakV4 includes a bytecode that potentially generate directed super send</div><div>- but BytecodeSetHasDirectedSuperSend is set to false in Newspeak flavor</div><div>- this mismatch lead to incorrect code generation.</div><div><br></div><div>Shouldn't we set BytecodeSetHasDirectedSuperSend := true for NewspeakV4?</div><div>I'm going to try...<br></div><div><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le mar. 29 oct. 2019 à 00:57, David T. Lewis <<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br>
On Mon, Oct 28, 2019 at 10:52:38PM +0100, Nicolas Cellier wrote:<br>
>  <br>
> Hi David,<br>
> OK, the variables are initialized conditionally in Cogit>>setInterpreter:<br>
> <br>
>      BytecodeSetHasDirectedSuperSend ifTrue:<br>
>          [directedSuperSendTrampolines := CArrayAccessor on: (Array new:<br>
> NumSendTrampolines).<br>
>          directedSuperBindingSendTrampolines := CArrayAccessor on: (Array<br>
> new: NumSendTrampolines).<br>
>          directedSendUsesBinding := false].<br>
> <br>
<br>
There is a <doNotGenerate> directive for the method, so the initialization<br>
that you see there is never part of the generated C code.<br>
<br>
<br>
> So maybe it's not the case of Newspeak bytecode set, and maybe these<br>
> methods won't be used, but it's not a nice way to do it.<br>
> We shall not generate unused incorrect methods, it spoils compiler warning<br>
> examination...<br>
><br>
<br>
Actually, I think that it /is/ used (or at least it could be used if<br>
#isDirected is true, which probably amounts to the same thing). All of<br>
the unreferenced methods will be optimized away by the inliner, but there<br>
is one remaining usage, and it does look like a possible source of trouble.<br>
<br>
Dave<br>
<br>
<br>
> Le dim. 27 oct. 2019 ?? 19:58, David T. Lewis <<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>> a ??crit :<br>
> <br>
> ><br>
> > On Sat, Oct 26, 2019 at 11:45:08PM +0200, Nicolas Cellier wrote:<br>
> > ><br>
> > > Hi all,<br>
> > > I see what looks like a big problem in those files:<br>
> > ><br>
> > <a href="https://raw.githubusercontent.com/OpenSmalltalk/opensmalltalk-vm/Cog/nsspur64src/vm/cogitX64SysV.c" rel="noreferrer" target="_blank">https://raw.githubusercontent.com/OpenSmalltalk/opensmalltalk-vm/Cog/nsspur64src/vm/cogitX64SysV.c</a><br>
> > ><br>
> > <a href="https://raw.githubusercontent.com/OpenSmalltalk/opensmalltalk-vm/Cog/nsspursrc/vm/cogitIA32.c" rel="noreferrer" target="_blank">https://raw.githubusercontent.com/OpenSmalltalk/opensmalltalk-vm/Cog/nsspursrc/vm/cogitIA32.c</a><br>
> > ><br>
> > > The generated code for genSendDirectedSuper:numArgs: is bogus.<br>
> > > the 3 instance variables<br>
> > > - directedSendUsesBinding<br>
> > > - directedSuperSendTrampolines<br>
> > > - directedSuperBindingSendTrampolines<br>
> > > have been translated into local (thus uninitialized) variables...<br>
> > ><br>
> > > How can this possibly work?<br>
> > > Is it related to the CI failures?<br>
> ><br>
> > Very likely the variables are being generated as local because they are<br>
> > not referenced elsewhere. For example, directedSuperSendTrampolines is<br>
> > initialized in simulation only by Cogit>>setInterpreter: but apparently<br>
> > is not set anywhere in the actual translated code.<br>
> ><br>
> > I don't think that uninitialized locals are set to null in C, so yes<br>
> > this could be a source of random behavior in the CI tests.<br>
> ><br>
> > A solution would be to initialize the three variables, possibly just<br>
> > by referencing them explicitly in one of the declareCVarsIn: methods.<br>
> ><br>
> > Dave<br>
> ><br>
> ><br>
<br>
</blockquote></div></div>
</blockquote></div>