From: Alastair B. <ala...@gm...> - 2017-03-29 21:01:55
|
So, from an earlier thread: On Wed, Feb 1, 2017 at 5:00 AM, Eric Marsden <eri...@fr...> wrote: > Alastair Bridgewater <ala...@gm...> writes: > >> And the question is, is there another failure case out there that hasn't >> been found yet? > > Challenge accepted :) Eric, it took you just under two months, but you found one. Well played. What we have here is that the GO inserts an EXIT pointing to the appropriate place in the TAGBODY, but then MAYBE-DELETE-EXIT takes it out and puts a direct link to the CTRAN. And it doesn't insert a vestigial-exit CAST because there's no value semantics to TAGBODY/GO, but it still deletes the EXIT and removes it from the ENTRY, which causes MAY-DELETE-VESTIGIAL-EXIT to conclude that there are no references to the TAGBODY, and thus it cannot generate any cleanup code... And we're right back at deleted exits causing problems for STACK analysis. Either MAYBE-DELETE-EXIT is wrong to delete the EXIT from GO without inserting a vestigial exit of some sort, or MAY-DELETE-VESTIGIAL-EXIT needs to do something more clever with TAGBODY cleanups, or both, I'm not yet sure which. On Wed, Mar 29, 2017 at 7:49 AM, Stas Boukarev <sta...@gm...> wrote: > > Reduced to > (defun foo () > (multiple-value-prog1 42 > (tagbody > (return-from foo > (catch 'ct (go tag6))) > tag6))) > > On Wed, Mar 29, 2017 at 2:21 PM, Eric Marsden <eri...@fr...> wrote: >> >> Hi, >> >> Found with random-integer testing. >> >> >> >> * (lisp-implementation-version) >> "1.3.15.66-6c83ec339" >> * (defun foo () >> (labels ((%F12 (a) >> (multiple-value-prog1 42 >> (tagbody >> (return-from %F12 >> (catch 'ct >> (labels ((%F16 (F16-1 F16-2) 42)) >> (%F16 (go TAG6) a)))) >> TAG6)))) >> (%F12 1))) >> debugger invoked on a SB-INT:BUG in thread #<THREAD "main thread" RUNNING {1001F2E5F3}>: >> failed AVER: (NOT (SB-INT:MEMQ PUSH SB-C::END-STACK)) >> 0] backtrace >> Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001F2E5F3}> >> 0: (SB-INT:BUG "~@<failed AVER: ~2I~_~S~:>" (NOT (SB-INT:MEMQ PUSH SB-C::END-STACK))) >> 1: (SB-IMPL::%FAILED-AVER (NOT (SB-INT:MEMQ PUSH SB-C::END-STACK))) >> 2: (SB-C::ORDER-BLOCK-UVL-SETS #<SB-C::CBLOCK 3 :START c1 {1001F942F3}> #<SB-C::CBLOCK 5 :START c2 {1001F8BF73}>) >> 3: (SB-C::ORDER-UVL-SETS #<SB-C:COMPONENT :NAME (SB-C::ESCAPE-FUN #:EXIT-BLOCK-0) {1001F92343}>) >> 4: (SB-C::STACK-ANALYZE #<SB-C:COMPONENT :NAME (SB-C::ESCAPE-FUN #:EXIT-BLOCK-0) {1001F92343}>) >> 5: (SB-C::%COMPILE-COMPONENT #<SB-C:COMPONENT :NAME (SB-C::ESCAPE-FUN #:EXIT-BLOCK-0) {1001F92343}>) >> >> >> -- >> Eric Marsden >> https://risk-engineering.org/ >> >> >> ------------------------------------------------------------------------------ >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> _______________________________________________ >> Sbcl-devel mailing list >> Sbc...@li... >> https://lists.sourceforge.net/lists/listinfo/sbcl-devel > > > > > -- > With best regards, Stas. > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Sbcl-devel mailing list > Sbc...@li... > https://lists.sourceforge.net/lists/listinfo/sbcl-devel > |