xref: /aosp_15_r20/external/clang/lib/Analysis/ProgramPoint.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li //==- ProgramPoint.cpp - Program Points for Path-Sensitive Analysis -*- C++ -*-/
2*67e74705SXin Li //
3*67e74705SXin Li //                     The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li //
10*67e74705SXin Li //  This file defines the interface ProgramPoint, which identifies a
11*67e74705SXin Li //  distinct location in a function.
12*67e74705SXin Li //
13*67e74705SXin Li //===----------------------------------------------------------------------===//
14*67e74705SXin Li 
15*67e74705SXin Li #include "clang/Analysis/ProgramPoint.h"
16*67e74705SXin Li 
17*67e74705SXin Li using namespace clang;
18*67e74705SXin Li 
~ProgramPointTag()19*67e74705SXin Li ProgramPointTag::~ProgramPointTag() {}
20*67e74705SXin Li 
getProgramPoint(const Stmt * S,ProgramPoint::Kind K,const LocationContext * LC,const ProgramPointTag * tag)21*67e74705SXin Li ProgramPoint ProgramPoint::getProgramPoint(const Stmt *S, ProgramPoint::Kind K,
22*67e74705SXin Li                                            const LocationContext *LC,
23*67e74705SXin Li                                            const ProgramPointTag *tag){
24*67e74705SXin Li   switch (K) {
25*67e74705SXin Li     default:
26*67e74705SXin Li       llvm_unreachable("Unhandled ProgramPoint kind");
27*67e74705SXin Li     case ProgramPoint::PreStmtKind:
28*67e74705SXin Li       return PreStmt(S, LC, tag);
29*67e74705SXin Li     case ProgramPoint::PostStmtKind:
30*67e74705SXin Li       return PostStmt(S, LC, tag);
31*67e74705SXin Li     case ProgramPoint::PreLoadKind:
32*67e74705SXin Li       return PreLoad(S, LC, tag);
33*67e74705SXin Li     case ProgramPoint::PostLoadKind:
34*67e74705SXin Li       return PostLoad(S, LC, tag);
35*67e74705SXin Li     case ProgramPoint::PreStoreKind:
36*67e74705SXin Li       return PreStore(S, LC, tag);
37*67e74705SXin Li     case ProgramPoint::PostLValueKind:
38*67e74705SXin Li       return PostLValue(S, LC, tag);
39*67e74705SXin Li     case ProgramPoint::PostStmtPurgeDeadSymbolsKind:
40*67e74705SXin Li       return PostStmtPurgeDeadSymbols(S, LC, tag);
41*67e74705SXin Li     case ProgramPoint::PreStmtPurgeDeadSymbolsKind:
42*67e74705SXin Li       return PreStmtPurgeDeadSymbols(S, LC, tag);
43*67e74705SXin Li   }
44*67e74705SXin Li }
45*67e74705SXin Li 
SimpleProgramPointTag(StringRef MsgProvider,StringRef Msg)46*67e74705SXin Li SimpleProgramPointTag::SimpleProgramPointTag(StringRef MsgProvider,
47*67e74705SXin Li                                              StringRef Msg)
48*67e74705SXin Li   : Desc((MsgProvider + " : " + Msg).str()) {}
49*67e74705SXin Li 
getTagDescription() const50*67e74705SXin Li StringRef SimpleProgramPointTag::getTagDescription() const {
51*67e74705SXin Li   return Desc;
52*67e74705SXin Li }
53