re PR libstdc++/56085 (Unsafe negation in C++03 pow(complex,int))
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 24 Jan 2013 12:20:57 +0000 (12:20 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 24 Jan 2013 12:20:57 +0000 (12:20 +0000)
2013-01-24  Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/56085
* include/std/complex (pow(const complex<>&, int)): Avoid __n
signed overflow.

From-SVN: r195421

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/complex

index d60eb9b0a8f0ced1372e91ab007cff9831bd6834..22f0851be56528c88f8d79ff044da49599c1e2e8 100644 (file)
@@ -1,3 +1,9 @@
+2013-01-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/56085
+       * include/std/complex (pow(const complex<>&, int)): Avoid __n
+       signed overflow.
+
 2013-01-22  Jakub Jelinek  <jakub@redhat.com>
 
        * testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc:
index b13b11becc5c0bd1929fadfaf822570ed5f6c194..fe3f2674e160a5d3e290b51a5924bf5e89d8e2ac 100644 (file)
@@ -1,8 +1,6 @@
 // The template and inlines for the -*- C++ -*- complex number classes.
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011
-// Free Software Foundation, Inc.
+// Copyright (C) 1997-2013 Free Software Foundation, Inc.
 //
 // 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
@@ -978,7 +976,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     pow(const complex<_Tp>& __z, int __n)
     {
       return __n < 0
-        ? complex<_Tp>(1) / std::__complex_pow_unsigned(__z, -__n)
+       ? complex<_Tp>(1) / std::__complex_pow_unsigned(__z, -(unsigned)__n)
         : std::__complex_pow_unsigned(__z, __n);
     }
 #endif