diff --git a/cbits/sha1.c b/cbits/sha1.c
--- a/cbits/sha1.c
+++ b/cbits/sha1.c
@@ -50,7 +50,7 @@
 {
 #if WORDS_BIGENDIAN
   return hl;
-#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
   return __builtin_bswap32(hl);
 #else
   /* GCC usually transforms this into a bswap insn */
@@ -73,7 +73,7 @@
 {
 #if WORDS_BIGENDIAN
   return hll;
-#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
   return __builtin_bswap64(hll);
 #else
   return ((uint64_t)cpu_to_be32(hll & 0xffffffff) << 32LL) | cpu_to_be32(hll >> 32);
@@ -257,7 +257,7 @@
 void
 hs_cryptohash_sha1_finalize(struct sha1_ctx *ctx, uint8_t *out)
 {
-  static uint8_t padding[64] = { 0x80, };
+  static const uint8_t padding[64] = { 0x80, };
 
   /* add padding and update data with it */
   uint64_t bits = cpu_to_be64(ctx->sz << 3);
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+## 0.11.100.1
+
+ - Use `__builtin_bswap{32,64}` only with GCC >= 4.3
+
 ## 0.11.100.0
 
  - new `hmac` and `hmaclazy` functions providing HMAC-SHA1
diff --git a/cryptohash-sha1.cabal b/cryptohash-sha1.cabal
--- a/cryptohash-sha1.cabal
+++ b/cryptohash-sha1.cabal
@@ -1,5 +1,5 @@
 name:                cryptohash-sha1
-version:             0.11.100.0
+version:             0.11.100.1
 description:
     A practical incremental and one-pass, pure API to the
     <https://en.wikipedia.org/wiki/SHA-1 SHA-1 hash algorithm>
diff --git a/src/Crypto/Hash/SHA1.hs b/src/Crypto/Hash/SHA1.hs
--- a/src/Crypto/Hash/SHA1.hs
+++ b/src/Crypto/Hash/SHA1.hs
@@ -112,6 +112,7 @@
 -- Consequently, a SHA-1 digest as produced by 'hash', 'hashlazy', or 'finalize' is 20 bytes long.
 newtype Ctx = Ctx ByteString
 
+-- keep this synchronised with cbits/sha1.h
 {-# INLINE digestSize #-}
 digestSize :: Int
 digestSize = 20
