re PR c/81417 (-Wsign-compare should print types being compared)
authorMarek Polacek <polacek@redhat.com>
Wed, 9 Aug 2017 08:51:20 +0000 (08:51 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Wed, 9 Aug 2017 08:51:20 +0000 (08:51 +0000)
PR c/81417
* c-array-notation.c (fix_builtin_array_notation_fn): Update calls to
build_conditional_expr.
* c-parser.c (c_parser_conditional_expression): Create locations for
EXP1 and EXP2 from their source ranges.  Pass the locations down to
build_conditional_expr.
* c-tree.h (build_conditional_expr): Update declaration.
* c-typeck.c (build_conditional_expr): Add location_t parameters.
For -Wsign-compare, also print the types.

* input.c (make_location): New overload.
* input.h (make_location): Declare.

* objc-next-runtime-abi-02.c (build_v2_build_objc_method_call): Update
a call to build_conditional_expr.

* Wsign-compare-1.c: New test.
* gcc.dg/compare1.c: Adjust dg-bogus.
* gcc.dg/compare2.c: Likewise.
* gcc.dg/compare3.c: Likewise.
* gcc.dg/compare7.c: Likewise.
* gcc.dg/compare8.c: Likewise.
* gcc.dg/compare9.c: Likewise.
* gcc.dg/pr11492.c: Likewise.

From-SVN: r250984

19 files changed:
gcc/ChangeLog
gcc/c/ChangeLog
gcc/c/c-array-notation.c
gcc/c/c-parser.c
gcc/c/c-tree.h
gcc/c/c-typeck.c
gcc/input.c
gcc/input.h
gcc/objc/ChangeLog
gcc/objc/objc-next-runtime-abi-02.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Wsign-compare-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/compare1.c
gcc/testsuite/gcc.dg/compare2.c
gcc/testsuite/gcc.dg/compare3.c
gcc/testsuite/gcc.dg/compare7.c
gcc/testsuite/gcc.dg/compare8.c
gcc/testsuite/gcc.dg/compare9.c
gcc/testsuite/gcc.dg/pr11492.c

index 448f98cf26ea52a2735ca084566c19ee0a479c0c..b906e6016d2fe3fdca92ca080adbf93a0a5a8c82 100644 (file)
@@ -1,3 +1,9 @@
+2017-08-09  Marek Polacek  <polacek@redhat.com>
+
+       PR c/81417
+       * input.c (make_location): New overload.
+       * input.h (make_location): Declare.
+
 2017-08-08  Alan Modra  <amodra@gmail.com>
            H.J. Lu  <hongjiu.lu@intel.com>
 
index d29f4444c817a050d9ee9bae6b01a6d70e7c4a4e..580cda00d3f2ca7d1612f152b7f0059914b4c307 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-09  Marek Polacek  <polacek@redhat.com>
+
+       PR c/81417
+       * c-array-notation.c (fix_builtin_array_notation_fn): Update calls to
+       build_conditional_expr. 
+       * c-parser.c (c_parser_conditional_expression): Create locations for
+       EXP1 and EXP2 from their source ranges.  Pass the locations down to
+       build_conditional_expr.
+       * c-tree.h (build_conditional_expr): Update declaration.
+       * c-typeck.c (build_conditional_expr): Add location_t parameters.
+       For -Wsign-compare, also print the types.
+
 2017-08-08  Martin Liska  <mliska@suse.cz>
 
        * c-convert.c: Include header files.
index e430f5c681bfdd8e6e3389767d3ca14058c5dc11..40f1cfdabb82b7fddf62247ffc07ad8f949fd700 100644 (file)
@@ -355,8 +355,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       new_cond_expr = build2 (NE_EXPR, TREE_TYPE (func_parm), func_parm,
                              build_zero_cst (TREE_TYPE (func_parm)));
       new_expr = build_conditional_expr
-       (location, new_cond_expr, false, new_yes_expr,
-        TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));
+       (location, new_cond_expr, false,
+        new_yes_expr, TREE_TYPE (new_yes_expr), location,
+        new_no_expr, TREE_TYPE (new_no_expr), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO:
       new_var_init = build_modify_expr
@@ -375,8 +376,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       new_cond_expr = build2 (EQ_EXPR, TREE_TYPE (func_parm), func_parm,
                              build_zero_cst (TREE_TYPE (func_parm)));
       new_expr = build_conditional_expr
-       (location, new_cond_expr, false, new_yes_expr,
-        TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));
+       (location, new_cond_expr, false,
+        new_yes_expr, TREE_TYPE (new_yes_expr), location,
+        new_no_expr, TREE_TYPE (new_no_expr), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO:
       new_var_init = build_modify_expr
@@ -394,8 +396,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       new_cond_expr = build2 (EQ_EXPR, TREE_TYPE (func_parm), func_parm,
                              build_zero_cst (TREE_TYPE (func_parm)));
       new_expr = build_conditional_expr
-       (location, new_cond_expr, false, new_yes_expr,
-        TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));   
+       (location, new_cond_expr, false,
+        new_yes_expr, TREE_TYPE (new_yes_expr), location,
+        new_no_expr, TREE_TYPE (new_no_expr), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO:
       new_var_init = build_modify_expr
@@ -413,8 +416,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       new_cond_expr = build2 (NE_EXPR, TREE_TYPE (func_parm), func_parm,
                              build_zero_cst (TREE_TYPE (func_parm)));
       new_expr = build_conditional_expr
-       (location, new_cond_expr, false, new_yes_expr,
-        TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));   
+       (location, new_cond_expr, false,
+        new_yes_expr, TREE_TYPE (new_yes_expr), location,
+        new_no_expr, TREE_TYPE (new_no_expr), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_MAX:
       if (TYPE_MIN_VALUE (new_var_type))
@@ -434,7 +438,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       new_expr = build_conditional_expr
        (location,
         build2 (LT_EXPR, TREE_TYPE (*new_var), *new_var, func_parm), false,
-        new_yes_expr, TREE_TYPE (*new_var), new_no_expr, TREE_TYPE (*new_var));
+        new_yes_expr, TREE_TYPE (*new_var), location,
+        new_no_expr, TREE_TYPE (*new_var), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_MIN:
       if (TYPE_MAX_VALUE (new_var_type))
@@ -454,7 +459,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       new_expr = build_conditional_expr
        (location,
         build2 (GT_EXPR, TREE_TYPE (*new_var), *new_var, func_parm), false,
-        new_yes_expr, TREE_TYPE (*new_var), new_no_expr, TREE_TYPE (*new_var));
+        new_yes_expr, TREE_TYPE (*new_var), location,
+        new_no_expr, TREE_TYPE (*new_var), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND:
       new_var_init = build_modify_expr
@@ -504,7 +510,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
         build2 (LE_EXPR, TREE_TYPE (array_ind_value), array_ind_value,
                 func_parm),
         false,
-        new_yes_list, TREE_TYPE (*new_var), new_no_list, TREE_TYPE (*new_var));
+        new_yes_list, TREE_TYPE (*new_var), location,
+        new_no_list, TREE_TYPE (*new_var), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND:
       new_var_init = build_modify_expr
