This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] Mixed -Wconversion/overflow fixes


Hi,

tested x86/x86_64-linux fixes, committed to mainline.

Paolo.

////////////////
2007-01-28  Paolo Carlini  <pcarlini@suse.de>

	* include/bits/locale_facets.tcc (num_get<>::do_get(iter_type,
	iter_type, ios_base&, ios_base::iostate&, bool&),
	num_put<>::_M_insert_int(_OutIter, ios_base&, _CharT, _ValueT)):
	-Wconversion and -Woverflow fixes.
	* include/bits/istream.tcc (operator>>(int&), operator>>(short&)):
	Likewise.
	* include/std/valarray (valarray<>::shift, cshift): Likewise.
Index: include/bits/locale_facets.tcc
===================================================================
--- include/bits/locale_facets.tcc	(revision 121146)
+++ include/bits/locale_facets.tcc	(working copy)
@@ -725,7 +725,7 @@
 	  long __l = -1;
           __beg = _M_extract_int(__beg, __end, __io, __err, __l);
 	  if (__l == 0 || __l == 1)
-	    __v = __l;
+	    __v = bool(__l);
 	  else
             __err |= ios_base::failbit;
         }
@@ -764,9 +764,9 @@
 		__testeof = true;
             }
 	  if (__testf && __n == __lc->_M_falsename_size)
-	    __v = 0;
+	    __v = false;
 	  else if (__testt && __n == __lc->_M_truename_size)
-	    __v = 1;
+	    __v = true;
 	  else
 	    __err |= ios_base::failbit;
 
@@ -994,7 +994,9 @@
 	const ios_base::fmtflags __basefield = __flags & ios_base::basefield;
 	const bool __dec = (__basefield != ios_base::oct
 			    && __basefield != ios_base::hex);
-	const __unsigned_type __u = (__v > 0 || !__dec) ? __v : -__v;
+	const __unsigned_type __u = ((__v > 0 || !__dec)
+				     ? __unsigned_type(__v)
+				     : -__unsigned_type(__v));
  	int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
 	__cs += __ilen - __len;
 
Index: include/bits/istream.tcc
===================================================================
--- include/bits/istream.tcc	(revision 121146)
+++ include/bits/istream.tcc	(working copy)
@@ -1,6 +1,7 @@
 // istream classes -*- C++ -*-
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -121,7 +122,7 @@
 	{
 	  if (numeric_limits<short>::min() <= __l
 	      && __l <= numeric_limits<short>::max())
-	    __n = __l;
+	    __n = short(__l);
 	  else
 	    this->setstate(ios_base::failbit);
 	}
@@ -141,7 +142,7 @@
 	{
 	  if (numeric_limits<int>::min() <= __l
 	      && __l <= numeric_limits<int>::max())
-	    __n = __l;
+	    __n = int(__l);
 	  else
 	    this->setstate(ios_base::failbit);
 	}
Index: include/std/valarray
===================================================================
--- include/std/valarray	(revision 121146)
+++ include/std/valarray	(working copy)
@@ -796,7 +796,7 @@
        else if (__n > 0)      // shift left
 	 {
 	   if (size_t(__n) > _M_size)
-	     __n = _M_size;
+	     __n = int(_M_size);
 
 	   std::__valarray_copy_construct(_M_data + __n,
 					  _M_data + _M_size, __tmp_M_data);
@@ -805,8 +805,8 @@
 	 }
        else                   // shift right
 	 {
-	   if (size_t(-__n) > _M_size)
-	     __n = -_M_size;
+	   if (-size_t(__n) > _M_size)
+	     __n = -int(_M_size);
 
 	   std::__valarray_copy_construct(_M_data, _M_data + _M_size + __n,
 					  __tmp_M_data - __n);
@@ -837,7 +837,7 @@
        else if (__n > 0)      // cshift left
 	 {
 	   if (size_t(__n) > _M_size)
-	     __n = __n % _M_size;
+	     __n = int(__n % _M_size);
 
 	   std::__valarray_copy_construct(_M_data, _M_data + __n,
 					  __tmp_M_data + _M_size - __n);
@@ -846,8 +846,8 @@
 	 }
        else                   // cshift right
 	 {
-	   if (size_t(-__n) > _M_size)
-	     __n = -(size_t(-__n) % _M_size);
+	   if (-size_t(__n) > _M_size)
+	     __n = -int(-size_t(__n) % _M_size);
 
 	   std::__valarray_copy_construct(_M_data + _M_size + __n,
 					  _M_data + _M_size, __tmp_M_data);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]