Fix recompilation bug with default class methods (#15970)
authorSimon Marlow <marlowsd@gmail.com>
Tue, 11 Dec 2018 18:18:47 +0000 (13:18 -0500)
committerBen Gamari <ben@smart-cactus.org>
Tue, 11 Dec 2018 18:18:55 +0000 (13:18 -0500)
commit288f681e06accbae690c46eb8a6e997fa9e5f56a
treeda5dcfd05398f8be83f2aca712ab98c4b0866cae
parent0136906c9e69b02cd1ffe2704fa5d737d8c4cfaf
Fix recompilation bug with default class methods (#15970)

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
compiler/iface/MkIface.hs
testsuite/tests/driver/T15970/A1.hs [new file with mode: 0644]
testsuite/tests/driver/T15970/A2.hs [new file with mode: 0644]
testsuite/tests/driver/T15970/B.hs [new file with mode: 0644]
testsuite/tests/driver/T15970/C.hs [new file with mode: 0644]
testsuite/tests/driver/T15970/Makefile [new file with mode: 0644]
testsuite/tests/driver/T15970/all.T [new file with mode: 0644]