Various patches against gmp-4.3.0
Marc Glisse
marc.glisse at normalesup.org
Mon May 4 11:53:17 CEST 2009
On Mon, 4 May 2009, Torbjorn Granlund wrote:
> For C, I just checked a bit what happens with a recent version of Sun
> Studio. I compiled several files that include the same header with a
> static inline function and all use it. I then used nm to look at the
> result. With optimization, the function disappears. Without
> optimization, I end up with 2 copies of the function (not exported).
>
> 2 copies in same object file?!?
Only one in each .o file. But when I link several .o files together (in a
.so for instance), with static they remain distinct, and with extern they
get merged. It is not very surprising that static functions don't get
merged, gcc+binutiles don't merge them either. I think I heard that MSVC
does though, as long as the compiler generated the exact same code for
both (nice optimization).
I am actually more surprised by extern inline, where depending on the
options gcc either generates no function or generates functions that cause
a multiple definition error at link time (where with sunpro the multiple
definitions get merged).
Plain "inline" seems to be the sunpro (and C99) equivalent of the gcc
"extern inline attribute((gnu_inline))".
> I'll use the following:
>
> /* Recent enough Sun C compilers accept "extern inline" */
> #if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560
> #define __GMP_EXTERN_INLINE extern inline
> #endif
>
> /* Somewhat older Sun C compilers accept "static inline" */
> #if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540
> #define __GMP_EXTERN_INLINE static inline
> #endif
I guess you mean in the reverse order, or with a
!defined(__GMP_EXTERN_INLINE) :-)
--
Marc Glisse
More information about the gmp-devel
mailing list