Compiling for ARMv8-A Using GCC 7.2.0 - Assertion error in gen-fac

Damm, Stephen Stephen_Damm at
Fri Dec 6 15:29:46 UTC 2019

I also see no reasonable way for it to end up as 1.  If I printf("%lu") those same two variables the results are even more strange:

== GCC 4.8.5 ==

== GCC 7.2.0 ==

So it appears like the "-1" being applies to GMP_HLIMB_BIT is a +1 in GCC 7.2.0.  I've not encountered behaviour like this before.  Very strange.

I am currently investigating if this is an issue with how GCC handles longs between 4.8.5 and 7.2.0 in ARM64 hosts builds. 

This concludes me to believe a bug in GCC ARM64 or a bug in GMP or I am somehow building GCC wrong but right enough that it can compile most other libraries.

I do notice in GCC 4.8.5 -mabi is not specified when compiling GMP.  When GCC 7.2.0 goes to build GMP it is being explicit about the -mabi=lp64.  

If anything comes to mind let me know.  I'll post back here if I find out the cause.

Stephen Damm

-----Original Message-----
From: Niels Möller [mailto:nisse at] 
Sent: December 6, 2019 03:51
To: Damm, Stephen <Stephen_Damm at>
Cc: gmp-bugs at
Subject: Re: Compiling for ARMv8-A Using GCC 7.2.0 - Assertion error in gen-fac

"Damm, Stephen" <Stephen_Damm at> writes:

> I was able to narrow down the cause.  In GC 7.2.0 the GMP_LLIMB_MASK is wrong:
> =GCC 4.8.5=
> =GCC 7.2.0=
> GMP_LLIMB_MASK=1=0x00000001
> From my understanding this might be a difference in how GCC 7.2.0 handles unsigned longs vs GCC 4.8.5.  It also could be I am missing some vital compiler flag for GMP.

Can you file a gcc bug? These constants are defined as

#define GMP_LIMB_BITS (sizeof(mp_limb_t) * CHAR_BIT)    /* 64, you say */

#define GMP_HLIMB_BIT ((mp_limb_t) 1 << (GMP_LIMB_BITS / 2)) #define GMP_LLIMB_MASK (GMP_HLIMB_BIT - 1)

I see no reasonable way that can end up defining GMP_LLIMB_MASK as 1.


Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.

More information about the gmp-bugs mailing list