@@ -554,7 +561,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
         build2 (GE_EXPR, TREE_TYPE (array_ind_value), array_ind_value,
                 func_parm),
         false,
-        new_yes_list, TREE_TYPE (*new_var), new_no_list, TREE_TYPE (*new_var));
+        new_yes_list, TREE_TYPE (*new_var), location,
+        new_no_list, TREE_TYPE (*new_var), location);
       break;
     case BUILT_IN_CILKPLUS_SEC_REDUCE:
       new_var_init = build_modify_expr
index 606c07c602e83549852937e27b2cb7421eb815f5..6d40a97d5f569fe3f81c4abe43109732376b257f 100644 (file)
@@ -6511,7 +6511,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
                                 tree omp_atomic_lhs)
 {
   struct c_expr cond, exp1, exp2, ret;
-  location_t start, cond_loc, colon_loc, middle_loc;
+  location_t start, cond_loc, colon_loc;
 
   gcc_assert (!after || c_dialect_objc ());
 
@@ -6530,7 +6530,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
     {
       tree eptype = NULL_TREE;
 
-      middle_loc = c_parser_peek_token (parser)->location;
+      location_t middle_loc = c_parser_peek_token (parser)->location;
       pedwarn (middle_loc, OPT_Wpedantic,
               "ISO C forbids omitting the middle term of a ?: expression");
       if (TREE_CODE (cond.value) == EXCESS_PRECISION_EXPR)
@@ -6547,6 +6547,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
       if (eptype)
        exp1.value = build1 (EXCESS_PRECISION_EXPR, eptype, exp1.value);
       exp1.original_type = NULL;
+      exp1.src_range = cond.src_range;
       cond.value = c_objc_common_truthvalue_conversion (cond_loc, exp1.value);
       c_inhibit_evaluation_warnings += cond.value == truthvalue_true_node;
     }
@@ -6578,10 +6579,12 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
     exp2 = convert_lvalue_to_rvalue (exp2_loc, exp2, true, true);
   }
   c_inhibit_evaluation_warnings -= cond.value == truthvalue_true_node;
