brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 0f1039d Raw
41 lines · cpp
1//===--- ModelConsumer.cpp - ASTConsumer for consuming model files --------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// This file implements an ASTConsumer for consuming model files.11///12/// This ASTConsumer handles the AST of a parsed model file. All top level13/// function definitions will be collected from that model file for later14/// retrieval during the static analysis. The body of these functions will not15/// be injected into the ASTUnit of the analyzed translation unit. It will be16/// available through the BodyFarm which is utilized by the AnalysisDeclContext17/// class.18///19//===----------------------------------------------------------------------===//20 21#include "clang/StaticAnalyzer/Frontend/ModelConsumer.h"22#include "clang/AST/Decl.h"23#include "clang/AST/DeclGroup.h"24 25using namespace clang;26using namespace ento;27 28ModelConsumer::ModelConsumer(llvm::StringMap<Stmt *> &Bodies)29    : Bodies(Bodies) {}30 31bool ModelConsumer::HandleTopLevelDecl(DeclGroupRef DeclGroup) {32  for (const Decl *D : DeclGroup) {33    // Only interested in definitions.34    const auto *func = llvm::dyn_cast<FunctionDecl>(D);35    if (func && func->hasBody()) {36      Bodies.insert(std::make_pair(func->getName(), func->getBody()));37    }38  }39  return true;40}41