Commit 86c12f76 by Eric Botcazou Committed by Eric Botcazou

re PR c++/85400 (invalid Local Dynamic TLS relaxation for symbol defined in method)

	PR c++/85400
cp/
	* decl2.c (adjust_var_decl_tls_model): New static function.
	(comdat_linkage): Call it on a variable.
	(maybe_make_one_only): Likewise.
c-family/
	* c-attribs.c (handle_visibility_attribute): Do not set no_add_attrs.

From-SVN: r260106
parent 09dd57a3
2018-05-10 Eric Botcazou <ebotcazou@adacore.com>
PR c++/85400
* c-attribs.c (handle_visibility_attribute): Do not set no_add_attrs.
2018-05-07 Nathan Sidwell <nathan@acm.org>
* c.opt (ffor-scope): Remove functionality, issue warning.
......
......@@ -2299,14 +2299,13 @@ handle_visibility_attribute (tree *node, tree name, tree args,
static tree
handle_tls_model_attribute (tree *node, tree name, tree args,
int ARG_UNUSED (flags), bool *no_add_attrs)
int ARG_UNUSED (flags),
bool *ARG_UNUSED (no_add_attrs))
{
tree id;
tree decl = *node;
enum tls_model kind;
*no_add_attrs = true;
if (!VAR_P (decl) || !DECL_THREAD_LOCAL_P (decl))
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
......
2018-05-10 Eric Botcazou <ebotcazou@adacore.com>
PR c++/85400
* decl2.c (adjust_var_decl_tls_model): New static function.
(comdat_linkage): Call it on a variable.
(maybe_make_one_only): Likewise.
2018-05-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85713
......
......@@ -1838,6 +1838,17 @@ mark_vtable_entries (tree decl)
}
}
/* Adjust the TLS model on variable DECL if need be, typically after
the linkage of DECL has been modified. */
static void
adjust_var_decl_tls_model (tree decl)
{
if (CP_DECL_THREAD_LOCAL_P (decl)
&& !lookup_attribute ("tls_model", DECL_ATTRIBUTES (decl)))
set_decl_tls_model (decl, decl_default_tls_model (decl));
}
/* Set DECL up to have the closest approximation of "initialized common"
linkage available. */
......@@ -1888,6 +1899,9 @@ comdat_linkage (tree decl)
if (TREE_PUBLIC (decl))
DECL_COMDAT (decl) = 1;
if (VAR_P (decl))
adjust_var_decl_tls_model (decl);
}
/* For win32 we also want to put explicit instantiations in
......@@ -1926,6 +1940,8 @@ maybe_make_one_only (tree decl)
/* Mark it needed so we don't forget to emit it. */
node->forced_by_abi = true;
TREE_USED (decl) = 1;
adjust_var_decl_tls_model (decl);
}
}
}
......
2018-05-10 Eric Botcazou <ebotcazou@adacore.com>
* g++.dg/tls/pr85400.C: New test.
2018-05-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85713
......
// PR c++/85400
// Testcase by Brian Vandenberg <phantall@gmail.com>
// { dg-do link { target c++11 } }
// { dg-require-effective-target fpic }
// { dg-require-effective-target shared }
// { dg-require-effective-target tls }
// { dg-options "-shared -fPIC -O" }
// { dg-add-options tls }
struct Test
{
int blah (int y)
{
thread_local int mything = 3;
mything = y > 0 ? y : mything;
return mything;
}
};
int stuff (Test& test, int y)
{
return test.blah(y);
}
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