From: Richard Sandiford Date: Tue, 16 Jul 2019 08:41:13 +0000 (+0000) Subject: Use file_location for md_reader's ptr_loc X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=737eb76789cd454918a85983255a1f62efcbfdc9;p=gcc.git Use file_location for md_reader's ptr_loc Also make it public, so that clients can use the location for error reporting. 2019-07-16 Richard Sandiford gcc/ * read-md.h (md_reader::ptr_loc): Moved from read-md.c. Use file_location instead of separate fields. (md_reader::set_md_ptr_loc): Take a file_location instead of a separate filename and line number. * read-md.c (ptr_loc): As above. (md_reader::copy_md_ptr_loc): Update for new ptr_loc layout. (md_reader::fprint_md_ptr_loc): Likewise. (md_reader::set_md_ptr_loc): Likewise. Take a file_location instead of a separate filename and line number. (md_reader::read_string): Update call accordingly. From-SVN: r273510 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8998f6b808..ec6567db92b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2019-07-16 Richard Sandiford + + * read-md.h (md_reader::ptr_loc): Moved from read-md.c. + Use file_location instead of separate fields. + (md_reader::set_md_ptr_loc): Take a file_location instead of a + separate filename and line number. + * read-md.c (ptr_loc): As above. + (md_reader::copy_md_ptr_loc): Update for new ptr_loc layout. + (md_reader::fprint_md_ptr_loc): Likewise. + (md_reader::set_md_ptr_loc): Likewise. Take a file_location + instead of a separate filename and line number. + (md_reader::read_string): Update call accordingly. + 2019-07-16 Richard Sandiford * config/rs6000/rs6000.md (*mov_update1): Explicitly diff --git a/gcc/read-md.c b/gcc/read-md.c index 8247640bd0d..d9a27ac8f13 100644 --- a/gcc/read-md.c +++ b/gcc/read-md.c @@ -43,14 +43,6 @@ int have_error = 0; #endif /* #ifndef GENERATOR_FILE */ -/* Associates PTR (which can be a string, etc.) with the file location - specified by FILENAME and LINENO. */ -struct ptr_loc { - const void *ptr; - const char *filename; - int lineno; -}; - /* This callback will be invoked whenever an md include directive is processed. To be used for creation of the dependency file. */ void (*include_callback) (const char *); @@ -94,25 +86,24 @@ leading_ptr_eq_p (const void *def1, const void *def2) return *(const void *const *) def1 == *(const void *const *) def2; } -/* Associate PTR with the file position given by FILENAME and LINENO. */ +/* Associate PTR with the file position given by FILE_LOC. */ void -md_reader::set_md_ptr_loc (const void *ptr, const char *filename, int lineno) +md_reader::set_md_ptr_loc (const void *ptr, file_location file_loc) { struct ptr_loc *loc; loc = (struct ptr_loc *) obstack_alloc (&m_ptr_loc_obstack, sizeof (struct ptr_loc)); loc->ptr = ptr; - loc->filename = filename; - loc->lineno = lineno; + loc->loc = file_loc; *htab_find_slot (m_ptr_locs, loc, INSERT) = loc; } /* Return the position associated with pointer PTR. Return null if no position was set. */ -const struct ptr_loc * +const md_reader::ptr_loc * md_reader::get_md_ptr_loc (const void *ptr) { return (const struct ptr_loc *) htab_find (m_ptr_locs, &ptr); @@ -125,7 +116,7 @@ md_reader::copy_md_ptr_loc (const void *new_ptr, const void *old_ptr) { const struct ptr_loc *loc = get_md_ptr_loc (old_ptr); if (loc != 0) - set_md_ptr_loc (new_ptr, loc->filename, loc->lineno); + set_md_ptr_loc (new_ptr, loc->loc); } /* If PTR is associated with a known file position, print a #line @@ -136,7 +127,7 @@ md_reader::fprint_md_ptr_loc (FILE *outf, const void *ptr) { const struct ptr_loc *loc = get_md_ptr_loc (ptr); if (loc != 0) - fprintf (outf, "#line %d \"%s\"\n", loc->lineno, loc->filename); + fprintf (outf, "#line %d \"%s\"\n", loc->loc.lineno, loc->loc.filename); } /* Special fprint_md_ptr_loc for writing to STDOUT. */ @@ -672,7 +663,7 @@ md_reader::read_string (int star_if_braced) { char *stringbuf; int saw_paren = 0; - int c, old_lineno; + int c; c = read_skip_spaces (); if (c == '(') @@ -681,7 +672,7 @@ md_reader::read_string (int star_if_braced) c = read_skip_spaces (); } - old_lineno = get_lineno (); + file_location loc = get_current_location (); if (c == '"') stringbuf = read_quoted_string (); else if (c == '{') @@ -704,7 +695,7 @@ md_reader::read_string (int star_if_braced) if (saw_paren) require_char_ws (')'); - set_md_ptr_loc (stringbuf, get_filename (), old_lineno); + set_md_ptr_loc (stringbuf, loc); return stringbuf; } diff --git a/gcc/read-md.h b/gcc/read-md.h index 9cb75694ffe..eff40126f33 100644 --- a/gcc/read-md.h +++ b/gcc/read-md.h @@ -149,6 +149,13 @@ struct mapping; class md_reader { public: + /* Associates PTR (which can be a string, etc.) with the file location + specified by LOC. */ + struct ptr_loc { + const void *ptr; + file_location loc; + }; + md_reader (bool compact); virtual ~md_reader (); @@ -183,7 +190,7 @@ class md_reader void require_word_ws (const char *expected); int peek_char (void); - void set_md_ptr_loc (const void *ptr, const char *filename, int lineno); + void set_md_ptr_loc (const void *ptr, file_location); const struct ptr_loc *get_md_ptr_loc (const void *ptr); void copy_md_ptr_loc (const void *new_ptr, const void *old_ptr); void fprint_md_ptr_loc (FILE *outf, const void *ptr);