Windows breakage -- again

Johan Tibell johan.tibell at
Wed Jul 16 07:37:12 UTC 2014

I added some primops about a month ago
(4ee4ab01c1d97845aecb7707ad2f9a80933e7a49) that call __sync_fetch_and_add,
a gcc/llvm builtin. I'm a bit surprised to see this error. The GCC manual
[1] says:

> " Not all operations are supported by all target processors. If a
particular operation cannot be implemented on the target processor, a
warning will be generated and a call an external function will be
generated. The external function will carry the same name as the builtin,
with an additional suffix `_n' where n is the size of the data type."

I'm a bit surprised by this error for two reasons:

 * A call to that symbol should only be generated if the CPU doesn't
support the atomic instructions. What CPU model does Windows report that
you have?

 * gcc should define such a symbol. For me the following test program

#include <stdint.h>

uint8_t test(uint8_t* ptr, uint8_t val) {
  return __sync_fetch_and_add_1(ptr, val);

int main(void) {
  uint8_t n;
  return test(&n, 1);

Does that compile for you? Which version of GCC do we end up using on

The reported symbol (___sync_fetch_and_add_1) has three leading
underscores, that looks weird. Can you compile just
libraries/ghc-prim/cbits/atomic.c and see if it's indeed GCC that generates
a reference to that symbol?


On Wed, Jul 16, 2014 at 12:29 AM, Simon Peyton Jones <simonpj at>

>  Aargh!  The Windows build has broken – again.  I can’t build GHC on my
> laptop any more.
> A clean ‘sh validate’ finishes as below.  What on earth is
> `___sync_fetch_and_add_1'?
> Can anyone help?  Thanks!
> Simon
> "inplace/bin/ghc-stage2.exe" -hisuf hi -osuf  o -hcsuf hc -static  -H32m
> -O -Werror -Wall -H64m -O0    -package-name vector-
> -hide-all-packages -i -ilibraries/vector/.
> -ilibraries/vector/dist-install/build
> -ilibraries/vector/dist-install/build/autogen
> -Ilibraries/vector/dist-install/build
> -Ilibraries/vector/dist-install/build/autogen -Ilibraries/vector/include
> -Ilibraries/vector/internal   -optP-DVECTOR_BOUNDS_CHECKS -optP-include
> -optPlibraries/vector/dist-install/build/autogen/cabal_macros.h -package
> base- -package deepseq- -package ghc-prim- -package
> primitive- -O2 -XHaskell98 -XCPP -XDeriveDataTypeable -O2 -O
> -dcore-lint -fno-warn-deprecated-flags  -no-user-package-db -rtsopts
> -Wwarn     -odir libraries/vector/dist-install/build -hidir
> libraries/vector/dist-install/build -stubdir
> libraries/vector/dist-install/build   -c
> libraries/vector/./Data/Vector/Fusion/Stream/Monadic.hs -o
> libraries/vector/dist-install/build/Data/Vector/Fusion/Stream/Monadic.o
> Loading package ghc-prim ... linking ... ghc-stage2.exe: unable to load
> package `ghc-prim'
> ghc-stage2.exe:
> C:\code\HEAD\libraries\ghc-prim\dist-install\build\HSghc-prim-
> unknown symbol `___sync_fetch_and_add_1'
> libraries/vector/ recipe for target
> 'libraries/vector/dist-install/build/Data/Vector/Fusion/Stream/Monadic.o'
> failed
> make[1]: ***
> [libraries/vector/dist-install/build/Data/Vector/Fusion/Stream/Monadic.o]
> Error 1
> I
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list