+  location_t loc1 = make_location (exp1.get_start (), exp1.src_range);
+  location_t loc2 = make_location (exp2.get_start (), exp2.src_range);
   ret.value = build_conditional_expr (colon_loc, cond.value,
                                      cond.original_code == C_MAYBE_CONST_EXPR,
-                                     exp1.value, exp1.original_type,
-                                     exp2.value, exp2.original_type);
+                                     exp1.value, exp1.original_type, loc1,
+                                     exp2.value, exp2.original_type, loc2);
   ret.original_code = ERROR_MARK;
   if (exp1.value == error_mark_node || exp2.value == error_mark_node)
     ret.original_type = NULL;
index a8197eb768dafeca115c9d862095942a6b71e4e6..be2f272d2dd67e2e4fd42da3e2c7865588059c54 100644 (file)
@@ -644,7 +644,7 @@ extern struct c_expr parser_build_binary_op (location_t,
                                             enum tree_code, struct c_expr,
                                             struct c_expr);
 extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
-                                   tree, tree);
+                                   location_t, tree, tree, location_t);
 extern tree build_compound_expr (location_t, tree, tree);
 extern tree c_cast_expr (location_t, struct c_type_name *, tree);
 extern tree build_c_cast (location_t, tree, tree);
index 321c953e7f1367bbef4864b50b36043b77b6d59a..8033a8190f3938b6e0a603160e90ac4c87d3004b 100644 (file)
@@ -4865,8 +4865,8 @@ ep_convert_and_check (location_t loc, tree type, tree expr,
 
 tree
 build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
-                       tree op1, tree op1_original_type, tree op2,
-                       tree op2_original_type)
+                       tree op1, tree op1_original_type, location_t op1_loc,
+                       tree op2, tree op2_original_type, location_t op2_loc)
 {
   tree type1;
   tree type2;
@@ -5031,10 +5031,18 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
                          || (unsigned_op1
                              && tree_expr_nonnegative_warnv_p (op2, &ovf)))
                        /* OK */;
+                     else if (unsigned_op2)
+                       warning_at (op1_loc, OPT_Wsign_compare,
+                                   "operand of ?: changes signedness from "
+                                   "%qT to %qT due to unsignedness of other "
+                                   "operand", TREE_TYPE (orig_op1),
+                                   TREE_TYPE (orig_op2));
                      else
-                       warning_at (colon_loc, OPT_Wsign_compare,
-                                   ("signed and unsigned type in "
-                                    "conditional expression"));
+                       warning_at (op2_loc, OPT_Wsign_compare,
+                                   "operand of ?: changes signedness from "
+                                   "%qT to %qT due to unsignedness of other "
+                                   "operand", TREE_TYPE (orig_op2),
+                                   TREE_TYPE (orig_op1));
                    }
                  if (!op1_maybe_const || TREE_CODE (op1) != INTEGER_CST)
                    op1 = c_wrap_maybe_const (op1, !op1_maybe_const);
index 0480eb24ec01b51c8353258db8c3cf59e6b66931..a01c504fe57d4ff2adf9f6160334fcbfaee1fe41 100644 (file)
@@ -898,6 +898,15 @@ make_location (location_t caret, location_t start, location_t finish)
   return combined_loc;
 }
 
