From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15517 invoked by alias); 1 Aug 2012 23:54:10 -0000 Received: (qmail 15502 invoked by uid 22791); 1 Aug 2012 23:54:08 -0000 X-SWARE-Spam-Status: No, hits=-4.9 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from e1.ny.us.ibm.com (HELO e1.ny.us.ibm.com) (32.97.182.141) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 01 Aug 2012 23:53:55 +0000 Received: from /spool/local by e1.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 1 Aug 2012 19:53:53 -0400 Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e1.ny.us.ibm.com (192.168.1.101) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 1 Aug 2012 19:53:41 -0400 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 3A3E86E804F; Wed, 1 Aug 2012 19:53:39 -0400 (EDT) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q71NrbVM24117248; Wed, 1 Aug 2012 19:53:37 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q725OUuj031095; Thu, 2 Aug 2012 01:24:30 -0400 Received: from otta (vorma.rchland.ibm.com [9.10.86.174]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with SMTP id q725OTBe031054; Thu, 2 Aug 2012 01:24:29 -0400 Date: Wed, 01 Aug 2012 23:54: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: <20120801185335.1b381d653a911b8c0d5b9ec4@vnet.ibm.com> In-Reply-To: <50194A40.8010505@mentor.com> References: <20120731174612.2f6fb986db4a93c56e9da485@vnet.ibm.com> <50193D2D.1000106@oracle.com> <50194A40.8010505@mentor.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 12080123-6078-0000-0000-00000DC77DF7 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/msg00065.txt.bz2 On Wed, 1 Aug 2012 08:24:48 -0700 Janis Johnson wrote: > On 08/01/2012 07:29 AM, Paolo Carlini wrote: > > On 08/01/2012 12:46 AM, Peter Bergner wrote: > >> I'd like to ping the following libstdc++ DFP patch that fixes PR54036: > >> > >> http://gcc.gnu.org/ml/gcc-patches/2012-07/msg00959.html > > I think the patch is essentially Ok, but I would recommend giving Janis > > a chance to comment (say 24/48 h). > > It looks fine to me. > > > Note that the patch only touches libstdc++-v3 code, thus the testcases > > should be added to libstdc++-v3/testsuite/decimal and the patch itself > > was missing a CC to libstdc++@. > > I agree. So just to be sure, like the patch below? Also, is this ok for the 4.6 and 4.7 release branches? Peter libstdc++-v3/ PR libstdc++/54036 * include/decimal/decimal.h (_DEFINE_DECIMAL_UNARY_OP): Use _Op as a unary operator. libstdc++-v3/testsuite/ PR libstdc++/54036 * decimal/pr54036-1.cc: New test. * decimal/pr54036-2.cc: Likewise. * 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,56 @@ +#include +using namespace std; + +decimal::decimal32 +__attribute__ ((noinline)) +my_nan32 (void) +{ + decimal::decimal32 z = 0; + decimal::decimal32 v = z/z; + return v; +} + +decimal::decimal32 +__attribute__ ((noinline)) +my_inf32 (void) +{ + decimal::decimal32 o = 1; + decimal::decimal32 z = 0; + decimal::decimal32 v = o/z; + return v; +} + +int +main (void) +{ + decimal::decimal32 v; + + v = my_nan32 (); + if (!__builtin_isnand32 (v.__getval ())) + __builtin_abort (); + if (__builtin_signbitd32 (v.__getval ())) + __builtin_abort (); + + v = -v; + + if (!__builtin_isnand32 (v.__getval ())) + __builtin_abort (); + if (!__builtin_signbitd32 (v.__getval ())) + __builtin_abort (); + + v = my_inf32 (); + if (!__builtin_isinfd32 (v.__getval ())) + __builtin_abort (); + if (__builtin_signbitd32 (v.__getval ())) + __builtin_abort (); + + v = -v; + + if (!__builtin_isinfd32 (v.__getval ())) + __builtin_abort (); + if (!__builtin_signbitd32 (v.__getval ())) + __builtin_abort (); + + 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,56 @@ +#include +using namespace std; + +decimal::decimal64 +__attribute__ ((noinline)) +my_nan64 (void) +{ + decimal::decimal64 z = 0; + decimal::decimal64 v = z/z; + return v; +} + +decimal::decimal64 +__attribute__ ((noinline)) +my_inf64 (void) +{ + decimal::decimal64 o = 1; + decimal::decimal64 z = 0; + decimal::decimal64 v = o/z; + return v; +} + +int +main (void) +{ + decimal::decimal64 v; + + v = my_nan64 (); + if (!__builtin_isnand64 (v.__getval ())) + __builtin_abort (); + if (__builtin_signbitd64 (v.__getval ())) + __builtin_abort (); + + v = -v; + + if (!__builtin_isnand64 (v.__getval ())) + __builtin_abort (); + if (!__builtin_signbitd64 (v.__getval ())) + __builtin_abort (); + + v = my_inf64 (); + if (!__builtin_isinfd64 (v.__getval ())) + __builtin_abort (); + if (__builtin_signbitd64 (v.__getval ())) + __builtin_abort (); + + v = -v; + + if (!__builtin_isinfd64 (v.__getval ())) + __builtin_abort (); + if (!__builtin_signbitd64 (v.__getval ())) + __builtin_abort (); + + 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,56 @@ +#include +using namespace std; + +decimal::decimal128 +__attribute__ ((noinline)) +my_nan128 (void) +{ + decimal::decimal128 z = 0; + decimal::decimal128 v = z/z; + return v; +} + +decimal::decimal128 +__attribute__ ((noinline)) +my_inf128 (void) +{ + decimal::decimal128 o = 1; + decimal::decimal128 z = 0; + decimal::decimal128 v = o/z; + return v; +} + +int +main (void) +{ + decimal::decimal128 v; + + v = my_nan128 (); + if (!__builtin_isnand128 (v.__getval ())) + __builtin_abort (); + if (__builtin_signbitd128 (v.__getval ())) + __builtin_abort (); + + v = -v; + + if (!__builtin_isnand128 (v.__getval ())) + __builtin_abort (); + if (!__builtin_signbitd128 (v.__getval ())) + __builtin_abort (); + + v = my_inf128 (); + if (!__builtin_isinfd128 (v.__getval ())) + __builtin_abort (); + if (__builtin_signbitd128 (v.__getval ())) + __builtin_abort (); + + v = -v; + + if (!__builtin_isinfd128 (v.__getval ())) + __builtin_abort (); + if (!__builtin_signbitd128 (v.__getval ())) + __builtin_abort (); + + return 0; +} +