aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2013-10-23 15:31:26 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2013-10-23 15:31:26 +0000
commit66caf47a508ded59e309951acee220081bc98afc (patch)
treea590835fba7df7b9a72bd5aaef0e1b088b5922da
parent021b04102ba25a17a164c47678b12cee235f35e9 (diff)
downloadgcc-66caf47a508ded59e309951acee220081bc98afc.zip
gcc-66caf47a508ded59e309951acee220081bc98afc.tar.gz
gcc-66caf47a508ded59e309951acee220081bc98afc.tar.bz2
re PR libstdc++/58850 (Conversion error in chrono)
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
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/std/chrono12
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc42
3 files changed, 55 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 5956ffa..e5c07bc 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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>
diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono
index deeb460..b4ccca9 100644
--- a/libstdc++-v3/include/std/chrono
+++ b/libstdc++-v3/include/std/chrono
@@ -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
index 0000000..2a208b1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc
@@ -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;
+}