+/* Same as above, but taking a source range rather than two locations.  */
+
+location_t
+make_location (location_t caret, source_range src_range)
+{
+  location_t pure_loc = get_pure_location (caret);
+  return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, NULL);
+}
+
 #define ONE_K 1024
 #define ONE_M (ONE_K * ONE_K)
 
index 7251eef664ebcd43d01daf9656a92e91091d4f8c..f58d248834228cea17b15c2b73b155e32dec1153 100644 (file)
@@ -109,6 +109,7 @@ get_finish (location_t loc)
 
 extern location_t make_location (location_t caret,
                                 location_t start, location_t finish);
+extern location_t make_location (location_t caret, source_range src_range);
 
 void dump_line_table_statistics (void);
 
index 5d632a68b73985d565b292ec90d6e81fff343707..0fc51e65bdddd1309af5747566c32fb4895df17d 100644 (file)
@@ -1,3 +1,9 @@
+2017-08-09  Marek Polacek  <polacek@redhat.com>
+
+       PR c/81417
+       * objc-next-runtime-abi-02.c (build_v2_build_objc_method_call): Update
+       a call to build_conditional_expr.
+
 2017-08-08  Martin Liska  <mliska@suse.cz>
 
        * objc-gnu-runtime-abi-01.c: Include header files.
index a2245a4c3393d77e5bee32bc39ea21ed827473ec..0e7fd545650698133cf9a596e91105bc5208fb35 100644 (file)
@@ -1647,8 +1647,8 @@ build_v2_build_objc_method_call (int super_flag, tree method_prototype,
      /* ??? CHECKME.   */
       ret_val = build_conditional_expr (input_location,
                                        ifexp, 1,
-                                       ret_val, NULL_TREE,
-                                       ftree, NULL_TREE);
+                                       ret_val, NULL_TREE, input_location,
+                                       ftree, NULL_TREE, input_location);
 #endif
     }
   return ret_val;
index 23fbb8c3377b53ba3a493f7649cc6634ed0ef770..7a55e2007325a252a75f8ad334d93f2de33b8326 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-09  Marek Polacek  <polacek@redhat.com>
+
+       PR c/81417
+       * Wsign-compare-1.c: New test.
+       * gcc.dg/compare1.c: Adjust dg-bogus.
+       * gcc.dg/compare2.c: Likewise.
+       * gcc.dg/compare3.c: Likewise.
+       * gcc.dg/compare7.c: Likewise.
+       * gcc.dg/compare8.c: Likewise.
+       * gcc.dg/compare9.c: Likewise.
+       * gcc.dg/pr11492.c: Likewise.
+
 2017-08-08  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR driver/81523
