mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			Ensure std::thread helpers have internal linkage
Backport from mainline 2016-04-05 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/70503 * src/c++11/thread.cc (execute_native_thread_routine, execute_native_thread_routine_compat): Give internal linkage. * testsuite/30_threads/thread/70503.cc: New test. From-SVN: r235277
This commit is contained in:
		
							parent
							
								
									47822deeff
								
							
						
					
					
						commit
						4cc8cffeb8
					
				|  | @ -1,5 +1,13 @@ | |||
| 2016-04-20  Jonathan Wakely  <jwakely@redhat.com> | ||||
| 
 | ||||
| 	Backport from mainline | ||||
| 	2016-04-05  Jonathan Wakely  <jwakely@redhat.com> | ||||
| 
 | ||||
| 	PR libstdc++/70503 | ||||
| 	* src/c++11/thread.cc (execute_native_thread_routine, | ||||
| 	execute_native_thread_routine_compat): Give internal linkage. | ||||
| 	* testsuite/30_threads/thread/70503.cc: New test. | ||||
| 
 | ||||
| 	Backport from mainline | ||||
| 	2016-01-25  Jonathan Wakely  <jwakely@redhat.com> | ||||
| 
 | ||||
|  |  | |||
|  | @ -70,9 +70,9 @@ static inline int get_nprocs() | |||
| 
 | ||||
| namespace std _GLIBCXX_VISIBILITY(default) | ||||
| { | ||||
|   namespace | ||||
|   extern "C" | ||||
|   { | ||||
|     extern "C" void* | ||||
|     static void* | ||||
|     execute_native_thread_routine(void* __p) | ||||
|     { | ||||
|       thread::_Impl_base* __t = static_cast<thread::_Impl_base*>(__p); | ||||
|  | @ -94,7 +94,7 @@ namespace std _GLIBCXX_VISIBILITY(default) | |||
| 
 | ||||
|       return nullptr; | ||||
|     } | ||||
|   } | ||||
|   } // extern "C"
 | ||||
| 
 | ||||
| _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,38 @@ | |||
| // Copyright (C) 2016 Free Software Foundation, Inc.
 | ||||
| //
 | ||||
| // This file is part of the GNU ISO C++ Library.  This library is free
 | ||||
| // software; you can redistribute it and/or modify it under the
 | ||||
| // terms of the GNU General Public License as published by the
 | ||||
| // Free Software Foundation; either version 3, or (at your option)
 | ||||
| // any later version.
 | ||||
| 
 | ||||
| // This library is distributed in the hope that it will be useful,
 | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||
| // GNU General Public License for more details.
 | ||||
| 
 | ||||
| // You should have received a copy of the GNU General Public License along
 | ||||
| // with this library; see the file COPYING3.  If not see
 | ||||
| // <http://www.gnu.org/licenses/>.
 | ||||
| 
 | ||||
| // { dg-do link }
 | ||||
| // { dg-options "-std=gnu++11 -static" { target *-*-*gnu* } }
 | ||||
| // { dg-require-cstdint "" }
 | ||||
| // { dg-require-gthreads "" }
 | ||||
| // { dg-require-effective-target static }
 | ||||
| 
 | ||||
| #include <thread> | ||||
| 
 | ||||
| extern "C" { | ||||
|   // Should not get multiple definition errors from libstdc++.a(thread.o)
 | ||||
|   void execute_native_thread_routine(void) { } | ||||
|   void execute_native_thread_routine_compat(void) { } | ||||
| } | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|   execute_native_thread_routine(); | ||||
|   execute_native_thread_routine_compat(); | ||||
| 
 | ||||
|   std::thread{}.detach();  // ensure libstdc++.a(thread.o) is linked in
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	 Jonathan Wakely
						Jonathan Wakely