lto-streamer.h (lto_location_cache::cached_location::sysp): Add.
authorRichard Biener <rguenther@suse.de>
Mon, 31 Aug 2015 11:47:30 +0000 (11:47 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 31 Aug 2015 11:47:30 +0000 (11:47 +0000)
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

gcc/ChangeLog
gcc/lto-streamer-in.c
gcc/lto-streamer-out.c
gcc/lto-streamer.h

index 88ccb221be03cbc233ad4737a9689ca9d7541310..deda8a42906789abec30c33ba12d07d6165a0652 100644 (file)
@@ -1,3 +1,16 @@
+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.
+
 2015-08-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR bootstrap/67363
index 2eb80511b919f82a77a392eb6258618a5dee6e06..07018ecb904c19b315f47134f9ea18e46dbc9232 100644 (file)
@@ -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);
 }
 
index 3ca88556638af7f442b7f8d650a0ba6eeab2a3aa..b6bc515201d8a4682d22d22778e6bced225aa38f 100644 (file)
@@ -191,8 +191,12 @@ lto_output_location (struct output_block *ob, struct bitpack_d *bp,
   bp_pack_value (bp, ob->current_col != xloc.column, 1);
 
   if (ob->current_file != xloc.file)
-    bp_pack_string (ob, bp, xloc.file, true);
+    {
+      bp_pack_string (ob, bp, xloc.file, true);
+      bp_pack_value (bp, xloc.sysp, 1);
+    }
   ob->current_file = xloc.file;
+  ob->current_sysp = xloc.sysp;
 
   if (ob->current_line != xloc.line)
     bp_pack_var_len_unsigned (bp, xloc.line);
index 66a824e19b2718bec7181db5ee538d8e629cca4c..21c41c5a6210f38dbb65f40302c1db9af2308c41 100644 (file)
@@ -345,6 +345,7 @@ private:
     const char *file;
     location_t *loc;
     int line, col;
+    bool sysp;
   };
 
   /* The location cache.  */
@@ -364,6 +365,7 @@ private:
   const char *current_file;
   int current_line;
   int current_col;
+  bool current_sysp;
   location_t current_loc;
 };
 
@@ -711,6 +713,7 @@ struct output_block
   const char *current_file;
   int current_line;
   int current_col;
+  bool current_sysp;
 
   /* Cache of nodes written in this section.  */
   struct streamer_tree_cache_d *writer_cache;