//==- Regions.cpp - Abstract memory locations ----------------------*- C++ -*-// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines Region and its subclasses. Regions represent abstract // memory locations. // //===----------------------------------------------------------------------===// #include "clang/Analysis/PathSensitive/Regions.h" #include "clang/Analysis/PathSensitive/BasicValueFactory.h" #include "clang/AST/ASTContext.h" using namespace clang; RegionExtent VarRegion::getExtent(BasicValueFactory& BV) const { QualType T = getDecl()->getType(); // FIXME: Add support for VLAs. This may require passing in additional // information, or tracking a different region type. if (!T.getTypePtr()->isConstantSizeType()) return UnknownExtent(); ASTContext& C = BV.getContext(); assert (!T->isObjCInterfaceType()); // @interface not a possible VarDecl type. assert (T != C.VoidTy); // void not a possible VarDecl type. return IntExtent(BV.getValue(C.getTypeSize(T), C.VoidPtrTy)); }