* 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
+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_.
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;
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);
/* 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;
; 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.
{
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)
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)
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
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 ();
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);
| 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. */
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
-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
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. */
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);
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;
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);
+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
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)
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 */
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);
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)
{
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
+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:
// { 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) { } };
/* { 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. */
/* { 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"
// { 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)
// { 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() {
// { 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)
/* { 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
// { 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"
/* { 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; }
// { 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;
// { 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; }
// { 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 {
// { 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
/* { 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() { } };
// { 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 {
// { 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; }
/* { dg-lto-do link } */
-/* { dg-extra-ld-options "-r -nostdlib" } */
+/* { dg-extra-ld-options "-r -nostdlib -flinker-output=nolto-rel" } */
struct NullType {};
// { 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
// { 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;
// { 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 {
/* { dg-lto-do link } */
-/* { dg-extra-ld-options { -r -nostdlib } } */
+/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */
float a;
double sin ();
/* { dg-lto-do link } */
-/* { dg-extra-ld-options { -r -nostdlib } } */
+/* { dg-extra-ld-options { -r -nostdlib -flinker-output=nolto-rel } } */
float a;
double sin ();
// { 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"); }
--- /dev/null
+/* { 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; }
+
/* { 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(); }
/* { dg-lto-do link } */
/* { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib}} } */
+/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */
void bar(void) {}
/* { 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");
/* { 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 */
/* { 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");
/* { 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" } } */
/* { 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;
/* { 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;
/* { 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;
/* { 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;
/* { 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) {
/* { 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; };
/* { 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);
/* { 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. */
/* { 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; }
/* { 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"
/* { 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;
/* { 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;
/* { 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 {
/* { 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)
{
/* { 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)
/* { dg-lto-do link } */
/* { dg-extra-ld-options {-r -nostdlib} } */
+/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */
/* This file intentionally left empty. */
/* { dg-lto-do link } */
/* { dg-extra-ld-options {-r -nostdlib} } */
+/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */
int foo;
int *i = &foo;
/* { dg-lto-do link } */
/* { dg-extra-ld-options {-r -nostdlib} } */
+/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */
int i = 42;
/* { 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)
{
/* { dg-lto-do link } */
/* { dg-lto-options {{-flto -r -nostdlib -O}} } */
+/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */
extern void baz (void);
/* { 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); }
/* { 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 ()
/* { 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);
/* { 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);
/* { 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;};
/* 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);
/* { 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 {
! { 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
! { 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 )
! { 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 )
! { 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
! { 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
/* 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)