cp-tree.h (warn_float_equal): Declare.
authorDirk Zoller <duz@rtsffm.com>
Thu, 30 Sep 1999 06:15:53 +0000 (06:15 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 30 Sep 1999 06:15:53 +0000 (00:15 -0600)
        * cp-tree.h (warn_float_equal): Declare.
        * decl2.c (warn_float_equal): Define.
        (lang_decode_option): Recognize -W[no-]float-equal.
        * typeck.c (build_binary_op_nodefault): Conditionally warn
        about equality tests of floating point types.

From-SVN: r29721

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl2.c
gcc/cp/typeck.c

index 43ebd72..356e7c6 100644 (file)
@@ -1,3 +1,11 @@
+Thu Sep 30 00:13:27 1999  Dirk Zoller  <duz@rtsffm.com>
+
+       * cp-tree.h (warn_float_equal): Declare.
+       * decl2.c (warn_float_equal): Define.
+       (lang_decode_option): Recognize -W[no-]float-equal.
+       * typeck.c (build_binary_op_nodefault): Conditionally warn
+       about equality tests of floating point types.
+
 1999-09-29  Jason Merrill  <jason@yorick.cygnus.com>
 
        Support normal type_info-based EH mechanisms with -fno-rtti.
index cd3a2dd..a3146dd 100644 (file)
@@ -893,6 +893,10 @@ extern int warn_missing_braces;
 
 extern int warn_sign_compare;
 
+/* Warn about testing equality of floating point numbers. */
+
+extern int warn_float_equal;
+
 /* Warn about a subscript that has type char.  */
 
 extern int warn_char_subscripts;
index 6fb90fe..22e03f3 100644 (file)
@@ -277,6 +277,10 @@ int warn_missing_braces;
 
 int warn_sign_compare;
 
+/* Warn about testing equality of floating point numbers. */
+
+int warn_float_equal = 0;
+
 /* Warn about *printf or *scanf format/argument anomalies.  */
 
 int warn_format;
@@ -689,6 +693,8 @@ lang_decode_option (argc, argv)
        warn_missing_braces = setting;
       else if (!strcmp (p, "sign-compare"))
        warn_sign_compare = setting;
+      else if (!strcmp (p, "float-equal"))
+       warn_float_equal = setting;
       else if (!strcmp (p, "format"))
        warn_format = setting;
       else if (!strcmp (p, "conversion"))
index 6a18b11..4a28de2 100644 (file)
@@ -3574,6 +3574,9 @@ build_binary_op_nodefault (code, orig_op0, orig_op1, error_code)
 
     case EQ_EXPR:
     case NE_EXPR:
+      if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
+       warning ("comparing floating point with == or != is unsafe");
+
       build_type = boolean_type_node; 
       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
           || code0 == COMPLEX_TYPE)