clang-tools
22.0.0git
llvm-project
clang-tools-extra
clang-tidy
bugprone
SwitchMissingDefaultCaseCheck.cpp
Go to the documentation of this file.
1
//===----------------------------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "
SwitchMissingDefaultCaseCheck.h
"
10
11
using namespace
clang::ast_matchers
;
12
13
namespace
clang::tidy::bugprone
{
14
15
namespace
{
16
17
AST_MATCHER
(SwitchStmt, hasDefaultCase) {
18
const
SwitchCase *Case = Node.getSwitchCaseList();
19
while
(Case) {
20
if
(isa<DefaultStmt>(Case))
21
return
true
;
22
23
Case = Case->getNextSwitchCase();
24
}
25
return
false
;
26
}
27
}
// namespace
28
29
void
SwitchMissingDefaultCaseCheck::registerMatchers
(MatchFinder *Finder) {
30
Finder->addMatcher(
31
switchStmt(hasCondition(expr(unless(isInstantiationDependent()),
32
hasType(qualType(hasCanonicalType(
33
unless(hasDeclaration(enumDecl()))))))),
34
unless(hasDefaultCase()))
35
.bind(
"switch"
),
36
this
);
37
}
38
39
void
SwitchMissingDefaultCaseCheck::check
(
40
const
ast_matchers::MatchFinder::MatchResult &Result) {
41
const
auto
*Switch = Result.Nodes.getNodeAs<SwitchStmt>(
"switch"
);
42
43
diag(Switch->getSwitchLoc(),
"switching on non-enum value without "
44
"default case may not cover all cases"
);
45
}
46
}
// namespace clang::tidy::bugprone
SwitchMissingDefaultCaseCheck.h
clang::tidy::bugprone::SwitchMissingDefaultCaseCheck::check
void check(const ast_matchers::MatchFinder::MatchResult &Result) override
Definition
SwitchMissingDefaultCaseCheck.cpp:39
clang::tidy::bugprone::SwitchMissingDefaultCaseCheck::registerMatchers
void registerMatchers(ast_matchers::MatchFinder *Finder) override
Definition
SwitchMissingDefaultCaseCheck.cpp:29
clang::ast_matchers
Definition
AbseilMatcher.h:16
clang::tidy::bugprone
Definition
ArgumentCommentCheck.cpp:19
clang::tidy::matchers::AST_MATCHER
AST_MATCHER(BinaryOperator, isRelationalOperator)
Definition
clang-tidy/utils/Matchers.h:19
Generated on
for clang-tools by
1.14.0