mirror of
https://git.savannah.gnu.org/git/gperf.git
synced 2025-12-02 13:09:22 +00:00
Drop the inline specifiers from the generated lookup function.
This commit is contained in:
16
ChangeLog
16
ChangeLog
@@ -1,3 +1,19 @@
|
||||
2016-11-26 Bruno Haible <bruno@clisp.org>
|
||||
|
||||
Drop the inline specifiers from the generated lookup function.
|
||||
It's not adequate because
|
||||
- this lookup function is quite large in fact, not worth inlining,
|
||||
- with gcc -O0, it leads to link errors, see
|
||||
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41194#c2>
|
||||
- the hash function is 'static', the lookup function is non-static,
|
||||
but references from non-static inline functions to static functions
|
||||
and variables are forbidden, see ISO C 99 section 6.7.4.(3).
|
||||
* src/output.cc (Output::output_lookup_function): Don't emit an inline
|
||||
specifier.
|
||||
* tests/*.exp: Update.
|
||||
Reported by Sebastian Freundt and Sergii Strelkovskyi
|
||||
at <https://savannah.gnu.org/bugs/?37071>.
|
||||
|
||||
2016-11-26 Bruno Haible <bruno@clisp.org>
|
||||
|
||||
Change mailing list address to <bug-gperf@gnu.org>.
|
||||
|
||||
@@ -1974,22 +1974,11 @@ void
|
||||
Output::output_lookup_function () const
|
||||
{
|
||||
/* Output the function's head. */
|
||||
if (option[KRC] | option[C] | option[ANSIC])
|
||||
/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
|
||||
inline semantics, unless -fgnu89-inline is used. It defines a macro
|
||||
__GNUC_STDC_INLINE__ to indicate this situation or a macro
|
||||
__GNUC_GNU_INLINE__ to indicate the opposite situation.
|
||||
GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
|
||||
semantics but warns, unless -fgnu89-inline is used:
|
||||
warning: C99 inline functions are not supported; using GNU89
|
||||
warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
|
||||
It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */
|
||||
printf ("#ifdef __GNUC__\n"
|
||||
"__inline\n"
|
||||
"#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__\n"
|
||||
"__attribute__ ((__gnu_inline__))\n"
|
||||
"#endif\n"
|
||||
"#endif\n");
|
||||
/* We don't declare the lookup function 'static' because we cannot make
|
||||
assumptions about the compilation units of the user.
|
||||
Since we don't make it 'static', it makes no sense to declare it 'inline',
|
||||
because non-static inline functions must not reference static functions or
|
||||
variables, see ISO C 99 section 6.7.4.(3). */
|
||||
|
||||
printf ("%s%s\n",
|
||||
const_for_struct, _return_type);
|
||||
|
||||
@@ -197,12 +197,6 @@ static struct resword wordlist[] =
|
||||
{"volatile", TYPE_QUAL, RID_VOLATILE}
|
||||
};
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct resword *
|
||||
is_reserved_word (str, len)
|
||||
register const char *str;
|
||||
|
||||
@@ -1801,12 +1801,6 @@ static const struct charset wordlist[] =
|
||||
{"hp-desktop", 2021}
|
||||
};
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const struct charset *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -176,12 +176,6 @@ hash (str, len)
|
||||
return hval;
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct resword *
|
||||
in_word_set (str, len)
|
||||
register const char *str;
|
||||
|
||||
@@ -101,12 +101,6 @@ hash (str, len)
|
||||
return hval + asso_values[(unsigned char)str[len - 1]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct resword *
|
||||
is_reserved_word (str, len)
|
||||
register const char *str;
|
||||
|
||||
@@ -90,12 +90,6 @@ hash (register const char *str, register size_t len)
|
||||
return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct resword *
|
||||
is_reserved_word (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -80,12 +80,6 @@ hash (register const char *str, register size_t len)
|
||||
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct month *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -119,12 +119,6 @@ hash (str, len)
|
||||
return hval + asso_values[(unsigned char)str[len - 1]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct java_keyword *
|
||||
java_keyword (str, len)
|
||||
register const char *str;
|
||||
|
||||
@@ -1458,12 +1458,6 @@ static const struct language wordlist[] =
|
||||
{"ile", "Interlingue", 181, "interlingue", 181}
|
||||
};
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const struct language *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -107,12 +107,6 @@ hash (register const char *str, register size_t len)
|
||||
return hval;
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const char *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -93,12 +93,6 @@ hash (register const char *str, register size_t len)
|
||||
return hval + asso_values[(unsigned char)str[len - 1]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct resword *
|
||||
is_reserved_word (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -80,12 +80,6 @@ hash (register const char *str, register size_t len)
|
||||
return asso_values[(unsigned char)str[1]+1] + asso_values[(unsigned char)str[0]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const char *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -80,12 +80,6 @@ hash (register const char *str, register size_t len)
|
||||
return asso_values[(unsigned char)str[1]+1] + asso_values[(unsigned char)str[0]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const char *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -125,12 +125,6 @@ hash (register const char *str, register size_t len)
|
||||
return asso_values[(unsigned char)str[1]+3] + asso_values[(unsigned char)str[0]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const char *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
@@ -81,12 +81,6 @@ hash (register const char *str, register size_t len)
|
||||
return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
struct resword *
|
||||
in_word_set (register const char *str, register size_t len)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user