From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1607 invoked by alias); 3 Aug 2012 05:01:39 -0000 Received: (qmail 1590 invoked by uid 22791); 3 Aug 2012 05:01:34 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,TW_DF,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from e5.ny.us.ibm.com (HELO e5.ny.us.ibm.com) (32.97.182.145) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 03 Aug 2012 05:01:08 +0000 Received: from /spool/local by e5.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 3 Aug 2012 01:01:06 -0400 Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e5.ny.us.ibm.com (192.168.1.105) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 3 Aug 2012 01:01:05 -0400 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 49C656E8041; Fri, 3 Aug 2012 01:01:03 -0400 (EDT) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q73511wQ28639358; Fri, 3 Aug 2012 01:01:01 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q73511ui016044; Fri, 3 Aug 2012 02:01:01 -0300 Received: from otta (vorma.rchland.ibm.com [9.10.86.174]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with SMTP id q73510Ww015964; Fri, 3 Aug 2012 02:01:00 -0300 Date: Fri, 03 Aug 2012 05:01:00 -0000 From: Peter Bergner To: Paolo Carlini Cc: Janis Johnson , gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: PING [PATCH] Fix PR libstdc++/54036, problem negating DFP NaNs Message-Id: <20120803000059.52337dce6ecbb94a42534bc5@vnet.ibm.com> In-Reply-To: <501A4A2A.6090808@oracle.com> References: <20120731174612.2f6fb986db4a93c56e9da485@vnet.ibm.com> <50193D2D.1000106@oracle.com> <50194A40.8010505@mentor.com> <20120801185335.1b381d653a911b8c0d5b9ec4@vnet.ibm.com> <501A4A2A.6090808@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 12080305-5930-0000-0000-00000A7CCD1C X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-08/txt/msg00142.txt.bz2 On Thu, 02 Aug 2012 11:36:42 Paolo Carlini wrote: > > Also, is this ok for the 4.6 and 4.7 release branches? > I don't think this is a regression, thus I would say 4.7 only, to be safe. Ok. > we don't have a separate ChangeLog in libstdc++-v3/testsuite/. Thus a > single ChangeLog entry for everything. Fixed. > > Index: libstdc++-v3/testsuite/decimal/pr54036-1.cc > > =================================================================== > > --- libstdc++-v3/testsuite/decimal/pr54036-1.cc (revision 0) > > +++ libstdc++-v3/testsuite/decimal/pr54036-1.cc (revision 0) > > @@ -0,0 +1,56 @@ > Copyright blurb missing. Also, you need: > > // { dg-require-effective-target dfp } Fixed. > In the library testsuite we include: > > #include > > and then we use VERIFY not __builtin_abort. Also, for decimal, we > normally use: > > using namespace std::decimal. Fixed. Ok, once more with feeling! :) How about the updated patched below? ...and thank you for the gentle review. This is my first libstdc++ patch and I guess I was used to the normal gcc/testsuite/ tests that don't include copyright headers and the like. I'll try to be more careful in the future. Peter libstdc++-v3/ 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. Index: libstdc++-v3/include/decimal/decimal.h =================================================================== --- libstdc++-v3/include/decimal/decimal.h (revision 189599) +++ libstdc++-v3/include/decimal/decimal.h (working copy) @@ -288,7 +288,7 @@ inline _Tp operator _Op(_Tp __rhs) \ { \ _Tp __tmp; \ - __tmp.__setval(0 _Op __rhs.__getval()); \ + __tmp.__setval(_Op __rhs.__getval()); \ return __tmp; \ } Index: libstdc++-v3/testsuite/decimal/pr54036-1.cc =================================================================== --- libstdc++-v3/testsuite/decimal/pr54036-1.cc (revision 0) +++ libstdc++-v3/testsuite/decimal/pr54036-1.cc (revision 0) @@ -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 (void) +{ + 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; +} Index: libstdc++-v3/testsuite/decimal/pr54036-2.cc =================================================================== --- libstdc++-v3/testsuite/decimal/pr54036-2.cc (revision 0) +++ libstdc++-v3/testsuite/decimal/pr54036-2.cc (revision 0) @@ -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 (void) +{ + 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; +} Index: libstdc++-v3/testsuite/decimal/pr54036-3.cc =================================================================== --- libstdc++-v3/testsuite/decimal/pr54036-3.cc (revision 0) +++ libstdc++-v3/testsuite/decimal/pr54036-3.cc (revision 0) @@ -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 (void) +{ + 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; +}