1234287Sdim//== ProgramState_Fwd.h - Incomplete declarations of ProgramState -*- C++ -*--=/ 2234287Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6234287Sdim// 7234287Sdim//===----------------------------------------------------------------------===// 8234287Sdim 9280031Sdim#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATE_FWD_H 10280031Sdim#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATE_FWD_H 11234287Sdim 12234287Sdim#include "clang/Basic/LLVM.h" 13234287Sdim#include "llvm/ADT/IntrusiveRefCntPtr.h" 14234287Sdim 15234287Sdimnamespace clang { 16234287Sdimnamespace ento { 17234287Sdim class ProgramState; 18234287Sdim class ProgramStateManager; 19234287Sdim void ProgramStateRetain(const ProgramState *state); 20234287Sdim void ProgramStateRelease(const ProgramState *state); 21234287Sdim} 22234287Sdim} 23234287Sdim 24234287Sdimnamespace llvm { 25234287Sdim template <> struct IntrusiveRefCntPtrInfo<const clang::ento::ProgramState> { 26234287Sdim static void retain(const clang::ento::ProgramState *state) { 27234287Sdim clang::ento::ProgramStateRetain(state); 28234287Sdim } 29234287Sdim static void release(const clang::ento::ProgramState *state) { 30234287Sdim clang::ento::ProgramStateRelease(state); 31234287Sdim } 32234287Sdim }; 33234287Sdim} 34234287Sdim 35234287Sdimnamespace clang { 36234287Sdimnamespace ento { 37234287Sdim typedef IntrusiveRefCntPtr<const ProgramState> ProgramStateRef; 38234287Sdim} 39234287Sdim} 40234287Sdim 41234287Sdim#endif 42234287Sdim 43