re PR lto/79061 ([LTO][ASAN] LTO plus ASAN fails with "AddressSanitizer: initializati...
authorMaxim Ostapenko <m.ostapenko@samsung.com>
Wed, 18 Jan 2017 16:06:31 +0000 (16:06 +0000)
committerMaxim Ostapenko <chefmax@gcc.gnu.org>
Wed, 18 Jan 2017 16:06:31 +0000 (18:06 +0200)
PR lto/79061
gcc/

* asan.c (get_translation_unit_decl): New function.
(asan_add_global): Extract modules file name from globals
TRANSLATION_UNIT_DECL in lto mode.
* tree.c (build_translation_unit_decl): Add source location for newly
built TRANSLATION_UNIT_DECL.

gcc/lto/

* lto.c (lto_read_decls): accept location cache for
TRANSLATION_UNIT_DECL.

gcc/testsuite/

* gcc.dg/cpp/mi1.c: Adjust testcase.
* gcc.dg/pch/cpp-3.c: Likewise.

From-SVN: r244581

gcc/ChangeLog
gcc/asan.c
gcc/lto/ChangeLog
gcc/lto/lto.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/mi1.c
gcc/testsuite/gcc.dg/pch/cpp-3.c
gcc/tree.c

index 7f96795436798b9ee86f09a29dd3cefeff7666d6..8c4b9888527a4ee10e82c96457b956fbb5501c58 100644 (file)
@@ -1,3 +1,12 @@
+2017-01-18  Maxim Ostapenko  <m.ostapenko@samsung.com>
+
+       PR lto/79061
+       * asan.c (get_translation_unit_decl): New function.
+       (asan_add_global): Extract modules file name from globals
+       TRANSLATION_UNIT_DECL in lto mode.
+       * tree.c (build_translation_unit_decl): Add source location for newly
+       built TRANSLATION_UNIT_DECL.
+
 2017-01-18  Matthias Klose  <doko@ubuntu.com>
 
        * doc/install.texi: Allow default for --with-target-bdw-gc-include.
index 74500448a1246a59a3ff8029d6441d21b429e18c..9a59fe4f100e862f59224d71017cac8d055947b6 100644 (file)
@@ -2372,6 +2372,22 @@ asan_needs_odr_indicator_p (tree decl)
          && TREE_PUBLIC (decl));
 }
 
+/* For given DECL return its corresponding TRANSLATION_UNIT_DECL.  */
+
+static const_tree
+get_translation_unit_decl (tree decl)
+{
+  const_tree context = decl;
+  while (context && TREE_CODE (context) != TRANSLATION_UNIT_DECL)
+    {
+      if (TREE_CODE (context) == BLOCK)
+       context = BLOCK_SUPERCONTEXT (context);
+      else
+       context = get_containing_scope (context);
+    }
+  return context;
+}
+
 /* Append description of a single global DECL into vector V.
    TYPE is __asan_global struct type as returned by asan_global_struct.  */
 
@@ -2391,7 +2407,14 @@ asan_add_global (tree decl, tree type, vec<constructor_elt, va_gc> *v)
     pp_string (&asan_pp, "<unknown>");
   str_cst = asan_pp_string (&asan_pp);
 
-  pp_string (&module_name_pp, main_input_filename);
+  const char *filename = main_input_filename;
+  if (in_lto_p)
+    {
+      const_tree translation_unit_decl = get_translation_unit_decl (decl);
+      if (translation_unit_decl)
+       filename = DECL_SOURCE_FILE (translation_unit_decl);
+    }
+  pp_string (&module_name_pp, filename);
   module_name_cst = asan_pp_string (&module_name_pp);
 
   if (asan_needs_local_alias (decl))
index 9bf6df015445b018e2b88911b807361704433aee..5a208575833795aef98a4e157a7708b6bb324f09 100644 (file)
@@ -1,3 +1,9 @@
+2017-01-18  Maxim Ostapenko  <m.ostapenko@samsung.com>
+
+       PR lto/79061
+       * lto.c (lto_read_decls): accept location cache for
+       TRANSLATION_UNIT_DECL.
+
 2017-01-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/50199
index d77d85defb60da84dedd05098334ab0789645fb0..c65e7cdbd389c7a299082ac136bc7e7f56993382 100644 (file)
@@ -1707,7 +1707,13 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
              && (TREE_CODE (first) == IDENTIFIER_NODE
                  || TREE_CODE (first) == INTEGER_CST
                  || TREE_CODE (first) == TRANSLATION_UNIT_DECL))
-           continue;
+           {
+             /* For TRANSLATION_UNIT_DECL we need to accept location cache now
+                to avoid possible reverting during following unify_scc call.  */
+             if (TREE_CODE (first) == TRANSLATION_UNIT_DECL)
+               data_in->location_cache.accept_location_cache ();
+             continue;
+           }
 
          /* Try to unify the SCC with already existing ones.  */
          if (!flag_ltrans
index 08743e9467f99deb115c1a7f6f267ec21c724ba6..480a09b78c350db703589c0258d5bb21180099c7 100644 (file)
@@ -1,3 +1,9 @@
+2017-01-18  Maxim Ostapenko  <m.ostapenko@samsung.com>
+
+       PR lto/79061
+       * gcc.dg/cpp/mi1.c: Adjust testcase.
+       * gcc.dg/pch/cpp-3.c: Likewise.
+
 2016-01-18  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * gcc.target/powerpc/p8vector-builtin-8.c: Add new form for
index 0cfedad2f39ede976beb47de6df2376adfd41fd0..9817431b646a23df5958642c73724fa2808348a6 100644 (file)
@@ -13,7 +13,7 @@
 
 /* { dg-do compile }
    { dg-options "-H" }
-   { dg-message "mi1c\.h\n\[^\n\]*mi1cc\.h\n\[^\n\]*mi1nd\.h\n\[^\n\]*mi1ndp\.h\n\[^\n\]*mi1x\.h" "redundant include check" { target *-*-* } 0 } */
+   { dg-message "mi1c\.h\n\[^\n\]*mi1cc\.h\n\[^\n\]*mi1nd\.h\n\[^\n\]*mi1ndp\.h\n\[^\n\]*mi1x\.h\n\[^\n\]*mi1\.c" "redundant include check" { target *-*-* } 0 } */
 
 #include "mi1c.h"
 #include "mi1c.h"
index 25b5ca4077ff97c3b671097036115ebdc10277a9..d635706b4fd71b3b36d66c49528cde590eb1d9f9 100644 (file)
@@ -1,7 +1,7 @@
 /* PR preprocessor/36649 */
 /* { dg-do compile } */
 /* { dg-options "-H -I." } */
-/* { dg-message "cpp-3.h\[^\n\]*(\n\[^\n\]*cpp-3.c)?\n\[^\n\]*cpp-3a.h\n\[^\n\]*cpp-3b.h" "" { target *-*-* } 0 } */
+/* { dg-message "cpp-3.h\[^\n\]*(\n\[^\n\]*cpp-3.c)?\n\[^\n\]*cpp-3a.h\n\[^\n\]*cpp-3b.h\n\[^\n\]*cpp-3.c" "" { target *-*-* } 0 } */
 
 #include "cpp-3.h"
 #include "cpp-3a.h"
index cffa36d7466e50351fd2fd75c35a6260c5f2d2bd..59fe8d4aff4d8ba951be77326baf2755cc97d6f2 100644 (file)
@@ -4758,7 +4758,10 @@ vec<tree, va_gc> *all_translation_units;
 tree
 build_translation_unit_decl (tree name)
 {
-  tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
+  linemap_add (line_table, LC_ENTER, false, main_input_filename, 1);
+  location_t loc = linemap_line_start (line_table, 1, 0);
+  linemap_add (line_table, LC_LEAVE, false, NULL, 0);
+  tree tu = build_decl (loc, TRANSLATION_UNIT_DECL,
                        name, NULL_TREE);
   TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
   vec_safe_push (all_translation_units, tu);