summaryrefslogtreecommitdiff
path: root/gcc/lto-streamer-in.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-08-31 11:47:30 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-08-31 11:47:30 +0000
commit6c1bc27c5f1052e363e69fcabee45ef44d4bdde5 (patch)
tree72db555178b725e356d6e13b9f21e6cedd48abd2 /gcc/lto-streamer-in.c
parentc25eec8ffd8605d473192faec7ef11b9abf7a10b (diff)
downloadgcc-6c1bc27c5f1052e363e69fcabee45ef44d4bdde5.tar.gz
lto-streamer.h (lto_location_cache::cached_location::sysp): Add.
2015-08-31 Richard Biener <rguenther@suse.de> * lto-streamer.h (lto_location_cache::cached_location::sysp): Add. (lto_location_cache::current_sysp): Likewise. (output_block::current_sysp): Likewise. * lto-streamer-in.c (lto_location_cache::cmp_loc): Compare sysp. (lto_location_cache::apply_location_cache): Properly record system header locations. (lto_location_cache::input_location): Input whether a file is a system header. * lto-streamer-out.c (lto_output_location): Stream whether a file is a system header. From-SVN: r227338
Diffstat (limited to 'gcc/lto-streamer-in.c')
-rw-r--r--gcc/lto-streamer-in.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index 2eb80511b91..07018ecb904 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -171,6 +171,8 @@ lto_location_cache::cmp_loc (const void *pa, const void *pb)
}
if (a->file != b->file)
return strcmp (a->file, b->file);
+ if (a->sysp != b->sysp)
+ return a->sysp ? 1 : -1;
if (a->line != b->line)
return a->line - b->line;
return a->col - b->col;
@@ -194,7 +196,7 @@ lto_location_cache::apply_location_cache ()
if (current_file != loc.file)
linemap_add (line_table, prev_file ? LC_RENAME : LC_ENTER,
- false, loc.file, loc.line);
+ loc.sysp, loc.file, loc.line);
else if (current_line != loc.line)
{
int max = loc.col;
@@ -251,6 +253,7 @@ lto_location_cache::input_location (location_t *loc, struct bitpack_d *bp,
static const char *stream_file;
static int stream_line;
static int stream_col;
+ static bool stream_sysp;
bool file_change, line_change, column_change;
gcc_assert (current_cache == this);
@@ -268,7 +271,10 @@ lto_location_cache::input_location (location_t *loc, struct bitpack_d *bp,
column_change = bp_unpack_value (bp, 1);
if (file_change)
- stream_file = canon_file_name (bp_unpack_string (data_in, bp));
+ {
+ stream_file = canon_file_name (bp_unpack_string (data_in, bp));
+ stream_sysp = bp_unpack_value (bp, 1);
+ }
if (line_change)
stream_line = bp_unpack_var_len_unsigned (bp);
@@ -280,13 +286,14 @@ lto_location_cache::input_location (location_t *loc, struct bitpack_d *bp,
streaming. */
if (current_file == stream_file && current_line == stream_line
- && current_col == stream_col)
+ && current_col == stream_col && current_sysp == stream_sysp)
{
*loc = current_loc;
return;
}
- struct cached_location entry = {stream_file, loc, stream_line, stream_col};
+ struct cached_location entry
+ = {stream_file, loc, stream_line, stream_col, stream_sysp};
loc_cache.safe_push (entry);
}