re PR c/84229 (A valid code rejected with -flto)

PR c/84229
	* ipa-cp.c (determine_versionability): Do not version functions caling
	va_arg_pack.

From-SVN: r257877
This commit is contained in:
Jan Hubicka 2018-02-21 20:05:30 +01:00 committed by Jan Hubicka
parent e68757438d
commit ea49d40b3e
2 changed files with 24 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2018-02-21 Jan Hubicka <hubicka@ucw.cz>
PR c/84229
* ipa-cp.c (determine_versionability): Do not version functions caling
va_arg_pack.
2018-02-21 Martin Liska <mliska@suse.cz>
PR driver/83193

View file

@ -630,6 +630,24 @@ determine_versionability (struct cgraph_node *node,
reason = "calls comdat-local function";
}
/* Functions calling BUILT_IN_VA_ARG_PACK and BUILT_IN_VA_ARG_PACK_LEN
works only when inlined. Cloning them may still lead to better code
becuase ipa-cp will not give up on cloning further. If the function is
external this however leads to wrong code becuase we may end up producing
offline copy of the function. */
if (DECL_EXTERNAL (node->decl))
for (cgraph_edge *edge = node->callees; !reason && edge;
edge = edge->next_callee)
if (DECL_BUILT_IN (edge->callee->decl)
&& DECL_BUILT_IN_CLASS (edge->callee->decl) == BUILT_IN_NORMAL)
{
if (DECL_FUNCTION_CODE (edge->callee->decl) == BUILT_IN_VA_ARG_PACK)
reason = "external function which calls va_arg_pack";
if (DECL_FUNCTION_CODE (edge->callee->decl)
== BUILT_IN_VA_ARG_PACK_LEN)
reason = "external function which calls va_arg_pack_len";
}
if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
fprintf (dump_file, "Function %s is not versionable, reason: %s.\n",
node->dump_name (), reason);