From 9f9fe1f0a04b5e581f9f33feb2e03275e37278f7 Mon Sep 17 00:00:00 2001 From: paolo Date: Mon, 6 Aug 2012 18:00:00 +0000 Subject: [PATCH] 2012-08-06 Peter Bergner PR libstdc++/54036 * include/decimal/decimal.h (_DEFINE_DECIMAL_UNARY_OP): Use _Op as a unary operator. * testsuite/decimal/pr54036-1.cc: New test. * testsuite/decimal/pr54036-2.cc: Likewise. * testsuite/decimal/pr54036-3.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@190185 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 9 ++++ libstdc++-v3/include/decimal/decimal.h | 2 +- libstdc++-v3/testsuite/decimal/pr54036-1.cc | 70 +++++++++++++++++++++++++++++ libstdc++-v3/testsuite/decimal/pr54036-2.cc | 70 +++++++++++++++++++++++++++++ libstdc++-v3/testsuite/decimal/pr54036-3.cc | 70 +++++++++++++++++++++++++++++ 5 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/decimal/pr54036-1.cc create mode 100644 libstdc++-v3/testsuite/decimal/pr54036-2.cc create mode 100644 libstdc++-v3/testsuite/decimal/pr54036-3.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b1b7be01abf..8c3b8475a3c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2012-08-06 Peter Bergner + + PR libstdc++/54036 + * include/decimal/decimal.h (_DEFINE_DECIMAL_UNARY_OP): Use _Op as + a unary operator. + * testsuite/decimal/pr54036-1.cc: New test. + * testsuite/decimal/pr54036-2.cc: Likewise. + * testsuite/decimal/pr54036-3.cc: Likewise. + 2012-08-02 Michael Hope Backport from mainline r186389: diff --git a/libstdc++-v3/include/decimal/decimal.h b/libstdc++-v3/include/decimal/decimal.h index f8f05734ba8..6bc9e6a9300 100644 --- a/libstdc++-v3/include/decimal/decimal.h +++ b/libstdc++-v3/include/decimal/decimal.h @@ -288,7 +288,7 @@ namespace decimal inline _Tp operator _Op(_Tp __rhs) \ { \ _Tp __tmp; \ - __tmp.__setval(0 _Op __rhs.__getval()); \ + __tmp.__setval(_Op __rhs.__getval()); \ return __tmp; \ } diff --git a/libstdc++-v3/testsuite/decimal/pr54036-1.cc b/libstdc++-v3/testsuite/decimal/pr54036-1.cc new file mode 100644 index 00000000000..8514ab05cd6 --- /dev/null +++ b/libstdc++-v3/testsuite/decimal/pr54036-1.cc @@ -0,0 +1,70 @@ +// Copyright (C) 2012 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 +// . + +// { dg-require-effective-target dfp } + +#include +#include + +using namespace std::decimal; + +decimal32 +__attribute__ ((noinline)) +my_nan32 (void) +{ + decimal32 z = 0; + decimal32 v = z/z; + return v; +} + +decimal32 +__attribute__ ((noinline)) +my_inf32 (void) +{ + decimal32 o = 1; + decimal32 z = 0; + decimal32 v = o/z; + return v; +} + +int +main () +{ + decimal32 v; + + v = my_nan32 (); + + VERIFY (__builtin_isnand32 (v.__getval ())); + VERIFY (!__builtin_signbitd32 (v.__getval ())); + + v = -v; + + VERIFY (__builtin_isnand32 (v.__getval ())); + VERIFY (__builtin_signbitd32 (v.__getval ())); + + v = my_inf32 (); + + VERIFY (__builtin_isinfd32 (v.__getval ())); + VERIFY (!__builtin_signbitd32 (v.__getval ())); + + v = -v; + + VERIFY (__builtin_isinfd32 (v.__getval ())); + VERIFY (__builtin_signbitd32 (v.__getval ())); + + return 0; +} diff --git a/libstdc++-v3/testsuite/decimal/pr54036-2.cc b/libstdc++-v3/testsuite/decimal/pr54036-2.cc new file mode 100644 index 00000000000..2a625d6884b --- /dev/null +++ b/libstdc++-v3/testsuite/decimal/pr54036-2.cc @@ -0,0 +1,70 @@ +// Copyright (C) 2012 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 +// . + +// { dg-require-effective-target dfp } + +#include +#include + +using namespace std::decimal; + +decimal64 +__attribute__ ((noinline)) +my_nan64 (void) +{ + decimal64 z = 0; + decimal64 v = z/z; + return v; +} + +decimal64 +__attribute__ ((noinline)) +my_inf64 (void) +{ + decimal64 o = 1; + decimal64 z = 0; + decimal64 v = o/z; + return v; +} + +int +main () +{ + decimal64 v; + + v = my_nan64 (); + + VERIFY (__builtin_isnand64 (v.__getval ())); + VERIFY (!__builtin_signbitd64 (v.__getval ())); + + v = -v; + + VERIFY (__builtin_isnand64 (v.__getval ())); + VERIFY (__builtin_signbitd64 (v.__getval ())); + + v = my_inf64 (); + + VERIFY (__builtin_isinfd64 (v.__getval ())); + VERIFY (!__builtin_signbitd64 (v.__getval ())); + + v = -v; + + VERIFY (__builtin_isinfd64 (v.__getval ())); + VERIFY (__builtin_signbitd64 (v.__getval ())); + + return 0; +} diff --git a/libstdc++-v3/testsuite/decimal/pr54036-3.cc b/libstdc++-v3/testsuite/decimal/pr54036-3.cc new file mode 100644 index 00000000000..0d74446623c --- /dev/null +++ b/libstdc++-v3/testsuite/decimal/pr54036-3.cc @@ -0,0 +1,70 @@ +// Copyright (C) 2012 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 +// . + +// { dg-require-effective-target dfp } + +#include +#include + +using namespace std::decimal; + +decimal128 +__attribute__ ((noinline)) +my_nan128 (void) +{ + decimal128 z = 0; + decimal128 v = z/z; + return v; +} + +decimal128 +__attribute__ ((noinline)) +my_inf128 (void) +{ + decimal128 o = 1; + decimal128 z = 0; + decimal128 v = o/z; + return v; +} + +int +main () +{ + decimal128 v; + + v = my_nan128 (); + + VERIFY (__builtin_isnand128 (v.__getval ())); + VERIFY (!__builtin_signbitd128 (v.__getval ())); + + v = -v; + + VERIFY (__builtin_isnand128 (v.__getval ())); + VERIFY (__builtin_signbitd128 (v.__getval ())); + + v = my_inf128 (); + + VERIFY (__builtin_isinfd128 (v.__getval ())); + VERIFY (!__builtin_signbitd128 (v.__getval ())); + + v = -v; + + VERIFY (__builtin_isinfd128 (v.__getval ())); + VERIFY (__builtin_signbitd128 (v.__getval ())); + + return 0; +} -- 2.11.0