https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84831
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- diff -upbd of that for better readability. --- gcc/stmt.c.jj 2018-01-03 10:19:55.150533956 +0100 +++ gcc/stmt.c 2018-03-12 13:25:03.790733765 +0100 @@ -247,7 +247,8 @@ parse_output_constraint (const char **co } /* Loop through the constraint string. */ - for (p = constraint + 1; *p; p += CONSTRAINT_LEN (*p, p)) + for (p = constraint + 1; *p; ) + { switch (*p) { case '+': @@ -304,6 +305,11 @@ parse_output_constraint (const char **co break; } + for (size_t len = CONSTRAINT_LEN (*p, p); len; len--, p++) + if (*p == '\0') + break; + } + return true; } Note, I was wrong about insufficient, your patch was sufficient, I was initially also changing parse_input_constraint but it turned out to be unnecessary.