-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[clang] Add -Wimplicit-fallthrough to -Wextra #97926
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Thank you for submitting a Pull Request (PR) to the LLVM Project! This PR will be automatically labeled and the relevant teams will be If you wish to, you can add reviewers by using the "Reviewers" section on this page. If this is not working for you, it is probably because you do not have write If you have received no comments on your PR for a week, you can request a review If you have further questions, they may be answered by the LLVM GitHub User Guide. You can also ask questions in a comment on this PR, on the LLVM Discord or on the forums. |
@llvm/pr-subscribers-libcxx @llvm/pr-subscribers-clang Author: Max Coplan (vegerot) ChangesThis patch adds -Wimplicit-fallthrough to -Wextra. GCC already includes it in -Wextra. This patch also adds a test to check that -Wimplicit-fallthrough is included in -Wextra. Note: This patch may regress performance when building with -Wextra. Full diff: https://github.com/llvm/llvm-project/pull/97926.diff 3 Files Affected:
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index 2241f8481484e..a875f665b10f9 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -1063,6 +1063,7 @@ def Extra : DiagGroup<"extra", [
StringConcatation,
FUseLdPath,
CastFunctionTypeMismatch,
+ ImplicitFallthrough,
]>;
def Most : DiagGroup<"most", [
diff --git a/clang/test/Sema/fallthrough-attr.c b/clang/test/Sema/fallthrough-attr.c
index de50ebf39d42f..6cc19136f30a7 100644
--- a/clang/test/Sema/fallthrough-attr.c
+++ b/clang/test/Sema/fallthrough-attr.c
@@ -2,6 +2,7 @@
// RUN: %clang_cc1 -fsyntax-only -std=gnu99 -verify -Wimplicit-fallthrough %s
// RUN: %clang_cc1 -fsyntax-only -std=c99 -verify -Wimplicit-fallthrough %s
// RUN: %clang_cc1 -fsyntax-only -std=c11 -verify -Wimplicit-fallthrough %s
+// RUN: %clang_cc1 -fsyntax-only -std=c11 -verify -Wextra %s
// RUN: %clang_cc1 -fsyntax-only -std=c2x -DC2X -verify -Wimplicit-fallthrough %s
int fallthrough_attribute_spelling(int n) {
diff --git a/clang/test/SemaCXX/switch-implicit-fallthrough-macro.cpp b/clang/test/SemaCXX/switch-implicit-fallthrough-macro.cpp
index 11df2cbfb53f0..cbbff1f1793b8 100644
--- a/clang/test/SemaCXX/switch-implicit-fallthrough-macro.cpp
+++ b/clang/test/SemaCXX/switch-implicit-fallthrough-macro.cpp
@@ -3,6 +3,7 @@
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1z -Wimplicit-fallthrough -DCLANG_PREFIX -DCOMMAND_LINE_FALLTHROUGH=[[clang::fallthrough]] %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1z -Wimplicit-fallthrough -DCOMMAND_LINE_FALLTHROUGH=[[clang::fallthrough]] %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1z -Wimplicit-fallthrough -DCOMMAND_LINE_FALLTHROUGH=[[fallthrough]] -DUNCHOSEN=[[clang::fallthrough]] %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1z -Wextra -DCOMMAND_LINE_FALLTHROUGH=[[fallthrough]] -DUNCHOSEN=[[clang::fallthrough]] %s
int fallthrough_compatibility_macro_from_command_line(int n) {
switch (n) {
|
@AaronBallman please review I don't know how to go about measuring if there even is a performance regression. How would I do that? |
2ba0fe2
to
c05d739
Compare
I would put up a branch on http://llvm-compile-time-tracker.com (instructions in the |
Thanks! The
Do you think I should still ask for permission or should I leave it to someone else? Update: I reached out to @nikic and CCd you |
c05d739
to
9640f00
Compare
CTMark is not compiled with |
@nikic done! At vegerot/llvm-project/perf/add-implicit-fallthrough-to-wextra |
I'm not seeing any compile time impact from dropping the |
I'm pretty sure I enabled the warning correctly. @AaronBallman are we good to land? |
Yeah, that logic should suffice:
so unless something explicitly ignores the fallthrough warning in the setup, it seems like a valid test. |
Not quite -- it looks like this change is causing libc++ test failures that were caught by precommit CI:
CC @ldionne |
Gotcha. Should I work on fixing the code? |
9640f00
to
cec4051
Compare
@AaronBallman I stacked this diff on top of #100821 to remove that build error. question for reviewer: what is the proper etiquette for stacked diffs? Should I open two PRs or have one PR with two commits? |
…ning Summary: The diff llvm#97926 is stacked on top of this patch because this file reports an error when enabling `-Wimplicit-fallthrough` in `-Wextra`. Test plan: ```sh $ time (mkdir build_runtimes && cd build_runtimes && set -x && CC=../build/bin/clang CXX=../build/bin/clang++ cmake -G Ninja ../runtimes -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' && ninja && bin/llvm-lit -sv ../libcxx/test/std/re ) ``` note: whether I put a `break;` or fallthrough, the tests pass anyways which is sus.
cec4051
to
5767b5f
Compare
5767b5f
to
55e3359
Compare
@mordante @AaronBallman This diff is ready for review 🙂 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the long wait on this review! A related issue cropped up regarding compile time performance of -Wall
(#105959) and it seems to be caused by CFG creation.
I think we should run the test case from that issue against the changes in this patch (-Wall
includes -Wextra
) to see if it makes an even more noticeable change in compile times, just to be sure before we go ahead and land this. I was hopeful that CFG building got faster, but now I worry there may be edge cases that make CFG building particularly slow that we may need to investigate.
@AaronBallman sure. Should I still use http://llvm-compile-time-tracker.com/ , or do I run the benchmark another way? |
This patch adds -Wimplicit-fallthrough to -Wextra. GCC already includes it in -Wextra. This patch also adds a test to check that -Wimplicit-fallthrough is included in -Wextra. Note: This patch may regress performance when building with -Wextra. This is because -Wextra requires forming a CFG for every function.
55e3359
to
7d221cb
Compare
Sorry, your question completely fell off my radar! llvm-compile-time-tracker would be fine, but even just a local test would suffice -- basically, I expect the test case from #105959 to be slow before you apply your patch and am just wondering whether that gets even slower with your patch. |
This patch adds -Wimplicit-fallthrough to -Wextra. GCC already includes it in -Wextra.
This patch also adds a test to check that -Wimplicit-fallthrough is included in -Wextra.
Note: This patch may regress performance when building with -Wextra.
This is because -Wextra requires forming a CFG for every function.