clang-tools 10.0.0

LimitedRandomnessCheck.cpp
Go to the documentation of this file.
1 //===--- LimitedRandomnessCheck.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 "LimitedRandomnessCheck.h"
10 #include "clang/AST/ASTContext.h"
11 #include "clang/ASTMatchers/ASTMatchFinder.h"
12
13 using namespace clang::ast_matchers;
14
15 namespace clang {
16 namespace tidy {
17 namespace cert {
18
19 void LimitedRandomnessCheck::registerMatchers(MatchFinder *Finder) {
20 Finder->addMatcher(callExpr(callee(functionDecl(namedDecl(hasName("::rand")),
21 parameterCountIs(0))))
22 .bind("randomGenerator"),
23 this);
24 }
25
26 void LimitedRandomnessCheck::check(const MatchFinder::MatchResult &Result) {
27 std::string msg = "";
28 if (getLangOpts().CPlusPlus)
29 msg = "; use C++11 random library instead";
30
31 const auto *MatchedDecl = Result.Nodes.getNodeAs<CallExpr>("randomGenerator");
32 diag(MatchedDecl->getBeginLoc(), "rand() has limited randomness" + msg);
33 }
34
35 } // namespace cert
36 } // namespace tidy
37 } // namespace clang
clang::ast_matchers
Definition: AbseilMatcher.h:14
LimitedRandomnessCheck.h
clang
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Definition: ApplyReplacements.h:27