1ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek//==- ProgramPoint.cpp - Program Points for Path-Sensitive Analysis -*- C++ -*-/ 2ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// 3ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// The LLVM Compiler Infrastructure 4ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// 5ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// This file is distributed under the University of Illinois Open Source 6ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// License. See LICENSE.TXT for details. 7ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// 8ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek//===----------------------------------------------------------------------===// 9ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// 10ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// This file defines the interface ProgramPoint, which identifies a 11ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// distinct location in a function. 12ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// 13ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek//===----------------------------------------------------------------------===// 14ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek 15ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek#include "clang/Analysis/ProgramPoint.h" 16ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek 17ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenekusing namespace clang; 18ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek 19ca804539d908d3a0e8c72a0df5f1f571d29490bbTed KremenekProgramPointTag::~ProgramPointTag() {} 20ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek 2163d3201619fdac284adfd3b9328562fa20a01c40Anna ZaksProgramPoint ProgramPoint::getProgramPoint(const Stmt *S, ProgramPoint::Kind K, 2263d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks const LocationContext *LC, 2363d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks const ProgramPointTag *tag){ 2463d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks switch (K) { 2563d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks default: 2663d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks llvm_unreachable("Unhandled ProgramPoint kind"); 2763d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PreStmtKind: 2863d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PreStmt(S, LC, tag); 2963d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PostStmtKind: 3063d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PostStmt(S, LC, tag); 3163d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PreLoadKind: 3263d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PreLoad(S, LC, tag); 3363d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PostLoadKind: 3463d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PostLoad(S, LC, tag); 3563d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PreStoreKind: 3663d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PreStore(S, LC, tag); 3763d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PostLValueKind: 3863d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PostLValue(S, LC, tag); 390b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks case ProgramPoint::PostStmtPurgeDeadSymbolsKind: 400b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks return PostStmtPurgeDeadSymbols(S, LC, tag); 410b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks case ProgramPoint::PreStmtPurgeDeadSymbolsKind: 420b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks return PreStmtPurgeDeadSymbols(S, LC, tag); 4363d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks } 4463d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks} 4563d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks 46651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesSimpleProgramPointTag::SimpleProgramPointTag(StringRef MsgProvider, 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines StringRef Msg) 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines : Desc((MsgProvider + " : " + Msg).str()) {} 49ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek 50ca804539d908d3a0e8c72a0df5f1f571d29490bbTed KremenekStringRef SimpleProgramPointTag::getTagDescription() const { 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return Desc; 52ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek} 53