X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgengtype.c;h=80acba0c657897ec78d0fabf68c60860a7f5743e;hb=b2e02dcc7c5b43e5088291a6c6b4bb60f9c4ce3c;hp=e0cd6c2599fd6fe246c3a8d9924d9e87e31be134;hpb=1e8375615ba6d4322a5c6c637c799f27695eedcb;p=pf3gnuchains%2Fgcc-fork.git
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index e0cd6c2599f..80acba0c657 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -2,27 +2,27 @@
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
-This file is part of GCC.
+ This file is part of GCC.
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
-GCC 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 General Public License
-for more details.
+ GCC 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 General Public License
+ for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA. */
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ . */
#include "bconfig.h"
#include "system.h"
#include "gengtype.h"
#include "errors.h" /* for fatal */
+#include "double-int.h"
/* Data types, macros, etc. used only in this file. */
@@ -1076,7 +1076,7 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
case '0':
if (i == MEM && aindex == 1)
t = mem_attrs_tp, subname = "rt_mem";
- else if (i == JUMP_INSN && aindex == 9)
+ else if (i == JUMP_INSN && aindex == 8)
t = rtx_tp, subname = "rt_rtx";
else if (i == CODE_LABEL && aindex == 4)
t = scalar_tp, subname = "rt_int";
@@ -1087,6 +1087,8 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
t = rtx_tp, subname = "rt_rtx";
else if (i == NOTE && aindex == 4)
t = note_union_tp, subname = "";
+ else if (i == NOTE && aindex == 5)
+ t = scalar_tp, subname = "rt_int";
else if (i == NOTE && aindex >= 7)
t = scalar_tp, subname = "rt_int";
else if (i == ADDR_DIFF_VEC && aindex == 4)
@@ -1166,7 +1168,7 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
subfields->opt = nodot;
if (t == note_union_tp)
subfields->opt = create_option (subfields->opt, "desc",
- "NOTE_LINE_NUMBER (&%0)");
+ "NOTE_KIND (&%0)");
if (t == symbol_union_tp)
subfields->opt = create_option (subfields->opt, "desc",
"CONSTANT_POOL_ADDRESS_P (&%0)");
@@ -1440,13 +1442,13 @@ static outf_p
create_file (const char *name, const char *oname)
{
static const char *const hdr[] = {
- " Copyright (C) 2004 Free Software Foundation, Inc.\n",
+ " Copyright (C) 2004, 2007 Free Software Foundation, Inc.\n",
"\n",
"This file is part of GCC.\n",
"\n",
"GCC is free software; you can redistribute it and/or modify it under\n",
"the terms of the GNU General Public License as published by the Free\n",
- "Software Foundation; either version 2, or (at your option) any later\n",
+ "Software Foundation; either version 3, or (at your option) any later\n",
"version.\n",
"\n",
"GCC is distributed in the hope that it will be useful, but WITHOUT ANY\n",
@@ -1455,9 +1457,8 @@ create_file (const char *name, const char *oname)
"for more details.\n",
"\n",
"You should have received a copy of the GNU General Public License\n",
- "along with GCC; see the file COPYING. If not, write to the Free\n",
- "Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA\n",
- "02110-1301, USA. */\n",
+ "along with GCC; see the file COPYING3. If not see\n",
+ ". */\n",
"\n",
"/* This file is machine generated. Do not edit. */\n"
};
@@ -1475,24 +1476,26 @@ create_file (const char *name, const char *oname)
return f;
}
-/* Print, like fprintf, to O. */
+/* Print, like fprintf, to O.
+ N.B. You might think this could be implemented more efficiently
+ with vsnprintf(). Unfortunately, there are C libraries that
+ provide that function but without the C99 semantics for its return
+ value, making it impossible to know how much space is required. */
void
oprintf (outf_p o, const char *format, ...)
{
+ char *s;
size_t slength;
+ va_list ap;
- /* Try first with the assumption that there is enough space. */
- {
- va_list ap;
- va_start (ap, format);
- slength = vsnprintf (o->buf + o->bufused, o->buflength - o->bufused,
- format, ap);
- va_end (ap);
- }
+ va_start (ap, format);
+ slength = vasprintf (&s, format, ap);
+ if (s == NULL || (int)slength < 0)
+ fatal ("out of memory");
+ va_end (ap);
- if (o->bufused + slength >= o->buflength)
+ if (o->bufused + slength > o->buflength)
{
- /* There wasn't enough space. */
size_t new_len = o->buflength;
if (new_len == 0)
new_len = 1024;
@@ -1501,21 +1504,10 @@ oprintf (outf_p o, const char *format, ...)
} while (o->bufused + slength >= new_len);
o->buf = XRESIZEVEC (char, o->buf, new_len);
o->buflength = new_len;
-
- /* We now know that there is enough space. */
- {
- size_t slen2;
- va_list ap;
- va_start (ap, format);
- slen2 = vsnprintf (o->buf + o->bufused, o->buflength - o->bufused,
- format, ap);
- va_end (ap);
-
- gcc_assert (slen2 == slength);
- gcc_assert (o->bufused + slen2 < o->buflength);
- }
}
+ memcpy (o->buf + o->bufused, s, slength);
o->bufused += slength;
+ free (s);
}
/* Open the global header file and the language-specific header files. */
@@ -1543,7 +1535,7 @@ open_base_files (void)
"hard-reg-set.h", "basic-block.h", "cselib.h", "insn-addr.h",
"optabs.h", "libfuncs.h", "debug.h", "ggc.h", "cgraph.h",
"tree-flow.h", "reload.h", "cpp-id-data.h", "tree-chrec.h",
- "cfglayout.h", "except.h", "output.h", NULL
+ "cfglayout.h", "except.h", "output.h", "cfgloop.h", NULL
};
const char *const *ifp;
outf_p gtype_desc_c;
@@ -1757,7 +1749,7 @@ struct write_types_data
static void output_escaped_param (struct walk_type_data *d,
const char *, const char *);
-static void output_mangled_typename (outf_p, type_p);
+static void output_mangled_typename (outf_p, const_type_p);
static void walk_type (type_p t, struct walk_type_data *d);
static void write_func_for_structure
(type_p orig_s, type_p s, type_p * param,
@@ -1810,7 +1802,7 @@ struct walk_type_data
/* Print a mangled name representing T to OF. */
static void
-output_mangled_typename (outf_p of, type_p t)
+output_mangled_typename (outf_p of, const_type_p t)
{
if (t == NULL)
oprintf (of, "Z");
@@ -2586,7 +2578,7 @@ write_types (type_p structures, type_p param_structs,
for (opt = s->u.s.opt; opt; opt = opt->next)
if (strcmp (opt->name, "ptr_alias") == 0)
{
- type_p t = (type_p) opt->info;
+ const_type_p const t = (const_type_p) opt->info;
if (t->kind == TYPE_STRUCT
|| t->kind == TYPE_UNION
|| t->kind == TYPE_LANG_STRUCT)
@@ -2765,7 +2757,7 @@ write_local (type_p structures, type_p param_structs)
for (opt = s->u.s.opt; opt; opt = opt->next)
if (strcmp (opt->name, "ptr_alias") == 0)
{
- type_p t = (type_p) opt->info;
+ const_type_p const t = (const_type_p) opt->info;
if (t->kind == TYPE_STRUCT
|| t->kind == TYPE_UNION
|| t->kind == TYPE_LANG_STRUCT)
@@ -3541,6 +3533,7 @@ main (int argc, char **argv)
pos.line = __LINE__ + 1;
do_scalar_typedef ("CUMULATIVE_ARGS", &pos); pos.line++;
do_scalar_typedef ("REAL_VALUE_TYPE", &pos); pos.line++;
+ do_scalar_typedef ("FIXED_VALUE_TYPE", &pos); pos.line++;
do_scalar_typedef ("double_int", &pos); pos.line++;
do_scalar_typedef ("uint8", &pos); pos.line++;
do_scalar_typedef ("jword", &pos); pos.line++;