diff options
author | Reid Barton <rwbarton@gmail.com> | 2014-12-23 16:53:16 -0500 |
---|---|---|
committer | Reid Barton <rwbarton@gmail.com> | 2014-12-23 19:41:21 -0500 |
commit | 3e3aa9258b521d362d3a51cb48969df3eeab4981 (patch) | |
tree | dc897d4432e02d55535707e650941b04f34b635d | |
parent | cc510b46b4f6046115cd74acc2c8726c91823bcf (diff) | |
download | haskell-3e3aa9258b521d362d3a51cb48969df3eeab4981.tar.gz |
Fix linker interaction between Template Haskell and HPC (#9762)
Summary:
I'm not really happy about perpetuating the hackish fix for #8696,
but at least in the context of building with -fhpc, the performance
cost should be negligible.
I'm suspicious about PlainModuleInitLabel and the Windows stuff too,
but I don't know what it does / can't test it (respectively) so I'll
leave those alone for now.
Hopefully out-of-process TH will save us from these hacks some day.
The test is an adaptation of T8696. It's a bit more awkward since
I couldn't think of a way to get cross-module tickbox references
without optimizations (inlining), but ghci doesn't permit -O for
some reason.
Test Plan: harbormaster; validate
Reviewers: austin
Reviewed By: austin
Subscribers: carter, thomie
Differential Revision: https://phabricator.haskell.org/D583
GHC Trac Issues: #9762
Conflicts:
testsuite/tests/ghci/scripts/all.T
-rw-r--r-- | compiler/cmm/CLabel.hs | 2 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/Makefile | 3 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/T9762.script | 3 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/T9762.stdout | 2 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/T9762A.hs | 5 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/T9762B.hs | 4 | ||||
-rwxr-xr-x | testsuite/tests/ghci/scripts/all.T | 4 |
7 files changed, 21 insertions, 2 deletions
diff --git a/compiler/cmm/CLabel.hs b/compiler/cmm/CLabel.hs index 603f2130e0..ebf902f149 100644 --- a/compiler/cmm/CLabel.hs +++ b/compiler/cmm/CLabel.hs @@ -897,7 +897,7 @@ labelDynamic dflags this_pkg this_mod lbl = PlainModuleInitLabel m -> not (gopt Opt_Static dflags) && this_pkg /= (modulePackageKey m) - HpcTicksLabel m -> not (gopt Opt_Static dflags) && this_pkg /= (modulePackageKey m) + HpcTicksLabel m -> not (gopt Opt_Static dflags) && this_mod /= m -- Note that DynamicLinkerLabels do NOT require dynamic linking themselves. _ -> False diff --git a/testsuite/tests/ghci/scripts/Makefile b/testsuite/tests/ghci/scripts/Makefile index 873de43d09..1ccd62f3b1 100644 --- a/testsuite/tests/ghci/scripts/Makefile +++ b/testsuite/tests/ghci/scripts/Makefile @@ -44,3 +44,6 @@ T9367: '$(TEST_HC)' $(TEST_HC_OPTS) --interactive -v0 -ignore-dot-ghci < T9367.script > T9367-raw.run.stdout cmp T9367-raw.run.stdout T9367-raw.stdout +.PHONY: T9762_prep +T9762_prep: + '$(TEST_HC)' $(TEST_HC_OPTS) -O -fhpc -dynamic T9762B.hs diff --git a/testsuite/tests/ghci/scripts/T9762.script b/testsuite/tests/ghci/scripts/T9762.script new file mode 100644 index 0000000000..c41dbfd1c6 --- /dev/null +++ b/testsuite/tests/ghci/scripts/T9762.script @@ -0,0 +1,3 @@ +:load T9762A T9762B +T9762A.a +T9762B.b diff --git a/testsuite/tests/ghci/scripts/T9762.stdout b/testsuite/tests/ghci/scripts/T9762.stdout new file mode 100644 index 0000000000..b94473479c --- /dev/null +++ b/testsuite/tests/ghci/scripts/T9762.stdout @@ -0,0 +1,2 @@ +3 +4 diff --git a/testsuite/tests/ghci/scripts/T9762A.hs b/testsuite/tests/ghci/scripts/T9762A.hs new file mode 100644 index 0000000000..cd386edc26 --- /dev/null +++ b/testsuite/tests/ghci/scripts/T9762A.hs @@ -0,0 +1,5 @@ +module T9762A (a) where +-- By marking a INLINE, we create a reference from B to A's tickboxes. +{-# INLINE a #-} +a :: Int +a = 3 diff --git a/testsuite/tests/ghci/scripts/T9762B.hs b/testsuite/tests/ghci/scripts/T9762B.hs new file mode 100644 index 0000000000..387d0e2761 --- /dev/null +++ b/testsuite/tests/ghci/scripts/T9762B.hs @@ -0,0 +1,4 @@ +module T9762B (b) where +import T9762A (a) +b :: Int +b = a+1 diff --git a/testsuite/tests/ghci/scripts/all.T b/testsuite/tests/ghci/scripts/all.T index a78068a452..c8462c181f 100755 --- a/testsuite/tests/ghci/scripts/all.T +++ b/testsuite/tests/ghci/scripts/all.T @@ -193,4 +193,6 @@ test('T9086b', normal, ghci_script, ['T9086b.script']) test('T9140', combined_output, ghci_script, ['T9140.script']) test('T9658', normal, ghci_script, ['T9658.script']) test('T9293', normal, ghci_script_without_flag('-fno-warn-tabs'), ['T9293.script']) -test('T9881', normal, ghci_script, ['T9881.script'])
\ No newline at end of file +test('T9762', [pre_cmd('$MAKE -s --no-print-directory T9762_prep')], + ghci_script, ['T9762.script']) +test('T9881', normal, ghci_script, ['T9881.script']) |