From 5b42d196248425064ca9013f63510834744e169e Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 30 May 2018 18:42:41 +0200 Subject: [PATCH] passes.c (ipa_write_summaries): Only modify statements if body is in memory. * passes.c (ipa_write_summaries): Only modify statements if body is in memory. * cgraphunit.c (ipa_passes): Also produce intermeidate code when incrementally linking. (ipa_passes): Likewise. * lto-cgraph.c (lto_output_node): When incrementally linking do not pass down resolution info. * common.opt (flag_incremental_link): Update info. * gcc.c (plugin specs): Turn flinker-output=* to -plugin-opt=-linker-output-known * toplev.c (compile_file): Also cut compilation when doing incremental link. * flag-types. (enum lto_partition_model): Add LTO_LINKER_OUTPUT_NOLTOREL. (invoke.texi): Add -flinker-output docs. * ipa.c (symbol_table::remove_unreachable_nodes): Handle LTO incremental link same way as WPA; do not stream in dead initializers. * dwarf2out.c (dwarf2out_die_ref_for_decl, darf2out_register_external_decl): Support incremental link. * lang.opt (lto_linker_output): Add nolto-rel. * lto-lang.c (lto_post_options): Handle LTO_LINKER_OUTPUT_REL and LTO_LINKER_OUTPUT_NOLTOREL. (lto_init): Generate lto when doing incremental link. * lto.c (lto_precess_name): Add lto1-inclink. * testsuite/g++.dg/lto/20081109-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081118_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081119-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081120-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081120-2_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081123_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081204-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20081219_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20090302_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20090313_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20091002-2_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20091002-3_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20091026-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20100724-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20101010-4_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20101015-2_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/20110311-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/pr45621_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/pr48042_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/pr48354-1_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/pr54625-1_0.c: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/pr54625-2_0.c: Add -flinker-output=nolto-rel. * testsuite/g++.dg/lto/pr68811_0.C: Add -flinker-output=nolto-rel. * testsuite/g++.dg/torture/pr43760.C: New test. Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081120-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081120-2_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081126_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081204-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081204-2_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081212-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20081224_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20090116_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20090126-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20090126-2_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20090206-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20090219_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20091013-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20091014-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20091015-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20091016-1_0.c: Add -flinker-output=nolto-rel. * testsuite/gcc.dg/lto/20091020-1_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20091020-2_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20091027-1_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20100426_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20100430-1_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20100603-1_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20100603-2_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20100603-3_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/20111213-1_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr45736_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr52634_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr54702_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr59323-2_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr59323_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr60820_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr81406_0.c: Add -flinker-output-nolto-rel. * testsuite/gcc.dg/lto/pr83388_0.c: Add -flinker-output-nolto-rel. * testsuite/gfortran.dg/lto/20091016-1_0.f90: Add -flinker-output-nolto-rel. * testsuite/gfortran.dg/lto/20091028-1_0.f90: Add -flinker-output-nolto-rel. * testsuite/gfortran.dg/lto/20091028-2_0.f90: Add -flinker-output-nolto-rel. * testsuite/gfortran.dg/lto/pr46911_0.f: Add -flinker-output-nolto-rel. * testsuite/gfortran.dg/lto/pr47839_0.f90: Add -flinker-output-nolto-rel. From-SVN: r260963 --- gcc/ChangeLog | 23 +++++++++ gcc/cgraphunit.c | 12 +++-- gcc/common.opt | 5 +- gcc/dwarf2out.c | 20 ++++---- gcc/flag-types.h | 10 ++++ gcc/gcc.c | 1 + gcc/ipa.c | 15 +++--- gcc/lto-cgraph.c | 5 +- gcc/lto/ChangeLog | 8 ++++ gcc/lto/lang.opt | 3 ++ gcc/lto/lto-lang.c | 25 +++++++++- gcc/lto/lto.c | 3 +- gcc/passes.c | 2 +- gcc/testsuite/ChangeLog | 65 ++++++++++++++++++++++++++ gcc/testsuite/g++.dg/lto/20081109-1_0.C | 2 +- gcc/testsuite/g++.dg/lto/20081118_0.C | 1 + gcc/testsuite/g++.dg/lto/20081119-1_0.C | 1 + gcc/testsuite/g++.dg/lto/20081120-1_0.C | 1 + gcc/testsuite/g++.dg/lto/20081120-2_0.C | 1 + gcc/testsuite/g++.dg/lto/20081123_0.C | 1 + gcc/testsuite/g++.dg/lto/20081204-1_0.C | 1 + gcc/testsuite/g++.dg/lto/20081219_0.C | 2 +- gcc/testsuite/g++.dg/lto/20090302_0.C | 1 + gcc/testsuite/g++.dg/lto/20090313_0.C | 2 +- gcc/testsuite/g++.dg/lto/20091002-2_0.C | 2 +- gcc/testsuite/g++.dg/lto/20091002-3_0.C | 2 +- gcc/testsuite/g++.dg/lto/20091026-1_0.C | 2 +- gcc/testsuite/g++.dg/lto/20100724-1_0.C | 2 +- gcc/testsuite/g++.dg/lto/20101010-4_0.C | 1 + gcc/testsuite/g++.dg/lto/20101015-2_0.C | 2 +- gcc/testsuite/g++.dg/lto/20110311-1_0.C | 2 +- gcc/testsuite/g++.dg/lto/pr45621_0.C | 2 +- gcc/testsuite/g++.dg/lto/pr48042_0.C | 2 +- gcc/testsuite/g++.dg/lto/pr48354-1_0.C | 2 +- gcc/testsuite/g++.dg/lto/pr54625-1_0.c | 2 +- gcc/testsuite/g++.dg/lto/pr54625-2_0.c | 2 +- gcc/testsuite/g++.dg/lto/pr68811_0.C | 2 +- gcc/testsuite/g++.dg/torture/pr85583.C | 13 ++++++ gcc/testsuite/gcc.dg/lto/20081120-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20081120-2_0.c | 1 + gcc/testsuite/gcc.dg/lto/20081126_0.c | 1 + gcc/testsuite/gcc.dg/lto/20081204-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20081204-2_0.c | 1 + gcc/testsuite/gcc.dg/lto/20081212-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20081224_0.c | 1 + gcc/testsuite/gcc.dg/lto/20090116_0.c | 2 +- gcc/testsuite/gcc.dg/lto/20090126-1_0.c | 2 +- gcc/testsuite/gcc.dg/lto/20090126-2_0.c | 2 +- gcc/testsuite/gcc.dg/lto/20090206-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20090219_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091013-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091014-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091015-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091016-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091020-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091020-2_0.c | 1 + gcc/testsuite/gcc.dg/lto/20091027-1_0.c | 2 +- gcc/testsuite/gcc.dg/lto/20100426_0.c | 1 + gcc/testsuite/gcc.dg/lto/20100430-1_0.c | 2 + gcc/testsuite/gcc.dg/lto/20100603-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/20100603-2_0.c | 1 + gcc/testsuite/gcc.dg/lto/20100603-3_0.c | 1 + gcc/testsuite/gcc.dg/lto/20111213-1_0.c | 1 + gcc/testsuite/gcc.dg/lto/pr45736_0.c | 1 + gcc/testsuite/gcc.dg/lto/pr52634_0.c | 1 + gcc/testsuite/gcc.dg/lto/pr54702_0.c | 2 +- gcc/testsuite/gcc.dg/lto/pr59323-2_0.c | 2 +- gcc/testsuite/gcc.dg/lto/pr59323_0.c | 2 +- gcc/testsuite/gcc.dg/lto/pr60820_0.c | 1 + gcc/testsuite/gcc.dg/lto/pr81406_0.c | 2 +- gcc/testsuite/gcc.dg/lto/pr83388_0.c | 2 +- gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 | 1 + gcc/testsuite/gfortran.dg/lto/20091028-1_0.f90 | 2 +- gcc/testsuite/gfortran.dg/lto/20091028-2_0.f90 | 2 +- gcc/testsuite/gfortran.dg/lto/pr46911_0.f | 2 +- gcc/testsuite/gfortran.dg/lto/pr47839_0.f90 | 2 +- gcc/toplev.c | 3 +- 77 files changed, 250 insertions(+), 53 deletions(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr85583.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f25b7ef..15034d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,28 @@ 2018-05-30 Jan Hubicka + * passes.c (ipa_write_summaries): Only modify statements if body + is in memory. + * cgraphunit.c (ipa_passes): Also produce intermeidate code when + incrementally linking. + (ipa_passes): Likewise. + * lto-cgraph.c (lto_output_node): When incrementally linking do not + pass down resolution info. + * common.opt (flag_incremental_link): Update info. + * gcc.c (plugin specs): Turn flinker-output=* to + -plugin-opt=-linker-output-known + * toplev.c (compile_file): Also cut compilation when doing incremental + link. + * flag-types. (enum lto_partition_model): Add + LTO_LINKER_OUTPUT_NOLTOREL. + (invoke.texi): Add -flinker-output docs. + * ipa.c (symbol_table::remove_unreachable_nodes): Handle LTO incremental + link same way as WPA; do not stream in dead initializers. + + * dwarf2out.c (dwarf2out_die_ref_for_decl, + darf2out_register_external_decl): Support incremental link. + +2018-05-30 Jan Hubicka + * lto-opts.c (lto_write_options): Skip OPT_dumpdir, OPT_fresolution_. 2018-05-30 Jan Hubicka diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 212ee7b..b2dafc6 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -2452,8 +2452,11 @@ ipa_passes (void) if (flag_generate_lto || flag_generate_offload) targetm.asm_out.lto_start (); - if (!in_lto_p) + if (!in_lto_p + || flag_incremental_link == INCREMENTAL_LINK_LTO) { + if (!quiet_flag) + fprintf (stderr, "Streaming LTO\n"); if (g->have_offload) { section_name_prefix = OFFLOAD_SECTION_NAME_PREFIX; @@ -2472,7 +2475,9 @@ ipa_passes (void) if (flag_generate_lto || flag_generate_offload) targetm.asm_out.lto_end (); - if (!flag_ltrans && (in_lto_p || !flag_lto || flag_fat_lto_objects)) + if (!flag_ltrans + && ((in_lto_p && flag_incremental_link != INCREMENTAL_LINK_LTO) + || !flag_lto || flag_fat_lto_objects)) execute_ipa_pass_list (passes->all_regular_ipa_passes); invoke_plugin_callbacks (PLUGIN_ALL_IPA_PASSES_END, NULL); @@ -2559,7 +2564,8 @@ symbol_table::compile (void) /* Do nothing else if any IPA pass found errors or if we are just streaming LTO. */ if (seen_error () - || (!in_lto_p && flag_lto && !flag_fat_lto_objects)) + || ((!in_lto_p || flag_incremental_link == INCREMENTAL_LINK_LTO) + && flag_lto && !flag_fat_lto_objects)) { timevar_pop (TV_CGRAPHOPT); return; diff --git a/gcc/common.opt b/gcc/common.opt index 13ab5c6..4aebcaf 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -48,9 +48,10 @@ bool in_lto_p = false ; This variable is set to non-0 only by LTO front-end. 1 indicates that ; the output produced will be used for incrmeental linking (thus weak symbols -; can still be bound). +; can still be bound) and 2 indicates that the IL is going to be linked and +; and output to LTO object file. Variable -int flag_incremental_link = 0 +enum incremental_link flag_incremental_link = INCREMENTAL_LINK_NONE ; 0 means straightforward implementation of complex divide acceptable. ; 1 means wide ranges of inputs must work for complex divide. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index c05bfe4..3a24225 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5860,7 +5860,8 @@ dwarf2out_die_ref_for_decl (tree decl, const char **sym, { dw_die_ref die; - if (flag_wpa && !decl_die_table) + if ((flag_wpa || flag_incremental_link == INCREMENTAL_LINK_LTO) + && !decl_die_table) return false; if (TREE_CODE (decl) == BLOCK) @@ -5870,10 +5871,11 @@ dwarf2out_die_ref_for_decl (tree decl, const char **sym, if (!die) return false; - /* During WPA stage we currently use DIEs to store the - decl <-> label + offset map. That's quite inefficient but it - works for now. */ - if (flag_wpa) + /* During WPA stage and incremental linking we currently use DIEs + to store the decl <-> label + offset map. That's quite inefficient + but it works for now. */ + if (flag_wpa + || flag_incremental_link == INCREMENTAL_LINK_LTO) { dw_die_ref ref = get_AT_ref (die, DW_AT_abstract_origin); if (!ref) @@ -5924,7 +5926,8 @@ dwarf2out_register_external_die (tree decl, const char *sym, if (debug_info_level == DINFO_LEVEL_NONE) return; - if (flag_wpa && !decl_die_table) + if ((flag_wpa + || flag_incremental_link == INCREMENTAL_LINK_LTO) && !decl_die_table) decl_die_table = hash_table::create_ggc (1000); dw_die_ref die @@ -5959,7 +5962,8 @@ dwarf2out_register_external_die (tree decl, const char *sym, parent = BLOCK_DIE (ctx); else if (TREE_CODE (ctx) == TRANSLATION_UNIT_DECL /* Keep the 1:1 association during WPA. */ - && !flag_wpa) + && !flag_wpa + && flag_incremental_link != INCREMENTAL_LINK_LTO) /* Otherwise all late annotations go to the main CU which imports the original CUs. */ parent = comp_unit_die (); @@ -5980,7 +5984,7 @@ dwarf2out_register_external_die (tree decl, const char *sym, switch (TREE_CODE (decl)) { case TRANSLATION_UNIT_DECL: - if (! flag_wpa) + if (! flag_wpa && flag_incremental_link != INCREMENTAL_LINK_LTO) { die = comp_unit_die (); dw_die_ref import = new_die (DW_TAG_imported_unit, die, NULL_TREE); diff --git a/gcc/flag-types.h b/gcc/flag-types.h index 7f79da7..500f663 100644 --- a/gcc/flag-types.h +++ b/gcc/flag-types.h @@ -261,6 +261,15 @@ enum sanitize_code { | SANITIZE_BOUNDS_STRICT }; +/* Settings of flag_incremental_link. */ +enum incremental_link { + INCREMENTAL_LINK_NONE, + /* Do incremental linking and produce binary. */ + INCREMENTAL_LINK_NOLTO, + /* Do incremental linking and produce IL. */ + INCREMENTAL_LINK_LTO +}; + /* Different trace modes. */ enum sanitize_coverage_code { /* Trace PC. */ @@ -289,6 +298,7 @@ enum lto_partition_model { enum lto_linker_output { LTO_LINKER_OUTPUT_UNKNOWN, LTO_LINKER_OUTPUT_REL, + LTO_LINKER_OUTPUT_NOLTOREL, LTO_LINKER_OUTPUT_DYN, LTO_LINKER_OUTPUT_PIE, LTO_LINKER_OUTPUT_EXEC diff --git a/gcc/gcc.c b/gcc/gcc.c index a716f70..2c597ec 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -961,6 +961,7 @@ proper position among the other output files. */ -plugin %(linker_plugin_file) \ -plugin-opt=%(lto_wrapper) \ -plugin-opt=-fresolution=%u.res \ + %{flinker-output=*:-plugin-opt=-linker-output-known} \ %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}} \ }" PLUGIN_COND_CLOSE #else diff --git a/gcc/ipa.c b/gcc/ipa.c index 9330de5..634c69c 100644 --- a/gcc/ipa.c +++ b/gcc/ipa.c @@ -130,9 +130,11 @@ process_references (symtab_node *snode, constant folding. Keep references alive so partitioning knows about potential references. */ || (VAR_P (node->decl) - && flag_wpa - && ctor_for_folding (node->decl) - != error_mark_node)))) + && (flag_wpa + || flag_incremental_link + == INCREMENTAL_LINK_LTO) + && dyn_cast (node) + ->ctor_useable_for_folding_p ())))) { /* Be sure that we will not optimize out alias target body. */ @@ -622,7 +624,7 @@ symbol_table::remove_unreachable_nodes (FILE *file) fprintf (file, " %s", vnode->dump_name ()); vnext = next_variable (vnode); /* Signal removal to the debug machinery. */ - if (! flag_wpa) + if (! flag_wpa || flag_incremental_link == INCREMENTAL_LINK_LTO) { vnode->definition = false; (*debug_hooks->late_global_decl) (vnode->decl); @@ -640,8 +642,9 @@ symbol_table::remove_unreachable_nodes (FILE *file) changed = true; } /* Keep body if it may be useful for constant folding. */ - if ((init = ctor_for_folding (vnode->decl)) == error_mark_node - && !POINTER_BOUNDS_P (vnode->decl)) + if ((flag_wpa || flag_incremental_link == INCREMENTAL_LINK_LTO) + || ((init = ctor_for_folding (vnode->decl)) == error_mark_node + && !POINTER_BOUNDS_P (vnode->decl))) vnode->remove_initializer (); else DECL_INITIAL (vnode->decl) = init; diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c index 40baf85..b23d189 100644 --- a/gcc/lto-cgraph.c +++ b/gcc/lto-cgraph.c @@ -540,7 +540,10 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node, bp_pack_value (&bp, node->thunk.thunk_p, 1); bp_pack_value (&bp, node->parallelized_function, 1); bp_pack_enum (&bp, ld_plugin_symbol_resolution, - LDPR_NUM_KNOWN, node->resolution); + LDPR_NUM_KNOWN, + /* When doing incremental link, we will get new resolution + info next time we process the file. */ + flag_incremental_link ? LDPR_UNKNOWN : node->resolution); bp_pack_value (&bp, node->instrumentation_clone, 1); bp_pack_value (&bp, node->split_part, 1); streamer_write_bitpack (&bp); diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index cd976fa..5e1e0a9 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,11 @@ +2018-05-30 Jan Hubicka + + * lang.opt (lto_linker_output): Add nolto-rel. + * lto-lang.c (lto_post_options): Handle LTO_LINKER_OUTPUT_REL + and LTO_LINKER_OUTPUT_NOLTOREL. + (lto_init): Generate lto when doing incremental link. + * lto.c (lto_precess_name): Add lto1-inclink. + 2018-05-18 Jan Hubicka PR lto/85583 diff --git a/gcc/lto/lang.opt b/gcc/lto/lang.opt index 0a408d3..1d280a8 100644 --- a/gcc/lto/lang.opt +++ b/gcc/lto/lang.opt @@ -34,6 +34,9 @@ EnumValue Enum(lto_linker_output) String(rel) Value(LTO_LINKER_OUTPUT_REL) EnumValue +Enum(lto_linker_output) String(nolto-rel) Value(LTO_LINKER_OUTPUT_NOLTOREL) + +EnumValue Enum(lto_linker_output) String(dyn) Value(LTO_LINKER_OUTPUT_DYN) EnumValue diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c index a310d69..1a70f4f 100644 --- a/gcc/lto/lto-lang.c +++ b/gcc/lto/lto-lang.c @@ -879,8 +879,28 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED) switch (flag_lto_linker_output) { case LTO_LINKER_OUTPUT_REL: /* .o: incremental link producing LTO IL */ + /* Configure compiler same way as normal frontend would do with -flto: + this way we read the trees (declarations & types), symbol table, + optimization summaries and link them. Subsequently we output new LTO + file. */ + flag_lto = ""; + flag_incremental_link = INCREMENTAL_LINK_LTO; flag_whole_program = 0; - flag_incremental_link = 1; + flag_wpa = 0; + flag_generate_lto = 1; + /* It would be cool to produce .o file directly, but our current + simple objects does not contain the lto symbol markers. Go the slow + way through the asm file. */ + lang_hooks.lto.begin_section = lhd_begin_section; + lang_hooks.lto.append_data = lhd_append_data; + lang_hooks.lto.end_section = lhd_end_section; + if (flag_ltrans) + error ("-flinker-output=rel and -fltrans are mutually exclussive"); + break; + + case LTO_LINKER_OUTPUT_NOLTOREL: /* .o: incremental link producing asm */ + flag_whole_program = 0; + flag_incremental_link = INCREMENTAL_LINK_NOLTO; break; case LTO_LINKER_OUTPUT_DYN: /* .so: PID library */ @@ -1269,7 +1289,8 @@ lto_init (void) in_lto_p = true; /* We need to generate LTO if running in WPA mode. */ - flag_generate_lto = (flag_wpa != NULL); + flag_generate_lto = (flag_incremental_link == INCREMENTAL_LINK_LTO + || flag_wpa != NULL); /* Create the basic integer types. */ build_common_tree_nodes (flag_signed_char); diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index d2ccaf6..86f3fe4 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -3257,7 +3257,8 @@ static void lto_process_name (void) { if (flag_lto) - setproctitle ("lto1-lto"); + setproctitle (flag_incremental_link == INCREMENTAL_LINK_LTO + ? "lto1-inclink" : "lto1-lto"); if (flag_wpa) setproctitle ("lto1-wpa"); if (flag_ltrans) diff --git a/gcc/passes.c b/gcc/passes.c index ad0a912..2c711f0 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -2708,7 +2708,7 @@ ipa_write_summaries (void) { struct cgraph_node *node = order[i]; - if (node->has_gimple_body_p ()) + if (gimple_has_body_p (node->decl)) { /* When streaming out references to statements as part of some IPA pass summary, the statements need to have uids assigned and the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae89ac8..1d2af0a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,68 @@ +2018-05-30 Jan Hubicka + + * testsuite/g++.dg/lto/20081109-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081118_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081119-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081120-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081120-2_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081123_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081204-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20081219_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20090302_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20090313_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20091002-2_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20091002-3_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20091026-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20100724-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20101010-4_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20101015-2_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/20110311-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/pr45621_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/pr48042_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/pr48354-1_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/pr54625-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/pr54625-2_0.c: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/lto/pr68811_0.C: Add -flinker-output=nolto-rel. + * testsuite/g++.dg/torture/pr43760.C: New test. Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081120-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081120-2_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081126_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081204-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081204-2_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081212-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20081224_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20090116_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20090126-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20090126-2_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20090206-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20090219_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20091013-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20091014-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20091015-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20091016-1_0.c: Add -flinker-output=nolto-rel. + * testsuite/gcc.dg/lto/20091020-1_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20091020-2_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20091027-1_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20100426_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20100430-1_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20100603-1_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20100603-2_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20100603-3_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/20111213-1_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr45736_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr52634_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr54702_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr59323-2_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr59323_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr60820_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr81406_0.c: Add -flinker-output-nolto-rel. + * testsuite/gcc.dg/lto/pr83388_0.c: Add -flinker-output-nolto-rel. + * testsuite/gfortran.dg/lto/20091016-1_0.f90: Add -flinker-output-nolto-rel. + * testsuite/gfortran.dg/lto/20091028-1_0.f90: Add -flinker-output-nolto-rel. + * testsuite/gfortran.dg/lto/20091028-2_0.f90: Add -flinker-output-nolto-rel. + * testsuite/gfortran.dg/lto/pr46911_0.f: Add -flinker-output-nolto-rel. + * testsuite/gfortran.dg/lto/pr47839_0.f90: Add -flinker-output-nolto-rel. + 2018-05-30 Andre Vieira Revert: diff --git a/gcc/testsuite/g++.dg/lto/20081109-1_0.C b/gcc/testsuite/g++.dg/lto/20081109-1_0.C index 7115336..3b58600 100644 --- a/gcc/testsuite/g++.dg/lto/20081109-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081109-1_0.C @@ -1,6 +1,6 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -flto -flto-partition=1to1}} } -// { dg-extra-ld-options "-fPIC -flto -flto-partition=1to1 -r -nostdlib -fno-exceptions" } +// { dg-extra-ld-options "-fPIC -flto -flto-partition=1to1 -r -nostdlib -fno-exceptions -flinker-output=nolto-rel" } void func(); class Foo { }; void bar() { try { func(); } catch (Foo) { } }; diff --git a/gcc/testsuite/g++.dg/lto/20081118_0.C b/gcc/testsuite/g++.dg/lto/20081118_0.C index c1f9dfc..f49157b 100644 --- a/gcc/testsuite/g++.dg/lto/20081118_0.C +++ b/gcc/testsuite/g++.dg/lto/20081118_0.C @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ /* We used to ICE because of dangling pointers. */ diff --git a/gcc/testsuite/g++.dg/lto/20081119-1_0.C b/gcc/testsuite/g++.dg/lto/20081119-1_0.C index ca1455e..2fd3201 100644 --- a/gcc/testsuite/g++.dg/lto/20081119-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081119-1_0.C @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ #include "20081119-1.h" diff --git a/gcc/testsuite/g++.dg/lto/20081120-1_0.C b/gcc/testsuite/g++.dg/lto/20081120-1_0.C index 03a9740..c78e5d9 100644 --- a/gcc/testsuite/g++.dg/lto/20081120-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081120-1_0.C @@ -1,5 +1,6 @@ // { dg-lto-do link } // { dg-lto-options {{-flto -r -nostdlib}} } +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ extern "C" { extern __inline __attribute__((__gnu_inline__)) int pthread_equal(int, int) diff --git a/gcc/testsuite/g++.dg/lto/20081120-2_0.C b/gcc/testsuite/g++.dg/lto/20081120-2_0.C index 3efe26c..8deae1b 100644 --- a/gcc/testsuite/g++.dg/lto/20081120-2_0.C +++ b/gcc/testsuite/g++.dg/lto/20081120-2_0.C @@ -1,5 +1,6 @@ // { dg-lto-do link } // { dg-lto-options {{-flto -r -nostdlib}} } +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ template < typename > struct Foo { inline void rdstate() { diff --git a/gcc/testsuite/g++.dg/lto/20081123_0.C b/gcc/testsuite/g++.dg/lto/20081123_0.C index 4cbc253..3bbe69d 100644 --- a/gcc/testsuite/g++.dg/lto/20081123_0.C +++ b/gcc/testsuite/g++.dg/lto/20081123_0.C @@ -1,6 +1,7 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib -fPIC}} } +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ int f(void) diff --git a/gcc/testsuite/g++.dg/lto/20081204-1_0.C b/gcc/testsuite/g++.dg/lto/20081204-1_0.C index b87006a..e3b4cea 100644 --- a/gcc/testsuite/g++.dg/lto/20081204-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081204-1_0.C @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ /* Tests for the absence during linking of: lto1: error: type of '_ZTVN10__cxxabiv120__si_class_type_infoE' does diff --git a/gcc/testsuite/g++.dg/lto/20081219_0.C b/gcc/testsuite/g++.dg/lto/20081219_0.C index 8f2c2e0..627deeb 100644 --- a/gcc/testsuite/g++.dg/lto/20081219_0.C +++ b/gcc/testsuite/g++.dg/lto/20081219_0.C @@ -1,7 +1,7 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -O2}} } -// { dg-extra-ld-options "-O2 -fPIC -flto -flto-partition=1to1 -r -nostdlib" } +// { dg-extra-ld-options "-O2 -fPIC -flto -flto-partition=1to1 -r -nostdlib -flinker-output=nolto-rel" } typedef long int ptrdiff_t; extern "C" diff --git a/gcc/testsuite/g++.dg/lto/20090302_0.C b/gcc/testsuite/g++.dg/lto/20090302_0.C index d65d490..3a61787 100644 --- a/gcc/testsuite/g++.dg/lto/20090302_0.C +++ b/gcc/testsuite/g++.dg/lto/20090302_0.C @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ struct Foo { bool Mumble(); static void Bar() { if (foo_->Mumble()) foo_ = 0; } diff --git a/gcc/testsuite/g++.dg/lto/20090313_0.C b/gcc/testsuite/g++.dg/lto/20090313_0.C index cba9d05..c883cef 100644 --- a/gcc/testsuite/g++.dg/lto/20090313_0.C +++ b/gcc/testsuite/g++.dg/lto/20090313_0.C @@ -1,6 +1,6 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-flto -flto-partition=1to1 -fPIC}} } -// { dg-extra-ld-options "-flto -flto-partition=1to1 -r -nostdlib" } +// { dg-extra-ld-options "-flto -flto-partition=1to1 -r -nostdlib -flinker-output=nolto-rel" } int X; diff --git a/gcc/testsuite/g++.dg/lto/20091002-2_0.C b/gcc/testsuite/g++.dg/lto/20091002-2_0.C index 12a1596..06b7529 100644 --- a/gcc/testsuite/g++.dg/lto/20091002-2_0.C +++ b/gcc/testsuite/g++.dg/lto/20091002-2_0.C @@ -1,7 +1,7 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC}} } -// { dg-extra-ld-options "-fPIC -r -nostdlib" } +// { dg-extra-ld-options "-fPIC -r -nostdlib -flinker-output=nolto-rel" } class DataArray { int max() const { return 0; } diff --git a/gcc/testsuite/g++.dg/lto/20091002-3_0.C b/gcc/testsuite/g++.dg/lto/20091002-3_0.C index 0d9afc4..b49fc67 100644 --- a/gcc/testsuite/g++.dg/lto/20091002-3_0.C +++ b/gcc/testsuite/g++.dg/lto/20091002-3_0.C @@ -1,7 +1,7 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC}} } -// { dg-extra-ld-options "-fPIC -r -nostdlib" } +// { dg-extra-ld-options "-fPIC -r -nostdlib -flinker-output=nolto-rel" } template < class T > class DataArray { diff --git a/gcc/testsuite/g++.dg/lto/20091026-1_0.C b/gcc/testsuite/g++.dg/lto/20091026-1_0.C index 5c74f29..06eff29 100644 --- a/gcc/testsuite/g++.dg/lto/20091026-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20091026-1_0.C @@ -1,5 +1,5 @@ // { dg-lto-do link } -// { dg-extra-ld-options "-r -nostdlib" } +// { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } #include "20091026-1_a.h" cObject *cHead::find(const char *objname) const diff --git a/gcc/testsuite/g++.dg/lto/20100724-1_0.C b/gcc/testsuite/g++.dg/lto/20100724-1_0.C index 084c07f..f4f7e72 100644 --- a/gcc/testsuite/g++.dg/lto/20100724-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20100724-1_0.C @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-ftoplevel-reorder -flto -flto-partition=none} {-ftoplevel-reorder -flto -flto-partition=1to1}} } */ -/* { dg-extra-ld-options {-r -nostdlib} } */ +/* { dg-extra-ld-options {-r -nostdlib -flinker-output=nolto-rel} } */ struct Foo { virtual ~Foo(); }; struct Bar:public Foo { Bar() { } }; diff --git a/gcc/testsuite/g++.dg/lto/20101010-4_0.C b/gcc/testsuite/g++.dg/lto/20101010-4_0.C index 01beb21..8349994 100644 --- a/gcc/testsuite/g++.dg/lto/20101010-4_0.C +++ b/gcc/testsuite/g++.dg/lto/20101010-4_0.C @@ -1,5 +1,6 @@ // { dg-lto-do link } // { dg-lto-options { { -std=c++0x -flto -r -nostdlib } { -std=c++0x -flto -g -r -nostdlib } } } +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ typedef decltype(nullptr) nullptr_t; class shared_ptr { diff --git a/gcc/testsuite/g++.dg/lto/20101015-2_0.C b/gcc/testsuite/g++.dg/lto/20101015-2_0.C index 9015f53..fa0e934 100644 --- a/gcc/testsuite/g++.dg/lto/20101015-2_0.C +++ b/gcc/testsuite/g++.dg/lto/20101015-2_0.C @@ -1,6 +1,6 @@ // { dg-lto-do link } // { dg-lto-options { { -flto } { -g -flto } } } -// { dg-extra-ld-options "-r -nostdlib" } +// { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } struct Base { ~Base (); }; void fun(void) { struct Deriv : Base { } x; } diff --git a/gcc/testsuite/g++.dg/lto/20110311-1_0.C b/gcc/testsuite/g++.dg/lto/20110311-1_0.C index c63951e..331c9ed 100644 --- a/gcc/testsuite/g++.dg/lto/20110311-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20110311-1_0.C @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ -/* { dg-extra-ld-options "-r -nostdlib" } */ +/* { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } */ struct NullType {}; diff --git a/gcc/testsuite/g++.dg/lto/pr45621_0.C b/gcc/testsuite/g++.dg/lto/pr45621_0.C index 746079c..f34b3b7 100644 --- a/gcc/testsuite/g++.dg/lto/pr45621_0.C +++ b/gcc/testsuite/g++.dg/lto/pr45621_0.C @@ -1,5 +1,5 @@ // { dg-lto-do assemble } -// { dg-extra-ld-options "-O2 -fipa-cp-clone -flto -nostdlib -r" } +// { dg-extra-ld-options "-O2 -fipa-cp-clone -flto -nostdlib -r -flinker-output=nolto-rel" } #include "pr45621.h" void diff --git a/gcc/testsuite/g++.dg/lto/pr48042_0.C b/gcc/testsuite/g++.dg/lto/pr48042_0.C index 4ca1a0c..7754e7e 100644 --- a/gcc/testsuite/g++.dg/lto/pr48042_0.C +++ b/gcc/testsuite/g++.dg/lto/pr48042_0.C @@ -1,5 +1,5 @@ // { dg-lto-do link } -// { dg-extra-ld-options "-r -nostdlib -g" } +// { dg-extra-ld-options "-r -nostdlib -g -flinker-output=nolto-rel" } class A { virtual int x() = 0; diff --git a/gcc/testsuite/g++.dg/lto/pr48354-1_0.C b/gcc/testsuite/g++.dg/lto/pr48354-1_0.C index b2ae977..f100065 100644 --- a/gcc/testsuite/g++.dg/lto/pr48354-1_0.C +++ b/gcc/testsuite/g++.dg/lto/pr48354-1_0.C @@ -1,6 +1,6 @@ // { dg-lto-do link } // { dg-lto-options { { -g -flto } } } -// { dg-extra-ld-options "-r -nostdlib" } +// { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } template struct Identity { typedef T type; }; struct S { diff --git a/gcc/testsuite/g++.dg/lto/pr54625-1_0.c b/gcc/testsuite/g++.dg/lto/pr54625-1_0.c index 48bbdf0..43cba36 100644 --- a/gcc/testsuite/g++.dg/lto/pr54625-1_0.c +++ b/gcc/testsuite/g++.dg/lto/pr54625-1_0.c @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ -/* { dg-extra-ld-options { -r -nostdlib } } */ +/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */ float a; double sin (); diff --git a/gcc/testsuite/g++.dg/lto/pr54625-2_0.c b/gcc/testsuite/g++.dg/lto/pr54625-2_0.c index 3e67d4f..5873b79 100644 --- a/gcc/testsuite/g++.dg/lto/pr54625-2_0.c +++ b/gcc/testsuite/g++.dg/lto/pr54625-2_0.c @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ -/* { dg-extra-ld-options { -r -nostdlib } } */ +/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */ float a; double sin (); diff --git a/gcc/testsuite/g++.dg/lto/pr68811_0.C b/gcc/testsuite/g++.dg/lto/pr68811_0.C index 807c803..a18dc26 100644 --- a/gcc/testsuite/g++.dg/lto/pr68811_0.C +++ b/gcc/testsuite/g++.dg/lto/pr68811_0.C @@ -1,6 +1,6 @@ // { dg-lto-do link } /* { dg-lto-options { { -O2 -w } { -w } } } */ -// { dg-extra-ld-options "-r -nostdlib" } +// { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } extern "C" char *strcpy(char *, const char *); char InitXPCOMGlue_lastSlash; void InitXPCOMGlue() { strcpy(&InitXPCOMGlue_lastSlash, ".so"); } diff --git a/gcc/testsuite/g++.dg/torture/pr85583.C b/gcc/testsuite/g++.dg/torture/pr85583.C new file mode 100644 index 0000000..eae8c5e --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr85583.C @@ -0,0 +1,13 @@ +/* { dg-do link } */ +class b { +public: + virtual ~b(); +}; +template class c : b {}; +class B { + c d; +}; +extern template class c; +int +main(void) { B a; return 0; } + diff --git a/gcc/testsuite/gcc.dg/lto/20081120-1_0.c b/gcc/testsuite/gcc.dg/lto/20081120-1_0.c index e842b37..c426fd2 100644 --- a/gcc/testsuite/gcc.dg/lto/20081120-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081120-1_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-flto -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ extern int stat(void) __asm__("" "stat64"); extern inline int stat(void) { } static void foo(void) { stat(); } diff --git a/gcc/testsuite/gcc.dg/lto/20081120-2_0.c b/gcc/testsuite/gcc.dg/lto/20081120-2_0.c index e2e11d6..762e0ff 100644 --- a/gcc/testsuite/gcc.dg/lto/20081120-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081120-2_0.c @@ -1,3 +1,4 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ void bar(void) {} diff --git a/gcc/testsuite/gcc.dg/lto/20081126_0.c b/gcc/testsuite/gcc.dg/lto/20081126_0.c index f610d09..ce65562 100644 --- a/gcc/testsuite/gcc.dg/lto/20081126_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081126_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-skip-if "" { ! { i?86-*-* x86_64-*-* } } } */ /* { dg-lto-options {{-flto -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ int f(void) { register int ri asm("edi"); diff --git a/gcc/testsuite/gcc.dg/lto/20081204-1_0.c b/gcc/testsuite/gcc.dg/lto/20081204-1_0.c index 0c3849f..b890931 100644 --- a/gcc/testsuite/gcc.dg/lto/20081204-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081204-1_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ /* Tests for the absence during linking of: lto1: error: type of 'i' does not match original declaration */ diff --git a/gcc/testsuite/gcc.dg/lto/20081204-2_0.c b/gcc/testsuite/gcc.dg/lto/20081204-2_0.c index c08da17..0770567 100644 --- a/gcc/testsuite/gcc.dg/lto/20081204-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081204-2_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-skip-if "" { ! { i?86-*-* x86_64-*-* } } } */ /* { dg-lto-options {{-w -flto -fPIC -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ register int ri asm("edi"); diff --git a/gcc/testsuite/gcc.dg/lto/20081212-1_0.c b/gcc/testsuite/gcc.dg/lto/20081212-1_0.c index acc0018..327821a 100644 --- a/gcc/testsuite/gcc.dg/lto/20081212-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081212-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ int exported_var = 42; /* { dg-final { scan-symbol "exported_var" } } */ diff --git a/gcc/testsuite/gcc.dg/lto/20081224_0.c b/gcc/testsuite/gcc.dg/lto/20081224_0.c index 9f9afdf..b319acb 100644 --- a/gcc/testsuite/gcc.dg/lto/20081224_0.c +++ b/gcc/testsuite/gcc.dg/lto/20081224_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib -fPIC}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ #include "20081224_0.h" extern struct foo x; diff --git a/gcc/testsuite/gcc.dg/lto/20090116_0.c b/gcc/testsuite/gcc.dg/lto/20090116_0.c index 4a86596..dc8043c 100644 --- a/gcc/testsuite/gcc.dg/lto/20090116_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090116_0.c @@ -1,7 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-O1 -flto -flto-partition=1to1 -fPIC}} } */ -/* { dg-extra-ld-options {-r -nostdlib -O0} } */ +/* { dg-extra-ld-options {-r -nostdlib -O0 -flinker-output=nolto-rel} } */ int foo(void) { int ret, i; diff --git a/gcc/testsuite/gcc.dg/lto/20090126-1_0.c b/gcc/testsuite/gcc.dg/lto/20090126-1_0.c index 01a1299..6e8f741 100644 --- a/gcc/testsuite/gcc.dg/lto/20090126-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090126-1_0.c @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-O0 -flto -flto-partition=1to1}} } */ -/* { dg-extra-ld-options {-r -nostdlib -O2 -flto -flto-partition=1to1} } */ +/* { dg-extra-ld-options {-r -nostdlib -O2 -flto -flto-partition=1to1 -flinker-output=nolto-rel} } */ int main(int argc, char **argv) { return 0; diff --git a/gcc/testsuite/gcc.dg/lto/20090126-2_0.c b/gcc/testsuite/gcc.dg/lto/20090126-2_0.c index f75a05f..1ffa7ae 100644 --- a/gcc/testsuite/gcc.dg/lto/20090126-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090126-2_0.c @@ -1,7 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -O2 -flto -flto-partition=1to1}} } */ -/* { dg-extra-ld-options {-fno-PIC -r -nostdlib -O2 -flto -flto-partition=1to1} } */ +/* { dg-extra-ld-options {-fno-PIC -r -nostdlib -O2 -flto -flto-partition=1to1 -flinker-output=nolto-rel} } */ int main(int argc, char **argv) { return 0; diff --git a/gcc/testsuite/gcc.dg/lto/20090206-1_0.c b/gcc/testsuite/gcc.dg/lto/20090206-1_0.c index 3fbfb23..1361042 100644 --- a/gcc/testsuite/gcc.dg/lto/20090206-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090206-1_0.c @@ -3,6 +3,7 @@ /* { dg-lto-options {{-fPIC -r -nostdlib -flto -flto-partition=1to1 -msse2}} } */ /* { dg-require-effective-target sse2 } */ /* { dg-suppress-ld-options {-fPIC -msse2} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ typedef short v8hi __attribute__((__vector_size__(16))); void func (void) { diff --git a/gcc/testsuite/gcc.dg/lto/20090219_0.c b/gcc/testsuite/gcc.dg/lto/20090219_0.c index 985c884..66fbcd1 100644 --- a/gcc/testsuite/gcc.dg/lto/20090219_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090219_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-O3 -flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ struct Foo { int f1, f2, f3, f4, f5; }; diff --git a/gcc/testsuite/gcc.dg/lto/20091013-1_0.c b/gcc/testsuite/gcc.dg/lto/20091013-1_0.c index 83de8d3..9796770 100644 --- a/gcc/testsuite/gcc.dg/lto/20091013-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091013-1_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto} {-fPIC -r -nostdlib -O2 -flto}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ void * HeapAlloc(void*,unsigned int,unsigned long); diff --git a/gcc/testsuite/gcc.dg/lto/20091014-1_0.c b/gcc/testsuite/gcc.dg/lto/20091014-1_0.c index be327aa..99295d3 100644 --- a/gcc/testsuite/gcc.dg/lto/20091014-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091014-1_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ /* Empty file. See PR41173. */ diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_0.c b/gcc/testsuite/gcc.dg/lto/20091015-1_0.c index 1c11f64..698a7d9 100644 --- a/gcc/testsuite/gcc.dg/lto/20091015-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -O2 -flto} {-fPIC -r -nostdlib -O2 -flto -flto-partition=1to1}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ #include "20091015-1_b.h" void diagnostic_initialize (FILE **stream) { *stream = stderr; } diff --git a/gcc/testsuite/gcc.dg/lto/20091016-1_0.c b/gcc/testsuite/gcc.dg/lto/20091016-1_0.c index b44c75a..e7a2915 100644 --- a/gcc/testsuite/gcc.dg/lto/20091016-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091016-1_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -O2 -flto}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ typedef struct VEC_constructor_elt_gc { } VEC_constructor_elt_gc; #include "20091016-1_a.h" diff --git a/gcc/testsuite/gcc.dg/lto/20091020-1_0.c b/gcc/testsuite/gcc.dg/lto/20091020-1_0.c index f9d8bf8..110d3e1 100644 --- a/gcc/testsuite/gcc.dg/lto/20091020-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091020-1_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ typedef struct { int NumPackStreams; diff --git a/gcc/testsuite/gcc.dg/lto/20091020-2_0.c b/gcc/testsuite/gcc.dg/lto/20091020-2_0.c index 21e5967..e0b3839 100644 --- a/gcc/testsuite/gcc.dg/lto/20091020-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091020-2_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options {{-fPIC -r -nostdlib -flto}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ typedef struct { int NumPackStreams; diff --git a/gcc/testsuite/gcc.dg/lto/20091027-1_0.c b/gcc/testsuite/gcc.dg/lto/20091027-1_0.c index f2669fe..c9a867b 100644 --- a/gcc/testsuite/gcc.dg/lto/20091027-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091027-1_0.c @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ -/* { dg-extra-ld-options "-r -nostdlib" } */ +/* { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } */ typedef struct _xmlDict xmlDict; struct _xmlDict { diff --git a/gcc/testsuite/gcc.dg/lto/20100426_0.c b/gcc/testsuite/gcc.dg/lto/20100426_0.c index e1dc06f..49f7122 100644 --- a/gcc/testsuite/gcc.dg/lto/20100426_0.c +++ b/gcc/testsuite/gcc.dg/lto/20100426_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-r -nostdlib -flto -g}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ long Perl_my_htonl (long l) { diff --git a/gcc/testsuite/gcc.dg/lto/20100430-1_0.c b/gcc/testsuite/gcc.dg/lto/20100430-1_0.c index d2e79c6..1ccfc9a 100644 --- a/gcc/testsuite/gcc.dg/lto/20100430-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20100430-1_0.c @@ -1,5 +1,7 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-O2 -fprofile-arcs -flto -r -nostdlib}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ + void expand_stmt_with_iterators_1 (void) diff --git a/gcc/testsuite/gcc.dg/lto/20100603-1_0.c b/gcc/testsuite/gcc.dg/lto/20100603-1_0.c index cc35c78..3cba481 100644 --- a/gcc/testsuite/gcc.dg/lto/20100603-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20100603-1_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ /* { dg-extra-ld-options {-r -nostdlib} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ /* This file intentionally left empty. */ diff --git a/gcc/testsuite/gcc.dg/lto/20100603-2_0.c b/gcc/testsuite/gcc.dg/lto/20100603-2_0.c index 11bee49..94c6d00 100644 --- a/gcc/testsuite/gcc.dg/lto/20100603-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20100603-2_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-extra-ld-options {-r -nostdlib} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ int foo; int *i = &foo; diff --git a/gcc/testsuite/gcc.dg/lto/20100603-3_0.c b/gcc/testsuite/gcc.dg/lto/20100603-3_0.c index 3fc08fd..09d5b26 100644 --- a/gcc/testsuite/gcc.dg/lto/20100603-3_0.c +++ b/gcc/testsuite/gcc.dg/lto/20100603-3_0.c @@ -1,4 +1,5 @@ /* { dg-lto-do link } */ /* { dg-extra-ld-options {-r -nostdlib} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ int i = 42; diff --git a/gcc/testsuite/gcc.dg/lto/20111213-1_0.c b/gcc/testsuite/gcc.dg/lto/20111213-1_0.c index e6f5474..779c12d 100644 --- a/gcc/testsuite/gcc.dg/lto/20111213-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20111213-1_0.c @@ -1,6 +1,7 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -flto -g } } } */ /* { dg-extra-ld-options {-r -nostdlib} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ void gfc_be_parse_file (void) { diff --git a/gcc/testsuite/gcc.dg/lto/pr45736_0.c b/gcc/testsuite/gcc.dg/lto/pr45736_0.c index 860e239..d481c45 100644 --- a/gcc/testsuite/gcc.dg/lto/pr45736_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr45736_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-flto -r -nostdlib -O}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ extern void baz (void); diff --git a/gcc/testsuite/gcc.dg/lto/pr52634_0.c b/gcc/testsuite/gcc.dg/lto/pr52634_0.c index a858cc1..7aba0cd 100644 --- a/gcc/testsuite/gcc.dg/lto/pr52634_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr52634_0.c @@ -2,6 +2,7 @@ /* { dg-require-alias "" } */ /* { dg-lto-do link } */ /* { dg-lto-options {{-flto -r -nostdlib -flto-partition=1to1}} */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ extern int cfliteValueCallBacks; void baz (int *); int main () { baz(&cfliteValueCallBacks); } diff --git a/gcc/testsuite/gcc.dg/lto/pr54702_0.c b/gcc/testsuite/gcc.dg/lto/pr54702_0.c index 2242f50..2713d22 100644 --- a/gcc/testsuite/gcc.dg/lto/pr54702_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr54702_0.c @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -O2 -flto -w } } } */ -/* { dg-extra-ld-options { -r -nostdlib } } */ +/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */ #include void* f () diff --git a/gcc/testsuite/gcc.dg/lto/pr59323-2_0.c b/gcc/testsuite/gcc.dg/lto/pr59323-2_0.c index 938a89d..61872dd 100644 --- a/gcc/testsuite/gcc.dg/lto/pr59323-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr59323-2_0.c @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -O2 -g -flto } } } */ -/* { dg-extra-ld-options { -r -nostdlib } } */ +/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */ extern void bar(void); diff --git a/gcc/testsuite/gcc.dg/lto/pr59323_0.c b/gcc/testsuite/gcc.dg/lto/pr59323_0.c index b591058..ee78027 100644 --- a/gcc/testsuite/gcc.dg/lto/pr59323_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr59323_0.c @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -O2 -g -flto } } } */ -/* { dg-extra-ld-options { -r -nostdlib } } */ +/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */ extern void bar(void); diff --git a/gcc/testsuite/gcc.dg/lto/pr60820_0.c b/gcc/testsuite/gcc.dg/lto/pr60820_0.c index 57b5b6c..9fd2d2b 100644 --- a/gcc/testsuite/gcc.dg/lto/pr60820_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr60820_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options {{-flto -r -nostdlib -O2}} } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ /* { dg-skip-if "no alias" { *-*-darwin* } } */ #include struct in6_addr {int bah;}; diff --git a/gcc/testsuite/gcc.dg/lto/pr81406_0.c b/gcc/testsuite/gcc.dg/lto/pr81406_0.c index 44ef3c7..26d4195 100644 --- a/gcc/testsuite/gcc.dg/lto/pr81406_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr81406_0.c @@ -1,7 +1,7 @@ /* PR lto/81406 */ /* { dg-lto-do link } */ /* { dg-lto-options { { -O2 -g -flto } } } */ -/* { dg-extra-ld-options { -g -r -nostdlib } } */ +/* { dg-extra-ld-options { -g -r -nostdlib -flinker-output=nolto-rel } } */ int a; int *foo (void); diff --git a/gcc/testsuite/gcc.dg/lto/pr83388_0.c b/gcc/testsuite/gcc.dg/lto/pr83388_0.c index 4febbac..eb60b0e 100644 --- a/gcc/testsuite/gcc.dg/lto/pr83388_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr83388_0.c @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -O2 -flto -fsanitize=null } { -O0 -flto -fsanitize=null } } } */ -/* { dg-extra-ld-options { -fno-sanitize=null -r -nostdlib } } */ +/* { dg-extra-ld-options { -fno-sanitize=null -r -nostdlib -flinker-output=nolto-rel } } */ enum { a } e(void); struct C { diff --git a/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 b/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 index a882da0..5e96e88 100644 --- a/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 +++ b/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 @@ -1,5 +1,6 @@ ! { dg-lto-do link } ! { dg-lto-options {{-flto -g -fPIC -r -nostdlib} {-O -flto -g -fPIC -r -nostdlib}} } +! { dg-extra-ld-options "-flinker-output=nolto-rel" } FUNCTION makenumberstring(x) IMPLICIT NONE diff --git a/gcc/testsuite/gfortran.dg/lto/20091028-1_0.f90 b/gcc/testsuite/gfortran.dg/lto/20091028-1_0.f90 index 57c1b1f..3b32432 100644 --- a/gcc/testsuite/gfortran.dg/lto/20091028-1_0.f90 +++ b/gcc/testsuite/gfortran.dg/lto/20091028-1_0.f90 @@ -1,5 +1,5 @@ ! { dg-lto-do link } -! { dg-extra-ld-options "-r -nostdlib -finline-functions" } +! { dg-extra-ld-options "-r -nostdlib -finline-functions -flinker-output=nolto-rel" } SUBROUTINE int_gen_ti_header_char( hdrbuf, hdrbufsize, itypesize, & DataHandle, Element, VarName, Data, code ) diff --git a/gcc/testsuite/gfortran.dg/lto/20091028-2_0.f90 b/gcc/testsuite/gfortran.dg/lto/20091028-2_0.f90 index 57c1b1f..3b32432 100644 --- a/gcc/testsuite/gfortran.dg/lto/20091028-2_0.f90 +++ b/gcc/testsuite/gfortran.dg/lto/20091028-2_0.f90 @@ -1,5 +1,5 @@ ! { dg-lto-do link } -! { dg-extra-ld-options "-r -nostdlib -finline-functions" } +! { dg-extra-ld-options "-r -nostdlib -finline-functions -flinker-output=nolto-rel" } SUBROUTINE int_gen_ti_header_char( hdrbuf, hdrbufsize, itypesize, & DataHandle, Element, VarName, Data, code ) diff --git a/gcc/testsuite/gfortran.dg/lto/pr46911_0.f b/gcc/testsuite/gfortran.dg/lto/pr46911_0.f index fce9597..1ee938d 100644 --- a/gcc/testsuite/gfortran.dg/lto/pr46911_0.f +++ b/gcc/testsuite/gfortran.dg/lto/pr46911_0.f @@ -1,6 +1,6 @@ ! { dg-lto-do link } ! { dg-lto-options {{ -O2 -flto -g }} } -! { dg-extra-ld-options "-r -nostdlib" } +! { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } common/main1/ eps(2) call dalie6s(iqmod6,1,wx,cor6d) end diff --git a/gcc/testsuite/gfortran.dg/lto/pr47839_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr47839_0.f90 index 9ea9315..dcc4223 100644 --- a/gcc/testsuite/gfortran.dg/lto/pr47839_0.f90 +++ b/gcc/testsuite/gfortran.dg/lto/pr47839_0.f90 @@ -1,6 +1,6 @@ ! { dg-lto-do link } ! { dg-lto-options {{ -g -flto }} } -! { dg-extra-ld-options "-r -nostdlib" } +! { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } MODULE globalvar_mod integer :: xstop diff --git a/gcc/toplev.c b/gcc/toplev.c index b066bcc..8f812c2 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -495,7 +495,8 @@ compile_file (void) /* Compilation unit is finalized. When producing non-fat LTO object, we are basically finished. */ - if (in_lto_p || !flag_lto || flag_fat_lto_objects) + if ((in_lto_p && flag_incremental_link != INCREMENTAL_LINK_LTO) + || !flag_lto || flag_fat_lto_objects) { /* File-scope initialization for AddressSanitizer. */ if (flag_sanitize & SANITIZE_ADDRESS) -- 2.7.4