diff --git a/gcc/testsuite/gcc.dg/Wsign-compare-1.c b/gcc/testsuite/gcc.dg/Wsign-compare-1.c
new file mode 100644 (file)
index 0000000..be3bd2f
--- /dev/null
@@ -0,0 +1,83 @@
+/* PR c/81417 */
+/* { dg-do compile } */
+/* { dg-options "-Wsign-compare -fdiagnostics-show-caret" } */
+
+unsigned int
+f0 (int x, unsigned int y)
+{
+  return x ? y : -1; /* { dg-warning "18:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return x ? y : -1;
+                  ^~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f1 (int xxx, unsigned int yyy)
+{
+  return xxx ? yyy : -1; /* { dg-warning "22:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return xxx ? yyy : -1;
+                      ^~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f2 (int xxx, unsigned int yyy)
+{
+  return xxx ? -1 : yyy; /* { dg-warning "16:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return xxx ? -1 : yyy;
+                ^~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f3 (unsigned int yyy)
+{
+  return yyy ?: -1; /* { dg-warning "17:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return yyy ?: -1;
+                 ^~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f4 (int xxx, unsigned yyy, short uuu)
+{
+  return xxx ? yyy : uuu; /* { dg-warning "22:operand of \\?: changes signedness from 'short int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return xxx ? yyy : uuu;
+                      ^~~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f5 (int xxx, unsigned yyy, short uuu)
+{
+  return xxx ? uuu : yyy; /* { dg-warning "16:operand of \\?: changes signedness from 'short int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return xxx ? uuu : yyy;
+                ^~~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f6 (int xxx, unsigned yyy, signed char uuu)
+{
+  return xxx ? yyy : uuu; /* { dg-warning "22:operand of \\?: changes signedness from 'signed char' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return xxx ? yyy : uuu;
+                      ^~~
+   { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f7 (int xxx, unsigned yyy, signed char uuu)
+{
+  return xxx ? uuu : yyy; /* { dg-warning "16:operand of \\?: changes signedness from 'signed char' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+   return xxx ? uuu : yyy;
+                ^~~
+   { dg-end-multiline-output "" } */
+}
index 7becfbdb17f5207c5f693ecc6672d8e84c98530b..ebab8c2cbf7ee60bf9c8ba3c474564b709e1e5c5 100644 (file)
@@ -22,17 +22,17 @@ enum mm2
 
 int f(enum mm1 x)
 {
-  return x == (tf?DI:SI); /* { dg-bogus "signed and unsigned" "case 1" } */
+  return x == (tf?DI:SI); /* { dg-bogus "changes signedness" "case 1" } */
 }
 
 int g(enum mm1 x)
 {
-  return x == (tf?DI:-1); /* { dg-bogus "signed and unsigned" "case 2" } */
+  return x == (tf?DI:-1); /* { dg-bogus "changes signedness" "case 2" } */
 }
 
 int h(enum mm2 x)
 {
-  return x == (tf?DI2:SI2); /* { dg-bogus "signed and unsigned" "case 3" } */
+  return x == (tf?DI2:SI2); /* { dg-bogus "changes signedness" "case 3" } */
 }
 
 int i(enum mm2 x)
index c309f1d00ebc1e111515c0c746c4a36f90164eb4..cfadaccb8af3fbf96ba71a253c027130e7edaeea 100644 (file)
@@ -9,35 +9,35 @@ int tf = 1;
 void f(int x, unsigned int y)
 {
   /* ?: branches are constants.  */
-  x > (tf?64:128); /* { dg-bogus "signed and unsigned" "case 1" } */
-  y > (tf?64:128); /* { dg-bogus "signed and unsigned" "case 2" } */
+  x > (tf?64:128); /* { dg-bogus "changes signedness" "case 1" } */
+  y > (tf?64:128); /* { dg-bogus "changes signedness" "case 2" } */
 
   /* ?: branches are (recursively) constants.  */
-  x > (tf?64:(tf?128:256)); /* { dg-bogus "signed and unsigned" "case 3" } */
-  y > (tf?64:(tf?128:256)); /* { dg-bogus "signed and unsigned" "case 4" } */
+  x > (tf?64:(tf?128:256)); /* { dg-bogus "changes signedness" "case 3" } */
+  y > (tf?64:(tf?128:256)); /* { dg-bogus "changes signedness" "case 4" } */
 
   /* ?: branches are signed constants.  */
-  x > (tf?64:-1); /* { dg-bogus "signed and unsigned" "case 5" } */
+  x > (tf?64:-1); /* { dg-bogus "changes signedness" "case 5" } */
   y > (tf?64:-1); /* { dg-warning "different signedness" "case 6" } */
 
   /* ?: branches are (recursively) signed constants.  */
-  x > (tf?64:(tf?128:-1)); /* { dg-bogus "signed and unsigned" "case 7" } */
+  x > (tf?64:(tf?128:-1)); /* { dg-bogus "changes signedness" "case 7" } */
   y > (tf?64:(tf?128:-1)); /* { dg-warning "different signedness" "case 8" } */
 
   /* Statement expression.  */
-  x > ({tf; 64;}); /* { dg-bogus "signed and unsigned" "case 9" } */
-  y > ({tf; 64;}); /* { dg-bogus "signed and unsigned" "case 10" } */
+  x > ({tf; 64;}); /* { dg-bogus "changes signedness" "case 9" } */
+  y > ({tf; 64;}); /* { dg-bogus "changes signedness" "case 10" } */
 
   /* Statement expression with recursive ?: .  */
-  x > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "signed and unsigned" "case 11" } */
-  y > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "signed and unsigned" "case 12" } */
+  x > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "changes signedness" "case 11" } */
+  y > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "changes signedness" "case 12" } */
 
   /* Statement expression with signed ?:.  */
