Patchwork [v3] libstdc++/51798

login
register
mail settings
Submitter Benjamin Kosnik
Date Feb. 14, 2012, 3:22 a.m.
Message ID <20120213192209.5086d48f@shotwell>
Download mbox | patch
Permalink /patch/141042/
State New
Headers show

Comments

Benjamin Kosnik - Feb. 14, 2012, 3:22 a.m.
> The patch uses the weak version of compare_exchange universally, which
> is incorrect in a number of cases.  You wouldn't see this on x86_64;
> you'd have to use a ll/sc target such as powerpc.
> 
> In addition to changing several uses to strong compare_exchange, I
> also optimize the idiom
> 
> 	do
> 	  {
>             var = *m;
> 	    newval = ...;
> 	  }
> 	while (!atomic_compare_exchange(m, &var, newval, ...));
> 
> With the new builtins, VAR is updated with the current value of the 
> memory (regardless of the weak setting), so the initial read from *M
> can be hoisted outside the loop.

nice!

> 
> Ok?
 
cool, thanks for reviewing this. 

I fixed up the line numbers for the header file edits.

-benjamin

Patch

2012-02-13  Benjamin Kosnik  <bkoz@redhat.com>

	* testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers.
	* testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc: Same.

diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
index 0d51663..39f9ce3 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
@@ -32,9 +32,9 @@  void test01()
 {
   X* px = 0;
   std::shared_ptr<X> p1(px);   // { dg-error "here" }
-  // { dg-error "incomplete" "" { target *-*-* } 773 }
+  // { dg-error "incomplete" "" { target *-*-* } 771 }
 
   std::shared_ptr<X> p9(ap());  // { dg-error "here" }
-  // { dg-error "incomplete" "" { target *-*-* } 867 }
+  // { dg-error "incomplete" "" { target *-*-* } 865 }
 
 }
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
index ae902dc..0309f8f 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
@@ -1,6 +1,6 @@ 
 // { dg-do compile }
 
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2012 Free Software Foundation
 //
 // 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
@@ -30,9 +30,9 @@  void test01()
 {
   X* px = 0;
   std::tr1::shared_ptr<X> p1(px);   // { dg-error "here" }
-  // { dg-error "incomplete" "" { target *-*-* } 565 }
+  // { dg-error "incomplete" "" { target *-*-* } 563 }
 
   std::tr1::shared_ptr<X> p9(ap());  // { dg-error "here" }
-  // { dg-error "incomplete" "" { target *-*-* } 604 }
+  // { dg-error "incomplete" "" { target *-*-* } 602 }
 
 }