INT_MAX definition in gmp-impl.h conflicts with limits.h

Marc Glisse marc.glisse at
Tue Nov 22 02:31:17 CET 2011

On Tue, 22 Nov 2011, Vincent Lefevre wrote:

> On 2011-11-22 01:29:42 +0100, Marc Glisse wrote:
>> On Tue, 22 Nov 2011, Vincent Lefevre wrote:
>>> On 2011-11-21 20:26:06 +0100, Marc Glisse wrote:
>>>> Hello,
>>>> I was compiling gmp with clang (no issue except for the use of jb,pt in
>>>> mpn/x86_64/mod_34lsub1.asm), and then I ran the testsuite and hit this
>>>> issue: on linux, limits.h includes bits/xopen_lim.h which contains this
>>>> code:
>>>> #ifdef INT_MAX
>>>> # if INT_MAX == 32767
>>>> #  define WORD_BIT      16
>>>> ...
>>>> On the other hand, gmp-impl.h defines INT_MAX as something not
>>>> preprocessor-friendly (with casts). The combination doesn't work.
>>> We had similar problems too between MPFR and gmp-impl.h in the past.
>>> The answer by Torbjorn was that gmp-impl.h is a GMP internal and
>>> mustn't be included by users.
>> Er, ok, but that doesn't tell me how to make the GMP testsuite pass (I am
>> not talking about external use).
> But neither GMP, nor its testsuite is supposed to include <limits.h>
> (that's why GMP has all these kinds of hacks). Then, why do you get
> an error with limits.h?

With clang, at least in C++, tests.h includes headers which include 
headers which... and you end up with limits.h.

Marc Glisse

More information about the gmp-bugs mailing list