-  x > ({tf; tf?64:-1;}); /* { dg-bogus "signed and unsigned" "case 13" } */
+  x > ({tf; tf?64:-1;}); /* { dg-bogus "changes signedness" "case 13" } */
   y > ({tf; tf?64:-1;}); /* { dg-warning "different signedness" "case 14" } */
 
   /* Statement expression with recursive signed ?:.  */
-  x > ({tf; tf?64:(tf?128:-1);}); /* { dg-bogus "signed and unsigned" "case 15" } */
+  x > ({tf; tf?64:(tf?128:-1);}); /* { dg-bogus "changes signedness" "case 15" } */
   y > ({tf; tf?64:(tf?128:-1);}); /* { dg-warning "different signedness" "case 16" } */
 
   /* ?: branches are constants.  */
index eda3faf2754a7b1a4041e6edf0ff5c05136f4de6..836231fb8704072b5105a1c8b2ad63a6834aa67b 100644 (file)
@@ -11,49 +11,49 @@ void f(int x, unsigned int y)
   /* Test comparing conditional expressions containing truth values.
      This can occur explicitly, or e.g. when (foo?2:(bar?1:0)) is
      optimized into (foo?2:(bar!=0)).  */
-  x > (tf?64:(tf!=x)); /* { dg-bogus "signed and unsigned" "case 1" } */
-  y > (tf?64:(tf!=x)); /* { dg-bogus "signed and unsigned" "case 2" } */
-  x > (tf?(tf!=x):64); /* { dg-bogus "signed and unsigned" "case 3" } */
-  y > (tf?(tf!=x):64); /* { dg-bogus "signed and unsigned" "case 4" } */
-
-  x > (tf?64:(tf==x)); /* { dg-bogus "signed and unsigned" "case 5" } */
-  y > (tf?64:(tf==x)); /* { dg-bogus "signed and unsigned" "case 6" } */
-  x > (tf?(tf==x):64); /* { dg-bogus "signed and unsigned" "case 7" } */
-  y > (tf?(tf==x):64); /* { dg-bogus "signed and unsigned" "case 8" } */
-
-  x > (tf?64:(tf>x)); /* { dg-bogus "signed and unsigned" "case 9" } */
-  y > (tf?64:(tf>x)); /* { dg-bogus "signed and unsigned" "case 10" } */
-  x > (tf?(tf>x):64); /* { dg-bogus "signed and unsigned" "case 11" } */
-  y > (tf?(tf>x):64); /* { dg-bogus "signed and unsigned" "case 12" } */
-
-  x < (tf?64:(tf<x)); /* { dg-bogus "signed and unsigned" "case 13" } */
-  y < (tf?64:(tf<x)); /* { dg-bogus "signed and unsigned" "case 14" } */
-  x < (tf?(tf<x):64); /* { dg-bogus "signed and unsigned" "case 15" } */
-  y < (tf?(tf<x):64); /* { dg-bogus "signed and unsigned" "case 16" } */
-
-  x > (tf?64:(tf>=x)); /* { dg-bogus "signed and unsigned" "case 17" } */
-  y > (tf?64:(tf>=x)); /* { dg-bogus "signed and unsigned" "case 18" } */
-  x > (tf?(tf>=x):64); /* { dg-bogus "signed and unsigned" "case 19" } */
-  y > (tf?(tf>=x):64); /* { dg-bogus "signed and unsigned" "case 20" } */
-
-  x > (tf?64:(tf<=x)); /* { dg-bogus "signed and unsigned" "case 21" } */
-  y > (tf?64:(tf<=x)); /* { dg-bogus "signed and unsigned" "case 22" } */
-  x > (tf?(tf<=x):64); /* { dg-bogus "signed and unsigned" "case 23" } */
-  y > (tf?(tf<=x):64); /* { dg-bogus "signed and unsigned" "case 24" } */
-
-  x > (tf?64:(tf&&x)); /* { dg-bogus "signed and unsigned" "case 25" } */
-  y > (tf?64:(tf&&x)); /* { dg-bogus "signed and unsigned" "case 26" } */
-  x > (tf?(tf&&x):64); /* { dg-bogus "signed and unsigned" "case 27" } */
-  y > (tf?(tf&&x):64); /* { dg-bogus "signed and unsigned" "case 28" } */
-
-  x > (tf?64:(tf||x)); /* { dg-bogus "signed and unsigned" "case 29" } */
-  y > (tf?64:(tf||x)); /* { dg-bogus "signed and unsigned" "case 30" } */
-  x > (tf?(tf||x):64); /* { dg-bogus "signed and unsigned" "case 31" } */
-  y > (tf?(tf||x):64); /* { dg-bogus "signed and unsigned" "case 32" } */
-
-  x > (tf?64:(!tf)); /* { dg-bogus "signed and unsigned" "case 33" } */
-  y > (tf?64:(!tf)); /* { dg-bogus "signed and unsigned" "case 34" } */
-  x > (tf?(!tf):64); /* { dg-bogus "signed and unsigned" "case 35" } */
-  y > (tf?(!tf):64); /* { dg-bogus "signed and unsigned" "case 36" } */
+  x > (tf?64:(tf!=x)); /* { dg-bogus "changes signedness" "case 1" } */
+  y > (tf?64:(tf!=x)); /* { dg-bogus "changes signedness" "case 2" } */
+  x > (tf?(tf!=x):64); /* { dg-bogus "changes signedness" "case 3" } */
+  y > (tf?(tf!=x):64); /* { dg-bogus "changes signedness" "case 4" } */
+
+  x > (tf?64:(tf==x)); /* { dg-bogus "changes signedness" "case 5" } */
+  y > (tf?64:(tf==x)); /* { dg-bogus "changes signedness" "case 6" } */
+  x > (tf?(tf==x):64); /* { dg-bogus "changes signedness" "case 7" } */
+  y > (tf?(tf==x):64); /* { dg-bogus "changes signedness" "case 8" } */
+
+  x > (tf?64:(tf>x)); /* { dg-bogus "changes signedness" "case 9" } */
+  y > (tf?64:(tf>x)); /* { dg-bogus "changes signedness" "case 10" } */
+  x > (tf?(tf>x):64); /* { dg-bogus "changes signedness" "case 11" } */
+  y > (tf?(tf>x):64); /* { dg-bogus "changes signedness" "case 12" } */
+
+  x < (tf?64:(tf<x)); /* { dg-bogus "changes signedness" "case 13" } */
+  y < (tf?64:(tf<x)); /* { dg-bogus "changes signedness" "case 14" } */
+  x < (tf?(tf<x):64); /* { dg-bogus "changes signedness" "case 15" } */
+  y < (tf?(tf<x):64); /* { dg-bogus "changes signedness" "case 16" } */
+
+  x > (tf?64:(tf>=x)); /* { dg-bogus "changes signedness" "case 17" } */
+  y > (tf?64:(tf>=x)); /* { dg-bogus "changes signedness" "case 18" } */
+  x > (tf?(tf>=x):64); /* { dg-bogus "changes signedness" "case 19" } */
+  y > (tf?(tf>=x):64); /* { dg-bogus "changes signedness" "case 20" } */
+
+  x > (tf?64:(tf<=x)); /* { dg-bogus "changes signedness" "case 21" } */
+  y > (tf?64:(tf<=x)); /* { dg-bogus "changes signedness" "case 22" } */
+  x > (tf?(tf<=x):64); /* { dg-bogus "changes signedness" "case 23" } */
+  y > (tf?(tf<=x):64); /* { dg-bogus "changes signedness" "case 24" } */
+
+  x > (tf?64:(tf&&x)); /* { dg-bogus "changes signedness" "case 25" } */
+  y > (tf?64:(tf&&x)); /* { dg-bogus "changes signedness" "case 26" } */
+  x > (tf?(tf&&x):64); /* { dg-bogus "changes signedness" "case 27" } */
+  y > (tf?(tf&&x):64); /* { dg-bogus "changes signedness" "case 28" } */
+
+  x > (tf?64:(tf||x)); /* { dg-bogus "changes signedness" "case 29" } */
+  y > (tf?64:(tf||x)); /* { dg-bogus "changes signedness" "case 30" } */
+  x > (tf?(tf||x):64); /* { dg-bogus "changes signedness" "case 31" } */
+  y > (tf?(tf||x):64); /* { dg-bogus "changes signedness" "case 32" } */
+
+  x > (tf?64:(!tf)); /* { dg-bogus "changes signedness" "case 33" } */
+  y > (tf?64:(!tf)); /* { dg-bogus "changes signedness" "case 34" } */
+  x > (tf?(!tf):64); /* { dg-bogus "changes signedness" "case 35" } */
+  y > (tf?(!tf):64); /* { dg-bogus "changes signedness" "case 36" } */
 
 }
