[cfe-commits] r160815 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/PathSensitive/ lib/StaticAnalyzer/Checkers/ lib/StaticAnalyzer/Core/
Jordan Rose
jordan_rose at apple.com
Thu Jul 26 14:39:41 PDT 2012
Author: jrose
Date: Thu Jul 26 16:39:41 2012
New Revision: 160815
URL: http://llvm.org/viewvc/llvm-project?rev=160815&view=rev
Log:
[analyzer] Rename Calls.{h,cpp} to CallEvent.{h,cpp}. No functionality change.
Added:
cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
- copied, changed from r160810, cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h
cfe/trunk/lib/StaticAnalyzer/Core/CallEvent.cpp
- copied, changed from r160810, cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp
Removed:
cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h
cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp
Modified:
cfe/trunk/lib/StaticAnalyzer/Checkers/AttrNonNullChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Checkers/TraversalChecker.cpp
cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt
cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp
cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineObjC.cpp
cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp
cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp
Copied: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h (from r160810, cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h)
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h?p2=cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h&p1=cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h&r1=160810&r2=160815&rev=160815&view=diff
==============================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h (original)
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h Thu Jul 26 16:39:41 2012
@@ -1,4 +1,4 @@
-//===- Calls.h - Wrapper for all function and method calls --------*- C++ -*--//
+//===- CallEvent.h - Wrapper for all function and method calls ----*- C++ -*--//
//
// The LLVM Compiler Infrastructure
//
Removed: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h?rev=160814&view=auto
==============================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h (original)
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h (removed)
@@ -1,821 +0,0 @@
-//===- Calls.h - Wrapper for all function and method calls --------*- C++ -*--//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file This file defines CallEvent and its subclasses, which represent path-
-/// sensitive instances of different kinds of function and method calls
-/// (C, C++, and Objective-C).
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_STATICANALYZER_PATHSENSITIVE_CALL
-#define LLVM_CLANG_STATICANALYZER_PATHSENSITIVE_CALL
-
-#include "clang/Basic/SourceManager.h"
-#include "clang/AST/DeclCXX.h"
-#include "clang/AST/ExprCXX.h"
-#include "clang/AST/ExprObjC.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
-#include "llvm/ADT/PointerIntPair.h"
-
-namespace clang {
-class ProgramPoint;
-class ProgramPointTag;
-
-namespace ento {
-
-enum CallEventKind {
- CE_Function,
- CE_CXXMember,
- CE_CXXMemberOperator,
- CE_BEG_CXX_INSTANCE_CALLS = CE_CXXMember,
- CE_END_CXX_INSTANCE_CALLS = CE_CXXMemberOperator,
- CE_Block,
- CE_BEG_SIMPLE_CALLS = CE_Function,
- CE_END_SIMPLE_CALLS = CE_Block,
- CE_CXXConstructor,
- CE_CXXDestructor,
- CE_CXXAllocator,
- CE_BEG_FUNCTION_CALLS = CE_Function,
- CE_END_FUNCTION_CALLS = CE_CXXAllocator,
- CE_ObjCMessage
-};
-
-
-/// \brief Represents an abstract call to a function or method along a
-/// particular path.
-class CallEvent {
-public:
- typedef CallEventKind Kind;
-
-private:
- // PointerIntPair doesn't respect IntrusiveRefCntPtr, so we have to manually
- // retain and release the state.
- llvm::PointerIntPair<const ProgramState *, 2> State;
- llvm::PointerIntPair<const LocationContext *, 2> LCtx;
- llvm::PointerUnion<const Expr *, const Decl *> Origin;
-
-protected:
- // This is user data for subclasses.
- const void *Data;
- SourceLocation Location;
-
- CallEvent(const Expr *E, ProgramStateRef state, const LocationContext *lctx,
- Kind k)
- : State(state.getPtr(), (k & 0x3)),
- LCtx(lctx, ((k >> 2) & 0x3)),
- Origin(E) {
- IntrusiveRefCntPtrInfo<const ProgramState>::retain(getState());
- assert(k == getKind() && "More kinds than bits in the PointerIntPairs.");
- }
-
- CallEvent(const Decl *D, ProgramStateRef state, const LocationContext *lctx,
- Kind k)
- : State(state.getPtr(), (k & 0x3)),
- LCtx(lctx, ((k >> 2) & 0x3)),
- Origin(D) {
- IntrusiveRefCntPtrInfo<const ProgramState>::retain(getState());
- assert(k == getKind() && "More kinds than bits in the PointerIntPairs.");
- }
-
- const ProgramState *getState() const {
- return State.getPointer();
- }
-
- const LocationContext *getLocationContext() const {
- return LCtx.getPointer();
- }
-
- ~CallEvent() {
- IntrusiveRefCntPtrInfo<const ProgramState>::release(getState());
- }
-
-
- /// \brief Get the value of arbitrary expressions at this point in the path.
- SVal getSVal(const Stmt *S) const {
- return getState()->getSVal(S, getLocationContext());
- }
-
- typedef SmallVectorImpl<const MemRegion *> RegionList;
-
- /// \brief Used to specify non-argument regions that will be invalidated as a
- /// result of this call.
- void getExtraInvalidatedRegions(RegionList &Regions) const;
-
- QualType getDeclaredResultType() const;
-
-public:
- /// \brief Returns the kind of call this is.
- Kind getKind() const {
- return static_cast<Kind>((State.getInt()) | (LCtx.getInt() << 2));
- }
-
- /// \brief Returns the declaration of the function or method that will be
- /// called. May be null.
- const Decl *getDecl() const;
-
- /// \brief Returns the definition of the function or method that will be
- /// called. Returns NULL if the definition cannot be found; ex: due to
- /// dynamic dispatch in ObjC methods.
- const Decl *getRuntimeDefinition() const;
-
- /// \brief Returns the expression whose value will be the result of this call.
- /// May be null.
- const Expr *getOriginExpr() const {
- return Origin.dyn_cast<const Expr *>();
- }
-
- /// \brief Returns the number of arguments (explicit and implicit).
- ///
- /// Note that this may be greater than the number of parameters in the
- /// callee's declaration, and that it may include arguments not written in
- /// the source.
- unsigned getNumArgs() const;
-
- /// \brief Returns true if the callee is known to be from a system header.
- bool isInSystemHeader() const {
- const Decl *D = getDecl();
- if (!D)
- return false;
-
- SourceLocation Loc = D->getLocation();
- if (Loc.isValid()) {
- const SourceManager &SM =
- getState()->getStateManager().getContext().getSourceManager();
- return SM.isInSystemHeader(D->getLocation());
- }
-
- // Special case for implicitly-declared global operator new/delete.
- // These should be considered system functions.
- if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
- return FD->isOverloadedOperator() && FD->isImplicit() && FD->isGlobal();
-
- return false;
- }
-
- /// \brief Returns a source range for the entire call, suitable for
- /// outputting in diagnostics.
- SourceRange getSourceRange() const;
-
- /// \brief Returns the value of a given argument at the time of the call.
- SVal getArgSVal(unsigned Index) const;
-
- /// \brief Returns the expression associated with a given argument.
- /// May be null if this expression does not appear in the source.
- const Expr *getArgExpr(unsigned Index) const;
-
- /// \brief Returns the source range for errors associated with this argument.
- /// May be invalid if the argument is not written in the source.
- // FIXME: Is it better to return an invalid range or the range of the origin
- // expression?
- SourceRange getArgSourceRange(unsigned Index) const;
-
- /// \brief Returns the result type, adjusted for references.
- QualType getResultType() const;
-
- /// \brief Returns the value of the implicit 'this' object, or UndefinedVal if
- /// this is not a C++ member function call.
- SVal getCXXThisVal() const;
-
- /// \brief Returns true if any of the arguments appear to represent callbacks.
- bool hasNonZeroCallbackArg() const;
-
- /// \brief Returns true if any of the arguments are known to escape to long-
- /// term storage, even if this method will not modify them.
- // NOTE: The exact semantics of this are still being defined!
- // We don't really want a list of hardcoded exceptions in the long run,
- // but we don't want duplicated lists of known APIs in the short term either.
- bool argumentsMayEscape() const;
-
- /// \brief Returns an appropriate ProgramPoint for this call.
- ProgramPoint getProgramPoint(bool IsPreVisit = false,
- const ProgramPointTag *Tag = 0) const;
-
- /// \brief Returns a new state with all argument regions invalidated.
- ///
- /// This accepts an alternate state in case some processing has already
- /// occurred.
- ProgramStateRef invalidateRegions(unsigned BlockCount,
- ProgramStateRef Orig = 0) const;
-
- /// \brief Returns true if this is a statement that can be considered for
- /// inlining.
- static bool mayBeInlined(const Stmt *S);
-
- // Iterator access to formal parameters and their types.
-private:
- typedef std::const_mem_fun_t<QualType, ParmVarDecl> get_type_fun;
-
-public:
- typedef const ParmVarDecl * const *param_iterator;
-
- /// Returns an iterator over the call's formal parameters.
- ///
- /// If UseDefinitionParams is set, this will return the parameter decls
- /// used in the callee's definition (suitable for inlining). Most of the
- /// time it is better to use the decl found by name lookup, which likely
- /// carries more annotations.
- ///
- /// Remember that the number of formal parameters may not match the number
- /// of arguments for all calls. However, the first parameter will always
- /// correspond with the argument value returned by \c getArgSVal(0).
- ///
- /// If the call has no accessible declaration (or definition, if
- /// \p UseDefinitionParams is set), \c param_begin() will be equal to
- /// \c param_end().
- param_iterator param_begin(bool UseDefinitionParams = false) const;
- /// \sa param_begin()
- param_iterator param_end(bool UseDefinitionParams = false) const;
-
- typedef llvm::mapped_iterator<param_iterator, get_type_fun>
- param_type_iterator;
-
- /// Returns an iterator over the types of the call's formal parameters.
- ///
- /// This uses the callee decl found by default name lookup rather than the
- /// definition because it represents a public interface, and probably has
- /// more annotations.
- param_type_iterator param_type_begin() const {
- return llvm::map_iterator(param_begin(),
- get_type_fun(&ParmVarDecl::getType));
- }
- /// \sa param_type_begin()
- param_type_iterator param_type_end() const {
- return llvm::map_iterator(param_end(), get_type_fun(&ParmVarDecl::getType));
- }
-
- // For debugging purposes only
- void dump(raw_ostream &Out) const;
- LLVM_ATTRIBUTE_USED void dump() const { dump(llvm::errs()); }
-
- static bool classof(const CallEvent *) { return true; }
-};
-
-
-/// \brief Represents a call to any sort of function that might have a
-/// FunctionDecl.
-class AnyFunctionCall : public CallEvent {
- friend class CallEvent;
-
-protected:
- AnyFunctionCall(const Expr *E, ProgramStateRef St,
- const LocationContext *LCtx, Kind K)
- : CallEvent(E, St, LCtx, K) {}
- AnyFunctionCall(const Decl *D, ProgramStateRef St,
- const LocationContext *LCtx, Kind K)
- : CallEvent(D, St, LCtx, K) {}
-
- // Most function calls have no extra invalidated regions.
- void getExtraInvalidatedRegions(RegionList &Regions) const {}
-
- QualType getDeclaredResultType() const;
-
-public:
- // This function is overridden by subclasses, but they must return
- // a FunctionDecl.
- const FunctionDecl *getDecl() const {
- return cast_or_null<FunctionDecl>(CallEvent::getDecl());
- }
-
- const Decl *getRuntimeDefinition() const {
- const FunctionDecl *FD = getDecl();
- // Note that hasBody() will fill FD with the definition FunctionDecl.
- if (FD && FD->hasBody(FD))
- return FD;
- return 0;
- }
-
- bool argumentsMayEscape() const;
-
- SVal getArgSVal(unsigned Index) const;
- SourceRange getArgSourceRange(unsigned Index) const;
-
- param_iterator param_begin(bool UseDefinitionParams = false) const;
- param_iterator param_end(bool UseDefinitionParams = false) const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() >= CE_BEG_FUNCTION_CALLS &&
- CA->getKind() <= CE_END_FUNCTION_CALLS;
- }
-};
-
-/// \brief Represents a call to a written as a CallExpr.
-class SimpleCall : public AnyFunctionCall {
-protected:
- SimpleCall(const CallExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx, Kind K)
- : AnyFunctionCall(CE, St, LCtx, K) {
- }
-
-public:
- const CallExpr *getOriginExpr() const {
- return cast<CallExpr>(AnyFunctionCall::getOriginExpr());
- }
-
- const FunctionDecl *getDecl() const;
-
- unsigned getNumArgs() const { return getOriginExpr()->getNumArgs(); }
- SourceRange getSourceRange() const {
- return getOriginExpr()->getSourceRange();
- }
-
- const Expr *getArgExpr(unsigned Index) const {
- return getOriginExpr()->getArg(Index);
- }
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() >= CE_BEG_SIMPLE_CALLS &&
- CA->getKind() <= CE_END_SIMPLE_CALLS;
- }
-};
-
-/// \brief Represents a C function or static C++ member function call.
-///
-/// Example: \c fun()
-class FunctionCall : public SimpleCall {
-public:
- FunctionCall(const CallExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx)
- : SimpleCall(CE, St, LCtx, CE_Function) {}
-
- SVal getCXXThisVal() const { return UndefinedVal(); }
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_Function;
- }
-};
-
-/// \brief Represents a non-static C++ member function call, no matter how
-/// it is written.
-class CXXInstanceCall : public SimpleCall {
- friend class CallEvent;
-
-protected:
- void getExtraInvalidatedRegions(RegionList &Regions) const;
-
- CXXInstanceCall(const CallExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx, Kind K)
- : SimpleCall(CE, St, LCtx, K) {}
-
-public:
- const Decl *getRuntimeDefinition() const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() >= CE_BEG_CXX_INSTANCE_CALLS &&
- CA->getKind() <= CE_END_CXX_INSTANCE_CALLS;
- }
-};
-
-/// \brief Represents a non-static C++ member function call.
-///
-/// Example: \c obj.fun()
-class CXXMemberCall : public CXXInstanceCall {
-public:
- CXXMemberCall(const CXXMemberCallExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx)
- : CXXInstanceCall(CE, St, LCtx, CE_CXXMember) {}
-
- const CXXMemberCallExpr *getOriginExpr() const {
- return cast<CXXMemberCallExpr>(SimpleCall::getOriginExpr());
- }
-
- SVal getCXXThisVal() const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_CXXMember;
- }
-};
-
-/// \brief Represents a C++ overloaded operator call where the operator is
-/// implemented as a non-static member function.
-///
-/// Example: <tt>iter + 1</tt>
-class CXXMemberOperatorCall : public CXXInstanceCall {
-public:
- CXXMemberOperatorCall(const CXXOperatorCallExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx)
- : CXXInstanceCall(CE, St, LCtx, CE_CXXMemberOperator) {}
-
- const CXXOperatorCallExpr *getOriginExpr() const {
- return cast<CXXOperatorCallExpr>(SimpleCall::getOriginExpr());
- }
-
- unsigned getNumArgs() const { return getOriginExpr()->getNumArgs() - 1; }
- const Expr *getArgExpr(unsigned Index) const {
- return getOriginExpr()->getArg(Index + 1);
- }
-
- SVal getCXXThisVal() const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_CXXMemberOperator;
- }
-};
-
-/// \brief Represents a call to a block.
-///
-/// Example: <tt>^{ /* ... */ }()</tt>
-class BlockCall : public SimpleCall {
- friend class CallEvent;
-
-protected:
- void getExtraInvalidatedRegions(RegionList &Regions) const;
-
- QualType getDeclaredResultType() const;
-
-public:
- BlockCall(const CallExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx)
- : SimpleCall(CE, St, LCtx, CE_Block) {}
-
- /// \brief Returns the region associated with this instance of the block.
- ///
- /// This may be NULL if the block's origin is unknown.
- const BlockDataRegion *getBlockRegion() const;
-
- /// \brief Gets the declaration of the block.
- ///
- /// This is not an override of getDecl() because AnyFunctionCall has already
- /// assumed that it's a FunctionDecl.
- const BlockDecl *getBlockDecl() const {
- const BlockDataRegion *BR = getBlockRegion();
- if (!BR)
- return 0;
- return BR->getDecl();
- }
-
- const Decl *getRuntimeDefinition() const {
- return getBlockDecl();
- }
-
- param_iterator param_begin(bool UseDefinitionParams = false) const;
- param_iterator param_end(bool UseDefinitionParams = false) const;
-
- SVal getCXXThisVal() const { return UndefinedVal(); }
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_Block;
- }
-};
-
-/// \brief Represents a call to a C++ constructor.
-///
-/// Example: \c T(1)
-class CXXConstructorCall : public AnyFunctionCall {
- friend class CallEvent;
-
-protected:
- void getExtraInvalidatedRegions(RegionList &Regions) const;
-
-public:
- /// Represents a constructor call to a new or unknown region.
- CXXConstructorCall(const CXXConstructExpr *CE, ProgramStateRef St,
- const LocationContext *LCtx)
- : AnyFunctionCall(CE, St, LCtx, CE_CXXConstructor) {
- Data = 0;
- }
-
- /// Represents a constructor call on an existing object region.
- CXXConstructorCall(const CXXConstructExpr *CE, const MemRegion *target,
- ProgramStateRef St, const LocationContext *LCtx)
- : AnyFunctionCall(CE, St, LCtx, CE_CXXConstructor) {
- Data = target;
- }
-
- const CXXConstructExpr *getOriginExpr() const {
- return cast<CXXConstructExpr>(AnyFunctionCall::getOriginExpr());
- }
-
- SourceRange getSourceRange() const {
- return getOriginExpr()->getSourceRange();
- }
-
- const CXXConstructorDecl *getDecl() const {
- return getOriginExpr()->getConstructor();
- }
-
- unsigned getNumArgs() const { return getOriginExpr()->getNumArgs(); }
-
- const Expr *getArgExpr(unsigned Index) const {
- return getOriginExpr()->getArg(Index);
- }
-
- SVal getCXXThisVal() const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_CXXConstructor;
- }
-};
-
-/// \brief Represents an implicit call to a C++ destructor.
-///
-/// This can occur at the end of a scope (for automatic objects), at the end
-/// of a full-expression (for temporaries), or as part of a delete.
-class CXXDestructorCall : public AnyFunctionCall {
- friend class CallEvent;
-
-protected:
- void getExtraInvalidatedRegions(RegionList &Regions) const;
-
-public:
- /// Creates an implicit destructor.
- ///
- /// \param DD The destructor that will be called.
- /// \param Trigger The statement whose completion causes this destructor call.
- /// \param Target The object region to be destructed.
- /// \param St The path-sensitive state at this point in the program.
- /// \param LCtx The location context at this point in the program.
- CXXDestructorCall(const CXXDestructorDecl *DD, const Stmt *Trigger,
- const MemRegion *Target, ProgramStateRef St,
- const LocationContext *LCtx)
- : AnyFunctionCall(DD, St, LCtx, CE_CXXDestructor) {
- Data = Target;
- Location = Trigger->getLocEnd();
- }
-
- SourceRange getSourceRange() const { return Location; }
- unsigned getNumArgs() const { return 0; }
-
- SVal getCXXThisVal() const;
- const Decl *getRuntimeDefinition() const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_CXXDestructor;
- }
-};
-
-/// \brief Represents the memory allocation call in a C++ new-expression.
-///
-/// This is a call to "operator new".
-class CXXAllocatorCall : public AnyFunctionCall {
-public:
- CXXAllocatorCall(const CXXNewExpr *E, ProgramStateRef St,
- const LocationContext *LCtx)
- : AnyFunctionCall(E, St, LCtx, CE_CXXAllocator) {}
-
- const CXXNewExpr *getOriginExpr() const {
- return cast<CXXNewExpr>(AnyFunctionCall::getOriginExpr());
- }
-
- // FIXME: This isn't exactly the range of the allocator...
- SourceRange getSourceRange() const {
- return getOriginExpr()->getSourceRange();
- }
-
- const FunctionDecl *getDecl() const {
- return getOriginExpr()->getOperatorNew();
- }
-
- unsigned getNumArgs() const {
- return getOriginExpr()->getNumPlacementArgs() + 1;
- }
-
- const Expr *getArgExpr(unsigned Index) const {
- // The first argument of an allocator call is the size of the allocation.
- if (Index == 0)
- return 0;
- return getOriginExpr()->getPlacementArg(Index - 1);
- }
-
- SVal getCXXThisVal() const { return UndefinedVal(); }
-
- static bool classof(const CallEvent *CE) {
- return CE->getKind() == CE_CXXAllocator;
- }
-};
-
-/// \brief Represents the ways an Objective-C message send can occur.
-//
-// Note to maintainers: OCM_Message should always be last, since it does not
-// need to fit in the Data field's low bits.
-enum ObjCMessageKind {
- OCM_PropertyAccess,
- OCM_Subscript,
- OCM_Message
-};
-
-/// \brief Represents any expression that calls an Objective-C method.
-///
-/// This includes all of the kinds listed in ObjCMessageKind.
-class ObjCMethodCall : public CallEvent {
- friend class CallEvent;
-
- const PseudoObjectExpr *getContainingPseudoObjectExpr() const;
-
-protected:
- void getExtraInvalidatedRegions(RegionList &Regions) const;
-
- QualType getDeclaredResultType() const;
- ObjCMethodDecl *LookupClassMethodDefinition(Selector Sel,
- ObjCInterfaceDecl *ClassDecl) const;
-
-public:
- ObjCMethodCall(const ObjCMessageExpr *Msg, ProgramStateRef St,
- const LocationContext *LCtx)
- : CallEvent(Msg, St, LCtx, CE_ObjCMessage) {
- Data = 0;
- }
-
- const ObjCMessageExpr *getOriginExpr() const {
- return cast<ObjCMessageExpr>(CallEvent::getOriginExpr());
- }
- const ObjCMethodDecl *getDecl() const {
- return getOriginExpr()->getMethodDecl();
- }
- unsigned getNumArgs() const {
- return getOriginExpr()->getNumArgs();
- }
- const Expr *getArgExpr(unsigned Index) const {
- return getOriginExpr()->getArg(Index);
- }
-
- bool isInstanceMessage() const {
- return getOriginExpr()->isInstanceMessage();
- }
- ObjCMethodFamily getMethodFamily() const {
- return getOriginExpr()->getMethodFamily();
- }
- Selector getSelector() const {
- return getOriginExpr()->getSelector();
- }
-
- SourceRange getSourceRange() const;
-
- /// \brief Returns the value of the receiver at the time of this call.
- SVal getReceiverSVal() const;
-
- /// \brief Get the interface for the receiver.
- ///
- /// This works whether this is an instance message or a class message.
- /// However, it currently just uses the static type of the receiver.
- const ObjCInterfaceDecl *getReceiverInterface() const {
- return getOriginExpr()->getReceiverInterface();
- }
-
- ObjCMessageKind getMessageKind() const;
-
- bool isSetter() const {
- switch (getMessageKind()) {
- case OCM_Message:
- llvm_unreachable("This is not a pseudo-object access!");
- case OCM_PropertyAccess:
- return getNumArgs() > 0;
- case OCM_Subscript:
- return getNumArgs() > 1;
- }
- llvm_unreachable("Unknown message kind");
- }
-
- // TODO: We might want to only compute this once (or change the API for
- // getting the parameters). Currently, this gets called 3 times during
- // inlining.
- const Decl *getRuntimeDefinition() const {
-
- const ObjCMessageExpr *E = getOriginExpr();
- if (E->isInstanceMessage()) {
- return 0;
- } else {
- // This is a calss method.
- // If we have type info for the receiver class, we are calling via
- // class name.
- if (ObjCInterfaceDecl *IDecl = E->getReceiverInterface()) {
- return LookupClassMethodDefinition(E->getSelector(), IDecl);
- }
- }
-
- return 0;
- }
-
- SVal getCXXThisVal() const { return UndefinedVal(); }
-
- bool argumentsMayEscape() const {
- return hasNonZeroCallbackArg();
- }
-
- SVal getArgSVal(unsigned Index) const { return getSVal(getArgExpr(Index)); }
- SourceRange getArgSourceRange(unsigned Index) const {
- return getArgExpr(Index)->getSourceRange();
- }
-
- param_iterator param_begin(bool UseDefinitionParams = false) const;
- param_iterator param_end(bool UseDefinitionParams = false) const;
-
- static bool classof(const CallEvent *CA) {
- return CA->getKind() == CE_ObjCMessage;
- }
-};
-
-
-// FIXME: Use a .def or .td file for this.
-#define DISPATCH(fn) \
- switch (getKind()) { \
- case CE_Function: \
- return cast<FunctionCall>(this)->fn(); \
- case CE_CXXMember: \
- return cast<CXXMemberCall>(this)->fn(); \
- case CE_CXXMemberOperator: \
- return cast<CXXMemberOperatorCall>(this)->fn(); \
- case CE_Block: \
- return cast<BlockCall>(this)->fn(); \
- case CE_CXXConstructor: \
- return cast<CXXConstructorCall>(this)->fn(); \
- case CE_CXXDestructor: \
- return cast<CXXDestructorCall>(this)->fn(); \
- case CE_CXXAllocator: \
- return cast<CXXAllocatorCall>(this)->fn(); \
- case CE_ObjCMessage: \
- return cast<ObjCMethodCall>(this)->fn(); \
- } \
- llvm_unreachable("unknown CallEvent kind");
-
-#define DISPATCH_ARG(fn, arg) \
- switch (getKind()) { \
- case CE_Function: \
- return cast<FunctionCall>(this)->fn(arg); \
- case CE_CXXMember: \
- return cast<CXXMemberCall>(this)->fn(arg); \
- case CE_CXXMemberOperator: \
- return cast<CXXMemberOperatorCall>(this)->fn(arg); \
- case CE_Block: \
- return cast<BlockCall>(this)->fn(arg); \
- case CE_CXXConstructor: \
- return cast<CXXConstructorCall>(this)->fn(arg); \
- case CE_CXXDestructor: \
- return cast<CXXDestructorCall>(this)->fn(arg); \
- case CE_CXXAllocator: \
- return cast<CXXAllocatorCall>(this)->fn(arg); \
- case CE_ObjCMessage: \
- return cast<ObjCMethodCall>(this)->fn(arg); \
- } \
- llvm_unreachable("unknown CallEvent kind");
-
-inline void CallEvent::getExtraInvalidatedRegions(RegionList &Regions) const {
- DISPATCH_ARG(getExtraInvalidatedRegions, Regions);
-}
-
-inline QualType CallEvent::getDeclaredResultType() const {
- DISPATCH(getDeclaredResultType);
-}
-
-inline const Decl *CallEvent::getDecl() const {
- if (const Decl *D = Origin.dyn_cast<const Decl *>())
- return D;
- DISPATCH(getDecl);
-}
-
-inline const Decl *CallEvent::getRuntimeDefinition() const {
- DISPATCH(getRuntimeDefinition);
-}
-
-inline unsigned CallEvent::getNumArgs() const {
- DISPATCH(getNumArgs);
-}
-
-inline SourceRange CallEvent::getSourceRange() const {
- DISPATCH(getSourceRange);
-}
-
-inline SVal CallEvent::getArgSVal(unsigned Index) const {
- DISPATCH_ARG(getArgSVal, Index);
-}
-
-inline const Expr *CallEvent::getArgExpr(unsigned Index) const {
- DISPATCH_ARG(getArgExpr, Index);
-}
-
-inline SourceRange CallEvent::getArgSourceRange(unsigned Index) const {
- DISPATCH_ARG(getArgSourceRange, Index);
-}
-
-inline SVal CallEvent::getCXXThisVal() const {
- DISPATCH(getCXXThisVal);
-}
-
-
-inline bool CallEvent::argumentsMayEscape() const {
- DISPATCH(argumentsMayEscape);
-}
-
-inline CallEvent::param_iterator
-CallEvent::param_begin(bool UseDefinitionParams) const {
- DISPATCH_ARG(param_begin, UseDefinitionParams);
-}
-
-inline CallEvent::param_iterator
-CallEvent::param_end(bool UseDefinitionParams) const {
- DISPATCH_ARG(param_end, UseDefinitionParams);
-}
-
-#undef DISPATCH
-#undef DISPATCH_ARG
-
-} // end namespace ento
-} // end namespace clang
-
-#endif
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/AttrNonNullChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/AttrNonNullChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/AttrNonNullChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/AttrNonNullChecker.cpp Thu Jul 26 16:39:41 2012
@@ -15,7 +15,7 @@
#include "ClangSACheckers.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp Thu Jul 26 16:39:41 2012
@@ -17,7 +17,7 @@
#include "clang/Analysis/DomainSpecific/CocoaConventions.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp Thu Jul 26 16:39:41 2012
@@ -15,7 +15,7 @@
#include "ClangSACheckers.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/AST/ParentMap.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Thu Jul 26 16:39:41 2012
@@ -18,7 +18,7 @@
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp Thu Jul 26 16:39:41 2012
@@ -20,7 +20,7 @@
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
#include "clang/AST/DeclObjC.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp Thu Jul 26 16:39:41 2012
@@ -15,7 +15,7 @@
#include "ClangSACheckers.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "llvm/ADT/StringSwitch.h"
#include <cstdarg>
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp Thu Jul 26 16:39:41 2012
@@ -39,7 +39,7 @@
#include "ClangSACheckers.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp Thu Jul 26 16:39:41 2012
@@ -23,7 +23,7 @@
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/TraversalChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/TraversalChecker.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/TraversalChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/TraversalChecker.cpp Thu Jul 26 16:39:41 2012
@@ -16,7 +16,7 @@
#include "clang/AST/StmtObjC.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
using namespace clang;
Modified: cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/CMakeLists.txt Thu Jul 26 16:39:41 2012
@@ -8,7 +8,7 @@
BlockCounter.cpp
BugReporter.cpp
BugReporterVisitors.cpp
- Calls.cpp
+ CallEvent.cpp
Checker.cpp
CheckerContext.cpp
CheckerHelpers.cpp
Copied: cfe/trunk/lib/StaticAnalyzer/Core/CallEvent.cpp (from r160810, cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp)
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CallEvent.cpp?p2=cfe/trunk/lib/StaticAnalyzer/Core/CallEvent.cpp&p1=cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp&r1=160810&r2=160815&rev=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/CallEvent.cpp Thu Jul 26 16:39:41 2012
@@ -13,7 +13,7 @@
//
//===----------------------------------------------------------------------===//
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/Analysis/ProgramPoint.h"
#include "clang/AST/ParentMap.h"
#include "llvm/ADT/SmallSet.h"
Removed: cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp?rev=160814&view=auto
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/Calls.cpp (removed)
@@ -1,620 +0,0 @@
-//===- Calls.cpp - Wrapper for all function and method calls ------*- C++ -*--//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file This file defines CallEvent and its subclasses, which represent path-
-/// sensitive instances of different kinds of function and method calls
-/// (C, C++, and Objective-C).
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
-#include "clang/Analysis/ProgramPoint.h"
-#include "clang/AST/ParentMap.h"
-#include "llvm/ADT/SmallSet.h"
-#include "llvm/ADT/StringExtras.h"
-
-using namespace clang;
-using namespace ento;
-
-QualType CallEvent::getResultType() const {
- QualType ResultTy = getDeclaredResultType();
-
- if (ResultTy.isNull())
- ResultTy = getOriginExpr()->getType();
-
- return ResultTy;
-}
-
-static bool isCallbackArg(SVal V, QualType T) {
- // If the parameter is 0, it's harmless.
- if (V.isZeroConstant())
- return false;
-
- // If a parameter is a block or a callback, assume it can modify pointer.
- if (T->isBlockPointerType() ||
- T->isFunctionPointerType() ||
- T->isObjCSelType())
- return true;
-
- // Check if a callback is passed inside a struct (for both, struct passed by
- // reference and by value). Dig just one level into the struct for now.
-
- if (isa<PointerType>(T) || isa<ReferenceType>(T))
- T = T->getPointeeType();
-
- if (const RecordType *RT = T->getAsStructureType()) {
- const RecordDecl *RD = RT->getDecl();
- for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
- I != E; ++I) {
- QualType FieldT = I->getType();
- if (FieldT->isBlockPointerType() || FieldT->isFunctionPointerType())
- return true;
- }
- }
-
- return false;
-}
-
-bool CallEvent::hasNonZeroCallbackArg() const {
- unsigned NumOfArgs = getNumArgs();
-
- // If calling using a function pointer, assume the function does not
- // have a callback. TODO: We could check the types of the arguments here.
- if (!getDecl())
- return false;
-
- unsigned Idx = 0;
- for (CallEvent::param_type_iterator I = param_type_begin(),
- E = param_type_end();
- I != E && Idx < NumOfArgs; ++I, ++Idx) {
- if (NumOfArgs <= Idx)
- break;
-
- if (isCallbackArg(getArgSVal(Idx), *I))
- return true;
- }
-
- return false;
-}
-
-/// \brief Returns true if a type is a pointer-to-const or reference-to-const
-/// with no further indirection.
-static bool isPointerToConst(QualType Ty) {
- QualType PointeeTy = Ty->getPointeeType();
- if (PointeeTy == QualType())
- return false;
- if (!PointeeTy.isConstQualified())
- return false;
- if (PointeeTy->isAnyPointerType())
- return false;
- return true;
-}
-
-// Try to retrieve the function declaration and find the function parameter
-// types which are pointers/references to a non-pointer const.
-// We will not invalidate the corresponding argument regions.
-static void findPtrToConstParams(llvm::SmallSet<unsigned, 1> &PreserveArgs,
- const CallEvent &Call) {
- unsigned Idx = 0;
- for (CallEvent::param_type_iterator I = Call.param_type_begin(),
- E = Call.param_type_end();
- I != E; ++I, ++Idx) {
- if (isPointerToConst(*I))
- PreserveArgs.insert(Idx);
- }
-}
-
-ProgramStateRef CallEvent::invalidateRegions(unsigned BlockCount,
- ProgramStateRef Orig) const {
- ProgramStateRef Result = (Orig ? Orig : getState());
-
- SmallVector<const MemRegion *, 8> RegionsToInvalidate;
- getExtraInvalidatedRegions(RegionsToInvalidate);
-
- // Indexes of arguments whose values will be preserved by the call.
- llvm::SmallSet<unsigned, 1> PreserveArgs;
- if (!argumentsMayEscape())
- findPtrToConstParams(PreserveArgs, *this);
-
- for (unsigned Idx = 0, Count = getNumArgs(); Idx != Count; ++Idx) {
- if (PreserveArgs.count(Idx))
- continue;
-
- SVal V = getArgSVal(Idx);
-
- // If we are passing a location wrapped as an integer, unwrap it and
- // invalidate the values referred by the location.
- if (nonloc::LocAsInteger *Wrapped = dyn_cast<nonloc::LocAsInteger>(&V))
- V = Wrapped->getLoc();
- else if (!isa<Loc>(V))
- continue;
-
- if (const MemRegion *R = V.getAsRegion()) {
- // Invalidate the value of the variable passed by reference.
-
- // Are we dealing with an ElementRegion? If the element type is
- // a basic integer type (e.g., char, int) and the underlying region
- // is a variable region then strip off the ElementRegion.
- // FIXME: We really need to think about this for the general case
- // as sometimes we are reasoning about arrays and other times
- // about (char*), etc., is just a form of passing raw bytes.
- // e.g., void *p = alloca(); foo((char*)p);
- if (const ElementRegion *ER = dyn_cast<ElementRegion>(R)) {
- // Checking for 'integral type' is probably too promiscuous, but
- // we'll leave it in for now until we have a systematic way of
- // handling all of these cases. Eventually we need to come up
- // with an interface to StoreManager so that this logic can be
- // appropriately delegated to the respective StoreManagers while
- // still allowing us to do checker-specific logic (e.g.,
- // invalidating reference counts), probably via callbacks.
- if (ER->getElementType()->isIntegralOrEnumerationType()) {
- const MemRegion *superReg = ER->getSuperRegion();
- if (isa<VarRegion>(superReg) || isa<FieldRegion>(superReg) ||
- isa<ObjCIvarRegion>(superReg))
- R = cast<TypedRegion>(superReg);
- }
- // FIXME: What about layers of ElementRegions?
- }
-
- // Mark this region for invalidation. We batch invalidate regions
- // below for efficiency.
- RegionsToInvalidate.push_back(R);
- }
- }
-
- // Invalidate designated regions using the batch invalidation API.
- // NOTE: Even if RegionsToInvalidate is empty, we may still invalidate
- // global variables.
- return Result->invalidateRegions(RegionsToInvalidate, getOriginExpr(),
- BlockCount, getLocationContext(),
- /*Symbols=*/0, this);
-}
-
-ProgramPoint CallEvent::getProgramPoint(bool IsPreVisit,
- const ProgramPointTag *Tag) const {
- if (const Expr *E = getOriginExpr()) {
- if (IsPreVisit)
- return PreStmt(E, getLocationContext(), Tag);
- return PostStmt(E, getLocationContext(), Tag);
- }
-
- const Decl *D = getDecl();
- assert(D && "Cannot get a program point without a statement or decl");
-
- SourceLocation Loc = getSourceRange().getBegin();
- if (IsPreVisit)
- return PreImplicitCall(D, Loc, getLocationContext(), Tag);
- return PostImplicitCall(D, Loc, getLocationContext(), Tag);
-}
-
-
-bool CallEvent::mayBeInlined(const Stmt *S) {
- return isa<CallExpr>(S);
-}
-
-
-CallEvent::param_iterator
-AnyFunctionCall::param_begin(bool UseDefinitionParams) const {
- const Decl *D = UseDefinitionParams ? getRuntimeDefinition()
- : getDecl();
- if (!D)
- return 0;
-
- return cast<FunctionDecl>(D)->param_begin();
-}
-
-CallEvent::param_iterator
-AnyFunctionCall::param_end(bool UseDefinitionParams) const {
- const Decl *D = UseDefinitionParams ? getRuntimeDefinition()
- : getDecl();
- if (!D)
- return 0;
-
- return cast<FunctionDecl>(D)->param_end();
-}
-
-QualType AnyFunctionCall::getDeclaredResultType() const {
- const FunctionDecl *D = getDecl();
- if (!D)
- return QualType();
-
- return D->getResultType();
-}
-
-bool AnyFunctionCall::argumentsMayEscape() const {
- if (hasNonZeroCallbackArg())
- return true;
-
- const FunctionDecl *D = getDecl();
- if (!D)
- return true;
-
- const IdentifierInfo *II = D->getIdentifier();
- if (!II)
- return true;
-
- // This set of "escaping" APIs is
-
- // - 'int pthread_setspecific(ptheread_key k, const void *)' stores a
- // value into thread local storage. The value can later be retrieved with
- // 'void *ptheread_getspecific(pthread_key)'. So even thought the
- // parameter is 'const void *', the region escapes through the call.
- if (II->isStr("pthread_setspecific"))
- return true;
-
- // - xpc_connection_set_context stores a value which can be retrieved later
- // with xpc_connection_get_context.
- if (II->isStr("xpc_connection_set_context"))
- return true;
-
- // - funopen - sets a buffer for future IO calls.
- if (II->isStr("funopen"))
- return true;
-
- StringRef FName = II->getName();
-
- // - CoreFoundation functions that end with "NoCopy" can free a passed-in
- // buffer even if it is const.
- if (FName.endswith("NoCopy"))
- return true;
-
- // - NSXXInsertXX, for example NSMapInsertIfAbsent, since they can
- // be deallocated by NSMapRemove.
- if (FName.startswith("NS") && (FName.find("Insert") != StringRef::npos))
- return true;
-
- // - Many CF containers allow objects to escape through custom
- // allocators/deallocators upon container construction. (PR12101)
- if (FName.startswith("CF") || FName.startswith("CG")) {
- return StrInStrNoCase(FName, "InsertValue") != StringRef::npos ||
- StrInStrNoCase(FName, "AddValue") != StringRef::npos ||
- StrInStrNoCase(FName, "SetValue") != StringRef::npos ||
- StrInStrNoCase(FName, "WithData") != StringRef::npos ||
- StrInStrNoCase(FName, "AppendValue") != StringRef::npos ||
- StrInStrNoCase(FName, "SetAttribute") != StringRef::npos;
- }
-
- return false;
-}
-
-SVal AnyFunctionCall::getArgSVal(unsigned Index) const {
- const Expr *ArgE = getArgExpr(Index);
- if (!ArgE)
- return UnknownVal();
- return getSVal(ArgE);
-}
-
-SourceRange AnyFunctionCall::getArgSourceRange(unsigned Index) const {
- const Expr *ArgE = getArgExpr(Index);
- if (!ArgE)
- return SourceRange();
- return ArgE->getSourceRange();
-}
-
-
-const FunctionDecl *SimpleCall::getDecl() const {
- const FunctionDecl *D = getOriginExpr()->getDirectCallee();
- if (D)
- return D;
-
- return getSVal(getOriginExpr()->getCallee()).getAsFunctionDecl();
-}
-
-void CallEvent::dump(raw_ostream &Out) const {
- ASTContext &Ctx = getState()->getStateManager().getContext();
- if (const Expr *E = getOriginExpr()) {
- E->printPretty(Out, Ctx, 0, Ctx.getLangOpts());
- Out << "\n";
- return;
- }
-
- if (const Decl *D = getDecl()) {
- Out << "Call to ";
- D->print(Out, Ctx.getLangOpts());
- return;
- }
-
- // FIXME: a string representation of the kind would be nice.
- Out << "Unknown call (type " << getKind() << ")";
-}
-
-
-void CXXInstanceCall::getExtraInvalidatedRegions(RegionList &Regions) const {
- if (const MemRegion *R = getCXXThisVal().getAsRegion())
- Regions.push_back(R);
-}
-
-static const CXXMethodDecl *devirtualize(const CXXMethodDecl *MD, SVal ThisVal){
- const MemRegion *R = ThisVal.getAsRegion();
- if (!R)
- return 0;
-
- const TypedValueRegion *TR = dyn_cast<TypedValueRegion>(R->StripCasts());
- if (!TR)
- return 0;
-
- const CXXRecordDecl *RD = TR->getValueType()->getAsCXXRecordDecl();
- if (!RD)
- return 0;
-
- const CXXMethodDecl *Result = MD->getCorrespondingMethodInClass(RD);
- const FunctionDecl *Definition;
- if (!Result->hasBody(Definition))
- return 0;
-
- return cast<CXXMethodDecl>(Definition);
-}
-
-
-const Decl *CXXInstanceCall::getRuntimeDefinition() const {
- const Decl *D = SimpleCall::getRuntimeDefinition();
- if (!D)
- return 0;
-
- const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
- if (!MD->isVirtual())
- return MD;
-
- // If the method is virtual, see if we can find the actual implementation
- // based on context-sensitivity.
- if (const CXXMethodDecl *Devirtualized = devirtualize(MD, getCXXThisVal()))
- return Devirtualized;
-
- return 0;
-}
-
-
-SVal CXXMemberCall::getCXXThisVal() const {
- const Expr *Base = getOriginExpr()->getImplicitObjectArgument();
-
- // FIXME: Will eventually need to cope with member pointers. This is
- // a limitation in getImplicitObjectArgument().
- if (!Base)
- return UnknownVal();
-
- return getSVal(Base);
-}
-
-
-SVal CXXMemberOperatorCall::getCXXThisVal() const {
- const Expr *Base = getOriginExpr()->getArg(0);
- return getSVal(Base);
-}
-
-
-const BlockDataRegion *BlockCall::getBlockRegion() const {
- const Expr *Callee = getOriginExpr()->getCallee();
- const MemRegion *DataReg = getSVal(Callee).getAsRegion();
-
- return dyn_cast_or_null<BlockDataRegion>(DataReg);
-}
-
-CallEvent::param_iterator
-BlockCall::param_begin(bool UseDefinitionParams) const {
- // Blocks don't have distinct declarations and definitions.
- (void)UseDefinitionParams;
-
- const BlockDecl *D = getBlockDecl();
- if (!D)
- return 0;
- return D->param_begin();
-}
-
-CallEvent::param_iterator
-BlockCall::param_end(bool UseDefinitionParams) const {
- // Blocks don't have distinct declarations and definitions.
- (void)UseDefinitionParams;
-
- const BlockDecl *D = getBlockDecl();
- if (!D)
- return 0;
- return D->param_end();
-}
-
-void BlockCall::getExtraInvalidatedRegions(RegionList &Regions) const {
- // FIXME: This also needs to invalidate captured globals.
- if (const MemRegion *R = getBlockRegion())
- Regions.push_back(R);
-}
-
-QualType BlockCall::getDeclaredResultType() const {
- const BlockDataRegion *BR = getBlockRegion();
- if (!BR)
- return QualType();
- QualType BlockTy = BR->getCodeRegion()->getLocationType();
- return cast<FunctionType>(BlockTy->getPointeeType())->getResultType();
-}
-
-
-SVal CXXConstructorCall::getCXXThisVal() const {
- if (Data)
- return loc::MemRegionVal(static_cast<const MemRegion *>(Data));
- return UnknownVal();
-}
-
-void CXXConstructorCall::getExtraInvalidatedRegions(RegionList &Regions) const {
- if (Data)
- Regions.push_back(static_cast<const MemRegion *>(Data));
-}
-
-
-SVal CXXDestructorCall::getCXXThisVal() const {
- if (Data)
- return loc::MemRegionVal(static_cast<const MemRegion *>(Data));
- return UnknownVal();
-}
-
-void CXXDestructorCall::getExtraInvalidatedRegions(RegionList &Regions) const {
- if (Data)
- Regions.push_back(static_cast<const MemRegion *>(Data));
-}
-
-const Decl *CXXDestructorCall::getRuntimeDefinition() const {
- const Decl *D = AnyFunctionCall::getRuntimeDefinition();
- if (!D)
- return 0;
-
- const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
- if (!MD->isVirtual())
- return MD;
-
- // If the method is virtual, see if we can find the actual implementation
- // based on context-sensitivity.
- if (const CXXMethodDecl *Devirtualized = devirtualize(MD, getCXXThisVal()))
- return Devirtualized;
-
- return 0;
-}
-
-
-CallEvent::param_iterator
-ObjCMethodCall::param_begin(bool UseDefinitionParams) const {
- const Decl *D = UseDefinitionParams ? getRuntimeDefinition()
- : getDecl();
- if (!D)
- return 0;
-
- return cast<ObjCMethodDecl>(D)->param_begin();
-}
-
-CallEvent::param_iterator
-ObjCMethodCall::param_end(bool UseDefinitionParams) const {
- const Decl *D = UseDefinitionParams ? getRuntimeDefinition()
- : getDecl();
- if (!D)
- return 0;
-
- return cast<ObjCMethodDecl>(D)->param_end();
-}
-
-void
-ObjCMethodCall::getExtraInvalidatedRegions(RegionList &Regions) const {
- if (const MemRegion *R = getReceiverSVal().getAsRegion())
- Regions.push_back(R);
-}
-
-QualType ObjCMethodCall::getDeclaredResultType() const {
- const ObjCMethodDecl *D = getDecl();
- if (!D)
- return QualType();
-
- return D->getResultType();
-}
-
-SVal ObjCMethodCall::getReceiverSVal() const {
- // FIXME: Is this the best way to handle class receivers?
- if (!isInstanceMessage())
- return UnknownVal();
-
- if (const Expr *Base = getOriginExpr()->getInstanceReceiver())
- return getSVal(Base);
-
- // An instance message with no expression means we are sending to super.
- // In this case the object reference is the same as 'self'.
- const LocationContext *LCtx = getLocationContext();
- const ImplicitParamDecl *SelfDecl = LCtx->getSelfDecl();
- assert(SelfDecl && "No message receiver Expr, but not in an ObjC method");
- return getState()->getSVal(getState()->getRegion(SelfDecl, LCtx));
-}
-
-SourceRange ObjCMethodCall::getSourceRange() const {
- switch (getMessageKind()) {
- case OCM_Message:
- return getOriginExpr()->getSourceRange();
- case OCM_PropertyAccess:
- case OCM_Subscript:
- return getContainingPseudoObjectExpr()->getSourceRange();
- }
- llvm_unreachable("unknown message kind");
-}
-
-typedef llvm::PointerIntPair<const PseudoObjectExpr *, 2> ObjCMessageDataTy;
-
-const PseudoObjectExpr *ObjCMethodCall::getContainingPseudoObjectExpr() const {
- assert(Data != 0 && "Lazy lookup not yet performed.");
- assert(getMessageKind() != OCM_Message && "Explicit message send.");
- return ObjCMessageDataTy::getFromOpaqueValue(Data).getPointer();
-}
-
-ObjCMessageKind ObjCMethodCall::getMessageKind() const {
- if (Data == 0) {
- ParentMap &PM = getLocationContext()->getParentMap();
- const Stmt *S = PM.getParent(getOriginExpr());
- if (const PseudoObjectExpr *POE = dyn_cast_or_null<PseudoObjectExpr>(S)) {
- const Expr *Syntactic = POE->getSyntacticForm();
-
- // This handles the funny case of assigning to the result of a getter.
- // This can happen if the getter returns a non-const reference.
- if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(Syntactic))
- Syntactic = BO->getLHS();
-
- ObjCMessageKind K;
- switch (Syntactic->getStmtClass()) {
- case Stmt::ObjCPropertyRefExprClass:
- K = OCM_PropertyAccess;
- break;
- case Stmt::ObjCSubscriptRefExprClass:
- K = OCM_Subscript;
- break;
- default:
- // FIXME: Can this ever happen?
- K = OCM_Message;
- break;
- }
-
- if (K != OCM_Message) {
- const_cast<ObjCMethodCall *>(this)->Data
- = ObjCMessageDataTy(POE, K).getOpaqueValue();
- assert(getMessageKind() == K);
- return K;
- }
- }
-
- const_cast<ObjCMethodCall *>(this)->Data
- = ObjCMessageDataTy(0, 1).getOpaqueValue();
- assert(getMessageKind() == OCM_Message);
- return OCM_Message;
- }
-
- ObjCMessageDataTy Info = ObjCMessageDataTy::getFromOpaqueValue(Data);
- if (!Info.getPointer())
- return OCM_Message;
- return static_cast<ObjCMessageKind>(Info.getInt());
-}
-
-// TODO: This implementation is copied from SemaExprObjC.cpp, needs to be
-// factored into the ObjCInterfaceDecl.
-ObjCMethodDecl *ObjCMethodCall::LookupClassMethodDefinition(Selector Sel,
- ObjCInterfaceDecl *ClassDecl) const {
- ObjCMethodDecl *Method = 0;
- // Lookup in class and all superclasses.
- while (ClassDecl && !Method) {
- if (ObjCImplementationDecl *ImpDecl = ClassDecl->getImplementation())
- Method = ImpDecl->getClassMethod(Sel);
-
- // Look through local category implementations associated with the class.
- if (!Method)
- Method = ClassDecl->getCategoryClassMethod(Sel);
-
- // Before we give up, check if the selector is an instance method.
- // But only in the root. This matches gcc's behavior and what the
- // runtime expects.
- if (!Method && !ClassDecl->getSuperClass()) {
- Method = ClassDecl->lookupInstanceMethod(Sel);
- // Look through local category implementations associated
- // with the root class.
- //if (!Method)
- // Method = LookupPrivateInstanceMethod(Sel, ClassDecl);
- }
-
- ClassDecl = ClassDecl->getSuperClass();
- }
- return Method;
-}
-
Modified: cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp Thu Jul 26 16:39:41 2012
@@ -14,7 +14,7 @@
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/Analysis/ProgramPoint.h"
#include "clang/AST/DeclBase.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp Thu Jul 26 16:39:41 2012
@@ -13,7 +13,7 @@
//===----------------------------------------------------------------------===//
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/ParentMap.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Thu Jul 26 16:39:41 2012
@@ -18,7 +18,7 @@
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/ParentMap.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp Thu Jul 26 16:39:41 2012
@@ -14,7 +14,7 @@
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/StmtCXX.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp Thu Jul 26 16:39:41 2012
@@ -14,7 +14,7 @@
#include "clang/Analysis/Analyses/LiveVariables.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/AST/DeclCXX.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/Support/SaveAndRestore.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineObjC.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineObjC.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineObjC.cpp Thu Jul 26 16:39:41 2012
@@ -13,7 +13,7 @@
#include "clang/AST/StmtObjC.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
using namespace clang;
Modified: cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp Thu Jul 26 16:39:41 2012
@@ -20,7 +20,7 @@
#include "clang/Analysis/Analyses/LiveVariables.h"
#include "clang/Analysis/AnalysisContext.h"
#include "clang/Basic/TargetInfo.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"
Modified: cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp?rev=160815&r1=160814&r2=160815&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp Thu Jul 26 16:39:41 2012
@@ -12,7 +12,7 @@
//===----------------------------------------------------------------------===//
#include "clang/StaticAnalyzer/Core/PathSensitive/Store.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Calls.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/DeclObjC.h"
More information about the cfe-commits
mailing list