diff options
Diffstat (limited to 'lib/Sema/AnalysisBasedWarnings.cpp')
| -rw-r--r-- | lib/Sema/AnalysisBasedWarnings.cpp | 43 | 
1 files changed, 28 insertions, 15 deletions
| diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index f666a9b46384..d697ecb21454 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -117,6 +117,7 @@ static void CheckUnreachable(Sema &S, AnalysisDeclContext &AC) {    reachable_code::FindUnreachableCode(AC, S.getPreprocessor(), UC);  } +namespace {  /// \brief Warn on logical operator errors in CFGBuilder  class LogicalErrorHandler : public CFGCallback {    Sema &S; @@ -138,7 +139,7 @@ public:      return false;    } -  void compareAlwaysTrue(const BinaryOperator *B, bool isAlwaysTrue) { +  void compareAlwaysTrue(const BinaryOperator *B, bool isAlwaysTrue) override {      if (HasMacroID(B))        return; @@ -147,7 +148,8 @@ public:          << DiagRange << isAlwaysTrue;    } -  void compareBitwiseEquality(const BinaryOperator *B, bool isAlwaysTrue) { +  void compareBitwiseEquality(const BinaryOperator *B, +                              bool isAlwaysTrue) override {      if (HasMacroID(B))        return; @@ -156,7 +158,7 @@ public:          << DiagRange << isAlwaysTrue;    }  }; - +} // namespace  //===----------------------------------------------------------------------===//  // Check for infinite self-recursion in functions @@ -1332,9 +1334,7 @@ class UninitValsDiagReporter : public UninitVariablesHandler {  public:    UninitValsDiagReporter(Sema &S) : S(S), uses(nullptr) {} -  ~UninitValsDiagReporter() {  -    flushDiagnostics(); -  } +  ~UninitValsDiagReporter() override { flushDiagnostics(); }    MappedType &getUses(const VarDecl *vd) {      if (!uses) @@ -1438,7 +1438,7 @@ struct SortDiagBySourceLocation {  //===----------------------------------------------------------------------===//  namespace clang {  namespace threadSafety { - +namespace {  class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {    Sema &S;    DiagList Warnings; @@ -1662,9 +1662,8 @@ class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {      }    } - -  virtual void handleNegativeNotHeld(StringRef Kind, Name LockName, Name Neg, -                                     SourceLocation Loc) override { +  void handleNegativeNotHeld(StringRef Kind, Name LockName, Name Neg, +                             SourceLocation Loc) override {      PartialDiagnosticAt Warning(Loc,          S.PDiag(diag::warn_acquire_requires_negative_cap)          << Kind << LockName << Neg); @@ -1679,6 +1678,19 @@ class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {      Warnings.push_back(DelayedDiag(Warning, getNotes()));    } +  void handleLockAcquiredBefore(StringRef Kind, Name L1Name, Name L2Name, +                                SourceLocation Loc) override { +    PartialDiagnosticAt Warning(Loc, +      S.PDiag(diag::warn_acquired_before) << Kind << L1Name << L2Name); +    Warnings.push_back(DelayedDiag(Warning, getNotes())); +  } + +  void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc) override { +    PartialDiagnosticAt Warning(Loc, +      S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name); +    Warnings.push_back(DelayedDiag(Warning, getNotes())); +  } +    void enterFunction(const FunctionDecl* FD) override {      CurrentFunction = FD;    } @@ -1687,9 +1699,9 @@ class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {      CurrentFunction = 0;    }  }; - -} -} +} // namespace +} // namespace threadSafety +} // namespace clang  //===----------------------------------------------------------------------===//  // -Wconsumed @@ -1704,7 +1716,7 @@ class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {    DiagList Warnings;  public: -   +    ConsumedWarningsHandler(Sema &S) : S(S) {}    void emitDiagnostics() override { @@ -1981,7 +1993,8 @@ AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P,      if (!Diags.isIgnored(diag::warn_thread_safety_verbose, D->getLocStart()))        Reporter.setVerbose(true); -    threadSafety::runThreadSafetyAnalysis(AC, Reporter); +    threadSafety::runThreadSafetyAnalysis(AC, Reporter, +                                          &S.ThreadSafetyDeclCache);      Reporter.emitDiagnostics();    } | 
