Date: Fri, 17 Mar 2006 03:26:26 GMT From: Tom Russo <tvrusso@sandia.gov> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/94583: std::isnan()/std::isinf() are not identical to isnan() and isinf() Message-ID: <200603170326.k2H3QQkD005768@www.freebsd.org> Resent-Message-ID: <200603170330.k2H3UG3A028931@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 94583 >Category: misc >Synopsis: std::isnan()/std::isinf() are not identical to isnan() and isinf() >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Mar 17 03:30:16 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Tom Russo >Release: FreeBSD 5.4 STABLE >Organization: Sandia National Laboratories >Environment: FreeBSD xxxxxxx.xxxxxx.xxx 5.4-STABLE FreeBSD 5.4-STABLE #1: Thu Oct 20 02:35:11 MDT 2005 root@:/usr/obj/usr/src/sys/WINSTON i386 >Description: Discovered that a C++ program that was written to use "std::isnan()" and "std::isinf()" entered an infinite loop with 100% processor activity upon encountering either of these calls. The attached test program, which was originally written to use "using namespace std;" and no "std::" namespace specification on isnan/isinf worked just fine. Upon adding the namespace specification to isnan and/or isinf, even the test program hung immediately. While writing the "how to repeat" part of this problem report I discovered that if I specify any optimization level other than -O2 the code segfaults rather than entering an infinite loop. >How-To-Repeat: Compile the following test program: #include <iostream> #include <cmath> int main(void) { double finite = 1.0e-100; double infinity = 1.0/0.0; double nan = sqrt(-1.0); double minusinfinity = -1.0/0.0; std::cout << std::endl << "finite = " << finite << std::endl; std::cout << "isinf() = " << isinf(finite) << std::endl; std::cout << "isnan() = " << isnan(finite) << std::endl; std::cout << "isinf() = " << std::isinf(finite) << std::endl; std::cout << "isnan() = " << std::isnan(finite) << std::endl; return 0; } using g++ 3.4: g++ -O2 -g -o bugreport bugreport.cpp Run the resulting executable. Compiling with -O0 or -O1 results in a segfault instead. >Fix: >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603170326.k2H3QQkD005768>