Skip to content
  • Simon Marlow's avatar
    Fix recompilation bug with default class methods (#15970) · 288f681e
    Simon Marlow authored and Ben Gamari's avatar Ben Gamari committed
    If a module uses a class, then it can instantiate the class and
    thereby use its default methods, so we must include the default
    methods when calculating the fingerprint for the class.
    
    Test Plan:
    New unit test: driver/T15970
    
    Before:
    
    ```
    =====> T15970(normal) 1 of 1 [0, 0, 0]
    cd "T15970.run" && $MAKE -s --no-print-directory T15970
    Wrong exit code for T15970()(expected 0 , actual 2 )
    Stdout ( T15970 ):
    Makefile:13: recipe for target 'T15970' failed
    Stderr ( T15970 ):
    C.o:function Main_zdfTypeClassMyDataType1_info: error: undefined
    reference to 'A_toTypedData2_closure'
    C.o:function Main_main1_info: error: undefined reference to
    'A_toTypedData2_closure'
    C.o(.data+0x298): error: undefined reference to 'A_toTypedData2_closure'
    C.o(.data+0x480): error: undefined reference to 'A_toTypedData2_closure'
    collect2: error: ld returned 1 exit status
    `gcc' failed in phase `Linker'. (Exit code: 1)
    ```
    
    After: test passes.
    
    Reviewers: bgamari, simonpj, erikd, watashi, afarmer
    
    Subscribers: rwbarton, carter
    
    GHC Trac Issues: #15970
    
    Differential Revision: https://phabricator.haskell.org/D5394
    288f681e