This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [v3] libstdc++/51798
- From: Benjamin Kosnik <bkoz at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org, jakub at redhat dot com
- Date: Mon, 13 Feb 2012 19:22:09 -0800
- Subject: Re: [v3] libstdc++/51798
- References: <20120209152408.7592e6e7@shotwell> <4F35BCB2.5050806@redhat.com>
> 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
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 }
}