You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2008/03/31 19:35:03 UTC
svn commit: r643078 - in /stdcxx/trunk: include/iomanip
include/loc/_num_get.cc src/ios.cpp
Author: sebor
Date: Mon Mar 31 10:35:02 2008
New Revision: 643078
URL: http://svn.apache.org/viewvc?rev=643078&view=rev
Log:
2008-03-31 Martin Sebor <se...@roguewave.com>
STDCXX-814
* include/iomanip (__rw_setbase): Cast first argument of a shift
expression to unsigned int to avoid benign arithmetic overflow
and silence HP aCC 6 remark #4300: Overflow while computing
constant in left shift operation.
* include/loc/_num_get.cc (num_get::_C_get): Same.
* src/ios.cpp (ios_base::flags): Same.
Modified:
stdcxx/trunk/include/iomanip
stdcxx/trunk/include/loc/_num_get.cc
stdcxx/trunk/src/ios.cpp
Modified: stdcxx/trunk/include/iomanip
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/iomanip?rev=643078&r1=643077&r2=643078&view=diff
==============================================================================
--- stdcxx/trunk/include/iomanip (original)
+++ stdcxx/trunk/include/iomanip Mon Mar 31 10:35:02 2008
@@ -23,7 +23,7 @@
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
- * Copyright 1994-2005 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
*
**************************************************************************/
@@ -87,7 +87,8 @@
const unsigned __ifl =
__strm.flags () & ~_STD::ios_base::basefield
- & ~(_RWSTD_IOS_BASEMASK << _RWSTD_IOS_BASEOFF)
+ & ~( _RWSTD_STATIC_CAST (unsigned, _RWSTD_IOS_BASEMASK)
+ << _RWSTD_IOS_BASEOFF)
| __base << _RWSTD_IOS_BASEOFF;
__strm.flags (_STD::ios_base::fmtflags (__ifl));
Modified: stdcxx/trunk/include/loc/_num_get.cc
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/loc/_num_get.cc?rev=643078&r1=643077&r2=643078&view=diff
==============================================================================
--- stdcxx/trunk/include/loc/_num_get.cc (original)
+++ stdcxx/trunk/include/loc/_num_get.cc Mon Mar 31 10:35:02 2008
@@ -22,7 +22,7 @@
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
- * Copyright 2001-2006 Rogue Wave Software.
+ * Copyright 2001-2008 Rogue Wave Software, Inc.
*
**************************************************************************/
@@ -490,7 +490,8 @@
// set the base determined above
const unsigned __fl2 =
__fl & ~_RWSTD_IOS_BASEFIELD
- & ~(_RWSTD_IOS_BASEMASK << _RWSTD_IOS_BASEOFF)
+ & ~( _RWSTD_STATIC_CAST (unsigned, _RWSTD_IOS_BASEMASK)
+ << _RWSTD_IOS_BASEOFF)
| __base << _RWSTD_IOS_BASEOFF;
// 22.2.2.1.2, p11: Stage 3
Modified: stdcxx/trunk/src/ios.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/src/ios.cpp?rev=643078&r1=643077&r2=643078&view=diff
==============================================================================
--- stdcxx/trunk/src/ios.cpp (original)
+++ stdcxx/trunk/src/ios.cpp Mon Mar 31 10:35:02 2008
@@ -22,7 +22,7 @@
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
- * Copyright 1994-2006 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
*
**************************************************************************/
@@ -95,29 +95,28 @@
ios_base::fmtflags ios_base::flags (fmtflags fl)
{
+ const unsigned mask =
+ ~(unsigned (_RWSTD_IOS_BASEMASK) << _RWSTD_IOS_BASEOFF);
+
unsigned ifl = unsigned (fl);
switch (fl & basefield) {
// if basefield is set, clear the base mask and set
// the numeric base bits according to the basefield
case oct:
- ifl = ifl & ~(_RWSTD_IOS_BASEMASK << _RWSTD_IOS_BASEOFF)
- | 8U << _RWSTD_IOS_BASEOFF;
+ ifl = ifl & mask | 8U << _RWSTD_IOS_BASEOFF;
break;
case dec:
- ifl = ifl & ~(_RWSTD_IOS_BASEMASK << _RWSTD_IOS_BASEOFF)
- | 10U << _RWSTD_IOS_BASEOFF;
+ ifl = ifl & mask | 10U << _RWSTD_IOS_BASEOFF;
break;
case hex:
- ifl = ifl & ~(_RWSTD_IOS_BASEMASK << _RWSTD_IOS_BASEOFF)
- | 16U << _RWSTD_IOS_BASEOFF;
+ ifl = ifl & mask | 16U << _RWSTD_IOS_BASEOFF;
break;
case _RWSTD_IOS_BIN:
- ifl = ifl & ~(_RWSTD_IOS_BASEMASK << _RWSTD_IOS_BASEOFF)
- | 2U << _RWSTD_IOS_BASEOFF;
+ ifl = ifl & mask | 2U << _RWSTD_IOS_BASEOFF;
break;
case 0: