clang-tools 8.0.0

NarrowingConversionsCheck.h
Go to the documentation of this file.
1 //===--- NarrowingConversionsCheck.h - clang-tidy----------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CPPCOREGUIDELINES_NARROWING_CONVERSIONS_H
11 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CPPCOREGUIDELINES_NARROWING_CONVERSIONS_H
12
13 #include "../ClangTidy.h"
14
15 namespace clang {
16 namespace tidy {
17 namespace cppcoreguidelines {
18
19 /// Checks for narrowing conversions, e.g:
20 /// int i = 0;
21 /// i += 0.1;
22 ///
23 /// For the user-facing documentation see:
24 /// http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.html
25 class NarrowingConversionsCheck : public ClangTidyCheck {
26 public:
27 NarrowingConversionsCheck(StringRef Name, ClangTidyContext *Context);
28
29 void registerMatchers(ast_matchers::MatchFinder *Finder) override;
30 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
31
32 private:
33 void diagNarrowType(SourceLocation SourceLoc, const Expr &Lhs,
34 const Expr &Rhs);
35
36 void diagNarrowTypeToSignedInt(SourceLocation SourceLoc, const Expr &Lhs,
37 const Expr &Rhs);
38
39 void diagNarrowIntegerConstant(SourceLocation SourceLoc, const Expr &Lhs,
40 const Expr &Rhs, const llvm::APSInt &Value);
41
42 void diagNarrowIntegerConstantToSignedInt(SourceLocation SourceLoc,
43 const Expr &Lhs, const Expr &Rhs,
44 const llvm::APSInt &Value,
45 const uint64_t HexBits);
46
47 void diagNarrowConstant(SourceLocation SourceLoc, const Expr &Lhs,
48 const Expr &Rhs);
49
50 void diagConstantCast(SourceLocation SourceLoc, const Expr &Lhs,
51 const Expr &Rhs);
52
53 void diagNarrowTypeOrConstant(const ASTContext &Context,
54 SourceLocation SourceLoc, const Expr &Lhs,
55 const Expr &Rhs);
56
57 void handleIntegralCast(const ASTContext &Context, SourceLocation SourceLoc,
58 const Expr &Lhs, const Expr &Rhs);
59
60 void handleIntegralToBoolean(const ASTContext &Context,
61 SourceLocation SourceLoc, const Expr &Lhs,
62 const Expr &Rhs);
63
64 void handleIntegralToFloating(const ASTContext &Context,
65 SourceLocation SourceLoc, const Expr &Lhs,
66 const Expr &Rhs);
67
68 void handleFloatingToIntegral(const ASTContext &Context,
69 SourceLocation SourceLoc, const Expr &Lhs,
70 const Expr &Rhs);
71
72 void handleFloatingToBoolean(const ASTContext &Context,
73 SourceLocation SourceLoc, const Expr &Lhs,
74 const Expr &Rhs);
75
76 void handleBooleanToSignedIntegral(const ASTContext &Context,
77 SourceLocation SourceLoc, const Expr &Lhs,
78 const Expr &Rhs);
79
80 void handleFloatingCast(const ASTContext &Context, SourceLocation SourceLoc,
81 const Expr &Lhs, const Expr &Rhs);
82
83 void handleBinaryOperator(const ASTContext &Context, SourceLocation SourceLoc,
84 const Expr &Lhs, const Expr &Rhs);
85
86 bool handleConditionalOperator(const ASTContext &Context, const Expr &Lhs,
87 const Expr &Rhs);
88
89 void handleImplicitCast(const ASTContext &Context,
90 const ImplicitCastExpr &Cast);
91
92 void handleBinaryOperator(const ASTContext &Context,
93 const BinaryOperator &Op);
94
95 const bool WarnOnFloatingPointNarrowingConversion;
96 const bool PedanticMode;
97 };
98
99 } // namespace cppcoreguidelines
100 } // namespace tidy
101 } // namespace clang
102
103 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CPPCOREGUIDELINES_NARROWING_CONVERSIONS_H
clang::tidy::cppcoreguidelines::NarrowingConversionsCheck::NarrowingConversionsCheck
NarrowingConversionsCheck(StringRef Name, ClangTidyContext *Context)
Definition: NarrowingConversionsCheck.cpp:26
clang::tidy::ClangTidyCheck
Base class for all clang-tidy checks.
Definition: ClangTidy.h:127
Name
static constexpr llvm::StringLiteral Name
Definition: UppercaseLiteralSuffixCheck.cpp:28
Result
llvm::Optional< llvm::Expected< tooling::AtomicChanges > > Result
Definition: ClangdServer.cpp:60
clang
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Definition: ChangeNamespace.cpp:18
clang::tidy::cppcoreguidelines::NarrowingConversionsCheck
Checks for narrowing conversions, e.g: int i = 0; i += 0.1;.
Definition: NarrowingConversionsCheck.h:25
clang::tidy::ClangTidyContext
Every ClangTidyCheck reports errors through a DiagnosticsEngine provided by this context.
Definition: ClangTidyDiagnosticConsumer.h:100
clang::tidy::cppcoreguidelines::NarrowingConversionsCheck::check
void check(const ast_matchers::MatchFinder::MatchResult &Result) override
ClangTidyChecks that register ASTMatchers should do the actual work in here.
Definition: NarrowingConversionsCheck.cpp:437
clang::tidy::cppcoreguidelines::NarrowingConversionsCheck::registerMatchers
void registerMatchers(ast_matchers::MatchFinder *Finder) override
Override this to register AST matchers with Finder.
Definition: NarrowingConversionsCheck.cpp:33