aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2017-07-27 15:02:17 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2017-07-27 15:02:17 +0000
commit06bd22f6099abe4fec73c988daf4cacd68f34329 (patch)
treee482b25a9f983a087d053bd784ba65584a344020
parent27c8b49bfc23b658bc8ea90e653f76e26e856c43 (diff)
downloadgcc-06bd22f6099abe4fec73c988daf4cacd68f34329.zip
gcc-06bd22f6099abe4fec73c988daf4cacd68f34329.tar.gz
gcc-06bd22f6099abe4fec73c988daf4cacd68f34329.tar.bz2
re PR c/81417 (-Wsign-compare should print types being compared)
PR c/81417 * c-warn.c (warn_for_sign_compare): Tweak the warning message. Print the types. * c-c++-common/Wsign-compare-1.c: New test. * g++.dg/warn/Wsign-compare-2.C: Update dg-warning. * g++.dg/warn/Wsign-compare-4.C: Likewise. * g++.dg/warn/Wsign-compare-6.C: Likewise. * g++.dg/warn/compare1.C: Likewise. * gcc.dg/compare1.c: Likewise. * gcc.dg/compare2.c: Likewise. * gcc.dg/compare4.c: Likewise. * gcc.dg/compare5.c: Likewise. * gcc.dg/pr35430.c: Likewise. * gcc.dg/pr60087.c: Likewise. From-SVN: r250630
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-warn.c7
-rw-r--r--gcc/testsuite/ChangeLog15
-rw-r--r--gcc/testsuite/c-c++-common/Wsign-compare-1.c33
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-2.C2
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-4.C4
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-6.C2
-rw-r--r--gcc/testsuite/g++.dg/warn/compare1.C2
-rw-r--r--gcc/testsuite/gcc.dg/compare1.c2
-rw-r--r--gcc/testsuite/gcc.dg/compare2.c8
-rw-r--r--gcc/testsuite/gcc.dg/compare4.c4
-rw-r--r--gcc/testsuite/gcc.dg/compare5.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr35430.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr60087.c2
14 files changed, 74 insertions, 19 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 4a2b9ad..12683a6 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2017-07-27 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * c-warn.c (warn_for_sign_compare): Tweak the warning message. Print
+ the types.
+
2017-07-27 Jakub Jelinek <jakub@redhat.com>
* c-attribs.c (c_common_attribute_table): Add noipa attribute.
diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c
index a8b38c1..505070e 100644
--- a/gcc/c-family/c-warn.c
+++ b/gcc/c-family/c-warn.c
@@ -1891,9 +1891,10 @@ warn_for_sign_compare (location_t location,
c_common_signed_type (base_type)))
/* OK */;
else
- warning_at (location,
- OPT_Wsign_compare,
- "comparison between signed and unsigned integer expressions");
+ warning_at (location, OPT_Wsign_compare,
+ "comparison of integer expressions of different "
+ "signedness: %qT and %qT", TREE_TYPE (orig_op0),
+ TREE_TYPE (orig_op1));
}
/* Warn if two unsigned values are being compared in a size larger
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a57caaa..5f964a3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,18 @@
+2017-07-27 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * c-c++-common/Wsign-compare-1.c: New test.
+ * g++.dg/warn/Wsign-compare-2.C: Update dg-warning.
+ * g++.dg/warn/Wsign-compare-4.C: Likewise.
+ * g++.dg/warn/Wsign-compare-6.C: Likewise.
+ * g++.dg/warn/compare1.C: Likewise.
+ * gcc.dg/compare1.c: Likewise.
+ * gcc.dg/compare2.c: Likewise.
+ * gcc.dg/compare4.c: Likewise.
+ * gcc.dg/compare5.c: Likewise.
+ * gcc.dg/pr35430.c: Likewise.
+ * gcc.dg/pr60087.c: Likewise.
+
2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
PR middle-end/81564
diff --git a/gcc/testsuite/c-c++-common/Wsign-compare-1.c b/gcc/testsuite/c-c++-common/Wsign-compare-1.c
new file mode 100644
index 0000000..b9b17a9
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wsign-compare-1.c
@@ -0,0 +1,33 @@
+/* PR c/81417 */
+/* { dg-do compile } */
+/* { dg-options "-Wsign-compare" } */
+
+int
+fn1 (signed int a, unsigned int b)
+{
+ return a < b; /* { dg-warning "comparison of integer expressions of different signedness: 'int' and 'unsigned int'" } */
+}
+
+int
+fn2 (signed int a, unsigned int b)
+{
+ return b < a; /* { dg-warning "comparison of integer expressions of different signedness: 'unsigned int' and 'int'" } */
+}
+
+int
+fn3 (signed long int a, unsigned long int b)
+{
+ return b < a; /* { dg-warning "comparison of integer expressions of different signedness: 'long unsigned int' and 'long int'" } */
+}
+
+int
+fn4 (signed short int a, unsigned int b)
+{
+ return b < a; /* { dg-warning "comparison of integer expressions of different signedness: 'unsigned int' and 'short int'" } */
+}
+
+int
+fn5 (unsigned int a, signed int b)
+{
+ return a < b; /* { dg-warning "comparison of integer expressions of different signedness: 'unsigned int' and 'int'" } */
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C
index 2b83606..b66e8b4 100644
--- a/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C
@@ -6,5 +6,5 @@ void
foo (__complex__ int i)
{
i == 0u;
- i == ~1u; // { dg-warning "comparison between signed and unsigned integer expressions" }
+ i == ~1u; // { dg-warning "comparison of integer expressions of different signedness" }
}
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C
index b3eb8e2..e92ab13 100644
--- a/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C
@@ -3,10 +3,10 @@
int foo(unsigned int *a, int b)
{
- return (*a) <= b; // { dg-warning "comparison between signed and unsigned" }
+ return (*a) <= b; // { dg-warning "comparison of integer expressions of different signedness" }
}
int bar(unsigned int *a, int b)
{
- return *a <= b; // { dg-warning "comparison between signed and unsigned" }
+ return *a <= b; // { dg-warning "comparison of integer expressions of different signedness" }
}
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C
index 1f8af66..71b4ebf 100644
--- a/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C
@@ -8,7 +8,7 @@ int main()
int i = 5;
int const ic = 5;
- i < 5u; // { dg-warning "5:comparison between signed and unsigned" }
+ i < 5u; // { dg-warning "5:comparison of integer expressions of different signedness" }
ic < 5u;
FIVE < 5u;
}
diff --git a/gcc/testsuite/g++.dg/warn/compare1.C b/gcc/testsuite/g++.dg/warn/compare1.C
index e005922..38f4dff 100644
--- a/gcc/testsuite/g++.dg/warn/compare1.C
+++ b/gcc/testsuite/g++.dg/warn/compare1.C
@@ -6,5 +6,5 @@
int f(unsigned a, int b)
{
- return a < b; /* { dg-warning "signed and unsigned" } */
+ return a < b; /* { dg-warning "comparison of integer expressions of different signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare1.c b/gcc/testsuite/gcc.dg/compare1.c
index 17ba3ee..7becfbdb 100644
--- a/gcc/testsuite/gcc.dg/compare1.c
+++ b/gcc/testsuite/gcc.dg/compare1.c
@@ -37,5 +37,5 @@ int h(enum mm2 x)
int i(enum mm2 x)
{
- return x == (tf?DI2:-1); /* { dg-warning "signed and unsigned" "case 4" } */
+ return x == (tf?DI2:-1); /* { dg-warning "different signedness" "case 4" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare2.c b/gcc/testsuite/gcc.dg/compare2.c
index 0625eb9..c309f1d 100644
--- a/gcc/testsuite/gcc.dg/compare2.c
+++ b/gcc/testsuite/gcc.dg/compare2.c
@@ -18,11 +18,11 @@ void f(int x, unsigned int y)
/* ?: branches are signed constants. */
x > (tf?64:-1); /* { dg-bogus "signed and unsigned" "case 5" } */
- y > (tf?64:-1); /* { dg-warning "signed and unsigned" "case 6" } */
+ 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" } */
- y > (tf?64:(tf?128:-1)); /* { dg-warning "signed and unsigned" "case 8" } */
+ y > (tf?64:(tf?128:-1)); /* { dg-warning "different signedness" "case 8" } */
/* Statement expression. */
x > ({tf; 64;}); /* { dg-bogus "signed and unsigned" "case 9" } */
@@ -34,11 +34,11 @@ void f(int x, unsigned int y)
/* Statement expression with signed ?:. */
x > ({tf; tf?64:-1;}); /* { dg-bogus "signed and unsigned" "case 13" } */
- y > ({tf; tf?64:-1;}); /* { dg-warning "signed and unsigned" "case 14" } */
+ 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" } */
- y > ({tf; tf?64:(tf?128:-1);}); /* { dg-warning "signed and unsigned" "case 16" } */
+ y > ({tf; tf?64:(tf?128:-1);}); /* { dg-warning "different signedness" "case 16" } */
/* ?: branches are constants. */
tf ? x : (tf?64:32); /* { dg-bogus "conditional expression" "case 17" } */
diff --git a/gcc/testsuite/gcc.dg/compare4.c b/gcc/testsuite/gcc.dg/compare4.c
index e5dad4d..299d488 100644
--- a/gcc/testsuite/gcc.dg/compare4.c
+++ b/gcc/testsuite/gcc.dg/compare4.c
@@ -10,7 +10,7 @@ int foo(int x, int y, unsigned u)
{
/* A COMPOUND_EXPR is non-negative if the last element is known to
be non-negative. */
- if (u < (bar(), -1)) /*{ dg-warning "9:signed and unsigned" "COMPOUND_EXPR" }*/
+ if (u < (bar(), -1)) /*{ dg-warning "9:different signedness" "COMPOUND_EXPR" }*/
return x;
if (u < (bar(), 10))
return x;
@@ -34,7 +34,7 @@ int foo(int x, int y, unsigned u)
/* A MODIFY_EXPR is non-negative if the new value is known to be
non-negative. */
- if (u < (x = -1)) /* { dg-warning "9:signed and unsigned" "MODIFY_EXPR" } */
+ if (u < (x = -1)) /* { dg-warning "9:different signedness" "MODIFY_EXPR" } */
return x;
if (u < (x = 10))
return x;
diff --git a/gcc/testsuite/gcc.dg/compare5.c b/gcc/testsuite/gcc.dg/compare5.c
index f19c575..3a502f1 100644
--- a/gcc/testsuite/gcc.dg/compare5.c
+++ b/gcc/testsuite/gcc.dg/compare5.c
@@ -10,7 +10,7 @@ int foo(int x, int y, unsigned u)
{
/* A *_DIV_EXPR is non-negative if both operands are. */
- if (u < ((x=-22)/33)) /* { dg-warning "signed and unsigned" "DIV_EXPR" } */
+ if (u < ((x=-22)/33)) /* { dg-warning "different signedness" "DIV_EXPR" } */
return x;
if (u < ((x=22)/33))
@@ -25,7 +25,7 @@ int foo(int x, int y, unsigned u)
/* A *_MOD_EXPR is non-negative if the first operand is. */
- if (u < ((x=-22)%33)) /* { dg-warning "signed and unsigned" "MOD_EXPR" } */
+ if (u < ((x=-22)%33)) /* { dg-warning "different signedness" "MOD_EXPR" } */
return x;
if (u < ((x=22)%-33))
diff --git a/gcc/testsuite/gcc.dg/pr35430.c b/gcc/testsuite/gcc.dg/pr35430.c
index ab5e4ca..7365ccf 100644
--- a/gcc/testsuite/gcc.dg/pr35430.c
+++ b/gcc/testsuite/gcc.dg/pr35430.c
@@ -6,5 +6,5 @@ void
foo (__complex__ int i)
{
i == 0u;
- i == ~1u; /* { dg-warning "comparison between signed and unsigned integer expressions" } */
+ i == ~1u; /* { dg-warning "comparison of integer expressions of different signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr60087.c b/gcc/testsuite/gcc.dg/pr60087.c
index 9cdd589..c6cf7aa 100644
--- a/gcc/testsuite/gcc.dg/pr60087.c
+++ b/gcc/testsuite/gcc.dg/pr60087.c
@@ -10,5 +10,5 @@ foo (unsigned int ui, int i)
b = 0 != ~uc; /* { dg-warning "9:promoted ~unsigned is always non-zero" } */
b = 2 != ~uc; /* { dg-warning "9:comparison of promoted ~unsigned with constant" } */
b = uc == ~uc; /* { dg-warning "10:comparison of promoted ~unsigned with unsigned" } */
- b = i == ui; /* { dg-warning "9:comparison between signed and unsigned integer expressions" } */
+ b = i == ui; /* { dg-warning "9:comparison of integer expressions of different signedness" } */
}