Subject: Re: [Boost-bugs] [Boost C++ Libraries] #8408: Boost is not compatible with Clang's -Wimplicit-fallthrough diagnostic
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-04-10 00:40:18
#8408: Boost is not compatible with Clang's -Wimplicit-fallthrough diagnostic
------------------------------------------------------+---------------------
Reporter: Alexander Kornienko <alexfh@â¦> | Owner: johnmaddock
Type: Patches | Status: new
Milestone: To Be Determined | Component: config
Version: Boost Development Trunk | Severity: Problem
Resolution: | Keywords:
------------------------------------------------------+---------------------
Comment (by Alexander Kornienko <alexfh@â¦>):
Replying to [comment:9 viboes]:
> I think John is right. It would be better if the macro contains the ';'
so that there is no risk in introducing a new warning.
I'm happy to change the macro to not require a semicolon, but first I'd
like to share my arguments for the opposite solution:
1. Consistency with break/return/continue/throw/goto:
{{{
break;
return xxx;
BOOST_FALLTHROUGH;
// but without semicolon it looks alien:
BOOST_FALLTHROUGH
}}}
2. More generally, C++ statements usually end with a semicolon or closing
brace, and a standalone identifier doesn't look like a separate valid C++
statement; this makes code less readable.
3. For the same reason as 2. this can confuse various tools, such as code
editors, code formatters, linters etc. E.g. vim treats the next line after
a standalone identifier as a continuation, and adds extra indent to it.
clang-format - the new C++ formatter - is not going to format this
correctly too.
4. If the macro doesn't require a semicolon, but a developer inserts it by
mistake, presence of this extra null-statement will lead to two warnings
on Clang with -Wimplicit-fallthrough: fallthrough annotation is not
immediately before a fallthrough and fallthrough is not annotated. On
other compilers this will only warn if a compiler complains about null-
statements. I consider this a worse situation than when a macro requires a
semicolon, and all compilers will warn if a developer forgets it.
That's it. Now it's up to you to decide what is better for Boost.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/8408#comment:10> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:12 UTC