forked from GPUOpen-Drivers/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Manually merged master:b54aa053d3a into amd-gfx:e9c2e262572
Local branch amd-gfx e9c2e26 Manually merged master:25afe91fd1b into amd-gfx:66dfcd6fd7a Remote branch master b54aa05 Update clang-interpreter example to incorporate changes in ce2207a. Change-Id: I52871585037084c85d9c5e625014fac74f0d18ac
- Loading branch information
Showing
1,471 changed files
with
62,546 additions
and
20,572 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
105 changes: 105 additions & 0 deletions
105
clang-tools-extra/clang-tidy/bugprone/MisplacedPointerArithmeticInAllocCheck.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
//===--- MisplacedPointerArithmeticInAllocCheck.cpp - clang-tidy-----------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "MisplacedPointerArithmeticInAllocCheck.h" | ||
#include "clang/AST/ASTContext.h" | ||
#include "clang/ASTMatchers/ASTMatchFinder.h" | ||
|
||
using namespace clang::ast_matchers; | ||
|
||
namespace clang { | ||
namespace tidy { | ||
namespace bugprone { | ||
|
||
void MisplacedPointerArithmeticInAllocCheck::registerMatchers( | ||
MatchFinder *Finder) { | ||
const auto AllocFunc = functionDecl( | ||
anyOf(hasName("::malloc"), hasName("std::malloc"), hasName("::alloca"), | ||
hasName("::calloc"), hasName("std::calloc"), hasName("::realloc"), | ||
hasName("std::realloc"))); | ||
|
||
const auto AllocFuncPtr = | ||
varDecl(hasType(isConstQualified()), | ||
hasInitializer(ignoringParenImpCasts( | ||
declRefExpr(hasDeclaration(AllocFunc))))); | ||
|
||
const auto AdditiveOperator = | ||
binaryOperator(anyOf(hasOperatorName("+"), hasOperatorName("-"))); | ||
|
||
const auto IntExpr = expr(hasType(isInteger())); | ||
|
||
const auto AllocCall = callExpr(callee(decl(anyOf(AllocFunc, AllocFuncPtr)))); | ||
|
||
Finder->addMatcher( | ||
binaryOperator( | ||
AdditiveOperator, | ||
hasLHS(anyOf(AllocCall, castExpr(hasSourceExpression(AllocCall)))), | ||
hasRHS(IntExpr)) | ||
.bind("PtrArith"), | ||
this); | ||
|
||
const auto New = cxxNewExpr(unless(isArray())); | ||
|
||
Finder->addMatcher(binaryOperator(AdditiveOperator, | ||
hasLHS(anyOf(New, castExpr(New))), | ||
hasRHS(IntExpr)) | ||
.bind("PtrArith"), | ||
this); | ||
|
||
const auto ArrayNew = cxxNewExpr(isArray()); | ||
|
||
Finder->addMatcher(binaryOperator(AdditiveOperator, | ||
hasLHS(anyOf(ArrayNew, castExpr(ArrayNew))), | ||
hasRHS(IntExpr)) | ||
.bind("PtrArith"), | ||
this); | ||
} | ||
|
||
void MisplacedPointerArithmeticInAllocCheck::check( | ||
const MatchFinder::MatchResult &Result) { | ||
const auto *PtrArith = Result.Nodes.getNodeAs<BinaryOperator>("PtrArith"); | ||
const Expr *AllocExpr = PtrArith->getLHS()->IgnoreParenCasts(); | ||
std::string CallName; | ||
|
||
if (const auto *Call = dyn_cast<CallExpr>(AllocExpr)) { | ||
const NamedDecl *Func = Call->getDirectCallee(); | ||
if (!Func) { | ||
Func = cast<NamedDecl>(Call->getCalleeDecl()); | ||
} | ||
CallName = Func->getName().str(); | ||
} else { | ||
const auto *New = cast<CXXNewExpr>(AllocExpr); | ||
if (New->isArray()) { | ||
CallName = "operator new[]"; | ||
} else { | ||
const auto *CtrE = New->getConstructExpr(); | ||
if (!CtrE->getArg(CtrE->getNumArgs() - 1) | ||
->getType() | ||
->isIntegralOrEnumerationType()) | ||
return; | ||
CallName = "operator new"; | ||
} | ||
} | ||
|
||
const SourceRange OldRParen = SourceRange(PtrArith->getLHS()->getEndLoc()); | ||
const StringRef RParen = | ||
Lexer::getSourceText(CharSourceRange::getTokenRange(OldRParen), | ||
*Result.SourceManager, getLangOpts()); | ||
const SourceLocation NewRParen = Lexer::getLocForEndOfToken( | ||
PtrArith->getEndLoc(), 0, *Result.SourceManager, getLangOpts()); | ||
|
||
diag(PtrArith->getBeginLoc(), | ||
"arithmetic operation is applied to the result of %0() instead of its " | ||
"size-like argument") | ||
<< CallName << FixItHint::CreateRemoval(OldRParen) | ||
<< FixItHint::CreateInsertion(NewRParen, RParen); | ||
} | ||
|
||
} // namespace bugprone | ||
} // namespace tidy | ||
} // namespace clang |
36 changes: 36 additions & 0 deletions
36
clang-tools-extra/clang-tidy/bugprone/MisplacedPointerArithmeticInAllocCheck.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
//===--- MisplacedPointerArithmeticInAllocCheck.h - clang-tidy---*- C++ -*-===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MISPLACED_OPERATOR_IN_ALLOC_H | ||
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MISPLACED_OPERATOR_IN_ALLOC_H | ||
|
||
#include "../ClangTidyCheck.h" | ||
|
||
namespace clang { | ||
namespace tidy { | ||
namespace bugprone { | ||
|
||
/// Finds cases where an integer is added to or subracted from the result of a | ||
/// memory allocation function instead of its argument. | ||
/// | ||
/// For the user-facing documentation see: | ||
/// http://clang.llvm.org/extra/clang-tidy/checks/bugprone-misplaced-operator-in-alloc.html | ||
class MisplacedPointerArithmeticInAllocCheck : public ClangTidyCheck { | ||
public: | ||
MisplacedPointerArithmeticInAllocCheck(StringRef Name, | ||
ClangTidyContext *Context) | ||
: ClangTidyCheck(Name, Context) {} | ||
void registerMatchers(ast_matchers::MatchFinder *Finder) override; | ||
void check(const ast_matchers::MatchFinder::MatchResult &Result) override; | ||
}; | ||
|
||
} // namespace bugprone | ||
} // namespace tidy | ||
} // namespace clang | ||
|
||
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MISPLACED_OPERATOR_IN_ALLOC_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.