mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-18 06:10:37 +00:00

unless they are used. I discussed this with Daniel Dunbar, and we agreed that this provides an inconsistent warnings experience for the user and that there were genuine cases where we wouldn't want to do this optimization. llvm-svn: 100800
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
//=- AnalysisBasedWarnings.h - Sema warnings based on libAnalysis -*- C++ -*-=//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines AnalysisBasedWarnings, a worker object used by Sema
|
|
// that issues warnings based on dataflow-analysis.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_SEMA_ANALYSIS_WARNINGS_H
|
|
#define LLVM_CLANG_SEMA_ANALYSIS_WARNINGS_H
|
|
|
|
#include "llvm/ADT/SmallVector.h"
|
|
#include "llvm/ADT/DenseMap.h"
|
|
|
|
namespace clang {
|
|
|
|
class Sema;
|
|
|
|
namespace sema {
|
|
|
|
class AnalysisBasedWarnings {
|
|
public:
|
|
class Policy {
|
|
friend class AnalysisBasedWarnings;
|
|
// The warnings to run.
|
|
unsigned enableCheckFallThrough : 1;
|
|
unsigned enableCheckUnreachable : 1;
|
|
public:
|
|
Policy();
|
|
void disableCheckFallThrough() { enableCheckFallThrough = 0; }
|
|
};
|
|
|
|
private:
|
|
Sema &S;
|
|
Policy DefaultPolicy;
|
|
|
|
enum VisitFlag { NotVisited = 0, Visited = 1, Pending = 2 };
|
|
llvm::DenseMap<const FunctionDecl*, VisitFlag> VisitedFD;
|
|
|
|
public:
|
|
AnalysisBasedWarnings(Sema &s);
|
|
|
|
Policy getDefaultPolicy() { return DefaultPolicy; }
|
|
|
|
void IssueWarnings(Policy P, const Decl *D, QualType BlockTy = QualType());
|
|
};
|
|
|
|
}} // end namespace clang::sema
|
|
|
|
#endif
|