diff options
Diffstat (limited to 'gcc/gengtype.c')
-rw-r--r-- | gcc/gengtype.c | 725 |
1 files changed, 374 insertions, 351 deletions
diff --git a/gcc/gengtype.c b/gcc/gengtype.c index 6436a93649a..badb8f1fff1 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -21,14 +21,15 @@ #include "bconfig.h" #include "system.h" #include "gengtype.h" -#include "errors.h" /* for fatal */ +#include "errors.h" /* for fatal */ #include "double-int.h" #include "hashtab.h" /* Data types, macros, etc. used only in this file. */ /* Kinds of types we can understand. */ -enum typekind { +enum typekind +{ TYPE_SCALAR, TYPE_STRING, TYPE_STRUCT, @@ -71,16 +72,16 @@ struct pair /* A description of a type. */ enum gc_used_enum - { - GC_UNUSED = 0, - GC_USED, - /* Used for structures whose definitions we haven't seen so far when - we encounter a pointer to it that is annotated with ``maybe_undef''. - If after reading in everything we don't have source file - information for it, we assume that it never has been defined. */ - GC_MAYBE_POINTED_TO, - GC_POINTED_TO - }; +{ + GC_UNUSED = 0, + GC_USED, + /* Used for structures whose definitions we haven't seen so far when + we encounter a pointer to it that is annotated with ``maybe_undef''. + If after reading in everything we don't have source file + information for it, we assume that it never has been defined. */ + GC_MAYBE_POINTED_TO, + GC_POINTED_TO +}; struct type { @@ -88,9 +89,11 @@ struct type type_p next; type_p pointer_to; enum gc_used_enum gc_used; - union { + union + { type_p p; - struct { + struct + { const char *tag; struct fileloc line; pair_p fields; @@ -99,11 +102,13 @@ struct type type_p lang_struct; } s; bool scalar_is_char; - struct { + struct + { type_p p; const char *len; } a; - struct { + struct + { type_p stru; type_p param[NUM_PARAM]; struct fileloc line; @@ -112,13 +117,13 @@ struct type }; #define UNION_P(x) \ - ((x)->kind == TYPE_UNION || \ - ((x)->kind == TYPE_LANG_STRUCT \ - && (x)->u.s.lang_struct->kind == TYPE_UNION)) + ((x)->kind == TYPE_UNION || \ + ((x)->kind == TYPE_LANG_STRUCT \ + && (x)->u.s.lang_struct->kind == TYPE_UNION)) #define UNION_OR_STRUCT_P(x) \ - ((x)->kind == TYPE_UNION \ - || (x)->kind == TYPE_STRUCT \ - || (x)->kind == TYPE_LANG_STRUCT) + ((x)->kind == TYPE_UNION \ + || (x)->kind == TYPE_STRUCT \ + || (x)->kind == TYPE_LANG_STRUCT) /* Structure representing an output file. */ struct outf @@ -129,25 +134,25 @@ struct outf size_t bufused; char *buf; }; -typedef struct outf * outf_p; +typedef struct outf *outf_p; /* An output file, suitable for definitions, that can see declarations made in INPUT_FILE and is linked into every language that uses INPUT_FILE. May return NULL in plugin mode. */ -extern outf_p get_output_file_with_visibility - (const char *input_file); +extern outf_p get_output_file_with_visibility (const char *input_file); const char *get_output_file_name (const char *); /* Print, like fprintf, to O. No-op if O is NULL. */ -static void oprintf (outf_p o, const char *S, ...) - ATTRIBUTE_PRINTF_2; +static void +oprintf (outf_p o, const char *S, ...) + ATTRIBUTE_PRINTF_2; /* The list of output files. */ static outf_p output_files; /* The plugin input files and their number; in that case only a single file is produced. */ -static char** plugin_files; +static char **plugin_files; static size_t nb_plugin_files; /* the generated plugin output name & file */ static outf_p plugin_output; @@ -164,14 +169,14 @@ static size_t srcdir_len = 0; static outf_p create_file (const char *, const char *); -static const char * get_file_basename (const char *); -static const char * get_file_realbasename (const char *); -static const char * get_file_srcdir_relative_path (const char *); +static const char *get_file_basename (const char *); +static const char *get_file_realbasename (const char *); +static const char *get_file_srcdir_relative_path (const char *); static int get_prefix_langdir_index (const char *); -static const char * get_file_langdir (const char *); - +static const char *get_file_langdir (const char *); + /* Nonzero iff an error has occurred. */ bool hit_error = false; @@ -251,13 +256,13 @@ get_lang_bitmap (const char *gtfile) if (gtfile == this_file) /* Things defined in this file are universal. */ - return (((lang_bitmap)1) << num_lang_dirs) - 1; + return (((lang_bitmap) 1) << num_lang_dirs) - 1; else { lang_bitmap n = 0; int i; for (i = -(int) sizeof (lang_bitmap); i < 0; i++) - n = (n << CHAR_BIT) + (unsigned char)gtfile[i]; + n = (n << CHAR_BIT) + (unsigned char) gtfile[i]; return n; } } @@ -270,7 +275,7 @@ set_lang_bitmap (char *gtfile, lang_bitmap n) int i; for (i = -1; i >= -(int) sizeof (lang_bitmap); i--) { - gtfile[i] = n & ((1U << CHAR_BIT)-1); + gtfile[i] = n & ((1U << CHAR_BIT) - 1); n >>= CHAR_BIT; } } @@ -319,8 +324,7 @@ measure_input_list (FILE *list) touch *HEREP, and sets *LINEP to NULL. POS is used for diagnostics. */ static bool -read_input_line (FILE *list, char **herep, char **linep, - struct fileloc *pos) +read_input_line (FILE *list, char **herep, char **linep, struct fileloc *pos) { char *here = *herep; char *line; @@ -349,12 +353,13 @@ read_input_line (FILE *list, char **herep, char **linep, if (c == ']') { - c = getc (list); /* eat what should be a newline */ + c = getc (list); /* eat what should be a newline */ if (c != '\n' && c != EOF) error_at_line (pos, "junk on line after language tag [%s]", line); } else - error_at_line (pos, "missing close bracket for language tag [%s", line); + error_at_line (pos, "missing close bracket for language tag [%s", + line); *herep = here; *linep = line; @@ -429,7 +434,8 @@ read_input_list (const char *listname) for (i = 0; i < langno; i++) if (strcmp (lang_dir_names[i], line) == 0) { - error_at_line (&epos, "duplicate language tag [%s]", line); + error_at_line (&epos, "duplicate language tag [%s]", + line); curlangs = 1 << i; here = committed; goto next_line; @@ -449,13 +455,15 @@ read_input_list (const char *listname) current language to the existing string's bitmap. */ lang_bitmap bmap = get_lang_bitmap (gt_files[i]); if (bmap & curlangs) - error_at_line (&epos, "file %s specified more than once " - "for language %s", line, langno == 0 - ? "(all)" - : lang_dir_names[langno - 1]); + error_at_line (&epos, + "file %s specified more than once " + "for language %s", line, + langno == + 0 ? "(all)" : lang_dir_names[langno - + 1]); bmap |= curlangs; - set_lang_bitmap (CONST_CAST(char *, gt_files[i]), bmap); + set_lang_bitmap (CONST_CAST (char *, gt_files[i]), bmap); here = committed; goto next_line; } @@ -465,7 +473,7 @@ read_input_list (const char *listname) } } /* Update the global counts now that we know accurately how many - things there are. (We do not bother resizing the arrays down.) */ + things there are. (We do not bother resizing the arrays down.) */ num_lang_dirs = langno; /* Add the plugin files if provided. */ if (plugin_files) @@ -493,7 +501,7 @@ read_input_list (const char *listname) { size_t l; for (l = 0; l < num_lang_dirs; l++) - if ((size_t)(slashpos - basename) == strlen (lang_dir_names [l]) + if ((size_t) (slashpos - basename) == strlen (lang_dir_names[l]) && memcmp (basename, lang_dir_names[l], strlen (lang_dir_names[l])) == 0) { @@ -503,7 +511,7 @@ read_input_list (const char *listname) basename, lang_dir_names[l]); break; } - } + } } } @@ -512,9 +520,9 @@ read_input_list (const char *listname) fclose (list); } + - /* The one and only TYPE_STRING. */ static struct type string_type = { @@ -527,6 +535,7 @@ static struct type string_type = { static struct type scalar_nonchar = { TYPE_SCALAR, 0, 0, GC_USED, {0} }; + static struct type scalar_char = { TYPE_SCALAR, 0, 0, GC_USED, {0} }; @@ -538,8 +547,7 @@ static type_p structures; static type_p param_structs; static pair_p variables; -static type_p find_param_structure - (type_p t, type_p param[NUM_PARAM]); +static type_p find_param_structure (type_p t, type_p param[NUM_PARAM]); static type_p adjust_field_tree_exp (type_p t, options_p opt); static type_p adjust_field_rtx_def (type_p t, options_p opt); @@ -597,7 +605,7 @@ resolve_typedef (const char *s, struct fileloc *pos) if (strcmp (p->name, s) == 0) return p->type; error_at_line (pos, "unidentified type `%s'", s); - return &scalar_nonchar; /* treat as "int" */ + return &scalar_nonchar; /* treat as "int" */ } /* Create and return a new structure with tag NAME (or a union iff @@ -614,13 +622,11 @@ new_structure (const char *name, int isunion, struct fileloc *pos, /* temporary kludge - gengtype doesn't handle conditionals or macros. Ignore any attempt to define struct location_s, unless it is coming from this file (main() sets it up safely). */ - if (!strcmp (name, "location_s") && !isunion - && pos->file != this_file) + if (!strcmp (name, "location_s") && !isunion && pos->file != this_file) return find_structure (name, 0); for (si = structures; si != NULL; si = si->next) - if (strcmp (name, si->u.s.tag) == 0 - && UNION_P (si) == isunion) + if (strcmp (name, si->u.s.tag) == 0 && UNION_P (si) == isunion) { type_p ls = NULL; if (si->kind == TYPE_LANG_STRUCT) @@ -682,8 +688,7 @@ new_structure (const char *name, int isunion, struct fileloc *pos, /* Reset location_s's location to input.h so that we know where to write out its mark routine. */ - if (!strcmp (name, "location_s") && !isunion - && pos->file == this_file) + if (!strcmp (name, "location_s") && !isunion && pos->file == this_file) { size_t n; for (n = 0; n < num_gt_files; n++) @@ -695,7 +700,7 @@ new_structure (const char *name, int isunion, struct fileloc *pos, } } - return s; + return s; } /* Return the previously-defined structure with tag NAME (or a union @@ -708,8 +713,7 @@ find_structure (const char *name, int isunion) type_p s; for (s = structures; s != NULL; s = s->next) - if (strcmp (name, s->u.s.tag) == 0 - && UNION_P (s) == isunion) + if (strcmp (name, s->u.s.tag) == 0 && UNION_P (s) == isunion) return s; s = XCNEW (struct type); @@ -763,7 +767,7 @@ create_scalar_type (const char *name) type_p create_pointer (type_p t) { - if (! t->pointer_to) + if (!t->pointer_to) { type_p r = XCNEW (struct type); r->kind = TYPE_POINTER; @@ -796,7 +800,7 @@ create_option (options_p next, const char *name, const void *info) options_p o = XNEW (struct options); o->next = next; o->name = name; - o->info = (const char*) info; + o->info = (const char *) info; return o; } @@ -860,7 +864,7 @@ create_field_at (pair_p next, type_p type, const char *name, options_p opt, /* Create a fake field with the given type and name. NEXT is the next field in the chain. */ #define create_field(next,type,name) \ - create_field_all(next,type,name, 0, this_file, __LINE__) + create_field_all(next,type,name, 0, this_file, __LINE__) /* Like create_field, but the field is only valid when condition COND is true. */ @@ -885,11 +889,11 @@ create_optional_field_ (pair_p next, type_p type, const char *name, /* Create the field and give it the new fake union type. Add a "desc" tag that specifies the condition under which the field is valid. */ return create_field_all (next, union_type, name, - create_option (0, "desc", cond), - this_file, line); + create_option (0, "desc", cond), this_file, line); } + #define create_optional_field(next,type,name,cond) \ - create_optional_field_(next,type,name,cond,__LINE__) + create_optional_field_(next,type,name,cond,__LINE__) /* Reverse a linked list of 'struct pair's in place. */ pair_p @@ -904,27 +908,28 @@ nreverse_pairs (pair_p list) } return prev; } - + /* We don't care how long a CONST_DOUBLE is. */ #define CONST_DOUBLE_FORMAT "ww" /* We don't want to see codes that are only for generator files. */ #undef GENERATOR_FILE -enum rtx_code { +enum rtx_code +{ #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) ENUM , #include "rtl.def" #undef DEF_RTL_EXPR NUM_RTX_CODE }; -static const char * const rtx_name[NUM_RTX_CODE] = { +static const char *const rtx_name[NUM_RTX_CODE] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , #include "rtl.def" #undef DEF_RTL_EXPR }; -static const char * const rtx_format[NUM_RTX_CODE] = { +static const char *const rtx_format[NUM_RTX_CODE] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) FORMAT , #include "rtl.def" #undef DEF_RTL_EXPR @@ -934,7 +939,8 @@ static int rtx_next_new[NUM_RTX_CODE]; /* We also need codes and names for insn notes (not register notes). Note that we do *not* bias the note values here. */ -enum insn_note { +enum insn_note +{ #define DEF_INSN_NOTE(NAME) NAME, #include "insn-notes.def" #undef DEF_INSN_NOTE @@ -944,7 +950,7 @@ enum insn_note { /* We must allocate one more entry here, as we use NOTE_INSN_MAX as the default field for line number notes. */ -static const char *const note_insn_name[NOTE_INSN_MAX+1] = { +static const char *const note_insn_name[NOTE_INSN_MAX + 1] = { #define DEF_INSN_NOTE(NAME) #NAME, #include "insn-notes.def" #undef DEF_INSN_NOTE @@ -992,8 +998,7 @@ write_rtx_next (void) oprintf (f, " 0,\n"); else oprintf (f, - " RTX_HDR_SIZE + %d * sizeof (rtunion),\n", - rtx_next_new[i]); + " RTX_HDR_SIZE + %d * sizeof (rtunion),\n", rtx_next_new[i]); oprintf (f, "};\n"); } @@ -1025,8 +1030,9 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) mem_attrs_tp = create_pointer (find_structure ("mem_attrs", 0)); reg_attrs_tp = create_pointer (find_structure ("reg_attrs", 0)); basic_block_tp = create_pointer (find_structure ("basic_block_def", 0)); - constant_tp = create_pointer (find_structure ("constant_descriptor_rtx", 0)); - scalar_tp = &scalar_nonchar; /* rtunion int */ + constant_tp = + create_pointer (find_structure ("constant_descriptor_rtx", 0)); + scalar_tp = &scalar_nonchar; /* rtunion int */ { pair_p note_flds = NULL; @@ -1109,8 +1115,7 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) t = scalar_tp, subname = "rt_int"; else if (i == CODE_LABEL && aindex == 4) t = rtx_tp, subname = "rt_rtx"; - else if (i == LABEL_REF - && (aindex == 1 || aindex == 2)) + else if (i == LABEL_REF && (aindex == 1 || aindex == 2)) t = rtx_tp, subname = "rt_rtx"; else if (i == NOTE && aindex == 4) t = note_union_tp, subname = ""; @@ -1139,7 +1144,7 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) else { error_at_line (&lexer_line, - "rtx type `%s' has `0' in position %lu, can't handle", + "rtx type `%s' has `0' in position %lu, can't handle", rtx_name[i], (unsigned long) aindex); t = &string_type; subname = "rt_int"; @@ -1177,9 +1182,9 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) default: error_at_line (&lexer_line, - "rtx type `%s' has `%c' in position %lu, can't handle", + "rtx type `%s' has `%c' in position %lu, can't handle", rtx_name[i], rtx_format[i][aindex], - (unsigned long)aindex); + (unsigned long) aindex); t = &string_type; subname = "rt_int"; break; @@ -1282,11 +1287,11 @@ adjust_field_type (type_p t, options_p opt) { int num = ISDIGIT (opt->name[5]) ? opt->name[5] - '0' : 0; - if (! UNION_OR_STRUCT_P (t) - && (t->kind != TYPE_POINTER || ! UNION_OR_STRUCT_P (t->u.p))) + if (!UNION_OR_STRUCT_P (t) + && (t->kind != TYPE_POINTER || !UNION_OR_STRUCT_P (t->u.p))) { error_at_line (&lexer_line, - "option `%s' may only be applied to structures or structure pointers", + "option `%s' may only be applied to structures or structure pointers", opt->name); return t; } @@ -1294,8 +1299,9 @@ adjust_field_type (type_p t, options_p opt) params_p = 1; if (params[num] != NULL) error_at_line (&lexer_line, "duplicate `%s' option", opt->name); - if (! ISDIGIT (opt->name[5])) - params[num] = create_pointer (CONST_CAST2(type_p, const char *, opt->info)); + if (!ISDIGIT (opt->name[5])) + params[num] = + create_pointer (CONST_CAST2 (type_p, const char *, opt->info)); else params[num] = CONST_CAST2 (type_p, const char *, opt->info); } @@ -1320,10 +1326,8 @@ adjust_field_type (type_p t, options_p opt) t = pointer_p ? create_pointer (realt) : realt; } - if (! length_p - && pointer_p - && t->u.p->kind == TYPE_SCALAR - && t->u.p->u.scalar_is_char) + if (!length_p + && pointer_p && t->u.p->kind == TYPE_SCALAR && t->u.p->u.scalar_is_char) return &string_type; if (t->kind == TYPE_ARRAY && t->u.a.p->kind == TYPE_POINTER && t->u.a.p->u.p->kind == TYPE_SCALAR @@ -1332,8 +1336,8 @@ adjust_field_type (type_p t, options_p opt) return t; } - + static void set_gc_used_type (type_p, enum gc_used_enum, type_p *); static void set_gc_used (pair_p); @@ -1341,7 +1345,8 @@ static void set_gc_used (pair_p); static void process_gc_options (options_p opt, enum gc_used_enum level, int *maybe_undef, - int *pass_param, int *length, int *skip, type_p *nested_ptr) + int *pass_param, int *length, int *skip, + type_p *nested_ptr) { options_p o; for (o = opt; o; o = o->next) @@ -1403,7 +1408,7 @@ set_gc_used_type (type_p t, enum gc_used_enum level, type_p param[NUM_PARAM]) set_gc_used_type (find_param_structure (f->type->u.p, param), GC_POINTED_TO, NULL); else if (skip) - ; /* target type is not used through this field */ + ; /* target type is not used through this field */ else set_gc_used_type (f->type, GC_USED, pass_param ? param : NULL); } @@ -1522,7 +1527,7 @@ oprintf (outf_p o, const char *format, ...) va_start (ap, format); slength = vasprintf (&s, format, ap); - if (s == NULL || (int)slength < 0) + if (s == NULL || (int) slength < 0) fatal ("out of memory"); va_end (ap); @@ -1531,9 +1536,11 @@ oprintf (outf_p o, const char *format, ...) size_t new_len = o->buflength; if (new_len == 0) new_len = 1024; - do { - new_len *= 2; - } while (o->bufused + slength >= new_len); + do + { + new_len *= 2; + } + while (o->bufused + slength >= new_len); o->buf = XRESIZEVEC (char, o->buf, new_len); o->buflength = new_len; } @@ -1563,9 +1570,9 @@ open_base_files (void) /* gtype-desc.c is a little special, so we create it here. */ { /* The order of files here matters very much. */ - static const char *const ifiles [] = { + static const char *const ifiles[] = { "config.h", "system.h", "coretypes.h", "tm.h", - "hashtab.h", "splay-tree.h", "obstack.h", "bitmap.h", "input.h", + "hashtab.h", "splay-tree.h", "obstack.h", "bitmap.h", "input.h", "tree.h", "rtl.h", "function.h", "insn-config.h", "expr.h", "hard-reg-set.h", "basic-block.h", "cselib.h", "insn-addr.h", "optabs.h", "libfuncs.h", "debug.h", "ggc.h", "cgraph.h", @@ -1592,7 +1599,7 @@ open_base_files (void) static const char * get_file_realbasename (const char *f) { - const char * lastslash = strrchr (f, '/'); + const char *lastslash = strrchr (f, '/'); return (lastslash != NULL) ? lastslash + 1 : f; } @@ -1617,7 +1624,7 @@ get_file_srcdir_relative_path (const char *f) static const char * get_file_basename (const char *f) { - const char * srcdir_path = get_file_srcdir_relative_path (f); + const char *srcdir_path = get_file_srcdir_relative_path (f); return (srcdir_path != NULL) ? srcdir_path : get_file_realbasename (f); } @@ -1633,7 +1640,7 @@ get_prefix_langdir_index (const char *f) for (lang_index = 0; lang_index < num_lang_dirs; lang_index++) { - const char * langdir = lang_dir_names [lang_index]; + const char *langdir = lang_dir_names[lang_index]; size_t langdir_len = strlen (langdir); if (f_len > langdir_len @@ -1656,18 +1663,17 @@ get_file_langdir (const char *f) srcdir relative, no point in looking further. */ int lang_index; - const char * srcdir_relative_path = get_file_srcdir_relative_path (f); - const char * r; + const char *srcdir_relative_path = get_file_srcdir_relative_path (f); + const char *r; if (!srcdir_relative_path) return NULL; lang_index = get_prefix_langdir_index (srcdir_relative_path); - if (lang_index < 0 - && strncmp (srcdir_relative_path, "c-family", 8) == 0) + if (lang_index < 0 && strncmp (srcdir_relative_path, "c-family", 8) == 0) r = "c-family"; else if (lang_index >= 0) - r = lang_dir_names [lang_index]; + r = lang_dir_names[lang_index]; else r = NULL; @@ -1685,7 +1691,7 @@ get_file_gtfilename (const char *f) const char *basename = get_file_realbasename (f); const char *langdir = get_file_langdir (f); - char * result = + char *result = (langdir ? xasprintf ("gt-%s-%s", langdir, basename) : xasprintf ("gt-%s", basename)); @@ -1696,7 +1702,7 @@ get_file_gtfilename (const char *f) char *s = result; for (; *s != '.'; s++) - if (! ISALNUM (*s) && *s != '-') + if (!ISALNUM (*s) && *s != '-') *s = '-'; memcpy (s, ".h", sizeof (".h")); @@ -1739,9 +1745,9 @@ get_output_file_with_visibility (const char *input_file) basename = get_file_basename (input_file); len = strlen (basename); - if ((len > 2 && memcmp (basename+len-2, ".c", 2) == 0) - || (len > 2 && memcmp (basename+len-2, ".y", 2) == 0) - || (len > 3 && memcmp (basename+len-3, ".in", 3) == 0)) + if ((len > 2 && memcmp (basename + len - 2, ".c", 2) == 0) + || (len > 2 && memcmp (basename + len - 2, ".y", 2) == 0) + || (len > 3 && memcmp (basename + len - 3, ".in", 3) == 0)) { output_name = get_file_gtfilename (input_file); for_name = basename; @@ -1768,7 +1774,8 @@ get_output_file_with_visibility (const char *input_file) else if (strncmp (basename, "cp", 2) == 0 && IS_DIR_SEPARATOR (basename[2]) && strcmp (basename + 3, "name-lookup.h") == 0) output_name = "gt-cp-name-lookup.h", for_name = "cp/name-lookup.c"; - else if (strncmp (basename, "objc", 4) == 0 && IS_DIR_SEPARATOR (basename[4]) + else if (strncmp (basename, "objc", 4) == 0 + && IS_DIR_SEPARATOR (basename[4]) && strcmp (basename + 5, "objc-act.h") == 0) output_name = "gt-objc-objc-act.h", for_name = "objc/objc-act.c"; else @@ -1801,7 +1808,7 @@ get_output_file_with_visibility (const char *input_file) const char * get_output_file_name (const char *input_file) { - outf_p o = get_output_file_with_visibility (input_file); + outf_p o = get_output_file_with_visibility (input_file); if (o) return o->name; return NULL; @@ -1844,23 +1851,24 @@ close_output_files (void) for (of = output_files; of; of = of->next) { - if (!is_file_equal(of)) - { - FILE *newfile = fopen (of->name, "w"); - if (newfile == NULL) - fatal ("opening output file %s: %s", of->name, xstrerror (errno)); - if (fwrite (of->buf, 1, of->bufused, newfile) != of->bufused) - fatal ("writing output file %s: %s", of->name, xstrerror (errno)); - if (fclose (newfile) != 0) - fatal ("closing output file %s: %s", of->name, xstrerror (errno)); - } - free(of->buf); + if (!is_file_equal (of)) + { + FILE *newfile = fopen (of->name, "w"); + if (newfile == NULL) + fatal ("opening output file %s: %s", of->name, xstrerror (errno)); + if (fwrite (of->buf, 1, of->bufused, newfile) != of->bufused) + fatal ("writing output file %s: %s", of->name, xstrerror (errno)); + if (fclose (newfile) != 0) + fatal ("closing output file %s: %s", of->name, xstrerror (errno)); + } + free (of->buf); of->buf = NULL; of->bufused = of->buflength = 0; } } -struct flist { +struct flist +{ struct flist *next; int started_p; const char *name; @@ -1873,10 +1881,8 @@ struct walk_type_data; For structures, given a pointer to the item in 'val'. For misc. pointers, given the item in 'val'. */ -typedef void (*process_field_fn) - (type_p f, const struct walk_type_data *p); -typedef void (*func_name_fn) - (type_p s, const struct walk_type_data *p); +typedef void (*process_field_fn) (type_p f, const struct walk_type_data * p); +typedef void (*func_name_fn) (type_p s, const struct walk_type_data * p); /* Parameters for write_types. */ @@ -1895,28 +1901,27 @@ static void output_escaped_param (struct walk_type_data *d, const char *, const char *); 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, +static void write_func_for_structure (type_p orig_s, type_p s, type_p *param, const struct write_types_data *wtd); static void write_types_process_field - (type_p f, const struct walk_type_data *d); + (type_p f, const struct walk_type_data *d); static void write_types (outf_p output_header, - type_p structures, + type_p structures, type_p param_structs, const struct write_types_data *wtd); static void write_types_local_process_field - (type_p f, const struct walk_type_data *d); + (type_p f, const struct walk_type_data *d); static void write_local_func_for_structure - (const_type_p orig_s, type_p s, type_p * param); + (const_type_p orig_s, type_p s, type_p *param); static void write_local (outf_p output_header, - type_p structures, - type_p param_structs); + type_p structures, type_p param_structs); static void write_enum_defn (type_p structures, type_p param_structs); static int contains_scalar_p (type_p t); -static void put_mangled_filename (outf_p , const char *); +static void put_mangled_filename (outf_p, const char *); static void finish_root_table (struct flist *flp, const char *pfx, const char *tname, const char *lastname, const char *name); -static void write_root (outf_p , pair_p, type_p, const char *, int, +static void write_root (outf_p, pair_p, type_p, const char *, int, struct fileloc *, const char *, bool); static void write_array (outf_p f, pair_p v, const struct write_types_data *wtd); @@ -1951,35 +1956,37 @@ output_mangled_typename (outf_p of, const_type_p t) { if (t == NULL) oprintf (of, "Z"); - else switch (t->kind) - { - case TYPE_POINTER: - oprintf (of, "P"); - output_mangled_typename (of, t->u.p); - break; - case TYPE_SCALAR: - oprintf (of, "I"); - break; - case TYPE_STRING: - oprintf (of, "S"); - break; - case TYPE_STRUCT: - case TYPE_UNION: - case TYPE_LANG_STRUCT: - oprintf (of, "%lu%s", (unsigned long) strlen (t->u.s.tag), t->u.s.tag); - break; - case TYPE_PARAM_STRUCT: + else + switch (t->kind) { - int i; - for (i = 0; i < NUM_PARAM; i++) - if (t->u.param_struct.param[i] != NULL) - output_mangled_typename (of, t->u.param_struct.param[i]); - output_mangled_typename (of, t->u.param_struct.stru); + case TYPE_POINTER: + oprintf (of, "P"); + output_mangled_typename (of, t->u.p); + break; + case TYPE_SCALAR: + oprintf (of, "I"); + break; + case TYPE_STRING: + oprintf (of, "S"); + break; + case TYPE_STRUCT: + case TYPE_UNION: + case TYPE_LANG_STRUCT: + oprintf (of, "%lu%s", (unsigned long) strlen (t->u.s.tag), + t->u.s.tag); + break; + case TYPE_PARAM_STRUCT: + { + int i; + for (i = 0; i < NUM_PARAM; i++) + if (t->u.param_struct.param[i] != NULL) + output_mangled_typename (of, t->u.param_struct.param[i]); + output_mangled_typename (of, t->u.param_struct.stru); + } + break; + case TYPE_ARRAY: + gcc_unreachable (); } - break; - case TYPE_ARRAY: - gcc_unreachable (); - } } /* Print PARAM to D->OF processing escapes. D->VAL references the @@ -1996,30 +2003,31 @@ output_escaped_param (struct walk_type_data *d, const char *param, for (p = param; *p; p++) if (*p != '%') oprintf (d->of, "%c", *p); - else switch (*++p) - { - case 'h': - oprintf (d->of, "(%s)", d->prev_val[2]); - break; - case '0': - oprintf (d->of, "(%s)", d->prev_val[0]); - break; - case '1': - oprintf (d->of, "(%s)", d->prev_val[1]); - break; - case 'a': + else + switch (*++p) { - const char *pp = d->val + strlen (d->val); - while (pp[-1] == ']') - while (*pp != '[') - pp--; - oprintf (d->of, "%s", pp); + case 'h': + oprintf (d->of, "(%s)", d->prev_val[2]); + break; + case '0': + oprintf (d->of, "(%s)", d->prev_val[0]); + break; + case '1': + oprintf (d->of, "(%s)", d->prev_val[1]); + break; + case 'a': + { + const char *pp = d->val + strlen (d->val); + while (pp[-1] == ']') + while (*pp != '[') + pp--; + oprintf (d->of, "%s", pp); + } + break; + default: + error_at_line (d->line, "`%s' option contains bad escape %c%c", + oname, '%', *p); } - break; - default: - error_at_line (d->line, "`%s' option contains bad escape %c%c", - oname, '%', *p); - } } /* Call D->PROCESS_FIELD for every field (or subfield) of D->VAL, @@ -2076,8 +2084,7 @@ walk_type (type_p t, struct walk_type_data *d) else if (strcmp (oo->name, "param_is") == 0) ; else if (strncmp (oo->name, "param", 5) == 0 - && ISDIGIT (oo->name[5]) - && strcmp (oo->name + 6, "_is") == 0) + && ISDIGIT (oo->name[5]) && strcmp (oo->name + 6, "_is") == 0) ; else if (strcmp (oo->name, "chain_next") == 0) ; @@ -2101,7 +2108,7 @@ walk_type (type_p t, struct walk_type_data *d) if (pointer_p) t = t->u.p; - if (! UNION_OR_STRUCT_P (t)) + if (!UNION_OR_STRUCT_P (t)) error_at_line (d->line, "`use_params' option on unimplemented type"); else t = find_param_structure (t, d->param); @@ -2125,12 +2132,11 @@ walk_type (type_p t, struct walk_type_data *d) t = nt; } else - error_at_line (d->line, "no parameter defined for `%s'", - d->val); + error_at_line (d->line, "no parameter defined for `%s'", d->val); } if (maybe_undef_p - && (t->kind != TYPE_POINTER || ! UNION_OR_STRUCT_P (t->u.p))) + && (t->kind != TYPE_POINTER || !UNION_OR_STRUCT_P (t->u.p))) { error_at_line (d->line, "field `%s' has invalid option `maybe_undef_p'\n", @@ -2147,16 +2153,15 @@ walk_type (type_p t, struct walk_type_data *d) case TYPE_POINTER: { - if (maybe_undef_p - && t->u.p->u.s.line.file == NULL) + if (maybe_undef_p && t->u.p->u.s.line.file == NULL) { oprintf (d->of, "%*sgcc_assert (!%s);\n", d->indent, "", d->val); break; } - if (! length) + if (!length) { - if (! UNION_OR_STRUCT_P (t->u.p) + if (!UNION_OR_STRUCT_P (t->u.p) && t->u.p->kind != TYPE_PARAM_STRUCT) { error_at_line (d->line, @@ -2169,12 +2174,11 @@ walk_type (type_p t, struct walk_type_data *d) { const char *oldprevval2 = d->prev_val[2]; - if (! UNION_OR_STRUCT_P (nested_ptr_d->type)) + if (!UNION_OR_STRUCT_P (nested_ptr_d->type)) { error_at_line (d->line, "field `%s' has invalid " - "option `nested_ptr'\n", - d->val); + "option `nested_ptr'\n", d->val); return; } @@ -2186,8 +2190,7 @@ walk_type (type_p t, struct walk_type_data *d) (nested_ptr_d->type->kind == TYPE_UNION ? "union" : "struct"), nested_ptr_d->type->u.s.tag, - d->fn_wants_lvalue ? "" : "const ", - d->val); + d->fn_wants_lvalue ? "" : "const ", d->val); oprintf (d->of, "%*s", d->indent + 2, ""); output_escaped_param (d, nested_ptr_d->convert_from, "nested_ptr"); @@ -2223,8 +2226,8 @@ walk_type (type_p t, struct walk_type_data *d) oprintf (d->of, "%*sif (%s != NULL) {\n", d->indent, "", d->val); d->indent += 2; oprintf (d->of, "%*ssize_t i%d;\n", d->indent, "", loopcounter); - oprintf (d->of, "%*sfor (i%d = 0; i%d != (size_t)(", d->indent, "", - loopcounter, loopcounter); + oprintf (d->of, "%*sfor (i%d = 0; i%d != (size_t)(", d->indent, + "", loopcounter, loopcounter); output_escaped_param (d, length, "length"); oprintf (d->of, "); i%d++) {\n", loopcounter); d->indent += 2; @@ -2238,7 +2241,7 @@ walk_type (type_p t, struct walk_type_data *d) d->used_length = 0; d->indent -= 2; oprintf (d->of, "%*s}\n", d->indent, ""); - d->process_field(t, d); + d->process_field (t, d); d->indent -= 2; oprintf (d->of, "%*s}\n", d->indent, ""); } @@ -2302,7 +2305,7 @@ walk_type (type_p t, struct walk_type_data *d) int seen_default_p = 0; options_p o; - if (! t->u.s.line.file) + if (!t->u.s.line.file) error_at_line (d->line, "incomplete structure `%s'", t->u.s.tag); if ((d->bitmap & t->u.s.bitmap) != d->bitmap) @@ -2315,7 +2318,7 @@ walk_type (type_p t, struct walk_type_data *d) /* Some things may also be defined in the structure's options. */ for (o = t->u.s.opt; o; o = o->next) - if (! desc && strcmp (o->name, "desc") == 0) + if (!desc && strcmp (o->name, "desc") == 0) desc = o->info; d->prev_val[2] = oldval; @@ -2324,7 +2327,8 @@ walk_type (type_p t, struct walk_type_data *d) { if (desc == NULL) { - error_at_line (d->line, "missing `desc' option for union `%s'", + error_at_line (d->line, + "missing `desc' option for union `%s'", t->u.s.tag); desc = "1"; } @@ -2374,19 +2378,19 @@ walk_type (type_p t, struct walk_type_data *d) d->indent += 2; seen_default_p = 1; } - else if (! union_p && (default_p || tagid)) + else if (!union_p && (default_p || tagid)) error_at_line (d->line, "can't use `%s' outside a union on field `%s'", default_p ? "default" : "tag", f->name); - else if (union_p && ! (default_p || tagid) + else if (union_p && !(default_p || tagid) && f->type->kind == TYPE_SCALAR) { fprintf (stderr, - "%s:%d: warning: field `%s' is missing `tag' or `default' option\n", + "%s:%d: warning: field `%s' is missing `tag' or `default' option\n", d->line->file, d->line->line, f->name); continue; } - else if (union_p && ! (default_p || tagid)) + else if (union_p && !(default_p || tagid)) error_at_line (d->line, "field `%s' is missing `tag' or `default' option", f->name); @@ -2415,7 +2419,7 @@ walk_type (type_p t, struct walk_type_data *d) d->prev_val[1] = oldprevval1; d->prev_val[2] = oldprevval2; - if (union_p && ! seen_default_p) + if (union_p && !seen_default_p) { oprintf (d->of, "%*sdefault:\n", d->indent, ""); oprintf (d->of, "%*s break;\n", d->indent, ""); @@ -2488,8 +2492,7 @@ write_types_process_field (type_p f, const struct walk_type_data *d) oprintf (d->of, ", gt_e_"); output_mangled_typename (d->of, f); } - else if (UNION_OR_STRUCT_P (f) - && f->u.p->u.s.line.file != NULL) + else if (UNION_OR_STRUCT_P (f) && f->u.p->u.s.line.file != NULL) { oprintf (d->of, ", gt_ggc_e_"); output_mangled_typename (d->of, f); @@ -2551,7 +2554,7 @@ output_type_enum (outf_p of, type_p s) static outf_p get_output_file_for_structure (const_type_p s, type_p *param) { - const char * fn = s->u.s.line.file; + const char *fn = s->u.s.line.file; int i; /* This is a hack, and not the good kind either. */ @@ -2567,8 +2570,8 @@ get_output_file_for_structure (const_type_p s, type_p *param) PARAM, write out a routine that: - Takes a parameter, a void * but actually of type *S - If SEEN_ROUTINE returns nonzero, calls write_types_process_field on each - field of S or its substructures and (in some cases) things - that are pointed to by S. + field of S or its substructures and (in some cases) things + that are pointed to by S. */ static void @@ -2610,7 +2613,7 @@ write_func_for_structure (type_p orig_s, type_p s, type_p *param, d.bitmap = s->u.s.bitmap; d.param = param; d.prev_val[0] = "*x"; - d.prev_val[1] = "not valid postage"; /* Guarantee an error. */ + d.prev_val[1] = "not valid postage"; /* Guarantee an error. */ d.prev_val[3] = "x"; d.val = "(*x)"; @@ -2682,8 +2685,7 @@ write_func_for_structure (type_p orig_s, type_p s, type_p *param, oprintf (d.of, ");\n"); oprintf (d.of, " if (xprev == NULL) break;\n"); oprintf (d.of, " x = xprev;\n"); - oprintf (d.of, " (void) %s (xprev", - wtd->marker_routine); + oprintf (d.of, " (void) %s (xprev", wtd->marker_routine); if (wtd->param_prefix) { oprintf (d.of, ", xprev, gt_%s_", wtd->param_prefix); @@ -2745,13 +2747,11 @@ write_types (outf_p output_header, type_p structures, type_p param_structs, emitted afterwards. This is needed in plugin mode. */ oprintf (output_header, "/* macros and declarations */\n"); for (s = structures; s; s = s->next) - if (s->gc_used == GC_POINTED_TO - || s->gc_used == GC_MAYBE_POINTED_TO) + if (s->gc_used == GC_POINTED_TO || s->gc_used == GC_MAYBE_POINTED_TO) { options_p opt; - if (s->gc_used == GC_MAYBE_POINTED_TO - && s->u.s.line.file == NULL) + if (s->gc_used == GC_MAYBE_POINTED_TO && s->u.s.line.file == NULL) continue; oprintf (output_header, "#define gt_%s_", wtd->prefix); @@ -2760,16 +2760,14 @@ write_types (outf_p output_header, type_p structures, type_p param_structs, oprintf (output_header, " if (X != NULL) gt_%sx_%s (X);\\\n", wtd->prefix, s->u.s.tag); - oprintf (output_header, - " } while (0)\n"); + oprintf (output_header, " } while (0)\n"); for (opt = s->u.s.opt; opt; opt = opt->next) if (strcmp (opt->name, "ptr_alias") == 0) { const_type_p const t = (const_type_p) opt->info; if (t->kind == TYPE_STRUCT - || t->kind == TYPE_UNION - || t->kind == TYPE_LANG_STRUCT) + || t->kind == TYPE_UNION || t->kind == TYPE_LANG_STRUCT) oprintf (output_header, "#define gt_%sx_%s gt_%sx_%s\n", wtd->prefix, s->u.s.tag, wtd->prefix, t->u.s.tag); @@ -2815,13 +2813,11 @@ write_types (outf_p output_header, type_p structures, type_p param_structs, /* At last we emit the functions code. */ oprintf (output_header, "\n/* functions code */\n"); for (s = structures; s; s = s->next) - if (s->gc_used == GC_POINTED_TO - || s->gc_used == GC_MAYBE_POINTED_TO) + if (s->gc_used == GC_POINTED_TO || s->gc_used == GC_MAYBE_POINTED_TO) { options_p opt; - if (s->gc_used == GC_MAYBE_POINTED_TO - && s->u.s.line.file == NULL) + if (s->gc_used == GC_MAYBE_POINTED_TO && s->u.s.line.file == NULL) continue; for (opt = s->u.s.opt; opt; opt = opt->next) if (strcmp (opt->name, "ptr_alias") == 0) @@ -2856,15 +2852,13 @@ write_types (outf_p output_header, type_p structures, type_p param_structs, } } -static const struct write_types_data ggc_wtd = -{ +static const struct write_types_data ggc_wtd = { "ggc_m", NULL, "ggc_mark", "ggc_test_and_set_mark", NULL, "GC marker procedures. ", FALSE }; -static const struct write_types_data pch_wtd = -{ +static const struct write_types_data pch_wtd = { "pch_n", "pch_p", "gt_pch_note_object", "gt_pch_note_object", "gt_pch_note_reorder", "PCH type-walking procedures. ", @@ -2918,7 +2912,7 @@ write_local_func_for_structure (const_type_p orig_s, type_p s, type_p *param) d.bitmap = s->u.s.bitmap; d.param = param; d.prev_val[0] = d.prev_val[2] = "*x"; - d.prev_val[1] = "not valid postage"; /* Guarantee an error. */ + d.prev_val[1] = "not valid postage"; /* Guarantee an error. */ d.prev_val[3] = "x"; d.val = "(*x)"; d.fn_wants_lvalue = true; @@ -2951,8 +2945,7 @@ write_local (outf_p output_header, type_p structures, type_p param_structs) return; oprintf (output_header, "\n/* Local pointer-walking routines. */\n"); for (s = structures; s; s = s->next) - if (s->gc_used == GC_POINTED_TO - || s->gc_used == GC_MAYBE_POINTED_TO) + if (s->gc_used == GC_POINTED_TO || s->gc_used == GC_MAYBE_POINTED_TO) { options_p opt; @@ -2964,8 +2957,7 @@ write_local (outf_p output_header, type_p structures, type_p param_structs) { const_type_p const t = (const_type_p) opt->info; if (t->kind == TYPE_STRUCT - || t->kind == TYPE_UNION - || t->kind == TYPE_LANG_STRUCT) + || t->kind == TYPE_UNION || t->kind == TYPE_LANG_STRUCT) { oprintf (output_header, "#define gt_pch_p_"); output_mangled_typename (output_header, s); @@ -2985,7 +2977,7 @@ write_local (outf_p output_header, type_p structures, type_p param_structs) oprintf (output_header, "extern void gt_pch_p_"); output_mangled_typename (output_header, s); oprintf (output_header, - "\n (void *, void *, gt_pointer_operator, void *);\n"); + "\n (void *, void *, gt_pointer_operator, void *);\n"); if (s->kind == TYPE_LANG_STRUCT) { @@ -3000,14 +2992,14 @@ write_local (outf_p output_header, type_p structures, type_p param_structs) for (s = param_structs; s; s = s->next) if (s->gc_used == GC_POINTED_TO) { - type_p * param = s->u.param_struct.param; + type_p *param = s->u.param_struct.param; type_p stru = s->u.param_struct.stru; /* Declare the marker procedure. */ oprintf (output_header, "extern void gt_pch_p_"); output_mangled_typename (output_header, s); oprintf (output_header, - "\n (void *, void *, gt_pointer_operator, void *);\n"); + "\n (void *, void *, gt_pointer_operator, void *);\n"); if (stru->u.s.line.file == NULL) { @@ -3084,7 +3076,7 @@ contains_scalar_p (type_p t) return contains_scalar_p (t->u.a.p); default: /* Could also check for structures that have no non-pointer - fields, but there aren't enough of those to worry about. */ + fields, but there aren't enough of those to worry about. */ return 1; } } @@ -3131,8 +3123,7 @@ finish_root_table (struct flist *flp, const char *pfx, const char *lastname, if (bitmap & 1) { oprintf (base_files[fnum], - "extern const struct %s gt_%s_", - tname, pfx); + "extern const struct %s gt_%s_", tname, pfx); put_mangled_filename (base_files[fnum], fli2->name); oprintf (base_files[fnum], "[];\n"); } @@ -3141,9 +3132,8 @@ finish_root_table (struct flist *flp, const char *pfx, const char *lastname, { size_t fnum; for (fnum = 0; base_files && fnum < num_lang_dirs; fnum++) - oprintf (base_files [fnum], - "EXPORTED_CONST struct %s * const %s[] = {\n", - tname, name); + oprintf (base_files[fnum], + "EXPORTED_CONST struct %s * const %s[] = {\n", tname, name); } @@ -3240,13 +3230,13 @@ write_field_root (outf_p f, pair_p v, type_p type, const char *name, /* Write out to F the table entry and any marker routines needed to mark NAME as TYPE. V can be one of three values: - - null, if NAME is too complex to represent using a single - count and stride. In this case, it is an error for NAME to - contain any gc-ed data. + - null, if NAME is too complex to represent using a single + count and stride. In this case, it is an error for NAME to + contain any gc-ed data. - - the outermost array that contains NAME, if NAME is part of an array. + - the outermost array that contains NAME, if NAME is part of an array. - - the C variable that contains NAME, if NAME is not part of an array. + - the C variable that contains NAME, if NAME is not part of an array. LINE is the line of the C source that declares the root variable. HAS_LENGTH is nonzero iff V was a variable-length array. IF_MARKED @@ -3276,7 +3266,7 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length, ; else error_at_line (line, - "field `%s' of global `%s' has unknown option `%s'", + "field `%s' of global `%s' has unknown option `%s'", fld->name, name, o->name); if (skip_p) @@ -3298,10 +3288,9 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length, continue; if (validf != NULL) error_at_line (line, - "both `%s.%s.%s' and `%s.%s.%s' have tag `%s'", + "both `%s.%s.%s' and `%s.%s.%s' have tag `%s'", name, fld->name, validf->name, - name, fld->name, ufld->name, - tag); + name, fld->name, ufld->name, tag); validf = ufld; } if (validf != NULL) @@ -3312,7 +3301,7 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length, } else if (desc) error_at_line (line, - "global `%s.%s' has `desc' option but is not union", + "global `%s.%s' has `desc' option but is not union", name, fld->name); else write_field_root (f, v, type, name, 0, line, if_marked, @@ -3340,7 +3329,7 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length, tp = type->u.p; - if (! has_length && UNION_OR_STRUCT_P (tp)) + if (!has_length && UNION_OR_STRUCT_P (tp)) { oprintf (f, " >_ggc_mx_%s,\n", tp->u.s.tag); if (emit_pch) @@ -3348,7 +3337,7 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length, else oprintf (f, " NULL"); } - else if (! has_length && tp->kind == TYPE_PARAM_STRUCT) + else if (!has_length && tp->kind == TYPE_PARAM_STRUCT) { oprintf (f, " >_ggc_m_"); output_mangled_typename (f, tp); @@ -3396,9 +3385,7 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length, break; default: - error_at_line (line, - "global `%s' is unimplemented type", - name); + error_at_line (line, "global `%s' is unimplemented type", name); } } @@ -3424,8 +3411,7 @@ write_array (outf_p f, pair_p v, const struct write_types_data *wtd) if (wtd->param_prefix) { oprintf (f, "static void gt_%sa_%s\n", wtd->param_prefix, v->name); - oprintf (f, - " (void *, void *, gt_pointer_operator, void *);\n"); + oprintf (f, " (void *, void *, gt_pointer_operator, void *);\n"); oprintf (f, "static void gt_%sa_%s (ATTRIBUTE_UNUSED void *this_obj,\n", wtd->param_prefix, v->name); oprintf (d.of, @@ -3440,8 +3426,7 @@ write_array (outf_p f, pair_p v, const struct write_types_data *wtd) } d.opt = v->opt; - oprintf (f, "static void gt_%sa_%s (void *);\n", - wtd->prefix, v->name); + oprintf (f, "static void gt_%sa_%s (void *);\n", wtd->prefix, v->name); oprintf (f, "static void\ngt_%sa_%s (ATTRIBUTE_UNUSED void *x_p)\n", wtd->prefix, v->name); oprintf (f, "{\n"); @@ -3476,8 +3461,7 @@ write_roots (pair_p variables, bool emit_pch) else if (strcmp (o->name, "param_is") == 0) ; else if (strncmp (o->name, "param", 5) == 0 - && ISDIGIT (o->name[5]) - && strcmp (o->name + 6, "_is") == 0) + && ISDIGIT (o->name[5]) && strcmp (o->name + 6, "_is") == 0) ; else if (strcmp (o->name, "if_marked") == 0) ; @@ -3496,13 +3480,13 @@ write_roots (pair_p variables, bool emit_pch) fli->next = flp; fli->started_p = 0; fli->name = v->line.file; - gcc_assert(fli->name); + gcc_assert (fli->name); flp = fli; oprintf (f, "\n/* GC roots. */\n\n"); } - if (! deletable_p + if (!deletable_p && length && v->type->kind == TYPE_POINTER && (v->type->u.p->kind == TYPE_POINTER @@ -3534,7 +3518,7 @@ write_roots (pair_p variables, bool emit_pch) for (fli = flp; fli; fli = fli->next) if (fli->f == f) break; - if (! fli->started_p) + if (!fli->started_p) { fli->started_p = 1; @@ -3568,7 +3552,7 @@ write_roots (pair_p variables, bool emit_pch) for (fli = flp; fli; fli = fli->next) if (fli->f == f) break; - if (! fli->started_p) + if (!fli->started_p) { fli->started_p = 1; @@ -3605,14 +3589,15 @@ write_roots (pair_p variables, bool emit_pch) || v->type->u.p->kind != TYPE_PARAM_STRUCT || v->type->u.p->u.param_struct.stru != find_structure ("htab", 0)) { - error_at_line (&v->line, "if_marked option used but not hash table"); + error_at_line (&v->line, + "if_marked option used but not hash table"); continue; } for (fli = flp; fli; fli = fli->next) if (fli->f == f) break; - if (! fli->started_p) + if (!fli->started_p) { fli->started_p = 1; @@ -3645,13 +3630,13 @@ write_roots (pair_p variables, bool emit_pch) else if (strcmp (o->name, "if_marked") == 0) if_marked_p = 1; - if (! if_marked_p) + if (!if_marked_p) continue; for (fli = flp; fli; fli = fli->next) if (fli->f == f) break; - if (! fli->started_p) + if (!fli->started_p) { fli->started_p = 1; @@ -3681,13 +3666,13 @@ write_roots (pair_p variables, bool emit_pch) if (skip_p) continue; - if (! contains_scalar_p (v->type)) + if (!contains_scalar_p (v->type)) continue; for (fli = flp; fli; fli = fli->next) if (fli->f == f) break; - if (! fli->started_p) + if (!fli->started_p) { fli->started_p = 1; @@ -3722,7 +3707,7 @@ note_def_vec (const char *type_name, bool is_scalar, struct fileloc *pos) type_p t; options_p o; type_p len_ty = create_scalar_type ("unsigned"); - const char *name = concat ("VEC_", type_name, "_base", (char *)0); + const char *name = concat ("VEC_", type_name, "_base", (char *) 0); if (is_scalar) { @@ -3747,14 +3732,14 @@ note_def_vec (const char *type_name, bool is_scalar, struct fileloc *pos) we had expanded the macros in vec.h: typedef struct VEC_<type>_<astrat> { - VEC_<type>_base base; + VEC_<type>_base base; } VEC_<type>_<astrat>; */ void note_def_vec_alloc (const char *type, const char *astrat, struct fileloc *pos) { - const char *astratname = concat ("VEC_", type, "_", astrat, (char *)0); - const char *basename = concat ("VEC_", type, "_base", (char *)0); + const char *astratname = concat ("VEC_", type, "_", astrat, (char *) 0); + const char *basename = concat ("VEC_", type, "_base", (char *) 0); pair_p field = create_field_at (0, resolve_typedef (basename, pos), "base", 0, pos); @@ -3787,8 +3772,10 @@ variable_size_p (const type_p s) return false; } -enum alloc_quantity { single, vector }; -enum alloc_zone { any_zone, specific_zone }; +enum alloc_quantity +{ single, vector }; +enum alloc_zone +{ any_zone, specific_zone }; /* Writes one typed allocator definition for type identifier TYPE_NAME with optional type specifier TYPE_SPECIFIER. The allocator name will contain @@ -3798,15 +3785,15 @@ enum alloc_zone { any_zone, specific_zone }; the allocator will be zone-specific. */ static void -write_typed_alloc_def (bool variable_size, const char * type_specifier, - const char * type_name, const char * allocator_type, +write_typed_alloc_def (bool variable_size, const char *type_specifier, + const char *type_name, const char *allocator_type, enum alloc_quantity quantity, enum alloc_zone zone) { bool two_args = variable_size && (quantity == vector); bool third_arg = ((zone == specific_zone) && (variable_size || (quantity == vector))); - oprintf (header_file, "#define ggc_alloc_%s%s",allocator_type, type_name); + oprintf (header_file, "#define ggc_alloc_%s%s", allocator_type, type_name); oprintf (header_file, "(%s%s%s%s%s) ", (variable_size ? "SIZE" : ""), (two_args ? ", " : ""), @@ -3828,7 +3815,7 @@ write_typed_alloc_def (bool variable_size, const char * type_specifier, /* Writes a typed allocator definition for a struct or union S. */ static void -write_typed_struct_alloc_def (const type_p s, const char * allocator_type, +write_typed_struct_alloc_def (const type_p s, const char *allocator_type, enum alloc_quantity quantity, enum alloc_zone zone) { @@ -3839,7 +3826,7 @@ write_typed_struct_alloc_def (const type_p s, const char * allocator_type, /* Writes a typed allocator definition for a typedef P. */ static void -write_typed_typedef_alloc_def (const pair_p p, const char * allocator_type, +write_typed_typedef_alloc_def (const pair_p p, const char *allocator_type, enum alloc_quantity quantity, enum alloc_zone zone) { @@ -3920,15 +3907,16 @@ output_typename (outf_p of, const_type_p t) { int i; for (i = 0; i < NUM_PARAM; i++) - if (t->u.param_struct.param[i] != NULL) { - output_typename (of, t->u.param_struct.param[i]); - oprintf (of, "_"); - } + if (t->u.param_struct.param[i] != NULL) + { + output_typename (of, t->u.param_struct.param[i]); + oprintf (of, "_"); + } output_typename (of, t->u.param_struct.stru); break; } default: - gcc_unreachable(); + gcc_unreachable (); } } @@ -3938,7 +3926,7 @@ output_typename (outf_p of, const_type_p t) static void write_splay_tree_allocator_def (const_type_p s) { - outf_p of = get_output_file_for_structure(s, NULL); + outf_p of = get_output_file_for_structure (s, NULL); oprintf (of, "void * ggc_alloc_splay_tree_"); output_typename (of, s); oprintf (of, " (int sz, void * nl)\n"); @@ -3983,15 +3971,32 @@ dump_typekind (int indent, enum typekind kind) printf ("%*ckind = ", indent, ' '); switch (kind) { - case TYPE_SCALAR: printf ("TYPE_SCALAR"); break; - case TYPE_STRING: printf ("TYPE_STRING"); break; - case TYPE_STRUCT: printf ("TYPE_STRUCT"); break; - case TYPE_UNION: printf ("TYPE_UNION"); break; - case TYPE_POINTER: printf ("TYPE_POINTER"); break; - case TYPE_ARRAY: printf ("TYPE_ARRAY"); break; - case TYPE_LANG_STRUCT: printf ("TYPE_LANG_STRUCT"); break; - case TYPE_PARAM_STRUCT: printf ("TYPE_PARAM_STRUCT"); break; - default: gcc_unreachable (); + case TYPE_SCALAR: + printf ("TYPE_SCALAR"); + break; + case TYPE_STRING: + printf ("TYPE_STRING"); + break; + case TYPE_STRUCT: + printf ("TYPE_STRUCT"); + break; + case TYPE_UNION: + printf ("TYPE_UNION"); + break; + case TYPE_POINTER: + printf ("TYPE_POINTER"); + break; + case TYPE_ARRAY: + printf ("TYPE_ARRAY"); + break; + case TYPE_LANG_STRUCT: + printf ("TYPE_LANG_STRUCT"); + break; + case TYPE_PARAM_STRUCT: + printf ("TYPE_PARAM_STRUCT"); + break; + default: + gcc_unreachable (); } printf ("\n"); } @@ -4004,11 +4009,20 @@ dump_gc_used (int indent, enum gc_used_enum gc_used) printf ("%*cgc_used = ", indent, ' '); switch (gc_used) { - case GC_UNUSED: printf ("GC_UNUSED"); break; - case GC_USED: printf ("GC_USED"); break; - case GC_MAYBE_POINTED_TO: printf ("GC_MAYBE_POINTED_TO"); break; - case GC_POINTED_TO: printf ("GC_POINTED_TO"); break; - default: gcc_unreachable (); + case GC_UNUSED: + printf ("GC_UNUSED"); + break; + case GC_USED: + printf ("GC_USED"); + break; + case GC_MAYBE_POINTED_TO: + printf ("GC_MAYBE_POINTED_TO"); + break; + case GC_POINTED_TO: + printf ("GC_POINTED_TO"); + break; + default: + gcc_unreachable (); } printf ("\n"); } @@ -4023,8 +4037,8 @@ dump_options (int indent, options_p opt) o = opt; while (o) { - printf ("%s:%s ", o->name, o->info); - o = o->next; + printf ("%s:%s ", o->name, o->info); + o = o->next; } printf ("\n"); } @@ -4054,8 +4068,8 @@ dump_type_u_s (int indent, type_p t) fields = t->u.s.fields; while (fields) { - dump_pair (indent + INDENT, fields); - fields = fields->next; + dump_pair (indent + INDENT, fields); + fields = fields->next; } printf ("%*cend of fields of type %p\n", indent, ' ', (void *) t); dump_options (indent, t->u.s.opt); @@ -4118,7 +4132,7 @@ dump_type (int indent, type_p t) { PTR *slot; - printf ("%*cType at %p: ", indent, ' ', (void *)t); + printf ("%*cType at %p: ", indent, ' ', (void *) t); slot = htab_find_slot (seen_types, t, INSERT); if (*slot != NULL) { @@ -4130,7 +4144,7 @@ dump_type (int indent, type_p t) dump_typekind (indent, t->kind); printf ("%*cpointer_to = %p\n", indent + INDENT, ' ', - (void *)t->pointer_to); + (void *) t->pointer_to); dump_gc_used (indent + INDENT, t->gc_used); switch (t->kind) { @@ -4158,7 +4172,7 @@ dump_type (int indent, type_p t) default: gcc_unreachable (); } - printf ("%*cEnd of type at %p\n", indent, ' ', (void *)t); + printf ("%*cEnd of type at %p\n", indent, ' ', (void *) t); } /* Dumps the pair P. */ @@ -4176,7 +4190,7 @@ dump_pair (int indent, pair_p p) /* Dumps the list of pairs PP. */ static void -dump_pair_list (const char * name, pair_p pp) +dump_pair_list (const char *name, pair_p pp) { pair_p p; printf ("%s:\n", name); @@ -4188,7 +4202,7 @@ dump_pair_list (const char * name, pair_p pp) /* Dumps the STRUCTURES. */ static void -dump_structures (const char * name, type_p structures) +dump_structures (const char *name, type_p structures) { printf ("%s:\n", name); dump_type_list (0, structures); @@ -4207,17 +4221,17 @@ dump_everything (void) dump_pair_list ("variables", variables); htab_delete (seen_types); } - + int main (int argc, char **argv) { size_t i; static struct fileloc pos = { this_file, 0 }; - char* inputlist = 0; + char *inputlist = 0; int do_dump = 0; outf_p output_header; - char* plugin_output_filename = NULL; + char *plugin_output_filename = NULL; /* fatal uses this */ progname = "gengtype"; @@ -4237,14 +4251,14 @@ main (int argc, char **argv) nb_plugin_files = argc - 5; plugin_files = XCNEWVEC (char *, nb_plugin_files); for (i = 0; i < nb_plugin_files; i++) - { - /* Place an all zero lang_bitmap before the plugin file - name. */ - char *name = argv[i + 5]; - int len = strlen(name) + 1 + sizeof (lang_bitmap); - plugin_files[i] = XCNEWVEC (char, len) + sizeof (lang_bitmap); - strcpy (plugin_files[i], name); - } + { + /* Place an all zero lang_bitmap before the plugin file + name. */ + char *name = argv[i + 5]; + int len = strlen (name) + 1 + sizeof (lang_bitmap); + plugin_files[i] = XCNEWVEC (char, len) + sizeof (lang_bitmap); + strcpy (plugin_files[i], name); + } } else if (argc == 3) { @@ -4253,7 +4267,7 @@ main (int argc, char **argv) } else fatal ("usage: gengtype [-d] [-P pluginout.h] srcdir input-list " - "[file1 file2 ... fileN]"); + "[file1 file2 ... fileN]"); srcdir_len = strlen (srcdir); @@ -4268,15 +4282,24 @@ main (int argc, char **argv) /* These types are set up with #define or else outside of where we can see them. */ 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 ("uint64_t", &pos); pos.line++; - do_scalar_typedef ("uint8", &pos); pos.line++; - do_scalar_typedef ("jword", &pos); pos.line++; - do_scalar_typedef ("JCF_u2", &pos); pos.line++; - do_scalar_typedef ("void", &pos); pos.line++; + 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 ("uint64_t", &pos); + pos.line++; + do_scalar_typedef ("uint8", &pos); + pos.line++; + do_scalar_typedef ("jword", &pos); + pos.line++; + do_scalar_typedef ("JCF_u2", &pos); + pos.line++; + do_scalar_typedef ("void", &pos); + pos.line++; do_typedef ("PTR", create_pointer (resolve_typedef ("void", &pos)), &pos); for (i = 0; i < num_gt_files; i++) @@ -4306,11 +4329,11 @@ main (int argc, char **argv) dump_everything (); if (plugin_files) - { - for (i = 0; i < nb_plugin_files; i++) - free (plugin_files[i] - sizeof (lang_bitmap)); - free (plugin_files); - } + { + for (i = 0; i < nb_plugin_files; i++) + free (plugin_files[i] - sizeof (lang_bitmap)); + free (plugin_files); + } if (hit_error) return 1; |