aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2018-03-02 17:51:24 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2018-03-02 17:51:24 +0000
commit0805d020d789e40557531df22565eae7809e7f17 (patch)
tree683423e050a408f0de70ca9f9cae3994238bb6d2
parent7299275f74a31f7f3774ade89c7447fc6fb7cf98 (diff)
downloadgcc-0805d020d789e40557531df22565eae7809e7f17.zip
gcc-0805d020d789e40557531df22565eae7809e7f17.tar.gz
gcc-0805d020d789e40557531df22565eae7809e7f17.tar.bz2
re PR c++/84171 (ICE with -Wsign-compare)
PR c++/84171 * c-warn.c (warn_for_sign_compare): Bail out if any of the operands is erroneous. * g++.dg/warn/Wsign-compare-8.C: New test. From-SVN: r258147
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-warn.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-8.C8
4 files changed, 22 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 27cc43e..fe1fc81 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-02 Marek Polacek <polacek@redhat.com>
+
+ PR c++/84171
+ * c-warn.c (warn_for_sign_compare): Bail out if any of the operands
+ is erroneous.
+
2018-03-02 Thomas Schwinge <thomas@codesourcery.com>
* c-attribs.c (c_common_attribute_table): Remove "cilk simd
diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c
index f3fb62c..7c38595 100644
--- a/gcc/c-family/c-warn.c
+++ b/gcc/c-family/c-warn.c
@@ -1931,6 +1931,9 @@ warn_for_sign_compare (location_t location,
tree op0, tree op1,
tree result_type, enum tree_code resultcode)
{
+ if (error_operand_p (orig_op0) || error_operand_p (orig_op1))
+ return;
+
int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
int unsignedp0, unsignedp1;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0c73e80..a848cd3f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-02 Marek Polacek <polacek@redhat.com>
+
+ PR c++/84171
+ * g++.dg/warn/Wsign-compare-8.C: New test.
+
2018-03-02 Jakub Jelinek <jakub@redhat.com>
PR c++/84662
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-8.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-8.C
new file mode 100644
index 0000000..237ba84
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-8.C
@@ -0,0 +1,8 @@
+// PR c++/84171
+// { dg-options "-Wsign-compare" }
+
+bool foo (char c)
+{
+ const int i = 0 = 0; // { dg-error "lvalue" }
+ return c = i;
+} // { dg-warning "control reaches" }