public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, libiberty, gcc]: Introduce xasprintf to libiberty and use it in gengtype
@ 2014-12-24 10:33 Uros Bizjak
  2014-12-24 17:04 ` Ian Lance Taylor
  0 siblings, 1 reply; 2+ messages in thread
From: Uros Bizjak @ 2014-12-24 10:33 UTC (permalink / raw)
  To: gcc-patches; +Cc: Ian Lance Taylor

[-- Attachment #1: Type: text/plain, Size: 1102 bytes --]

Hello!

Based on a suggestion from [1] and on previous work by Manuel and Ben.
The new code is almost the same as existing asprintf.c, but uses
recently added xvasprintf.

Thes patch removes local xasprintf definition from gengtype.c and uses
the new one there.

libiberty/ChangeLog:

2014-12-24  Uros Bizjak  <ubizjak@gmail.com>
        Ben Elliston  <bje@au.ibm.com>
        Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

    * xasprintf.c: New file.
    * Makefile.in (CFILES): Add xasprintf.c.
    (REQUIRED_OFILES): Add xasprintf.$(objext).
    (xasprintf.$(objext)): New target.
    * functions.texi: Regenerate.

include/ChangeLog:

2014-12-24  Uros Bizjak  <ubizjak@gmail.com>
        Ben Elliston  <bje@au.ibm.com>
        Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

    * libiberty.h (xasprintf): Declare.

gcc/ChangeLog:

2014-12-24  Uros Bizjak  <ubizjak@gmail.com>

    * gengtype.h (xasprintf): Remove declaration.
    * gengtype.c (xasprintf): Remove.

Bootstrapped and regression tested on x86_64-linux-gnu.

OK for mainline?

[1] https://gcc.gnu.org/ml/gcc-patches/2014-12/msg00848.html

Uros.

[-- Attachment #2: p.diff.txt --]
[-- Type: text/plain, Size: 6359 bytes --]

Index: gcc/gengtype.c
===================================================================
--- gcc/gengtype.c	(revision 219042)
+++ gcc/gengtype.c	(working copy)
@@ -119,23 +119,6 @@ error_at_line (const struct fileloc *pos, const ch
 
   va_end (ap);
 }
-
-/* asprintf, but produces fatal message on out-of-memory.  */
-char *
-xasprintf (const char *format, ...)
-{
-  int n;
-  char *result;
-  va_list ap;
-
-  va_start (ap, format);
-  n = vasprintf (&result, format, ap);
-  if (result == NULL || n < 0)
-    fatal ("out of memory");
-  va_end (ap);
-
-  return result;
-}
 \f
 /* Locate the ultimate base class of struct S.  */
 
Index: gcc/gengtype.h
===================================================================
--- gcc/gengtype.h	(revision 219042)
+++ gcc/gengtype.h	(working copy)
@@ -418,9 +418,6 @@ void write_state (const char* path);
 extern void error_at_line
 (const struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2;
 
-/* Like asprintf, but calls fatal() on out of memory.  */
-extern char *xasprintf (const char *, ...) ATTRIBUTE_PRINTF_1;
-
 /* Constructor routines for types.  */
 extern void do_typedef (const char *s, type_p t, struct fileloc *pos);
 extern void do_scalar_typedef (const char *s, struct fileloc *pos);
Index: include/libiberty.h
===================================================================
--- include/libiberty.h	(revision 219042)
+++ include/libiberty.h	(working copy)
@@ -629,6 +629,11 @@ extern int pwait (int, int *, int);
 extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
 #endif
 
+/* Like asprintf but allocates memory without fail. This works like
+   xmalloc.  */
+
+extern char *xasprintf (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF_1;
+
 #if !HAVE_DECL_VASPRINTF
 /* Like vsprintf but provides a pointer to malloc'd storage, which
    must be freed by the caller.  */
Index: libiberty/Makefile.in
===================================================================
--- libiberty/Makefile.in	(revision 219042)
+++ libiberty/Makefile.in	(working copy)
@@ -158,8 +158,8 @@ CFILES = alloca.c argv.c asprintf.c atexit.c				\
 	vasprintf.c vfork.c vfprintf.c vprintf.c vprintf-support.c	\
 	 vsnprintf.c vsprintf.c						\
 	waitpid.c							\
-	xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c	\
-	 xstrndup.c xvasprintf.c
+	xasprintf.c xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c	\
+	 xstrerror.c xstrndup.c xvasprintf.c
 
 # These are always included in the library.  The first four are listed
 # first and by compile time to optimize parallel builds.
@@ -190,9 +190,10 @@ REQUIRED_OFILES =							\
 	./splay-tree.$(objext) ./stack-limit.$(objext)			\
 	./strerror.$(objext) ./strsignal.$(objext)			\
 	./timeval-utils.$(objext) ./unlink-if-ordinary.$(objext)	\
-	./xatexit.$(objext) ./xexit.$(objext) ./xmalloc.$(objext)	\
-	./xmemdup.$(objext) ./xstrdup.$(objext) ./xstrerror.$(objext)	\
-	./xstrndup.$(objext) ./xvasprintf.$(objext)
+	./xasprintf.$(objext) ./xatexit.$(objext) ./xexit.$(objext)	\
+	./xmalloc.$(objext) ./xmemdup.$(objext) ./xstrdup.$(objext)	\
+	./xstrerror.$(objext) ./xstrndup.$(objext)			\
+	./xvasprintf.$(objext)
 
 # These are all the objects that configure may add to the library via
 # $funcs or EXTRA_OFILES.  This list exists here only for "make
@@ -1618,6 +1619,16 @@ $(CONFIGURED_OFILES): stamp-picdir stamp-noasandir
 	else true; fi
 	$(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
 
+./xasprintf.$(objext): $(srcdir)/xasprintf.c config.h $(INCDIR)/ansidecl.h \
+	$(INCDIR)/libiberty.h
+	if [ x"$(PICFLAG)" != x ]; then \
+	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xasprintf.c -o pic/$@; \
+	else true; fi
+	if [ x"$(NOASANFLAG)" != x ]; then \
+	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xasprintf.c -o noasan/$@; \
+	else true; fi
+	$(COMPILE.c) $(srcdir)/xasprintf.c $(OUTPUT_OPTION)
+
 ./xatexit.$(objext): $(srcdir)/xatexit.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
 	if [ x"$(PICFLAG)" != x ]; then \
Index: libiberty/functions.texi
===================================================================
--- libiberty/functions.texi	(revision 219042)
+++ libiberty/functions.texi	(working copy)
@@ -1923,6 +1923,15 @@ if an error occurred while writing to FILE.
 
 @end deftypefn
 
+@c xasprintf.c:31
+@deftypefn Replacement char* xasprintf (const char *@var{format}, ...)
+
+Print to allocated string without fail.  If @code{xasprintf} fails,
+this will print a message to @code{stderr} (using the name set by
+@code{xmalloc_set_program_name}, if any) and then call @code{xexit}.
+
+@end deftypefn
+
 @c xatexit.c:11
 @deftypefun int xatexit (void (*@var{fn}) (void))
 
Index: libiberty/xasprintf.c
===================================================================
--- libiberty/xasprintf.c	(revision 0)
+++ libiberty/xasprintf.c	(working copy)
@@ -0,0 +1,50 @@
+/* Implement the xasprintf function.
+   Copyright (C) 2014 Free Software Foundation, Inc.
+   Contributed by Manuel Lopez-Ibanez.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not, write
+to the Free Software Foundation, Inc., 51 Franklin Street - Fifth
+Floor, Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#include <stdarg.h>
+
+/*
+
+@deftypefn Replacement char* xasprintf (const char *@var{format}, ...)
+
+Print to allocated string without fail.  If @code{xasprintf} fails,
+this will print a message to @code{stderr} (using the name set by
+@code{xmalloc_set_program_name}, if any) and then call @code{xexit}.
+
+@end deftypefn
+
+*/
+
+char *
+xasprintf (const char *fmt, ...)
+{
+  char *buf;
+  va_list ap;
+  va_start (ap, fmt);
+  buf = xvasprintf (fmt, ap);
+  va_end (ap);
+  return buf;
+}

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH, libiberty, gcc]: Introduce xasprintf to libiberty and use it in gengtype
  2014-12-24 10:33 [PATCH, libiberty, gcc]: Introduce xasprintf to libiberty and use it in gengtype Uros Bizjak
@ 2014-12-24 17:04 ` Ian Lance Taylor
  0 siblings, 0 replies; 2+ messages in thread
From: Ian Lance Taylor @ 2014-12-24 17:04 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches

On Wed, Dec 24, 2014 at 1:52 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>
> libiberty/ChangeLog:
>
> 2014-12-24  Uros Bizjak  <ubizjak@gmail.com>
>         Ben Elliston  <bje@au.ibm.com>
>         Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
>
>     * xasprintf.c: New file.
>     * Makefile.in (CFILES): Add xasprintf.c.
>     (REQUIRED_OFILES): Add xasprintf.$(objext).
>     (xasprintf.$(objext)): New target.
>     * functions.texi: Regenerate.
>
> include/ChangeLog:
>
> 2014-12-24  Uros Bizjak  <ubizjak@gmail.com>
>         Ben Elliston  <bje@au.ibm.com>
>         Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
>
>     * libiberty.h (xasprintf): Declare.
>
> gcc/ChangeLog:
>
> 2014-12-24  Uros Bizjak  <ubizjak@gmail.com>
>
>     * gengtype.h (xasprintf): Remove declaration.
>     * gengtype.c (xasprintf): Remove.
>
> Bootstrapped and regression tested on x86_64-linux-gnu.
>
> OK for mainline?

This is OK.

Thanks.

Ian

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-12-24 16:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-24 10:33 [PATCH, libiberty, gcc]: Introduce xasprintf to libiberty and use it in gengtype Uros Bizjak
2014-12-24 17:04 ` Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).