123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- CFGStmtMap.h - Map from Stmt* to CFGBlock* -----------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file defines the CFGStmtMap class, which defines a mapping from
- // Stmt* to CFGBlock*
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_ANALYSIS_CFGSTMTMAP_H
- #define LLVM_CLANG_ANALYSIS_CFGSTMTMAP_H
- #include "clang/Analysis/CFG.h"
- namespace clang {
- class ParentMap;
- class Stmt;
- class CFGStmtMap {
- ParentMap *PM;
- void *M;
- CFGStmtMap(ParentMap *pm, void *m) : PM(pm), M(m) {}
- public:
- ~CFGStmtMap();
- /// Returns a new CFGMap for the given CFG. It is the caller's
- /// responsibility to 'delete' this object when done using it.
- static CFGStmtMap *Build(CFG* C, ParentMap *PM);
- /// Returns the CFGBlock the specified Stmt* appears in. For Stmt* that
- /// are terminators, the CFGBlock is the block they appear as a terminator,
- /// and not the block they appear as a block-level expression (e.g, '&&').
- /// CaseStmts and LabelStmts map to the CFGBlock they label.
- CFGBlock *getBlock(Stmt * S);
- const CFGBlock *getBlock(const Stmt * S) const {
- return const_cast<CFGStmtMap*>(this)->getBlock(const_cast<Stmt*>(S));
- }
- };
- } // end clang namespace
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|