index e2fbc04bfc2cd716f969399943dab91f97a2110b..b6fe6e78334e7e387d7d206687aee1ac0dc099de 100644 (file)
@@ -6,5 +6,5 @@
 
 int f(unsigned a, int b)
 {
-  return a < b;  /* { dg-bogus "signed and unsigned" } */
+  return a < b;  /* { dg-bogus "changes signedness" } */
 }
index d723c45a0956ce641ade9a27961ede16d3813de2..d09b69c53a244afa4a4567c88c31796ad1df751a 100644 (file)
@@ -4,18 +4,18 @@
 int
 f(unsigned short a1, unsigned short a2, unsigned int b)
 {
-  return ((a1+a2)|5) > b ? 2 : 3;  /* { dg-bogus "signed and unsigned" } */
+  return ((a1+a2)|5) > b ? 2 : 3;  /* { dg-bogus "changes signedness" } */
 }
 
 int
 g(unsigned short a1, unsigned short a2, unsigned int b)
 {
-  return ((a1+a2)&5) > b ? 2 : 3;  /* { dg-bogus "signed and unsigned" } */
+  return ((a1+a2)&5) > b ? 2 : 3;  /* { dg-bogus "changes signedness" } */
 }
 
 int
 h(unsigned short a1, unsigned short a2, unsigned int b)
 {
-  return ((a1+a2)^5) > b ? 2 : 3;  /* { dg-bogus "signed and unsigned" } */
+  return ((a1+a2)^5) > b ? 2 : 3;  /* { dg-bogus "changes signedness" } */
 }
 
index 02150cb1fb6bad40fd0f3b69ca31cf5456bd4a18..fba61e42a48ea2ee26bf5dd2cec4806703c3fa9a 100644 (file)
@@ -22,20 +22,20 @@ enum mm2
 
 int f(enum mm1 x)
 {
-  return x == (tf?DI:SI); /* { dg-bogus "signed and unsigned" "case 1" } */
+  return x == (tf?DI:SI); /* { dg-bogus "changes signedness" "case 1" } */
 }
 
 int g(enum mm1 x)
 {
-  return x == (tf?DI:-1); /* { dg-bogus "signed and unsigned" "case 2" } */
+  return x == (tf?DI:-1); /* { dg-bogus "changes signedness" "case 2" } */
 }
 
 int h(enum mm2 x)
 {
-  return x == (tf?DI2:SI2); /* { dg-bogus "signed and unsigned" "case 3" } */
+  return x == (tf?DI2:SI2); /* { dg-bogus "changes signedness" "case 3" } */
 }
 
 int i(enum mm2 x)
 {
-  return x == (tf?DI2:-1); /* { dg-bogus "signed and unsigned" "case 4" } */
+  return x == (tf?DI2:-1); /* { dg-bogus "changes signedness" "case 4" } */
 }
index cf17712dde12ee1b8015c938fb859290df2bab47..86435a83e79bbe56c29d2cb303f72a236dfb029f 100644 (file)
@@ -5,7 +5,7 @@ int main( void )
 {
   unsigned int a;
   unsigned char b;
-  for ( a = 0, b = 2; a > b * 100; a++ ) /* { dg-bogus "comparison between signed and unsigned integer" } */
+  for ( a = 0, b = 2; a > b * 100; a++ ) /* { dg-bogus "comparison of integer expressions of different signedness" } */
     { ; }
 
   return 0;