Author: sebor
Date: Wed Mar 26 13:23:58 2008
New Revision: 641549
URL: http://svn.apache.org/viewvc?rev=641549&view=rev
Log:
2008-03-26 Martin Sebor <[EMAIL PROTECTED]>
* src/locale_body.cpp (_C_manage): Used the C++ const_cast to cast
away volatile in favor of the C-style variant introduced in a patch
for STDCXX-792 (rev 640746) to avoid gcc -Wcast-qual warning: cast
from type 'volatile int*' to type 'int*' casts away constness.
Modified:
stdcxx/trunk/src/locale_body.cpp
Modified: stdcxx/trunk/src/locale_body.cpp
URL:
http://svn.apache.org/viewvc/stdcxx/trunk/src/locale_body.cpp?rev=641549&r1=641548&r2=641549&view=diff
==============================================================================
--- stdcxx/trunk/src/locale_body.cpp (original)
+++ stdcxx/trunk/src/locale_body.cpp Wed Mar 26 13:23:58 2008
@@ -805,15 +805,20 @@
if (!global) {
+ // volatile to prevent optimizers from turning
+ // the while statement below into an infinite loop
static volatile int ginit /* = 0 */;
// cast ginit to int& (STDCXX-792)
// casting should be removed after fixing STDCXX-794
- if (!ginit && 1 == _RWSTD_ATOMIC_PREINCREMENT ((int&)ginit,
false)) {
+ if (!ginit && 1 == _RWSTD_ATOMIC_PREINCREMENT (
+ _RWSTD_CONST_CAST (int&, ginit), false)) {
global = _C_manage (0, "C");
ginit += 1000;
}
else {
+ // ginit must be volatile to prevent optimizers
+ // from turning this into an infinite loop
while (ginit < 1000);
}
}