Commit ee19ef45 by Jakub Jelinek Committed by Jakub Jelinek

invoke.texi: Document accepting Else, fallthrough.

	* doc/invoke.texi: Document accepting Else, fallthrough.

	* lex.c (fallthrough_comment_p): Accept Else, fallthrough.

	* c-c++-common/Wimplicit-fallthrough-23.c (foo): Add further tests.

From-SVN: r240886
parent 81b02905
2016-10-08 Jakub Jelinek <jakub@redhat.com> 2016-10-08 Jakub Jelinek <jakub@redhat.com>
* doc/invoke.texi: Document accepting Else, fallthrough.
* doc/invoke.texi (-Wimplicit-fallthrough): Document FALLTHRU comment * doc/invoke.texi (-Wimplicit-fallthrough): Document FALLTHRU comment
style changes. style changes.
......
...@@ -4181,11 +4181,11 @@ should match one of the following regular expressions: ...@@ -4181,11 +4181,11 @@ should match one of the following regular expressions:
@item @code{lint -fallthrough ?} @item @code{lint -fallthrough ?}
@item @code{[ \t.!]*(ELSE |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?} @item @code{[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?}
@item @code{[ \t.!]*(Else |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?} @item @code{[ \t.!]*(Else,? |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?}
@item @code{[ \t.!]*([Ee]lse |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?} @item @code{[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?}
@end itemize @end itemize
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
* c-c++-common/Wimplicit-fallthrough-23.c (foo): Add further tests. * c-c++-common/Wimplicit-fallthrough-23.c (foo): Add further tests.
* c-c++-common/Wimplicit-fallthrough-23.c (foo): Add further tests.
* c-c++-common/Wimplicit-fallthrough-23.c: New test. * c-c++-common/Wimplicit-fallthrough-23.c: New test.
* c-c++-common/Wimplicit-fallthrough-24.c: New test. * c-c++-common/Wimplicit-fallthrough-24.c: New test.
......
...@@ -114,6 +114,12 @@ foo (int i) ...@@ -114,6 +114,12 @@ foo (int i)
case 34: case 34:
bar (34); bar (34);
break; break;
case 35:
bar (35); /* { dg-bogus "this statement may \[laf]* through" } */
/* Else, fall-through. */
case 36:
bar (36);
break;
default: default:
break; break;
} }
...@@ -225,6 +231,12 @@ foo (int i) ...@@ -225,6 +231,12 @@ foo (int i)
case 34: case 34:
bar (34); bar (34);
break; break;
case 35:
bar (35); /* { dg-bogus "this statement may \[laf]* through" } */
// Else, fall-through
case 36:
bar (36);
break;
default: default:
break; break;
} }
......
2016-10-08 Jakub Jelinek <jakub@redhat.com> 2016-10-08 Jakub Jelinek <jakub@redhat.com>
* lex.c (fallthrough_comment_p): Accept Else, fallthrough.
* lex.c (fallthrough_comment_p): Extend to handle more common FALLTHRU * lex.c (fallthrough_comment_p): Extend to handle more common FALLTHRU
comment styles. comment styles.
......
...@@ -2074,9 +2074,9 @@ fallthrough_comment_p (cpp_reader *pfile, const unsigned char *comment_start) ...@@ -2074,9 +2074,9 @@ fallthrough_comment_p (cpp_reader *pfile, const unsigned char *comment_start)
from++; from++;
} }
/* Whole comment contents (regex): /* Whole comment contents (regex):
[ \t.!]*(ELSE |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)? [ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?
[ \t.!]*(Else |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)? [ \t.!]*(Else,? |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?
[ \t.!]*([Ee]lse |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)? [ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?
*/ */
else else
{ {
...@@ -2089,11 +2089,18 @@ fallthrough_comment_p (cpp_reader *pfile, const unsigned char *comment_start) ...@@ -2089,11 +2089,18 @@ fallthrough_comment_p (cpp_reader *pfile, const unsigned char *comment_start)
if ((size_t) (pfile->buffer->cur - from) if ((size_t) (pfile->buffer->cur - from)
< sizeof "else fallthru" - 1) < sizeof "else fallthru" - 1)
return false; return false;
if (f == 'E' && memcmp (from + 1, "LSE F", sizeof "LSE F" - 1) == 0) if (f == 'E' && memcmp (from + 1, "LSE", sizeof "LSE" - 1) == 0)
all_upper = true; all_upper = true;
else if (memcmp (from + 1, "lse ", sizeof "lse " - 1)) else if (memcmp (from + 1, "lse", sizeof "lse" - 1))
return false;
from += sizeof "else" - 1;
if (*from == ',')
from++;
if (*from != ' ')
return false;
from++;
if (all_upper && *from == 'f')
return false; return false;
from += sizeof "else " - 1;
if (f == 'e' && *from == 'F') if (f == 'e' && *from == 'F')
return false; return false;
f = *from; f = *from;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment