>From 39a719f31f871143a011f368b5f74f03a9c33244 Mon Sep 17 00:00:00 2001
From: Alan Modra
Date: Thu, 30 Oct 2014 15:04:07 +1030
Subject: [PATCH] obstack macro return values, and always add obstack.o
Many of the obstack macros are not supposed to return a value, and
obstack_next_free is supposed to return a void* not a char*.
* lib/obstack.h (obstack_next_free): Return void *.
(obstack_1grow_fast, obstack_blank_fast): Return void.
For __GNUC__ macros:
(obstack_free): Return void.
(obstack_1grow, obstack_blank): Remove now unnecessary (void)0.
For !__GNUC__ macros:
(obstack_make_room, obstack_grow, obstack_grow0,
obstack_ptr_grow_fast, obstack_int_grow_fast): Return void.
* lib/obstack.c: Don't include alignof.h if __alignof__ is defined,
nor when __IBM_ALIGNOF__ is defined.
* modules/obstack (configure.ac): Always add obstack.o to libgnu.a.
---
ChangeLog | 15 +++++++++++++++
lib/obstack.c | 3 ++-
lib/obstack.h | 30 +++++++++++++++++-------------
modules/obstack | 3 +--
4 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0d6c285..5574df9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2014-11-03 Alan Modra
+
+ obstack: macro return values, and always add obstack.o.
+ * lib/obstack.h (obstack_next_free): Return void *.
+ (obstack_1grow_fast, obstack_blank_fast): Return void.
+ For __GNUC__ macros:
+ (obstack_free): Return void.
+ (obstack_1grow, obstack_blank): Remove now unnecessary (void)0.
+ For !__GNUC__ macros:
+ (obstack_make_room, obstack_grow, obstack_grow0,
+ obstack_ptr_grow_fast, obstack_int_grow_fast): Return void.
+ * lib/obstack.c: Don't include alignof.h if __alignof__ is defined,
+ nor when __IBM_ALIGNOF__ is defined.
+ * modules/obstack (configure.ac): Always add obstack.o to libgnu.a.
+
2014-10-30 Pádraig Brady
mountlist: don't use libmount to decide on dummy/remote
diff --git a/lib/obstack.c b/lib/obstack.c
index ba7dff3..e1707b9 100644
--- a/lib/obstack.c
+++ b/lib/obstack.c
@@ -48,7 +48,8 @@
#endif
#ifndef _OBSTACK_ELIDE_CODE
-# if !defined _LIBC && !defined __GNUC__
+# if (!defined _LIBC && !defined __GNUC__ && !defined __IBM__ALIGNOF__ \
+ && !defined __alignof__)
# include
# define __alignof__(type) alignof_type (type)
# endif
diff --git a/lib/obstack.h b/lib/obstack.h
index ba4de1d..79edffb 100644
--- a/lib/obstack.h
+++ b/lib/obstack.h
@@ -219,7 +219,7 @@ extern int obstack_exit_failure;
/* Pointer to next byte not yet allocated in current chunk. */
-#define obstack_next_free(h) ((h)->next_free)
+#define obstack_next_free(h) ((void *) (h)->next_free)
/* Mask specifying low bits that should be clear in address of an object. */
@@ -252,9 +252,9 @@ extern int obstack_exit_failure;
#define obstack_freefun(h, newfreefun) \
((h)->freefun = (void (*)(void *, struct _obstack_chunk *))(newfreefun))
-#define obstack_1grow_fast(h, achar) (*((h)->next_free)++ = (achar))
+#define obstack_1grow_fast(h, achar) (*((h)->next_free)++ = (achar), (void) 0)
-#define obstack_blank_fast(h, n) ((h)->next_free += (n))
+#define obstack_blank_fast(h, n) ((h)->next_free += (n), (void) 0)
#define obstack_memory_used(h) _obstack_memory_used (h)
@@ -322,8 +322,7 @@ extern int obstack_exit_failure;
({ struct obstack *__o = (OBSTACK); \
if (obstack_room (__o) < 1) \
_obstack_newchunk (__o, 1); \
- obstack_1grow_fast (__o, datum); \
- (void) 0; })
+ obstack_1grow_fast (__o, datum); })
/* These assume that the obstack alignment is good enough for pointers
or ints, and that the data added so far to the current object
@@ -365,8 +364,7 @@ extern int obstack_exit_failure;
_OBSTACK_SIZE_T __len = (length); \
if (obstack_room (__o) < __len) \
_obstack_newchunk (__o, __len); \
- obstack_blank_fast (__o, __len); \
- (void) 0; })
+ obstack_blank_fast (__o, __len); })
# define obstack_alloc(OBSTACK, length) \
__extension__ \
@@ -410,7 +408,8 @@ extern int obstack_exit_failure;
if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \
__o->next_free = __o->object_base = (char *) __obj; \
else \
- _obstack_free (__o, __obj); })
+ _obstack_free (__o, __obj); \
+ (void) 0; })
#else /* not __GNUC__ */
@@ -435,14 +434,16 @@ extern int obstack_exit_failure;
# define obstack_make_room(h, length) \
((h)->temp.i = (length), \
((obstack_room (h) < (h)->temp.i) \
- ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0))
+ ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \
+ (void) 0)
# define obstack_grow(h, where, length) \
((h)->temp.i = (length), \
((obstack_room (h) < (h)->temp.i) \
? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \
memcpy ((h)->next_free, where, (h)->temp.i), \
- (h)->next_free += (h)->temp.i)
+ (h)->next_free += (h)->temp.i, \
+ (void) 0)
# define obstack_grow0(h, where, length) \
((h)->temp.i = (length), \
@@ -450,7 +451,8 @@ extern int obstack_exit_failure;
? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0), \
memcpy ((h)->next_free, where, (h)->temp.i), \
(h)->next_free += (h)->temp.i, \
- *((h)->next_free)++ = 0)
+ *((h)->next_free)++ = 0, \
+ (void) 0)
# define obstack_1grow(h, datum) \
(((obstack_room (h) < 1) \
@@ -468,10 +470,12 @@ extern int obstack_exit_failure;
obstack_int_grow_fast (h, datum))
# define obstack_ptr_grow_fast(h, aptr) \
- (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
+ (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr), \
+ (void) 0)
# define obstack_int_grow_fast(h, aint) \
- (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
+ (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint), \
+ (void) 0)
# define obstack_blank(h, length) \
((h)->temp.i = (length), \
diff --git a/modules/obstack b/modules/obstack
index 36dc444..bbcb974 100644
--- a/modules/obstack
+++ b/modules/obstack
@@ -13,8 +13,7 @@ stdint
stdlib
configure.ac:
-AC_FUNC_OBSTACK
-dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]).
+AC_LIBOBJ([obstack])
Makefile.am: