Here's a better pair of patches. The first one makes gnulib-common.m4 emit definitions of these two _GL_ATTRIBUTE_... macros. The second addresses all of the warnings in gnulib code induced by building coreutils with CFLAGS='-O3 -Wsuggest-attribute=const -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn' The latter affects pretty many modules, so if there's no feedback, I'll wait a couple of days before pushing.
>From 3c24b3858618c276bdf84f9bf242f70e896bf00b Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Sun, 24 Apr 2011 19:00:18 +0200 Subject: [PATCH 1/2] gnulib-common.m4: add _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE * m4/gnulib-common.m4 (gl_COMMON): Emit definitions of _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE. --- ChangeLog | 6 ++++++ m4/gnulib-common.m4 | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3240937..4c0140d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-04-29 Jim Meyering <meyer...@redhat.com> + + gnulib-common.m4: add _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE + * m4/gnulib-common.m4 (gl_COMMON): Emit definitions of + _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE. + 2011-04-30 Eric Blake <ebl...@redhat.com> fclose: don't fail on non-seekable input stream diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 index c4d7a20..8b73f1d 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -1,4 +1,4 @@ -# gnulib-common.m4 serial 24 +# gnulib-common.m4 serial 25 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -34,6 +34,20 @@ AC_DEFUN([gl_COMMON_BODY], [ /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED + +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The __const__ attribute was added in gcc 2.95. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST /* empty */ +#endif ]) dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not -- 1.7.5.134.g1c08b >From aa286595163a6d72b9a2df319d109519814a368a Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Sat, 30 Apr 2011 00:16:01 +0100 Subject: [PATCH 2/2] mark functions with const and pure attributes Mark functions per suggestions from gcc-4.6 when using these options: -Wsuggest-attribute=pure -Wsuggest-attribute=const * lib/argmatch.c (argmatch, argmatch_to_argument): Mark. * lib/argv-iter.c (argv_iter_n_args): Likewise. * lib/base64.c (isbase64): Likewise. * lib/basename-lgpl.c (last_component, base_len): Likewise. * lib/c-ctype.c (c_isascii, c_isalnum, c_isalpha): Likewise. (c_isblank, c_iscntrl, c_isdigit, c_islower, c_isgraph): Likewise. (c_isprint, c_ispunct, c_isspace, c_isupper, c_isxdigit): Likewise. (c_tolower, c_toupper): Likewise. * lib/c-strcasecmp.c (c_strcasecmp): Likewise. * lib/c-strncasecmp.c (c_strncasecmp): Likewise. * lib/chdir-long.c (find_non_slash): Likewise. * lib/exclude.c (fnmatch_pattern_has_wildcards): Likewise. * lib/file-type.c (file_type): Likewise. * lib/filenamecat-lgpl.c (longest_relative_suffix): Likewise. * lib/filevercmp.c (verrevcmp): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/fts.c (fts_maxarglen): Likewise. * lib/hash-pjw.c (hash_pjw): Likewise. * lib/hash-triple.c (triple_hash_no_name, triple_compare_ino_str): * lib/hash.c (hash_get_n_buckets, hash_get_n_buckets_used): Likewise. (hash_get_n_entries, hash_get_max_bucket_length): Likewise. (hash_table_ok, hash_get_first, hash_string, is_prime): Likewise. (next_prime, compute_bucket_size): Likewise. * lib/i-ring.c (i_ring_empty): Likewise. * lib/isnan.c (FUNC): Likewise. * lib/localename.c (string_hash, gl_locale_name_default): Likewise. * lib/memcasecmp.c (memcasecmp): Likewise. * lib/memchr2.c (memchr2): Likewise. * lib/memcmp2.c (memcmp2): Likewise. * lib/parse-datetime.y (lookup_zone): Likewise. * lib/propername.c (proper_name): Likewise. * lib/quotearg.c (get_quoting_style): Likewise. (quoting_options_from_style): Likewise. * lib/sockets.c (gl_sockets_startup, gl_sockets_cleanup): Likewise. * lib/strnlen1.c (strnlen1): Likewise. * lib/uniwidth/width.c (uc_width): Likewise. --- ChangeLog | 42 ++++++++++++++++++++++++++++++++++++++++++ lib/argmatch.c | 4 ++-- lib/argv-iter.c | 2 +- lib/base64.c | 2 +- lib/basename-lgpl.c | 4 ++-- lib/c-ctype.c | 30 +++++++++++++++--------------- lib/c-strcasecmp.c | 2 +- lib/c-strncasecmp.c | 2 +- lib/chdir-long.c | 2 +- lib/exclude.c | 2 +- lib/file-type.c | 2 +- lib/filenamecat-lgpl.c | 2 +- lib/filevercmp.c | 2 +- lib/freadahead.c | 2 +- lib/fts.c | 2 +- lib/hash-pjw.c | 2 +- lib/hash-triple.c | 4 ++-- lib/hash.c | 22 +++++++++++----------- lib/i-ring.c | 2 +- lib/isnan.c | 2 +- lib/localename.c | 4 ++-- lib/memcasecmp.c | 2 +- lib/memchr2.c | 2 +- lib/memcmp2.c | 2 +- lib/parse-datetime.y | 2 +- lib/propername.c | 2 +- lib/quotearg.c | 4 ++-- lib/sockets.c | 4 ++-- lib/strnlen1.c | 2 +- lib/uniwidth/width.c | 2 +- 30 files changed, 101 insertions(+), 59 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c0140d..03b89cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +2011-04-30 Jim Meyering <meyer...@redhat.com> + + mark functions with const and pure attributes + Mark functions per suggestions from gcc-4.6 when using these options: + -Wsuggest-attribute=pure -Wsuggest-attribute=const + * lib/argmatch.c (argmatch, argmatch_to_argument): Mark. + * lib/argv-iter.c (argv_iter_n_args): Likewise. + * lib/base64.c (isbase64): Likewise. + * lib/basename-lgpl.c (last_component, base_len): Likewise. + * lib/c-ctype.c (c_isascii, c_isalnum, c_isalpha): Likewise. + (c_isblank, c_iscntrl, c_isdigit, c_islower, c_isgraph): Likewise. + (c_isprint, c_ispunct, c_isspace, c_isupper, c_isxdigit): Likewise. + (c_tolower, c_toupper): Likewise. + * lib/c-strcasecmp.c (c_strcasecmp): Likewise. + * lib/c-strncasecmp.c (c_strncasecmp): Likewise. + * lib/chdir-long.c (find_non_slash): Likewise. + * lib/exclude.c (fnmatch_pattern_has_wildcards): Likewise. + * lib/file-type.c (file_type): Likewise. + * lib/filenamecat-lgpl.c (longest_relative_suffix): Likewise. + * lib/filevercmp.c (verrevcmp): Likewise. + * lib/freadahead.c (freadahead): Likewise. + * lib/fts.c (fts_maxarglen): Likewise. + * lib/hash-pjw.c (hash_pjw): Likewise. + * lib/hash-triple.c (triple_hash_no_name, triple_compare_ino_str): + * lib/hash.c (hash_get_n_buckets, hash_get_n_buckets_used): Likewise. + (hash_get_n_entries, hash_get_max_bucket_length): Likewise. + (hash_table_ok, hash_get_first, hash_string, is_prime): Likewise. + (next_prime, compute_bucket_size): Likewise. + * lib/i-ring.c (i_ring_empty): Likewise. + * lib/isnan.c (FUNC): Likewise. + * lib/localename.c (string_hash, gl_locale_name_default): Likewise. + * lib/memcasecmp.c (memcasecmp): Likewise. + * lib/memchr2.c (memchr2): Likewise. + * lib/memcmp2.c (memcmp2): Likewise. + * lib/parse-datetime.y (lookup_zone): Likewise. + * lib/propername.c (proper_name): Likewise. + * lib/quotearg.c (get_quoting_style): Likewise. + (quoting_options_from_style): Likewise. + * lib/sockets.c (gl_sockets_startup, gl_sockets_cleanup): Likewise. + * lib/strnlen1.c (strnlen1): Likewise. + * lib/uniwidth/width.c (uc_width): Likewise. + 2011-04-29 Jim Meyering <meyer...@redhat.com> gnulib-common.m4: add _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE diff --git a/lib/argmatch.c b/lib/argmatch.c index 9a3eca4..95fa469 100644 --- a/lib/argmatch.c +++ b/lib/argmatch.c @@ -79,7 +79,7 @@ argmatch_exit_fn argmatch_die = __argmatch_die; "no", "nope" -> 1 "y" is a valid argument, for `0', and "n" for `1'. */ -ptrdiff_t +ptrdiff_t _GL_ATTRIBUTE_PURE argmatch (const char *arg, const char *const *arglist, const char *vallist, size_t valsize) { @@ -192,7 +192,7 @@ __xargmatch_internal (const char *context, /* Look for VALUE in VALLIST, an array of objects of size VALSIZE and return the first corresponding argument in ARGLIST */ -const char * +const char * _GL_ATTRIBUTE_PURE argmatch_to_argument (const char *value, const char *const *arglist, const char *vallist, size_t valsize) diff --git a/lib/argv-iter.c b/lib/argv-iter.c index 340e588..d829d36 100644 --- a/lib/argv-iter.c +++ b/lib/argv-iter.c @@ -96,7 +96,7 @@ argv_iter (struct argv_iterator *ai, enum argv_iter_err *err) } } -size_t +size_t _GL_ATTRIBUTE_PURE argv_iter_n_args (struct argv_iterator const *ai) { return ai->fp ? ai->item_idx : ai->p - ai->arg_list; diff --git a/lib/base64.c b/lib/base64.c index 99fcc57..7dafb43 100644 --- a/lib/base64.c +++ b/lib/base64.c @@ -295,7 +295,7 @@ static const signed char b64[0x100] = { /* Return true if CH is a character from the Base64 alphabet, and false otherwise. Note that '=' is padding and not considered to be part of the alphabet. */ -bool +bool _GL_ATTRIBUTE_CONST isbase64 (char ch) { return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)]; diff --git a/lib/basename-lgpl.c b/lib/basename-lgpl.c index 529bc35..555ed6e 100644 --- a/lib/basename-lgpl.c +++ b/lib/basename-lgpl.c @@ -26,7 +26,7 @@ NAME has no relative file name components because it is a file system root, return the empty string. */ -char * +char * _GL_ATTRIBUTE_PURE last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); @@ -54,7 +54,7 @@ last_component (char const *name) value returned by base_name or last_component. Act like strlen (NAME), except omit all trailing slashes. */ -size_t +size_t _GL_ATTRIBUTE_PURE base_len (char const *name) { size_t len; diff --git a/lib/c-ctype.c b/lib/c-ctype.c index 335cde5..993de8d 100644 --- a/lib/c-ctype.c +++ b/lib/c-ctype.c @@ -24,13 +24,13 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ -bool +bool _GL_ATTRIBUTE_CONST c_isascii (int c) { return (c >= 0x00 && c <= 0x7f); } -bool +bool _GL_ATTRIBUTE_CONST c_isalnum (int c) { #if C_CTYPE_CONSECUTIVE_DIGITS \ @@ -65,7 +65,7 @@ c_isalnum (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isalpha (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE @@ -94,13 +94,13 @@ c_isalpha (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isblank (int c) { return (c == ' ' || c == '\t'); } -bool +bool _GL_ATTRIBUTE_CONST c_iscntrl (int c) { #if C_CTYPE_ASCII @@ -134,7 +134,7 @@ c_iscntrl (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isdigit (int c) { #if C_CTYPE_CONSECUTIVE_DIGITS @@ -151,7 +151,7 @@ c_isdigit (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_islower (int c) { #if C_CTYPE_CONSECUTIVE_LOWERCASE @@ -171,7 +171,7 @@ c_islower (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isgraph (int c) { #if C_CTYPE_ASCII @@ -205,7 +205,7 @@ c_isgraph (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isprint (int c) { #if C_CTYPE_ASCII @@ -239,7 +239,7 @@ c_isprint (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_ispunct (int c) { #if C_CTYPE_ASCII @@ -263,14 +263,14 @@ c_ispunct (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isspace (int c) { return (c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'); } -bool +bool _GL_ATTRIBUTE_CONST c_isupper (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE @@ -290,7 +290,7 @@ c_isupper (int c) #endif } -bool +bool _GL_ATTRIBUTE_CONST c_isxdigit (int c) { #if C_CTYPE_CONSECUTIVE_DIGITS \ @@ -317,7 +317,7 @@ c_isxdigit (int c) #endif } -int +int _GL_ATTRIBUTE_CONST c_tolower (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE @@ -356,7 +356,7 @@ c_tolower (int c) #endif } -int +int _GL_ATTRIBUTE_CONST c_toupper (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c index f5e5e48..8bf8217 100644 --- a/lib/c-strcasecmp.c +++ b/lib/c-strcasecmp.c @@ -24,7 +24,7 @@ #include "c-ctype.h" -int +int _GL_ATTRIBUTE_PURE c_strcasecmp (const char *s1, const char *s2) { register const unsigned char *p1 = (const unsigned char *) s1; diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c index 0085185..fac021a 100644 --- a/lib/c-strncasecmp.c +++ b/lib/c-strncasecmp.c @@ -24,7 +24,7 @@ #include "c-ctype.h" -int +int _GL_ATTRIBUTE_PURE c_strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; diff --git a/lib/chdir-long.c b/lib/chdir-long.c index 96b750c..af41b12 100644 --- a/lib/chdir-long.c +++ b/lib/chdir-long.c @@ -83,7 +83,7 @@ cdb_advance_fd (struct cd_buf *cdb, char const *dir) } /* Return a pointer to the first non-slash in S. */ -static inline char * +static inline char * _GL_ATTRIBUTE_PURE find_non_slash (char const *s) { size_t n_slash = strspn (s, "/"); diff --git a/lib/exclude.c b/lib/exclude.c index df49714..932c8f8 100644 --- a/lib/exclude.c +++ b/lib/exclude.c @@ -111,7 +111,7 @@ struct exclude }; /* Return true if str has wildcard characters */ -bool +bool _GL_ATTRIBUTE_PURE fnmatch_pattern_has_wildcards (const char *str, int options) { const char *cset = "\\?*[]"; diff --git a/lib/file-type.c b/lib/file-type.c index 109db44..b1c770d 100644 --- a/lib/file-type.c +++ b/lib/file-type.c @@ -25,7 +25,7 @@ #include <gettext.h> #define _(text) gettext (text) -char const * +char const * _GL_ATTRIBUTE_PURE file_type (struct stat const *st) { /* See POSIX 1003.1-2001 XCU Table 4-8 lines 17093-17107 for some of diff --git a/lib/filenamecat-lgpl.c b/lib/filenamecat-lgpl.c index 8cb2da4..26d1c73 100644 --- a/lib/filenamecat-lgpl.c +++ b/lib/filenamecat-lgpl.c @@ -34,7 +34,7 @@ /* Return the longest suffix of F that is a relative file name. If it has no such suffix, return the empty string. */ -static char const * +static char const * _GL_ATTRIBUTE_PURE longest_relative_suffix (char const *f) { for (f += FILE_SYSTEM_PREFIX_LEN (f); ISSLASH (*f); f++) diff --git a/lib/filevercmp.c b/lib/filevercmp.c index f6ed248..fd9e9f4 100644 --- a/lib/filevercmp.c +++ b/lib/filevercmp.c @@ -80,7 +80,7 @@ order (unsigned char c) section on the `Version' control field. This version of the code implements that from s5.6.12 of Debian Policy v3.8.0.1 http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version */ -static int +static int _GL_ATTRIBUTE_PURE verrevcmp (const char *s1, size_t s1_len, const char *s2, size_t s2_len) { size_t s1_pos = 0; diff --git a/lib/freadahead.c b/lib/freadahead.c index 27f5c95..6b7c702 100644 --- a/lib/freadahead.c +++ b/lib/freadahead.c @@ -22,7 +22,7 @@ #include <stdlib.h> #include "stdio-impl.h" -size_t +size_t _GL_ATTRIBUTE_PURE freadahead (FILE *fp) { #if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ diff --git a/lib/fts.c b/lib/fts.c index ad762dd..8d3277d 100644 --- a/lib/fts.c +++ b/lib/fts.c @@ -1906,7 +1906,7 @@ fts_padjust (FTS *sp, FTSENT *head) } static size_t -internal_function +internal_function _GL_ATTRIBUTE_PURE fts_maxarglen (char * const *argv) { size_t len, max; diff --git a/lib/hash-pjw.c b/lib/hash-pjw.c index 743bb57..8997a10 100644 --- a/lib/hash-pjw.c +++ b/lib/hash-pjw.c @@ -27,7 +27,7 @@ the method described by Bruno Haible. See http://www.haible.de/bruno/hashfunc.html. */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_pjw (const void *x, size_t tablesize) { const char *s; diff --git a/lib/hash-triple.c b/lib/hash-triple.c index 1649377..e2a0400 100644 --- a/lib/hash-triple.c +++ b/lib/hash-triple.c @@ -41,7 +41,7 @@ triple_hash (void const *x, size_t table_size) } /* Hash an F_triple, without considering the file name. */ -size_t +size_t _GL_ATTRIBUTE_PURE triple_hash_no_name (void const *x, size_t table_size) { struct F_triple const *p = x; @@ -59,7 +59,7 @@ triple_compare (void const *x, void const *y) return (SAME_INODE (*a, *b) && same_name (a->name, b->name)) ? true : false; } -bool +bool _GL_ATTRIBUTE_PURE triple_compare_ino_str (void const *x, void const *y) { struct F_triple const *a = x; diff --git a/lib/hash.c b/lib/hash.c index 4d76f76..7b7e2af 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -146,7 +146,7 @@ static const Hash_tuning default_tuning = number of buckets (used plus unused), or the maximum number of slots, are the same quantity. */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_get_n_buckets (const Hash_table *table) { return table->n_buckets; @@ -154,7 +154,7 @@ hash_get_n_buckets (const Hash_table *table) /* Return the number of slots in use (non-empty buckets). */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_get_n_buckets_used (const Hash_table *table) { return table->n_buckets_used; @@ -162,7 +162,7 @@ hash_get_n_buckets_used (const Hash_table *table) /* Return the number of active entries. */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_get_n_entries (const Hash_table *table) { return table->n_entries; @@ -170,7 +170,7 @@ hash_get_n_entries (const Hash_table *table) /* Return the length of the longest chain (bucket). */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_get_max_bucket_length (const Hash_table *table) { struct hash_entry const *bucket; @@ -197,7 +197,7 @@ hash_get_max_bucket_length (const Hash_table *table) /* Do a mild validation of a hash table, by traversing it and checking two statistics. */ -bool +bool _GL_ATTRIBUTE_PURE hash_table_ok (const Hash_table *table) { struct hash_entry const *bucket; @@ -284,7 +284,7 @@ hash_lookup (const Hash_table *table, const void *entry) /* Return the first data in the table, or NULL if the table is empty. */ -void * +void * _GL_ATTRIBUTE_PURE hash_get_first (const Hash_table *table) { struct hash_entry const *bucket; @@ -401,7 +401,7 @@ hash_do_for_each (const Hash_table *table, Hash_processor processor, algorithms tend to be domain-specific, so what's good for [diffutils'] io.c may not be good for your application." */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_string (const char *string, size_t n_buckets) { # define HASH_ONE_CHAR(Value, Byte) \ @@ -424,7 +424,7 @@ hash_string (const char *string, size_t n_buckets) very old Cyber `snoop', itself written in typical Greg Mansfield style. (By the way, what happened to this excellent man? Is he still alive?) */ -size_t +size_t _GL_ATTRIBUTE_PURE hash_string (const char *string, size_t n_buckets) { size_t value = 0; @@ -440,7 +440,7 @@ hash_string (const char *string, size_t n_buckets) /* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd number at least equal to 11. */ -static bool +static bool _GL_ATTRIBUTE_CONST is_prime (size_t candidate) { size_t divisor = 3; @@ -459,7 +459,7 @@ is_prime (size_t candidate) /* Round a given CANDIDATE number up to the nearest prime, and return that prime. Primes lower than 10 are merely skipped. */ -static size_t +static size_t _GL_ATTRIBUTE_CONST next_prime (size_t candidate) { /* Skip small primes. */ @@ -540,7 +540,7 @@ check_tuning (Hash_table *table) TUNING, or return 0 if there is no possible way to allocate that many entries. */ -static size_t +static size_t _GL_ATTRIBUTE_PURE compute_bucket_size (size_t candidate, const Hash_tuning *tuning) { if (!tuning->is_n_buckets) diff --git a/lib/i-ring.c b/lib/i-ring.c index b603b0b..f8eca70 100644 --- a/lib/i-ring.c +++ b/lib/i-ring.c @@ -33,7 +33,7 @@ i_ring_init (I_ring *ir, int default_val) ir->ir_default_val = default_val; } -bool +bool _GL_ATTRIBUTE_PURE i_ring_empty (I_ring const *ir) { return ir->ir_empty; diff --git a/lib/isnan.c b/lib/isnan.c index d9c653d..1d810d6 100644 --- a/lib/isnan.c +++ b/lib/isnan.c @@ -79,7 +79,7 @@ extern int rpl_isnanf (float x); ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; -int +int _GL_ATTRIBUTE_CONST FUNC (DOUBLE x) { #ifdef KNOWN_EXPBIT0_LOCATION diff --git a/lib/localename.c b/lib/localename.c index 3ab8822..829ed34 100644 --- a/lib/localename.c +++ b/lib/localename.c @@ -2517,7 +2517,7 @@ gl_locale_name_from_win32_LCID (LCID lcid) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See http://www.haible.de/bruno/hashfunc.html. */ -static size_t +static size_t _GL_ATTRIBUTE_PURE string_hash (const void *x) { const char *s = (const char *) x; @@ -2837,7 +2837,7 @@ gl_locale_name_environ (int category, const char *categoryname) return NULL; } -const char * +const char * _GL_ATTRIBUTE_CONST gl_locale_name_default (void) { /* POSIX:2001 says: diff --git a/lib/memcasecmp.c b/lib/memcasecmp.c index 6ae7c4f..4cc6d8e 100644 --- a/lib/memcasecmp.c +++ b/lib/memcasecmp.c @@ -28,7 +28,7 @@ Convert to upper case (not lower) before comparing so that join -i works with sort -f. */ -int +int _GL_ATTRIBUTE_PURE memcasecmp (const void *vs1, const void *vs2, size_t n) { size_t i; diff --git a/lib/memchr2.c b/lib/memchr2.c index 2e3c7cd..faadb04 100644 --- a/lib/memchr2.c +++ b/lib/memchr2.c @@ -32,7 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Return the first address of either C1 or C2 (treated as unsigned char) that occurs within N bytes of the memory region S. If neither byte appears, return NULL. */ -void * +void * _GL_ATTRIBUTE_PURE memchr2 (void const *s, int c1_in, int c2_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned diff --git a/lib/memcmp2.c b/lib/memcmp2.c index 14ab666..f9519f6 100644 --- a/lib/memcmp2.c +++ b/lib/memcmp2.c @@ -21,7 +21,7 @@ #include <string.h> -int +int _GL_ATTRIBUTE_PURE memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2) { int cmp = memcmp (s1, s2, n1 <= n2 ? n1 : n2); diff --git a/lib/parse-datetime.y b/lib/parse-datetime.y index d77955f..51abe6f 100644 --- a/lib/parse-datetime.y +++ b/lib/parse-datetime.y @@ -868,7 +868,7 @@ to_year (textint textyear) return year; } -static table const * +static table const * _GL_ATTRIBUTE_PURE lookup_zone (parser_control const *pc, char const *name) { table const *tp; diff --git a/lib/propername.c b/lib/propername.c index b74923d..4265ac8 100644 --- a/lib/propername.c +++ b/lib/propername.c @@ -148,7 +148,7 @@ mbsstr_trimmed_wordbounded (const char *string, const char *sub) /* Return the localization of NAME. NAME is written in ASCII. */ -const char * +const char * _GL_ATTRIBUTE_CONST proper_name (const char *name) { /* See whether there is a translation. */ diff --git a/lib/quotearg.c b/lib/quotearg.c index da8ba1e..fc2edc2 100644 --- a/lib/quotearg.c +++ b/lib/quotearg.c @@ -105,7 +105,7 @@ clone_quoting_options (struct quoting_options *o) } /* Get the value of O's quoting style. If O is null, use the default. */ -enum quoting_style +enum quoting_style _GL_ATTRIBUTE_PURE get_quoting_style (struct quoting_options *o) { return (o ? o : &default_quoting_options)->style; @@ -165,7 +165,7 @@ set_custom_quoting (struct quoting_options *o, } /* Return quoting options for STYLE, with no extra quoting. */ -static struct quoting_options +static struct quoting_options _GL_ATTRIBUTE_PURE quoting_options_from_style (enum quoting_style style) { struct quoting_options o = { 0 }; diff --git a/lib/sockets.c b/lib/sockets.c index 42b8f9e..0b7fe10 100644 --- a/lib/sockets.c +++ b/lib/sockets.c @@ -103,7 +103,7 @@ static int initialized_sockets_version /* = 0 */; #endif /* WINDOWS_SOCKETS */ -int +int _GL_ATTRIBUTE_CONST gl_sockets_startup (int version _GL_UNUSED) { #if WINDOWS_SOCKETS @@ -130,7 +130,7 @@ gl_sockets_startup (int version _GL_UNUSED) return 0; } -int +int _GL_ATTRIBUTE_CONST gl_sockets_cleanup (void) { #if WINDOWS_SOCKETS diff --git a/lib/strnlen1.c b/lib/strnlen1.c index f64ce10..84f5cea 100644 --- a/lib/strnlen1.c +++ b/lib/strnlen1.c @@ -24,7 +24,7 @@ /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ -size_t +size_t _GL_ATTRIBUTE_PURE strnlen1 (const char *string, size_t maxlen) { const char *end = (const char *) memchr (string, '\0', maxlen); diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c index a314e71..8a88ce7 100644 --- a/lib/uniwidth/width.c +++ b/lib/uniwidth/width.c @@ -311,7 +311,7 @@ static const signed char nonspacing_table_ind[240] = { }; /* Determine number of column positions required for UC. */ -int +int _GL_ATTRIBUTE_PURE uc_width (ucs4_t uc, const char *encoding) { /* Test for non-spacing or control character. */ -- 1.7.5.134.g1c08b