
#9425: ghc-HEAD (only in -O -fllvm aka 'optllvm') prunes yield in -fno-omit- yields mode -------------------------------------+------------------------------------- Reporter: slyfox | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: | Architecture: Unknown/Multiple Unknown/Multiple | Difficulty: Unknown Type of failure: | Blocked By: None/Unknown | Related Tickets: Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Description changed by slyfox: Old description:
Found on '''./validate --slow''' today:
{{{#!hs Unexpected failures: concurrent/should_run T367_letnoescape [bad exit code] (optllvm)
# run manually: $ LANG=C make fulltest stage=2 TEST=T367_letnoescape WAY=optllvm
=====> T367_letnoescape(optllvm) 2419 of 4083 [0, 0, 0] cd ./concurrent/should_run && '/home/st/fun/ghc/inplace/bin/ghc-stage2' -fforce-recomp -dcore-lint -dcmm-lint -dno-debug-output -no-user-package- db -rtsopts -fno-ghci-history -o T367_letnoescape T367_letnoescape.hs -O -fllvm -fno-omit-yields >T367_letnoescape.comp.stderr 2>&1 cd ./concurrent/should_run && ./T367_letnoescape
T367_letnoescape.run.stdout 2>T367_letnoescape.run.stderr Timeout happened...killing process... Wrong exit code (expected 0 , actual 99 ) Stdout:
Stderr:
*** unexpected failure for T367_letnoescape(optllvm) }}}
I've loaded test in gdb and manually interrupted it: {{{ ^C Program received signal SIGINT, Interrupt. 0x0000000000407110 in r5Wp_info () (gdb) disassemble Dump of assembler code for function r5Wp_info: 0x00000000004070f8 <+0>: mov 0x358(%r13),%rax 0x00000000004070ff <+7>: dec %r14 0x0000000000407102 <+10>: data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
=> 0x0000000000407110 <+24>: inc %r14 0x0000000000407113 <+27>: test %rax,%rax 0x0000000000407116 <+30>: jne 0x407110
0x0000000000407118 <+32>: mov -0x8(%r13),%rax 0x000000000040711c <+36>: mov $0x8e0690,%ebx 0x0000000000407121 <+41>: jmpq *%rax End of assembler dump }}}
Here we see 3 instructions-long dead loop.
llvm-3.4.2, amd64-linux.
Looks like yield code was not emitted or was moved away.
New description: Found on '''./validate --slow''' today: {{{ Unexpected failures: concurrent/should_run T367_letnoescape [bad exit code] (optllvm) # run manually: $ LANG=C make fulltest stage=2 TEST=T367_letnoescape WAY=optllvm =====> T367_letnoescape(optllvm) 2419 of 4083 [0, 0, 0] cd ./concurrent/should_run && '/home/st/fun/ghc/inplace/bin/ghc-stage2' -fforce-recomp -dcore-lint -dcmm-lint -dno-debug-output -no-user-package- db -rtsopts -fno-ghci-history -o T367_letnoescape T367_letnoescape.hs -O -fllvm -fno-omit-yields >T367_letnoescape.comp.stderr 2>&1 cd ./concurrent/should_run && ./T367_letnoescape
T367_letnoescape.run.stdout 2>T367_letnoescape.run.stderr Timeout happened...killing process... Wrong exit code (expected 0 , actual 99 ) Stdout:
Stderr:
*** unexpected failure for T367_letnoescape(optllvm)
}}}
I've loaded test in gdb and manually interrupted it:
{{{
^C
Program received signal SIGINT, Interrupt.
0x0000000000407110 in r5Wp_info ()
(gdb) disassemble
Dump of assembler code for function r5Wp_info:
0x00000000004070f8 <+0>: mov 0x358(%r13),%rax
0x00000000004070ff <+7>: dec %r14
0x0000000000407102 <+10>: data32 data32 data32 data32 nopw
%cs:0x0(%rax,%rax,1)
=> 0x0000000000407110 <+24>: inc %r14
0x0000000000407113 <+27>: test %rax,%rax
0x0000000000407116 <+30>: jne 0x407110