[GHC] #10231: TMVar - fmap - orElse clashes in ghc 7.8.4
GHC
ghc-devs at haskell.org
Thu Apr 2 21:05:13 UTC 2015
#10231: TMVar - fmap - orElse clashes in ghc 7.8.4
-------------------------------------+-------------------------------------
Reporter: ran | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: libraries | Version: 7.8.4
(other) | Operating System: Linux
Keywords: | Type of failure: Incorrect result
Architecture: x86_64 | at runtime
(amd64) | Blocked By:
Test Case: | Related Tickets:
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Attached is a tar archive with minimal reproducible example.
The problem is that after orElse success I get wrong constructor: I should
have timer tick but get reset instead. That is, expected output is
{{{
timer thread
timer tick
timer thread
timer tick
...
}}}
but I get
{{{
timer thread
reset
timer thread
reset
...
}}}
The strange thing is that the problem presents, first, only when the
binary is built by cabal (checked only inside sandbox):
{{{
$ cabal sandbox init
...
$ cabal configure
Resolving dependencies...
Configuring mvk-0.1.0.0...
cabal: At least the following dependencies are missing:
stm ==2.4.4
$ cabal install --dependencies-only
...
$ cabal build
}}}
When I run
{{{
cabal exec -- ghc --make mvk.hs
}}}
the resulting binary doesn't show the problem.
Also, problem disappears if I:
* either comment start of the (long-sleeping) reset thread at all;
* or change content type of one of TMVars to, say, Bool
But if I change type of content for both to, say, Bool, the problem
presents. Furthermore, if with Bool content type I put False in timer
thread and True in reset thread (and derive Show and output received
value) I get
{{{
timer thread
received Reset False
reset
...
}}}
That is, underlying Bool is right, but fmapped constructor is wrong.
The problem was absent in Debian Wheezy's ghc 7.4.1 (not sure about STM
version).
Reproduced both in
* Debian Jessie on x86_64 with GHC 7.8.4 binary from official site and
cabal-install 1.20.0.3 from deb.haskell.org
* Debian Wheezy on x86 with GHC 7.8.3 binary from deb.haskell.org and
cabal-install 1.20.0.3 built by GHC from dist.
In all cases used cabal.config from Stackage's lts-1.4 (included in the
attached archive)
Output from cabal build -v:
{{{
Skipping add-source deps check...
Using a sandbox located at
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox
The sandbox was created after the package was already configured.
Re-configuring with most recently used options. If this fails, please run
configure manually.
Using a sandbox located at
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox
'/opt/ghc/7.8.4/bin/ghc' '--numeric-version'
looking for tool ghc-pkg near compiler in /opt/ghc/7.8.4/bin
found ghc-pkg in /opt/ghc/7.8.4/bin/ghc-pkg
'/opt/ghc/7.8.4/bin/ghc-pkg' '--version'
'/opt/ghc/7.8.4/bin/ghc' '--supported-languages'
'/opt/ghc/7.8.4/bin/ghc' '--info'
Reading available packages...
Reading available packages...
Choosing modular solver.
Resolving dependencies...
Configuring mvk-0.1.0.0...
Dependency base ==4.7.0.2: using base-4.7.0.2
Dependency stm ==2.4.4: using stm-2.4.4
Using Cabal-1.20.0.0 compiled by ghc-7.4
Using compiler: ghc-7.8.4
Using install prefix:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox
Binaries installed in:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/bin
Libraries installed in:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/lib/x86_64
-linux-ghc-7.8.4/mvk-0.1.0.0
Private binaries installed in:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/libexec
Data files installed in:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/share/x86_64
-linux-ghc-7.8.4/mvk-0.1.0.0
Documentation installed in:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/share/doc/x86_64
-linux-ghc-7.8.4/mvk-0.1.0.0
Configuration files installed in:
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/etc
Using alex version 3.1.3 found on system at: /usr/bin/alex
Using ar found on system at: /usr/bin/ar
No c2hs found
No cpphs found
No ffihugs found
Using gcc version 4.9.2 found on system at: /usr/bin/gcc
Using ghc version 7.8.4 found on system at: /opt/ghc/7.8.4/bin/ghc
Using ghc-pkg version 7.8.4 found on system at: /opt/ghc/7.8.4/bin/ghc-pkg
No greencard found
Using haddock version 2.14.3 found on system at:
/opt/ghc/7.8.4/bin/haddock
Using happy version 1.19.4 found on system at: /usr/bin/happy
Using haskell-suite found on system at: haskell-suite-dummy-location
Using haskell-suite-pkg found on system at: haskell-suite-pkg-dummy-
location
No hmake found
Using hpc version 0.67 found on system at: /opt/ghc/7.8.4/bin/hpc
Using hsc2hs version 0.67 found on system at: /opt/ghc/7.8.4/bin/hsc2hs
Using hscolour version 1.20 found on system at: /usr/bin/HsColour
No hugs found
No jhc found
Using ld found on system at: /usr/bin/ld
No lhc found
No lhc-pkg found
No nhc98 found
Using pkg-config version 0.28 found on system at: /usr/bin/pkg-config
Using strip found on system at: /usr/bin/strip
Using tar found on system at: /bin/tar
No uhc found
Component build order: executable 'mvk'
creating dist/build
creating dist/build/autogen
Building mvk-0.1.0.0...
Preprocessing executable 'mvk' for mvk-0.1.0.0...
Building executable mvk...
creating dist/build/mvk
creating dist/build/mvk/mvk-tmp
/opt/ghc/7.8.4/bin/ghc --make -no-link -fbuilding-cabal-package -O -j4
-static -outputdir dist/build/mvk/mvk-tmp -odir dist/build/mvk/mvk-tmp
-hidir dist/build/mvk/mvk-tmp -stubdir dist/build/mvk/mvk-tmp -i
-idist/build/mvk/mvk-tmp -i. -idist/build/autogen -Idist/build/autogen
-Idist/build/mvk/mvk-tmp -optP-include
-optPdist/build/autogen/cabal_macros.h -hide-all-packages -no-user-
package-db -package-db /.main/home/ran/src/transas/knei24/mvk.bug/.cabal-
sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d -package-db
dist/package.conf.inplace -package-id
base-4.7.0.2-bfd89587617e381ae01b8dd7b6c7f1c1 -package-id
stm-2.4.4-c36cb8072081a12d13d98a3b4449e55c -XHaskell98 ./mvk.hs -Wall
Linking...
/opt/ghc/7.8.4/bin/ghc --make -fbuilding-cabal-package -O -static
-outputdir dist/build/mvk/mvk-tmp -odir dist/build/mvk/mvk-tmp -hidir
dist/build/mvk/mvk-tmp -stubdir dist/build/mvk/mvk-tmp -i -idist/build/mvk
/mvk-tmp -i. -idist/build/autogen -Idist/build/autogen -Idist/build/mvk
/mvk-tmp -optP-include -optPdist/build/autogen/cabal_macros.h -hide-all-
packages -no-user-package-db -package-db
/.main/home/ran/src/transas/knei24/mvk.bug/.cabal-sandbox/x86_64-linux-
ghc-7.8.4-packages.conf.d -package-db dist/package.conf.inplace -package-
id base-4.7.0.2-bfd89587617e381ae01b8dd7b6c7f1c1 -package-id
stm-2.4.4-c36cb8072081a12d13d98a3b4449e55c -XHaskell98 ./mvk.hs -o
dist/build/mvk/mvk -Wall
Linking dist/build/mvk/mvk ...
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10231>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list