Commit ea49d40b by Jan Hubicka Committed by Jan Hubicka

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
parent e6875743
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> 2018-02-21 Martin Liska <mliska@suse.cz>
PR driver/83193 PR driver/83193
......
...@@ -630,6 +630,24 @@ determine_versionability (struct cgraph_node *node, ...@@ -630,6 +630,24 @@ determine_versionability (struct cgraph_node *node,
reason = "calls comdat-local function"; 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) if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
fprintf (dump_file, "Function %s is not versionable, reason: %s.\n", fprintf (dump_file, "Function %s is not versionable, reason: %s.\n",
node->dump_name (), reason); node->dump_name (), reason);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment