diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 99da8b588154d012daa61710870765e1e798213f..4a342a10045002bc704fc83638358d8b826bfb02 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-24  Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+	* testsuite/tr1/2_general_utilities/shared_ptr/thread/
+	default_weaktoshared.cc: Use static_cast not reinterpret_cast.
+	* testsuite/tr1/2_general_utilities/shared_ptr/thread/
+	mutex_weaktoshared.cc: Likewise.
+
 2007-12-24  Paolo Carlini  <pcarlini@suse.de>
 
 	* include/tr1_impl/hashtable_policy.h (_Prime_rehash_policy::
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
index 6f521ed95b0ad1bf95843dcb4e2e8eae47b44c2a..3c681fd87b466790c392a589c85976f3b3f57348 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
@@ -82,7 +82,7 @@ struct shared_and_weak_pools
 
 void* thread_hammer_and_kill(void* opaque_pools)
 {
-  shared_and_weak_pools& pools = *reinterpret_cast<shared_and_weak_pools*>(opaque_pools);
+  shared_and_weak_pools& pools = *static_cast<shared_and_weak_pools*>(opaque_pools);
   // Using the same parameters as in the RNG test cases.
   std::tr1::mersenne_twister<
     unsigned long, 32, 624, 397, 31,
@@ -117,7 +117,7 @@ void* thread_hammer_and_kill(void* opaque_pools)
 
 void* thread_hammer(void* opaque_weak)
 {
-  wp_vector_t& weak_pool = *reinterpret_cast<wp_vector_t*>(opaque_weak);
+  wp_vector_t& weak_pool = *static_cast<wp_vector_t*>(opaque_weak);
   // Using the same parameters as in the RNG test cases.
   std::tr1::mersenne_twister<
     unsigned long, 32, 624, 397, 31,
@@ -165,11 +165,11 @@ test01()
   pthread_attr_init(&tattr);
 
   shared_and_weak_pools pools(obj_pool, weak_pool[0]);
-  pthread_create(threads, &tattr, thread_hammer_and_kill, reinterpret_cast<void*>(&pools));
+  pthread_create(threads, &tattr, thread_hammer_and_kill, static_cast<void*>(&pools));
   for (unsigned int worker = 1; worker < HAMMER_MAX_THREADS; worker++)
     {
       if (pthread_create(&threads[worker], &tattr,
-			 thread_hammer, reinterpret_cast<void*>(&weak_pool[worker])))
+			 thread_hammer, static_cast<void*>(&weak_pool[worker])))
 	std::abort();
     }
   // Wait for threads to complete, then check integrity of reference.
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
index b2461348c56bb260e296fb99e6c9fdc85ad3b598..433189e061489589f81d9b04e6aa455d221876ae 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
@@ -84,7 +84,7 @@ struct shared_and_weak_pools
 
 void* thread_hammer_and_kill(void* opaque_pools)
 {
-  shared_and_weak_pools& pools = *reinterpret_cast<shared_and_weak_pools*>(opaque_pools);
+  shared_and_weak_pools& pools = *static_cast<shared_and_weak_pools*>(opaque_pools);
   // Using the same parameters as in the RNG test cases.
   std::tr1::mersenne_twister<
     unsigned long, 32, 624, 397, 31,
@@ -119,7 +119,7 @@ void* thread_hammer_and_kill(void* opaque_pools)
 
 void* thread_hammer(void* opaque_weak)
 {
-  wp_vector_t& weak_pool = *reinterpret_cast<wp_vector_t*>(opaque_weak);
+  wp_vector_t& weak_pool = *static_cast<wp_vector_t*>(opaque_weak);
   // Using the same parameters as in the RNG test cases.
   std::tr1::mersenne_twister<
     unsigned long, 32, 624, 397, 31,
@@ -167,11 +167,11 @@ test01()
   pthread_attr_init(&tattr);
 
   shared_and_weak_pools pools(obj_pool, weak_pool[0]);
-  pthread_create(threads, &tattr, thread_hammer_and_kill, reinterpret_cast<void*>(&pools));
+  pthread_create(threads, &tattr, thread_hammer_and_kill, static_cast<void*>(&pools));
   for (unsigned int worker = 1; worker < HAMMER_MAX_THREADS; worker++)
     {
       if (pthread_create(&threads[worker], &tattr,
-			 thread_hammer, reinterpret_cast<void*>(&weak_pool[worker])))
+			 thread_hammer, static_cast<void*>(&weak_pool[worker])))
 	std::abort();
     }
   // Wait for threads to complete, then check integrity of reference.