GHC's link step needs to be told which packages to link
I am observing this right now:
==nofib== cryptarithm2: size of Main.o follows...
text data bss dec hex filename
25423 1304 0 26727 6867 Main.o
==nofib== cryptarithm2: time to link cryptarithm2 follows...
Main.o: In Funktion `c79k_info':
(.text+0x1a5b): Nicht definierter Verweis auf `transzuH9c1w14lEUN3zzdWCTsn8jG_ControlziMonadziTransziStateziLazzy_zdwzdcp0Alternative_info'
Main.o: In Funktion `c7cP_info':
(.text+0x2283): Nicht definierter Verweis auf `transzuH9c1w14lEUN3zzdWCTsn8jG_ControlziMonadziTransziStateziLazzy_zdwzdcp0Alternative_info'
Main.o: In Funktion `c7ll_info':
(.text+0x2f53): Nicht definierter Verweis auf `transzuH9c1w14lEUN3zzdWCTsn8jG_ControlziMonadziTransziStateziLazzy_zdwzdcp0Alternative_info'
Main.o: In Funktion `c7p2_info':
(.text+0x37cb): Nicht definierter Verweis auf `transzuH9c1w14lEUN3zzdWCTsn8jG_ControlziMonadziTransziStateziLazzy_zdwzdcp0Alternative_info'
collect2: error: ld returned 1 exit status
<<ghc: 12447488 bytes, 13 GCs, 430760/691224 avg/max bytes residency (2 samples), 31M in use, 0.001 INIT (0.001 elapsed), 0.008 MUT (0.207 elapsed), 0.013 GC (0.013 elapsed) :ghc>>
make[2]: *** [cryptarithm2] Fehler 1
Failed making all in cryptarithm2: 1
make[1]: *** [all] Fehler 1
Failed making all in spectral: 1
make: *** [all] Fehler 1
make: Verlasse Verzeichnis '/data1/ghc-builder/logs/ghc-tmp-REV/nofib'
Trying to minimize the problem, I came up with this file:
module Main where
import Control.Monad
import Control.Monad.Trans.State
solve :: Int -> StateT () [] ()
solve carry | carry > 0 =
do guard (0 == carry)
solve (carry -1)
solve 0 = mzero
main :: IO ()
main = return ()
It only occurs when using this sequence (I’m also pasting the DEBUG output, in case it is useful):
$ /home/jojo/build/haskell/ghc/inplace/bin/ghc-stage2 -O2 -c Main.hs
WARNING: file compiler/specialise/Specialise.hs, line 677
specImport discarding: $w$cmany :: forall s_a1an
(m_a1ao :: * -> *).
MonadPlus m_a1ao =>
forall a_a1ap.
StateT s_a1an m_a1ao a_a1ap -> StateT s_a1an m_a1ao [a_a1ap]
want: False
stable: False
calls: $w$cmany _ @ [] $fMonadPlus[]
WARNING: file compiler/specialise/Specialise.hs, line 677
specImport discarding: $w$csome :: forall s_a1ax
(m_a1ay :: * -> *).
MonadPlus m_a1ay =>
forall a_a1az.
StateT s_a1ax m_a1ay a_a1az -> StateT s_a1ax m_a1ay [a_a1az]
want: False
stable: False
calls: $w$csome _ @ [] $fMonadPlus[]
WARNING: file compiler/specialise/Specialise.hs, line 677
specImport discarding: $w$cp0Alternative :: forall s_a1aT
(m_a1aU :: * -> *).
MonadPlus m_a1aU =>
(# Functor (StateT s_a1aT m_a1aU),
forall a_a1aV.
a_a1aV -> StateT s_a1aT m_a1aU a_a1aV,
forall a_a1aW b_a1aX.
StateT s_a1aT m_a1aU (a_a1aW -> b_a1aX)
-> StateT s_a1aT m_a1aU a_a1aW
-> StateT s_a1aT m_a1aU b_a1aX,
forall a_a1aY b_a1aZ.
StateT s_a1aT m_a1aU a_a1aY
-> StateT s_a1aT m_a1aU b_a1aZ
-> StateT s_a1aT m_a1aU b_a1aZ,
forall a_a1b0 b_a1b1.
StateT s_a1aT m_a1aU a_a1b0
-> StateT s_a1aT m_a1aU b_a1b1
-> StateT s_a1aT m_a1aU a_a1b0 #)
want: False
stable: False
calls: $w$cp0Alternative _ @ [] $fMonadPlus[]
WARNING: file compiler/specialise/Specialise.hs, line 1093
Missed specialisation opportunity for $fMonadStateT_$c>>
[] 2 [] 1 [ALWAYS]
$ /home/jojo/build/haskell/ghc/inplace/bin/ghc-stage2 -O2 -o cryptarithm2 Main.o
Main.o: In function `r3He_info':
(.text+0x52): undefined reference to `transzuH9c1w14lEUN3zzdWCTsn8jG_ControlziMonadziTransziStateziLazzy_zdwzdcp0Alternative_info'
collect2: error: ld returned 1 exit status
It works fine if I compile directly using
$ /home/jojo/build/haskell/ghc/inplace/bin/ghc-stage2 -O2 -o cryptarithm2 Main.hs
Changing the order of the cases in solve
also makes the problem go away.
Trac metadata
Trac field | Value |
---|---|
Version | 7.11 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |