diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2018-05-30 18:42:41 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2018-05-30 16:42:41 +0000 |
commit | 5b42d196248425064ca9013f63510834744e169e (patch) | |
tree | ab2fb9dcd8a2e6aacec01cadb11d9ff8a8525399 | |
parent | 6c363ddd67f5fc1a44d285100560d830ee04f630 (diff) | |
download | gcc-5b42d196248425064ca9013f63510834744e169e.tar.gz |
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
77 files changed, 250 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f25b7ef97af..15034d21629 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,28 @@ 2018-05-30 Jan Hubicka <hubicka@ucw.cz> + * 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 <hubicka@ucw.cz> + * lto-opts.c (lto_write_options): Skip OPT_dumpdir, OPT_fresolution_. 2018-05-30 Jan Hubicka <hubicka@ucw.cz> diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 212ee7b8340..b2dafc669dd 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 13ab5c65d43..4aebcaf0656 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 c05bfe43c44..3a24225690d 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<decl_die_hasher>::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 7f79da79db0..500f6638f36 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 a716f708259..2c597ec086a 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 9330de59c72..634c69c2b5c 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 <varpool_node *> (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 40baf858ca5..b23d1890fc0 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 cd976fa66bb..5e1e0a9d8ee 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,11 @@ +2018-05-30 Jan Hubicka <hubicka@ucw.cz> + + * 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 <jh@suse.cz> PR lto/85583 diff --git a/gcc/lto/lang.opt b/gcc/lto/lang.opt index 0a408d30ce2..1d280a8e97d 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 a310d699a19..1a70f4f1eec 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 d2ccaf67689..86f3fe49a68 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 ad0a912e134..2c711f0c0b0 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 ae89ac891c7..1d2af0a36bb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,68 @@ +2018-05-30 Jan Hubicka <hubicka@ucw.cz> + + * 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 <andre.simoesdiasvieira@arm.com> Revert: diff --git a/gcc/testsuite/g++.dg/lto/20081109-1_0.C b/gcc/testsuite/g++.dg/lto/20081109-1_0.C index 711533600ed..3b5860011db 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 c1f9dfc97a4..f49157bfbfd 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 ca1455e49e7..2fd320192d5 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 03a9740c091..c78e5d97dc3 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 3efe26c0197..8deae1bb6ba 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 4cbc25338dd..3bbe69d0874 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 b87006a6bad..e3b4cead8c6 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 8f2c2e07edd..627deeb0376 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 d65d490d3e5..3a617879e19 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 cba9d054fcb..c883cefe5b6 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 12a1596b3e2..06b75298338 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 0d9afc44c28..b49fc67e8f4 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 5c74f29cc4c..06eff292cb6 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 084c07f0814..f4f7e72b885 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 01beb2167c0..83499947da7 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 9015f53a498..fa0e934d49a 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 c63951e5bd8..331c9ed28dc 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 746079cdceb..f34b3b70fa7 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 4ca1a0cebfe..7754e7ec64f 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 b2ae97709df..f1000657b4a 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<typename T> 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 48bbdf02de7..43cba36a30f 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 3e67d4f5b4e..5873b793c4f 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 807c803b347..a18dc26eb8e 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 00000000000..eae8c5e847d --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr85583.C @@ -0,0 +1,13 @@ +/* { dg-do link } */ +class b { +public: + virtual ~b(); +}; +template <typename> class c : b {}; +class B { + c<char> d; +}; +extern template class c<char>; +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 e842b37f663..c426fd2f74a 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 e2e11d64b63..762e0ffc742 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 f610d097ed6..ce65562167d 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 0c3849f6182..b8909310657 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 c08da1791d1..07705670678 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 acc00186840..327821a73cf 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 9f9afdf85c7..b319acb562e 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 4a865969901..dc8043c368a 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 01a12994021..6e8f7416719 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 f75a05fec62..1ffa7aedd50 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 3fbfb23843d..1361042f297 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 985c884cecd..66fbcd11bca 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 83de8d3223b..979677088ba 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 be327aaff90..99295d3d95c 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 1c11f644888..698a7d9a489 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 b44c75a97c4..e7a2915cd5a 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 f9d8bf87de6..110d3e10e05 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 21e59678732..e0b3839c510 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 f2669fe0f00..c9a867bc924 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 e1dc06f960b..49f7122e13c 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 d2e79c62914..1ccfc9ac1ca 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 cc35c78cfae..3cba481fe93 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 11bee496d9c..94c6d007ef0 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 3fc08fdbf6b..09d5b26e230 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 e6f54748a80..779c12d1def 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 860e239b532..d481c453d08 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 a858cc1a5cf..7aba0cd3caf 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 2242f50b6de..2713d225dda 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 <stdlib.h> 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 938a89d6a28..61872dd5f75 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 b5910589158..ee780277657 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 57b5b6c443b..9fd2d2b76e4 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 <stdio.h> 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 44ef3c73992..26d4195bf63 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 4febbac06da..eb60b0e1774 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 a882da042cd..5e96e88731f 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 57c1b1f6028..3b32432f81d 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 57c1b1f6028..3b32432f81d 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 fce959750ae..1ee938d8c6c 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 9ea9315284a..dcc4223d80c 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 b066bcc7229..8f812c2a475 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) |