Use proper location for tls_init function (PR c++/88263).

2018-12-27  Martin Liska  <mliska@suse.cz>

	PR c++/88263
	* decl2.c (get_local_tls_init_fn): Add location_t argument and
	use it.
	(get_tls_init_fn): Call it with location of variable for which
	we'll need to create tls_init function.
	(handle_tls_init): Likewise.
2018-12-27  Martin Liska  <mliska@suse.cz>

	PR c++/88263
	* g++.dg/gcov/pr88263.C: New test.

From-SVN: r267429
This commit is contained in:
Martin Liska 2018-12-27 09:46:13 +01:00 committed by Martin Liska
parent 75e479a8b5
commit 44787584de
4 changed files with 50 additions and 6 deletions

View file

@ -1,3 +1,12 @@
2018-12-27 Martin Liska <mliska@suse.cz>
PR c++/88263
* decl2.c (get_local_tls_init_fn): Add location_t argument and
use it.
(get_tls_init_fn): Call it with location of variable for which
we'll need to create tls_init function.
(handle_tls_init): Likewise.
2018-12-21 Jakub Jelinek <jakub@redhat.com>
PR c++/86524

View file

@ -3331,15 +3331,15 @@ var_needs_tls_wrapper (tree var)
translation unit. */
static tree
get_local_tls_init_fn (void)
get_local_tls_init_fn (location_t loc)
{
tree sname = get_identifier ("__tls_init");
tree fn = get_global_binding (sname);
if (!fn)
{
fn = build_lang_decl (FUNCTION_DECL, sname,
build_function_type (void_type_node,
void_list_node));
fn = build_lang_decl_loc (loc, FUNCTION_DECL, sname,
build_function_type (void_type_node,
void_list_node));
SET_DECL_LANGUAGE (fn, lang_c);
TREE_PUBLIC (fn) = false;
DECL_ARTIFICIAL (fn) = true;
@ -3369,7 +3369,7 @@ get_tls_init_fn (tree var)
/* If the variable is internal, or if we can't generate aliases,
call the local init function directly. */
if (!TREE_PUBLIC (var) || !TARGET_SUPPORTS_ALIASES)
return get_local_tls_init_fn ();
return get_local_tls_init_fn (DECL_SOURCE_LOCATION (var));
tree sname = mangle_tls_init_fn (var);
tree fn = get_global_binding (sname);
@ -4435,7 +4435,7 @@ handle_tls_init (void)
set_decl_tls_model (guard, decl_default_tls_model (guard));
pushdecl_top_level_and_finish (guard, NULL_TREE);
tree fn = get_local_tls_init_fn ();
tree fn = get_local_tls_init_fn (loc);
start_preparsed_function (fn, NULL_TREE, SF_PRE_PARSED);
tree body = begin_function_body ();
tree if_stmt = begin_if_stmt ();

View file

@ -1,3 +1,8 @@
2018-12-27 Martin Liska <mliska@suse.cz>
PR c++/88263
* g++.dg/gcov/pr88263.C: New test.
2018-12-26 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/85357

View file

@ -0,0 +1,30 @@
// PR gcov-profile/88263
// { dg-options "-fprofile-arcs -ftest-coverage -std=c++11" }
// { dg-do run { target native } }
#include <sstream>
namespace log {
class Logstream {
public:
private:
/// The logging stream
static thread_local std::ostringstream os_;
};
}
namespace log {
thread_local std::ostringstream Logstream::os_;
}
int main()
{
return 0;
}
// { dg-final { run-gcov pr88263.C } }