re PR libstdc++/58850 (Conversion error in chrono)
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 23 Oct 2013 15:31:26 +0000 (15:31 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 23 Oct 2013 15:31:26 +0000 (15:31 +0000)
2013-10-23  Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/58850
* include/std/chrono (minutes, hours): Change typedefs to uniformly
use int64_t.
* testsuite/20_util/duration/arithmetic/58850.cc: New.

From-SVN: r203978

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/chrono
libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc [new file with mode: 0644]

index 5956ffa..e5c07bc 100644 (file)
@@ -1,5 +1,12 @@
 2013-10-23  Paolo Carlini  <paolo.carlini@oracle.com>
 
+       PR libstdc++/58850
+       * include/std/chrono (minutes, hours): Change typedefs to uniformly
+       use int64_t.
+       * testsuite/20_util/duration/arithmetic/58850.cc: New.
+
+2013-10-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
        * testsuite/decimal/pr58815.cc: Fix thinko.
 
 2013-10-23  Paolo Carlini  <paolo.carlini@oracle.com>
index deeb460..b4ccca9 100644 (file)
@@ -524,22 +524,22 @@ _GLIBCXX_END_NAMESPACE_VERSION
       { return !(__lhs < __rhs); }
 
     /// nanoseconds
-    typedef duration<int64_t, nano>    nanoseconds;
+    typedef duration<int64_t, nano>        nanoseconds;
 
     /// microseconds
-    typedef duration<int64_t, micro>   microseconds;
+    typedef duration<int64_t, micro>       microseconds;
 
     /// milliseconds
-    typedef duration<int64_t, milli>   milliseconds;
+    typedef duration<int64_t, milli>       milliseconds;
 
     /// seconds
-    typedef duration<int64_t>          seconds;
+    typedef duration<int64_t>              seconds;
 
     /// minutes
-    typedef duration<int, ratio< 60>>  minutes;
+    typedef duration<int64_t, ratio< 60>>   minutes;
 
     /// hours
-    typedef duration<int, ratio<3600>>         hours;
+    typedef duration<int64_t, ratio<3600>>  hours;
 
     /// time_point
     template<typename _Clock, typename _Dur>
diff --git a/libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc b/libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc
new file mode 100644 (file)
index 0000000..2a208b1
--- /dev/null
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+
+// Copyright (C) 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+  bool test __attribute__((unused)) = true;
+  using namespace std::chrono;
+
+  typedef duration<std::int64_t, std::ratio<36 * 24 * 36525>> Years;
+  Years galactic_empire_age( 12067 );
+
+  VERIFY( duration_cast<seconds>( galactic_empire_age ).count()
+         == duration_cast<minutes>( galactic_empire_age ).count() * 60 );
+  VERIFY( duration_cast<minutes>( galactic_empire_age ).count()
+         == duration_cast<seconds>( galactic_empire_age ).count() / 60 );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}