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.