Revert "[-Wunsafe-buffer-usage] Initial commit - Transition away from raw buffers."

This reverts commit 200007ec85.
This commit is contained in:
Artem Dergachev
2022-12-05 15:38:40 -08:00
parent d629db535f
commit bc0617795f
6 changed files with 0 additions and 155 deletions

View File

@@ -1,38 +0,0 @@
//===- UnsafeBufferUsage.h - Replace pointers with modern C++ ---*- 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
//
//===----------------------------------------------------------------------===//
//
// This file defines an analysis that aids replacing buffer accesses through
// raw pointers with safer C++ abstractions such as containers and views/spans.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_UNSAFEBUFFERUSAGE_H
#define LLVM_CLANG_ANALYSIS_ANALYSES_UNSAFEBUFFERUSAGE_H
#include "clang/ASTMatchers/ASTMatchFinder.h"
namespace clang {
/// The interface that lets the caller handle unsafe buffer usage analysis
/// results by overriding this class's handle... methods.
class UnsafeBufferUsageHandler {
public:
UnsafeBufferUsageHandler() = default;
virtual ~UnsafeBufferUsageHandler() = default;
/// Invoked when an unsafe operation over raw pointers is found.
virtual void handleUnsafeOperation(const Stmt *Operation) = 0;
};
// This function invokes the analysis and allows the caller to react to it
// through the handler class.
void checkUnsafeBufferUsage(const Decl *D, UnsafeBufferUsageHandler &Handler);
} // end namespace clang
#endif /* LLVM_CLANG_ANALYSIS_ANALYSES_UNSAFEBUFFERUSAGE_H */

View File

@@ -11732,9 +11732,4 @@ def err_cast_from_randomized_struct : Error<
// LoongArch-specific Diagnostics
def err_loongarch_builtin_requires_la64 : Error<
"this builtin requires target: loongarch64">;
// Unsafe buffer usage diagnostics.
def warn_unsafe_buffer_usage : Warning<
"unchecked operation on raw buffer in expression">,
InGroup<DiagGroup<"unsafe-buffer-usage">>, DefaultIgnore;
} // end of sema component.

View File

@@ -32,7 +32,6 @@ add_clang_library(clangAnalysis
ThreadSafetyLogical.cpp
ThreadSafetyTIL.cpp
UninitializedValues.cpp
UnsafeBufferUsage.cpp
LINK_LIBS
clangAST

View File

@@ -1,79 +0,0 @@
//===- UnsafeBufferUsage.cpp - Replace pointers with modern 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
//
//===----------------------------------------------------------------------===//
#include "clang/Analysis/Analyses/UnsafeBufferUsage.h"
#include "llvm/ADT/SmallVector.h"
using namespace llvm;
using namespace clang;
using namespace ast_matchers;
namespace {
// TODO: Better abstractions over gadgets.
using GadgetList = std::vector<const Stmt *>;
}
// Scan the function and return a list of gadgets found with provided kits.
static GadgetList findGadgets(const Decl *D) {
class GadgetFinderCallback : public MatchFinder::MatchCallback {
GadgetList &Output;
public:
GadgetFinderCallback(GadgetList &Output) : Output(Output) {}
void run(const MatchFinder::MatchResult &Result) override {
Output.push_back(Result.Nodes.getNodeAs<Stmt>("root_node"));
}
};
GadgetList G;
MatchFinder M;
auto IncrementMatcher = unaryOperator(
hasOperatorName("++"),
hasUnaryOperand(hasType(pointerType()))
);
auto DecrementMatcher = unaryOperator(
hasOperatorName("--"),
hasUnaryOperand(hasType(pointerType()))
);
GadgetFinderCallback CB(G);
M.addMatcher(
stmt(forEachDescendant(
stmt(
anyOf(
IncrementMatcher,
DecrementMatcher
/* Fill me in! */
)
// FIXME: Idiomatically there should be a forCallable(equalsNode(D))
// here, to make sure that the statement actually belongs to the
// function and not to a nested function. However, forCallable uses
// ParentMap which can't be used before the AST is fully constructed.
// The original problem doesn't sound like it needs ParentMap though,
// maybe there's a more direct solution?
).bind("root_node")
)), &CB);
M.match(*D->getBody(), D->getASTContext());
return G; // NRVO!
}
void clang::checkUnsafeBufferUsage(const Decl *D,
UnsafeBufferUsageHandler &Handler) {
assert(D && D->getBody());
GadgetList G = findGadgets(D);
for (const Stmt *S : G) {
Handler.handleUnsafeOperation(S);
}
}

View File

@@ -29,7 +29,6 @@
#include "clang/Analysis/Analyses/ReachableCode.h"
#include "clang/Analysis/Analyses/ThreadSafety.h"
#include "clang/Analysis/Analyses/UninitializedValues.h"
#include "clang/Analysis/Analyses/UnsafeBufferUsage.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/CFGStmtMap.h"
@@ -2139,23 +2138,6 @@ public:
} // namespace consumed
} // namespace clang
//===----------------------------------------------------------------------===//
// Unsafe buffer usage analysis.
//===----------------------------------------------------------------------===//
class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {
Sema &S;
public:
UnsafeBufferUsageReporter(Sema &S) : S(S) {}
void handleUnsafeOperation(const Stmt *Operation) override {
S.Diag(Operation->getBeginLoc(), diag::warn_unsafe_buffer_usage)
<< Operation->getSourceRange();
}
};
//===----------------------------------------------------------------------===//
// AnalysisBasedWarnings - Worker object used by Sema to execute analysis-based
// warnings on a function, method, or block.
@@ -2448,12 +2430,6 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings(
if (S.getLangOpts().CPlusPlus && isNoexcept(FD))
checkThrowInNonThrowingFunc(S, FD, AC);
// Emit unsafe buffer usage warnings and fixits.
if (!Diags.isIgnored(diag::warn_unsafe_buffer_usage, D->getBeginLoc())) {
UnsafeBufferUsageReporter R(S);
checkUnsafeBufferUsage(D, R);
}
// If none of the previous checks caused a CFG build, trigger one here
// for the logical error handler.
if (LogicalErrorHandler::hasActiveDiagnostics(Diags, D->getBeginLoc())) {

View File

@@ -1,8 +0,0 @@
// RUN: %clang_cc1 -Wunsafe-buffer-usage -verify %s
void testIncrement(char *p) {
++p; // expected-warning{{unchecked operation on raw buffer in expression}}
p++; // expected-warning{{unchecked operation on raw buffer in expression}}
--p; // expected-warning{{unchecked operation on raw buffer in expression}}
p--; // expected-warning{{unchecked operation on raw buffer in expression}}
}