[LLVMbugs] [Bug 11854] New: floating point division by 0.0 vs -ftrapv vs IEEE floating point semantics

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Jan 25 10:00:00 PST 2012


http://llvm.org/bugs/show_bug.cgi?id=11854

             Bug #: 11854
           Summary: floating point division by 0.0 vs -ftrapv vs IEEE
                    floating point semantics
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: sean at rogue-research.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


In C and C++ floating point division by 0 is undefined behaviour[1][2].

clang's -ftrapv flag catches it:

-----test.c-----
int main (int argc, char *argv[])
{
    (void)argc; (void)argv;

    double a = 10.0;
    double b = 0.0;
    double c = a / b;

    return c;
}
-----test.c-----

$ clang -ftrapv test.c 
$ ./a.out 
Illegal instruction: 4

On the one hand, I like this, because I want to write portable code.  OTOH,
practically speaking, most environments use IEEE floating point semantics,
where division by 0 gives NaN or Inf.

Therefore, I'd like to suggest splitting -ftrapv into 2 flags.  One very
strict, as currently; and one that doesn't complain about things that are well
defined in IEEE-754.

[1]
https://www.securecoding.cert.org/confluence/display/seccode/FLP03-C.+Detect+and+handle+floating+point+errors

[2]
C++98 5.6 Multiplicative operators [expr.mul]p4 says , "If the second operand
of / or % is zero the behavior is undefined".  It's the same in C++11 N3242. 
Floating point division is not distinguished from integral division...

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list