The GDMIndex functions return a pointer that's used as a key for looking up data, but addresses of local statics defined in header files aren't the same across shared library boundaries and the result is that analyzer plugins can't access this data. Event types are uniqued by using the addresses of a local static defined in a header files, but it isn't the same across shared library boundaries and plugins can't currently handle ImplicitNullDerefEvents. Patches by Joe Ranieri! Differential Revision: https://reviews.llvm.org/D52905 Differential Revision: https://reviews.llvm.org/D52906 llvm-svn: 344823
41 lines
1.4 KiB
C++
41 lines
1.4 KiB
C++
//== Checker.cpp - Registration mechanism for checkers -----------*- 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 Checker, used to create and register checkers.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
|
|
#include "clang/StaticAnalyzer/Core/Checker.h"
|
|
|
|
using namespace clang;
|
|
using namespace ento;
|
|
|
|
int ImplicitNullDerefEvent::Tag;
|
|
|
|
StringRef CheckerBase::getTagDescription() const {
|
|
return getCheckName().getName();
|
|
}
|
|
|
|
CheckName CheckerBase::getCheckName() const { return Name; }
|
|
|
|
CheckerProgramPointTag::CheckerProgramPointTag(StringRef CheckerName,
|
|
StringRef Msg)
|
|
: SimpleProgramPointTag(CheckerName, Msg) {}
|
|
|
|
CheckerProgramPointTag::CheckerProgramPointTag(const CheckerBase *Checker,
|
|
StringRef Msg)
|
|
: SimpleProgramPointTag(Checker->getCheckName().getName(), Msg) {}
|
|
|
|
raw_ostream& clang::ento::operator<<(raw_ostream &Out,
|
|
const CheckerBase &Checker) {
|
|
Out << Checker.getCheckName().getName();
|
|
return Out;
|
|
}
|