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.