Compiling with C++

Marc Glisse marc.glisse at inria.fr
Mon Nov 17 19:44:16 UTC 2014


On Mon, 17 Nov 2014, Torbjörn Granlund wrote:

> Marc Glisse <marc.glisse at inria.fr> writes:
>
>  Interesting, we don't have a big extern "C" in longlong.h, I am
>  surprised we didn't hit issues with that earlier.
> 
> It puzzled me too, but now I see why; longlong.h is quite innocent.
>
> These references are made only if HAVE_NATIVE_mpn_umul_ppmm, which
> happens if the config provides umul_ppmm as a function.  Now, x86
> (32-bit) provides that for all configs via in mpn/x86/umul.asm, but
> x86_64 does not.
>
> I am not sure how to best address this.  The motivation for these
> umul.asm files was to support non-GCC compilers better.
>
> Alternatives:
>
> 1. Remove the umul.asm files, and then the code depending on them in
>   longlong.h and tune/common.c (and perhaps more places).  This will
>   hurt proprietary compilers (and perhaps also clang).
>
> 2. Put extern "C" {....} in some good place around mpn_umul_ppmm and
>   mpn_udiv_qrnnd.  Perhaps longlong.h is the right place.  Or perhaps
>   gmp-impl.h.

If adding the usual:

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
}
#endif

at the beginning / end of longlong.h works, that seems like a good 
solution. gmp.h and gmp-impl.h already have it.

> 3. Something else.
>
>  Seems to be mostly just the glibc 'throw()' thing.
>
> OK.

-- 
Marc Glisse


More information about the gmp-discuss mailing list