Make more bad uses of fallthrough attribute into pedwarns.
authorJoseph Myers <joseph@codesourcery.com>
Thu, 21 Nov 2019 20:29:40 +0000 (20:29 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Thu, 21 Nov 2019 20:29:40 +0000 (20:29 +0000)
commit6c80b1b56dec2691436f3e2676e3d1b105b01b89
tree9a51651149c41db896f090d511d9b1081849f9d7
parentb30e83f809b2aa65222eb969f8b4523e5e1961f2
Make more bad uses of fallthrough attribute into pedwarns.

Various bad uses of the [[fallthrough]] attribute are constraint
violations in C2x, so need pedwarns rather than warnings.

This patch duly turns the relevant warnings into pedwarns.  The
relevant code is not specific to C, and does not know which form the
attribute was given in ([[fallthrough]] or [[gnu::fallthrough]] or
__attribute__((fallthrough))), but as I understand it these usages are
also erroneous for C++ and it seems reasonable to give a pedwarn here
even when a form other than [[fallthrough]] is being used.

The precise meaning of the standard wording about "The next statement
that would be executed" seems a but unclear in some corner cases; the
tests added keep to cases where it is clear whether or not the next
statement executed is of the required form.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc:
* gimplify.c (expand_FALLTHROUGH_r, expand_FALLTHROUGH): Use
pedwarn instead of warning_at for fallthrough not preceding a case
or default label.

gcc/c-family:
* c-attribs.c (handle_fallthrough_attribute): Use pedwarn instead
of warning.

gcc/testsuite:
* gcc.dg/c2x-attr-fallthrough-6.c: New test.  Split out from
c2x-attr-fallthrough-3.c.
* gcc.dg/c2x-attr-fallthrough-1.c: Add more tests.
* gcc.dg/c2x-attr-fallthrough-2.c: Update expected diagnostics.
* gcc.dg/c2x-attr-fallthrough-3.c: Split inside-switch part of
test out to c2x-attr-fallthrough-6.c.

From-SVN: r278599
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-attribs.c
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/c2x-attr-fallthrough-1.c
gcc/testsuite/gcc.dg/c2x-attr-fallthrough-2.c
gcc/testsuite/gcc.dg/c2x-attr-fallthrough-3.c
gcc/testsuite/gcc.dg/c2x-attr-fallthrough-6.c [new file with mode: 0644]