merge from gcc
authorDJ Delorie <dj@redhat.com>
Sat, 24 Jul 2004 18:04:39 +0000 (18:04 +0000)
committerDJ Delorie <dj@redhat.com>
Sat, 24 Jul 2004 18:04:39 +0000 (18:04 +0000)
include/ChangeLog
include/ansidecl.h
include/libiberty.h

index 6adbc67b7ffb7202ef7220c074a171c497951d77..2c5340051af32553e6c76075093bc661488184e1 100644 (file)
@@ -1,3 +1,7 @@
+2004-07-24  Bernardo Innocenti  <bernie@develer.com>
+
+       * ansidecl.h (ARG_UNUSED): New Macro.
+
 2004-07-23  H.J. Lu  <hongjiu.lu@intel.com>
 
        * bin-bugs.h (REPORT_BUGS_TO): Set to
index 4b3eae9d8870c39bbdac54e1d371a98e39461865..ccf0b2757ae30a5859fdf578ec1e01b08d8e03fb 100644 (file)
@@ -264,6 +264,14 @@ So instead we use the macro below and test it against specific values.  */
 #define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
 #endif /* ATTRIBUTE_UNUSED */
 
+/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the
+   identifier name.  */
+#if ! defined(__cplusplus) || (GCC_VERSION >= 3004)
+# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED
+#else /* !__cplusplus || GNUC >= 3.4 */
+# define ARG_UNUSED(NAME) NAME
+#endif /* !__cplusplus || GNUC >= 3.4 */
+
 #ifndef ATTRIBUTE_NORETURN
 #define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
 #endif /* ATTRIBUTE_NORETURN */
index 5c1015385806f385dbba28176046eec8c1c07261..68eeeae739699c75ab87d61a95b330c0a01d449c 100644 (file)
@@ -250,6 +250,37 @@ extern PTR xmemdup PARAMS ((const PTR, size_t, size_t)) ATTRIBUTE_MALLOC;
 extern double physmem_total PARAMS ((void));
 extern double physmem_available PARAMS ((void));
 
+
+/* These macros provide a K&R/C89/C++-friendly way of allocating structures
+   with nice encapsulation.  The XDELETE*() macros are technically
+   superfluous, but provided here for symmetry.  Using them consistently
+   makes it easier to update client code to use different allocators such
+   as new/delete and new[]/delete[].  */
+
+/* Scalar allocators.  */
+
+#define XNEW(T)                        ((T *) xmalloc (sizeof (T)))
+#define XCNEW(T)               ((T *) xcalloc (1, sizeof (T)))
+#define XDELETE(P)             free ((P))
+
+/* Array allocators.  */
+
+#define XNEWVEC(T, N)          ((T *) xmalloc (sizeof (T) * (N)))
+#define XCNEWVEC(T, N)         ((T *) xcalloc ((N), sizeof (T)))
+#define XRESIZEVEC(T, P, N)    ((T *) xrealloc ((P), sizeof (T) * (N)))
+#define XDELETEVEC(P)          free ((P))
+
+/* Allocators for variable-sized structures and raw buffers.  */
+
+#define XNEWVAR(T, S)          ((T *) xmalloc ((S)))
+#define XCNEWVAR(T, S)         ((T *) xcalloc (1, (S)))
+#define XRESIZEVAR(T, P, S)    ((T *) xrealloc ((P), (S)))
+
+/* Type-safe obstack allocator.  */
+
+#define XOBNEW(O, T)           ((T *) obstack_alloc ((O), sizeof (T)))
+
+
 /* hex character manipulation routines */
 
 #define _hex_array_size 256