Skip to content
  • Simon Marlow's avatar
    Fix a bug in SRT generation (#15892) · eb46345d
    Simon Marlow authored and Ömer Sinan Ağacan's avatar Ömer Sinan Ağacan committed
    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
    eb46345d