Commit 040968a8 by Jan Hubicka Committed by Jan Hubicka

* lto-symtab.c (lto_varpool_replace_node): Merge TLS models.

From-SVN: r220214
parent b1474d30
2014-12-11 Jan Hubicka <hubicka@ucw.cz>
* lto-symtab.c (lto_varpool_replace_node): Merge TLS models.
2014-12-11 Jan Hubicka <hubicka@ucw.cz>
* lto.c (compare_tree_sccs_1): Add comparsion of
DECL_FUNCTION_SPECIFIC_TARGET
......
......@@ -158,11 +158,44 @@ lto_varpool_replace_node (varpool_node *vnode,
if (vnode->tls_model != prevailing_node->tls_model)
{
error_at (DECL_SOURCE_LOCATION (vnode->decl),
"%qD is defined as %s", vnode->decl, tls_model_names [vnode->tls_model]);
inform (DECL_SOURCE_LOCATION (prevailing_node->decl),
"previously defined here as %s",
tls_model_names [prevailing_node->tls_model]);
bool error = false;
/* Non-TLS and TLS never mix together. Also emulated model is not
compatible with anything else. */
if (prevailing_node->tls_model == TLS_MODEL_NONE
|| prevailing_node->tls_model == TLS_MODEL_EMULATED
|| vnode->tls_model == TLS_MODEL_NONE
|| vnode->tls_model == TLS_MODEL_EMULATED)
error = true;
/* Linked is silently supporting transitions
GD -> IE, GD -> LE, LD -> LE, IE -> LE, LD -> IE.
Do the same transitions and error out on others. */
else if ((prevailing_node->tls_model == TLS_MODEL_REAL
|| prevailing_node->tls_model == TLS_MODEL_LOCAL_DYNAMIC)
&& (vnode->tls_model == TLS_MODEL_INITIAL_EXEC
|| vnode->tls_model == TLS_MODEL_LOCAL_EXEC))
prevailing_node->tls_model = vnode->tls_model;
else if ((vnode->tls_model == TLS_MODEL_REAL
|| vnode->tls_model == TLS_MODEL_LOCAL_DYNAMIC)
&& (prevailing_node->tls_model == TLS_MODEL_INITIAL_EXEC
|| prevailing_node->tls_model == TLS_MODEL_LOCAL_EXEC))
;
else if (prevailing_node->tls_model == TLS_MODEL_INITIAL_EXEC
&& vnode->tls_model == TLS_MODEL_LOCAL_EXEC)
prevailing_node->tls_model = vnode->tls_model;
else if (vnode->tls_model == TLS_MODEL_INITIAL_EXEC
&& prevailing_node->tls_model == TLS_MODEL_LOCAL_EXEC)
;
else
error = true;
if (error)
{
error_at (DECL_SOURCE_LOCATION (vnode->decl),
"%qD is defined with tls model %s", vnode->decl, tls_model_names [vnode->tls_model]);
inform (DECL_SOURCE_LOCATION (prevailing_node->decl),
"previously defined here as %s",
tls_model_names [prevailing_node->tls_model]);
}
}
/* Finally remove the replaced node. */
vnode->remove ();
......
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