diff options
author | Maxim Ostapenko <m.ostapenko@samsung.com> | 2017-01-18 16:06:31 +0000 |
---|---|---|
committer | Maxim Ostapenko <chefmax@gcc.gnu.org> | 2017-01-18 18:06:31 +0200 |
commit | 5807fb918d557400fd50431c1399cf1f131670ba (patch) | |
tree | 7bc51d9df5797da527b28b3f4b7ecb580608b1e4 | |
parent | 0c6299bbfd50c064913bbc0e1d810848f66d8994 (diff) | |
download | gcc-5807fb918d557400fd50431c1399cf1f131670ba.zip gcc-5807fb918d557400fd50431c1399cf1f131670ba.tar.gz gcc-5807fb918d557400fd50431c1399cf1f131670ba.tar.bz2 |
re PR lto/79061 ([LTO][ASAN] LTO plus ASAN fails with "AddressSanitizer: initialization-order-fiasco")
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
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/asan.c | 25 | ||||
-rw-r--r-- | gcc/lto/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/mi1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pch/cpp-3.c | 2 | ||||
-rw-r--r-- | gcc/tree.c | 5 |
8 files changed, 58 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7f96795..8c4b988 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. @@ -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)) diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 9bf6df0..5a20857 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -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 diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index d77d85d..c65e7cd 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 08743e9..480a09b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.dg/cpp/mi1.c b/gcc/testsuite/gcc.dg/cpp/mi1.c index 0cfedad..9817431 100644 --- a/gcc/testsuite/gcc.dg/cpp/mi1.c +++ b/gcc/testsuite/gcc.dg/cpp/mi1.c @@ -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" diff --git a/gcc/testsuite/gcc.dg/pch/cpp-3.c b/gcc/testsuite/gcc.dg/pch/cpp-3.c index 25b5ca4..d635706 100644 --- a/gcc/testsuite/gcc.dg/pch/cpp-3.c +++ b/gcc/testsuite/gcc.dg/pch/cpp-3.c @@ -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" @@ -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); |