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::PostStoreKind: 3863d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PostStore(S, LC, tag); 3963d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PostLValueKind: 4063d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PostLValue(S, LC, tag); 4163d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks case ProgramPoint::PostPurgeDeadSymbolsKind: 4263d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks return PostPurgeDeadSymbols(S, LC, tag); 4363d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks } 4463d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks} 4563d3201619fdac284adfd3b9328562fa20a01c40Anna Zaks 46ca804539d908d3a0e8c72a0df5f1f571d29490bbTed KremenekSimpleProgramPointTag::SimpleProgramPointTag(StringRef description) 47ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek : desc(description) {} 48ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek 49ca804539d908d3a0e8c72a0df5f1f571d29490bbTed KremenekStringRef SimpleProgramPointTag::getTagDescription() const { 50ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek return desc; 51ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek} 52