llvm-project

Форк
0
/
SwitchMissingDefaultCaseCheck.cpp 
47 строк · 1.5 Кб
1
//===--- SwitchMissingDefaultCaseCheck.cpp - clang-tidy -------------------===//
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
#include "clang/AST/ASTContext.h"
11

12
using namespace clang::ast_matchers;
13

14
namespace clang::tidy::bugprone {
15

16
namespace {
17

18
AST_MATCHER(SwitchStmt, hasDefaultCase) {
19
  const SwitchCase *Case = Node.getSwitchCaseList();
20
  while (Case) {
21
    if (DefaultStmt::classof(Case))
22
      return true;
23

24
    Case = Case->getNextSwitchCase();
25
  }
26
  return false;
27
}
28
} // namespace
29

30
void SwitchMissingDefaultCaseCheck::registerMatchers(MatchFinder *Finder) {
31
  Finder->addMatcher(
32
      switchStmt(hasCondition(expr(unless(isInstantiationDependent()),
33
                                   hasType(qualType(hasCanonicalType(
34
                                       unless(hasDeclaration(enumDecl()))))))),
35
                 unless(hasDefaultCase()))
36
          .bind("switch"),
37
      this);
38
}
39

40
void SwitchMissingDefaultCaseCheck::check(
41
    const ast_matchers::MatchFinder::MatchResult &Result) {
42
  const auto *Switch = Result.Nodes.getNodeAs<SwitchStmt>("switch");
43

44
  diag(Switch->getSwitchLoc(), "switching on non-enum value without "
45
                               "default case may not cover all cases");
46
}
47
} // namespace clang::tidy::bugprone
48

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.