mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-19 10:10:23 +02:00
Fix inline machinery for GCC 4.3 and later in C99 mode.
This commit is contained in:
parent
5fb59397d2
commit
be683858d8
3 changed files with 45 additions and 40 deletions
1
NEWS
1
NEWS
|
@ -30,6 +30,7 @@ Previously, parsing short option names of argument-less options would
|
||||||
lead to a stack overflow.
|
lead to a stack overflow.
|
||||||
|
|
||||||
** Fixed type-checking for the second argument of `eval'
|
** Fixed type-checking for the second argument of `eval'
|
||||||
|
** Allow compilation of Guile-using programs in C99 mode with GCC 4.3 and later
|
||||||
** Fixed build issue for GNU/Linux on IA64
|
** Fixed build issue for GNU/Linux on IA64
|
||||||
** Fixed build issues on NetBSD 1.6
|
** Fixed build issues on NetBSD 1.6
|
||||||
** Fixed build issue on Solaris 2.10 x86_64
|
** Fixed build issue on Solaris 2.10 x86_64
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2008-04-03 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
|
||||||
|
* inline.h (SCM_C_EXTERN_INLINE): New macro, addresses the
|
||||||
|
"extern inline" semantic change in C99 mode with GCC 4.3 and
|
||||||
|
later and the warning in C99 mode with GCC 4.2. Use it in the
|
||||||
|
inline function definitions.
|
||||||
|
|
||||||
2008-03-10 Ludovic Courtès <ludo@gnu.org>
|
2008-03-10 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
|
||||||
* eval.c, filesys.c: Enclose `alloca' blob in `#ifndef alloca',
|
* eval.c, filesys.c: Enclose `alloca' blob in `#ifndef alloca',
|
||||||
|
|
|
@ -38,6 +38,32 @@
|
||||||
#include "libguile/pairs.h"
|
#include "libguile/pairs.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef SCM_INLINE_C_INCLUDING_INLINE_H
|
||||||
|
|
||||||
|
/* GCC has `__inline__' in all modes, including strict ansi. GCC 4.3 and
|
||||||
|
above with `-std=c99' or `-std=gnu99' implements ISO C99 inline semantics,
|
||||||
|
unless `-fgnu89-inline' is used. Here we want GNU "extern inline"
|
||||||
|
semantics, hence the `__gnu_inline__' attribute, in accordance with:
|
||||||
|
http://gcc.gnu.org/gcc-4.3/porting_to.html .
|
||||||
|
|
||||||
|
With GCC 4.2, `__GNUC_STDC_INLINE__' is never defined (because C99 inline
|
||||||
|
semantics are not supported), but a warning is issued in C99 mode if
|
||||||
|
`__gnu_inline__' is not used. */
|
||||||
|
|
||||||
|
# ifdef __GNUC__
|
||||||
|
# if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2)
|
||||||
|
# define SCM_C_EXTERN_INLINE \
|
||||||
|
extern __inline__ __attribute__ ((__gnu_inline__))
|
||||||
|
# else
|
||||||
|
# define SCM_C_EXTERN_INLINE extern __inline__
|
||||||
|
# endif
|
||||||
|
# elif (defined SCM_C_INLINE)
|
||||||
|
# define SCM_C_EXTERN_INLINE static SCM_C_INLINE
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif /* SCM_INLINE_C_INCLUDING_INLINE_H */
|
||||||
|
|
||||||
|
|
||||||
#if ((!defined SCM_C_INLINE) && (!defined SCM_INLINE_C_INCLUDING_INLINE_H)) \
|
#if ((!defined SCM_C_INLINE) && (!defined SCM_INLINE_C_INCLUDING_INLINE_H)) \
|
||||||
|| (defined __GNUC__)
|
|| (defined __GNUC__)
|
||||||
|
|
||||||
|
@ -66,14 +92,9 @@ SCM_API int scm_is_pair (SCM x);
|
||||||
extern unsigned scm_newcell2_count;
|
extern unsigned scm_newcell2_count;
|
||||||
extern unsigned scm_newcell_count;
|
extern unsigned scm_newcell_count;
|
||||||
|
|
||||||
#if defined SCM_C_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
|
||||||
/* definitely inlining */
|
#if defined SCM_C_EXTERN_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
||||||
#ifdef __GNUC__
|
SCM_C_EXTERN_INLINE
|
||||||
extern
|
|
||||||
#else
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
SCM_C_INLINE
|
|
||||||
#endif
|
#endif
|
||||||
SCM
|
SCM
|
||||||
scm_cell (scm_t_bits car, scm_t_bits cdr)
|
scm_cell (scm_t_bits car, scm_t_bits cdr)
|
||||||
|
@ -142,14 +163,8 @@ scm_cell (scm_t_bits car, scm_t_bits cdr)
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined SCM_C_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
#if defined SCM_C_EXTERN_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
||||||
/* definitely inlining */
|
SCM_C_EXTERN_INLINE
|
||||||
#ifdef __GNUC__
|
|
||||||
extern
|
|
||||||
#else
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
SCM_C_INLINE
|
|
||||||
#endif
|
#endif
|
||||||
SCM
|
SCM
|
||||||
scm_double_cell (scm_t_bits car, scm_t_bits cbr,
|
scm_double_cell (scm_t_bits car, scm_t_bits cbr,
|
||||||
|
@ -217,14 +232,8 @@ scm_double_cell (scm_t_bits car, scm_t_bits cbr,
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined SCM_C_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
#if defined SCM_C_EXTERN_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
||||||
/* definitely inlining */
|
SCM_C_EXTERN_INLINE
|
||||||
#ifdef __GNUC__
|
|
||||||
extern
|
|
||||||
#else
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
SCM_C_INLINE
|
|
||||||
#endif
|
#endif
|
||||||
SCM
|
SCM
|
||||||
scm_array_handle_ref (scm_t_array_handle *h, ssize_t p)
|
scm_array_handle_ref (scm_t_array_handle *h, ssize_t p)
|
||||||
|
@ -232,14 +241,8 @@ scm_array_handle_ref (scm_t_array_handle *h, ssize_t p)
|
||||||
return h->ref (h, p);
|
return h->ref (h, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined SCM_C_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
#if defined SCM_C_EXTERN_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
||||||
/* definitely inlining */
|
SCM_C_EXTERN_INLINE
|
||||||
#ifdef __GNUC__
|
|
||||||
extern
|
|
||||||
#else
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
SCM_C_INLINE
|
|
||||||
#endif
|
#endif
|
||||||
void
|
void
|
||||||
scm_array_handle_set (scm_t_array_handle *h, ssize_t p, SCM v)
|
scm_array_handle_set (scm_t_array_handle *h, ssize_t p, SCM v)
|
||||||
|
@ -247,14 +250,8 @@ scm_array_handle_set (scm_t_array_handle *h, ssize_t p, SCM v)
|
||||||
h->set (h, p, v);
|
h->set (h, p, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined SCM_C_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
#if defined SCM_C_EXTERN_INLINE && ! defined SCM_INLINE_C_INCLUDING_INLINE_H
|
||||||
/* definitely inlining */
|
SCM_C_EXTERN_INLINE
|
||||||
#ifdef __GNUC__
|
|
||||||
extern
|
|
||||||
#else
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
SCM_C_INLINE
|
|
||||||
#endif
|
#endif
|
||||||
int
|
int
|
||||||
scm_is_pair (SCM x)
|
scm_is_pair (SCM x)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue