mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-20 20:15:49 -04:00

Specifically, we use the last store of the leaked symbol in the leak diagnostic. (No support for struct fields since the malloc checker doesn't track those yet.) + Infrastructure to track the regions used in store evaluations. This approach is more precise than iterating the store to obtain the region bound to the symbol, which is used in RetainCount checker. The region corresponds to what is uttered in the code in the last store and we do not rely on the store implementation to support this functionality. llvm-svn: 153212
50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
//==- ProgramPoint.cpp - Program Points for Path-Sensitive Analysis -*- 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 the interface ProgramPoint, which identifies a
|
|
// distinct location in a function.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/Analysis/ProgramPoint.h"
|
|
|
|
using namespace clang;
|
|
|
|
ProgramPointTag::~ProgramPointTag() {}
|
|
|
|
ProgramPoint ProgramPoint::getProgramPoint(const Stmt *S, ProgramPoint::Kind K,
|
|
const LocationContext *LC,
|
|
const ProgramPointTag *tag){
|
|
switch (K) {
|
|
default:
|
|
llvm_unreachable("Unhandled ProgramPoint kind");
|
|
case ProgramPoint::PreStmtKind:
|
|
return PreStmt(S, LC, tag);
|
|
case ProgramPoint::PostStmtKind:
|
|
return PostStmt(S, LC, tag);
|
|
case ProgramPoint::PreLoadKind:
|
|
return PreLoad(S, LC, tag);
|
|
case ProgramPoint::PostLoadKind:
|
|
return PostLoad(S, LC, tag);
|
|
case ProgramPoint::PreStoreKind:
|
|
return PreStore(S, LC, tag);
|
|
case ProgramPoint::PostLValueKind:
|
|
return PostLValue(S, LC, tag);
|
|
case ProgramPoint::PostPurgeDeadSymbolsKind:
|
|
return PostPurgeDeadSymbols(S, LC, tag);
|
|
}
|
|
}
|
|
|
|
SimpleProgramPointTag::SimpleProgramPointTag(StringRef description)
|
|
: desc(description) {}
|
|
|
|
StringRef SimpleProgramPointTag::getTagDescription() const {
|
|
return desc;
|
|
}
|