[GHC] #15892: Segmentation fault with ByteString and -O
#15892: Segmentation fault with ByteString and -O --------------------------------------+---------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Keywords: | Operating System: Linux Architecture: x86_64 (amd64) | Type of failure: Runtime crash Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: --------------------------------------+---------------------------------- The attached program consistently segfaults (within a few seconds) when compiled with ghc-8.6.1 or ghc-8.6.2. It runs forever (as expected) when compiled with ghc-8.4. To reproduce: {{{ ghc segfault.hs }}} then, {{{ ./segfault >/dev/null }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString and -O ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Changes (by akio): * Attachment "segfault.hs" added. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString and -O ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Comment (by osa1): Confirmed on GHC HEAD. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString and -O ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Changes (by osa1): * cc: osa1, simonmar (added) Comment: This seems to be related with the GC. I realized two things: - If I run with debug runtime I get this error: {{{ segfault: internal error: Evaluated a CAF (0x851768) that was GC'd! (GHC version 8.7.20181113 for x86_64_unknown_linux) Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug zsh: abort (core dumped) ./segfault +RTS > /dev/null }}} - If I play around with GC params sometimes this programs can run for much longer. E.g. on my system `+RTS -A1G` or `+RTS -G5` seem to make the problem disappear. Could this be related with the recent SRT work? CCing simonmar. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString and -O ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Comment (by fumieval): Here's an equivalent code with bytestring operations unrolled: https://github.com/tsurucapital/segfault/blob/fumieval/app/Main.hs -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString and -O ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Changes (by bgamari): * priority: normal => highest Comment: Yikes, this looks awful. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:4> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString and -O ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Changes (by maoe): * cc: maoe (added) -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:5> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Comment (by osa1): (You don't need -O for this, updating summary) -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Changes (by Fuuzetsu): * cc: fuuzetsu (added) -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:7> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Changes (by fumieval): * cc: fumieval (added) -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:8> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Comment (by simonmar): I'm looking into this. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:9> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+-------------------------------------- Comment (by hsyl20): Could it be another manifestation of #14375? Maybe try to NOINLINE `withForeignPtr`. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:10> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: patch Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D5334 Wiki Page: | ----------------------------------+-------------------------------------- Changes (by simonmar): * status: new => patch * differential: => Phab:D5334 Comment: Thanks for the bug report @akio and for the very nice small test case @fumieval. I managed to further reduce the code and remove most of the Iteratee stuff, which was making the bug really hard to narrow down. I believe I've now found the problem, the fix was to add a pair of parentheses(!), see Phab:D5334. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:11> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: patch Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D5334 Wiki Page: | ----------------------------------+-------------------------------------- Comment (by fumieval): Nice, that's amazingly fast! I confirmed that D5334 fixes the crash. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:12> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: patch Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D5334 Wiki Page: | ----------------------------------+-------------------------------------- Comment (by Ömer Sinan Ağacan <omeragacan@…>): In [changeset:"eb46345d37ee61575e6fed04da718c1b7ee0bb99/ghc" eb46345d/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="eb46345d37ee61575e6fed04da718c1b7ee0bb99" Fix a bug in SRT generation (#15892) Summary: The logic in `Note [recursive SRTs]` was correct. However, my implementation of it wasn't: I got the associativity of `Set.difference` wrong, which led to an extremely subtle and difficult to find bug. Fortunately now we have a test case. I was able to cut down the code to something manageable, and I've added it to the test suite. Test Plan: Before (using my stage 1 compiler without the fix): ``` ====> T15892(normal) 1 of 1 [0, 0, 0] cd "T15892.run" && "/home/smarlow/ghc/inplace/bin/ghc-stage1" -o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups -fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat -dno-debug-output -O cd "T15892.run" && ./T15892 +RTS -G1 -A32k -RTS Wrong exit code for T15892(normal)(expected 0 , actual 134 ) Stderr ( T15892 ): T15892: internal error: evacuate: strange closure type 0 (GHC version 8.7.20181113 for x86_64_unknown_linux) Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug Aborted (core dumped) *** unexpected failure for T15892(normal) =====> T15892(g1) 1 of 1 [0, 1, 0] cd "T15892.run" && "/home/smarlow/ghc/inplace/bin/ghc-stage1" -o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups -fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat -dno-debug-output -O cd "T15892.run" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS Wrong exit code for T15892(g1)(expected 0 , actual 134 ) Stderr ( T15892 ): T15892: internal error: evacuate: strange closure type 0 (GHC version 8.7.20181113 for x86_64_unknown_linux) Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug Aborted (core dumped) ``` After (using my stage 2 compiler with the fix): ``` =====> T15892(normal) 1 of 1 [0, 0, 0] cd "T15892.run" && "/home/smarlow/ghc/inplace/test spaces/ghc-stage2" -o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups -fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat -dno-debug-output cd "T15892.run" && ./T15892 +RTS -G1 -A32k -RTS =====> T15892(g1) 1 of 1 [0, 0, 0] cd "T15892.run" && "/home/smarlow/ghc/inplace/test spaces/ghc-stage2" -o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups -fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat -dno-debug-output cd "T15892.run" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS ``` Reviewers: bgamari, osa1, erikd Reviewed By: osa1 Subscribers: rwbarton, carter GHC Trac Issues: #15892 Differential Revision: https://phabricator.haskell.org/D5334 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:13> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: merge Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D5334 Wiki Page: | ----------------------------------+-------------------------------------- Changes (by osa1): * status: patch => merge -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:14> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15892: Segmentation fault with ByteString ----------------------------------+-------------------------------------- Reporter: akio | Owner: (none) Type: bug | Status: closed Priority: highest | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: fixed | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D5334 Wiki Page: | ----------------------------------+-------------------------------------- Changes (by bgamari): * status: merge => closed * resolution: => fixed Comment: Merged with 4519d98d5399c2a958b2592b0ab50d89980d48b5. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15892#comment:15> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC