https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91415

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
--- gcc/c-family/c-common.c.jj  2019-07-30 08:27:49.987555303 +0200
+++ gcc/c-family/c-common.c     2019-08-10 18:13:20.821949299 +0200
@@ -1889,6 +1889,7 @@ verify_tree (tree x, struct tlist **pbef
     case COMPOUND_EXPR:
     case TRUTH_ANDIF_EXPR:
     case TRUTH_ORIF_EXPR:
+    sequenced_binary:
       tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
       warn_for_collisions (tmp_nosp);
@@ -2031,8 +2032,18 @@ verify_tree (tree x, struct tlist **pbef
          x = TREE_OPERAND (x, 0);
          goto restart;
        }
-      gcc_fallthrough ();
+      goto do_default;
+
+    case LSHIFT_EXPR:
+    case RSHIFT_EXPR:
+    case COMPONENT_REF:
+    case ARRAY_REF:
+      if (cxx_dialect >= cxx17)
+       goto sequenced_binary;
+      goto do_default;
+
     default:
+    do_default:
       /* For other expressions, simply recurse on their operands.
         Manual tail recursion for unary expressions.
         Other non-expressions need not be processed.  */
fixes most of this, except for the assignment operator case, plus the .*/->
case isn't addressed either.

Reply via email to