diff options
author | Ted Kremenek <kremenek@apple.com> | 2014-03-15 01:26:32 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2014-03-15 01:26:32 +0000 |
commit | 5f5ef97906ab54fd9f60f8b30894af4af9394b5e (patch) | |
tree | 19ad92daaa83fbff22c74722720063fab46d3df8 /lib/Sema/AnalysisBasedWarnings.cpp | |
parent | 6112f1ff83ebbc4706ea2d1609e85501ff8f2f2a (diff) |
Start breaking -Wunreachable-code up into different diagnostic groups.
Recent work on -Wunreachable-code has focused on suppressing uninteresting
unreachable code that center around "configuration values", but
there are still some set of cases that are sometimes interesting
or uninteresting depending on the codebase. For example, a dead
"break" statement may not be interesting for a particular codebase,
potentially because it is auto-generated or simply because code
is written defensively.
To address these workflow differences, -Wunreachable-code is now
broken into several diagnostic groups:
-Wunreachable-code: intended to be a reasonable "default" for
most users.
and then other groups that turn on more aggressive checking:
-Wunreachable-code-break: warn about dead break statements
-Wunreachable-code-trivial-return: warn about dead return statements
that return "trivial" values (e.g., return 0). Other return
statements that return non-trivial values are still reported
under -Wunreachable-code (this is an area subject to more refinement).
-Wunreachable-code-aggressive: supergroup that enables all these
groups.
The goal is to eventually make -Wunreachable-code good enough to
either be in -Wall or on-by-default, thus finessing these warnings
into different groups helps achieve maximum signal for more users.
TODO: the tests need to be updated to reflect this extra control
via diagnostic flags.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203994 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/AnalysisBasedWarnings.cpp')
-rw-r--r-- | lib/Sema/AnalysisBasedWarnings.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index dabac1e6c4..d49dfd5845 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -65,9 +65,22 @@ namespace { public: UnreachableCodeHandler(Sema &s) : S(s) {} - void HandleUnreachable(SourceLocation L, SourceRange R1, + void HandleUnreachable(reachable_code::UnreachableKind UK, + SourceLocation L, SourceRange R1, SourceRange R2) override { - S.Diag(L, diag::warn_unreachable) << R1 << R2; + unsigned diag = diag::warn_unreachable; + switch (UK) { + case reachable_code::UK_Break: + diag = diag::warn_unreachable_break; + break; + case reachable_code::UK_TrivialReturn: + diag = diag::warn_unreachable_trivial_return; + break; + case reachable_code::UK_Other: + break; + } + + S.Diag(L, diag) << R1 << R2; } }; } |