CallEvent.h revision 6bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89
1//===- CallEvent.h - Wrapper for all function and method calls ----*- C++ -*--//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10/// \file This file defines CallEvent and its subclasses, which represent path-
11/// sensitive instances of different kinds of function and method calls
12/// (C, C++, and Objective-C).
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_CLANG_STATICANALYZER_PATHSENSITIVE_CALL
17#define LLVM_CLANG_STATICANALYZER_PATHSENSITIVE_CALL
18
19#include "clang/AST/DeclCXX.h"
20#include "clang/AST/ExprCXX.h"
21#include "clang/AST/ExprObjC.h"
22#include "clang/Analysis/AnalysisContext.h"
23#include "clang/Basic/SourceManager.h"
24#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
25#include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
26#include "llvm/ADT/PointerIntPair.h"
27
28namespace clang {
29class ProgramPoint;
30class ProgramPointTag;
31
32namespace ento {
33
34enum CallEventKind {
35  CE_Function,
36  CE_CXXMember,
37  CE_CXXMemberOperator,
38  CE_CXXDestructor,
39  CE_BEG_CXX_INSTANCE_CALLS = CE_CXXMember,
40  CE_END_CXX_INSTANCE_CALLS = CE_CXXDestructor,
41  CE_CXXConstructor,
42  CE_CXXAllocator,
43  CE_BEG_FUNCTION_CALLS = CE_Function,
44  CE_END_FUNCTION_CALLS = CE_CXXAllocator,
45  CE_Block,
46  CE_ObjCMessage
47};
48
49class CallEvent;
50class CallEventManager;
51
52template<typename T = CallEvent>
53class CallEventRef : public IntrusiveRefCntPtr<const T> {
54public:
55  CallEventRef(const T *Call) : IntrusiveRefCntPtr<const T>(Call) {}
56  CallEventRef(const CallEventRef &Orig) : IntrusiveRefCntPtr<const T>(Orig) {}
57
58  CallEventRef<T> cloneWithState(ProgramStateRef State) const {
59    return this->getPtr()->template cloneWithState<T>(State);
60  }
61
62  // Allow implicit conversions to a superclass type, since CallEventRef
63  // behaves like a pointer-to-const.
64  template <typename SuperT>
65  operator CallEventRef<SuperT> () const {
66    return this->getPtr();
67  }
68};
69
70/// \class RuntimeDefinition
71/// \brief Defines the runtime definition of the called function.
72///
73/// Encapsulates the information we have about which Decl will be used
74/// when the call is executed on the given path. When dealing with dynamic
75/// dispatch, the information is based on DynamicTypeInfo and might not be
76/// precise.
77class RuntimeDefinition {
78  /// The Declaration of the function which could be called at runtime.
79  /// NULL if not available.
80  const Decl *D;
81
82  /// The region representing an object (ObjC/C++) on which the method is
83  /// called. With dynamic dispatch, the method definition depends on the
84  /// runtime type of this object. NULL when the DynamicTypeInfo is
85  /// precise.
86  const MemRegion *R;
87
88public:
89  RuntimeDefinition(): D(nullptr), R(nullptr) {}
90  RuntimeDefinition(const Decl *InD): D(InD), R(nullptr) {}
91  RuntimeDefinition(const Decl *InD, const MemRegion *InR): D(InD), R(InR) {}
92  const Decl *getDecl() { return D; }
93
94  /// \brief Check if the definition we have is precise.
95  /// If not, it is possible that the call dispatches to another definition at
96  /// execution time.
97  bool mayHaveOtherDefinitions() { return R != nullptr; }
98
99  /// When other definitions are possible, returns the region whose runtime type
100  /// determines the method definition.
101  const MemRegion *getDispatchRegion() { return R; }
102};
103
104/// \brief Represents an abstract call to a function or method along a
105/// particular path.
106///
107/// CallEvents are created through the factory methods of CallEventManager.
108///
109/// CallEvents should always be cheap to create and destroy. In order for
110/// CallEventManager to be able to re-use CallEvent-sized memory blocks,
111/// subclasses of CallEvent may not add any data members to the base class.
112/// Use the "Data" and "Location" fields instead.
113class CallEvent {
114public:
115  typedef CallEventKind Kind;
116
117private:
118  ProgramStateRef State;
119  const LocationContext *LCtx;
120  llvm::PointerUnion<const Expr *, const Decl *> Origin;
121
122  void operator=(const CallEvent &) LLVM_DELETED_FUNCTION;
123
124protected:
125  // This is user data for subclasses.
126  const void *Data;
127
128  // This is user data for subclasses.
129  // This should come right before RefCount, so that the two fields can be
130  // packed together on LP64 platforms.
131  SourceLocation Location;
132
133private:
134  mutable unsigned RefCount;
135
136  template <typename T> friend struct llvm::IntrusiveRefCntPtrInfo;
137  void Retain() const { ++RefCount; }
138  void Release() const;
139
140protected:
141  friend class CallEventManager;
142
143  CallEvent(const Expr *E, ProgramStateRef state, const LocationContext *lctx)
144    : State(state), LCtx(lctx), Origin(E), RefCount(0) {}
145
146  CallEvent(const Decl *D, ProgramStateRef state, const LocationContext *lctx)
147    : State(state), LCtx(lctx), Origin(D), RefCount(0) {}
148
149  // DO NOT MAKE PUBLIC
150  CallEvent(const CallEvent &Original)
151    : State(Original.State), LCtx(Original.LCtx), Origin(Original.Origin),
152      Data(Original.Data), Location(Original.Location), RefCount(0) {}
153
154  /// Copies this CallEvent, with vtable intact, into a new block of memory.
155  virtual void cloneTo(void *Dest) const = 0;
156
157  /// \brief Get the value of arbitrary expressions at this point in the path.
158  SVal getSVal(const Stmt *S) const {
159    return getState()->getSVal(S, getLocationContext());
160  }
161
162
163  typedef SmallVectorImpl<SVal> ValueList;
164
165  /// \brief Used to specify non-argument regions that will be invalidated as a
166  /// result of this call.
167  virtual void getExtraInvalidatedValues(ValueList &Values) const {}
168
169public:
170  virtual ~CallEvent() {}
171
172  /// \brief Returns the kind of call this is.
173  virtual Kind getKind() const = 0;
174
175  /// \brief Returns the declaration of the function or method that will be
176  /// called. May be null.
177  virtual const Decl *getDecl() const {
178    return Origin.dyn_cast<const Decl *>();
179  }
180
181  /// \brief The state in which the call is being evaluated.
182  const ProgramStateRef &getState() const {
183    return State;
184  }
185
186  /// \brief The context in which the call is being evaluated.
187  const LocationContext *getLocationContext() const {
188    return LCtx;
189  }
190
191  /// \brief Returns the definition of the function or method that will be
192  /// called.
193  virtual RuntimeDefinition getRuntimeDefinition() const = 0;
194
195  /// \brief Returns the expression whose value will be the result of this call.
196  /// May be null.
197  const Expr *getOriginExpr() const {
198    return Origin.dyn_cast<const Expr *>();
199  }
200
201  /// \brief Returns the number of arguments (explicit and implicit).
202  ///
203  /// Note that this may be greater than the number of parameters in the
204  /// callee's declaration, and that it may include arguments not written in
205  /// the source.
206  virtual unsigned getNumArgs() const = 0;
207
208  /// \brief Returns true if the callee is known to be from a system header.
209  bool isInSystemHeader() const {
210    const Decl *D = getDecl();
211    if (!D)
212      return false;
213
214    SourceLocation Loc = D->getLocation();
215    if (Loc.isValid()) {
216      const SourceManager &SM =
217        getState()->getStateManager().getContext().getSourceManager();
218      return SM.isInSystemHeader(D->getLocation());
219    }
220
221    // Special case for implicitly-declared global operator new/delete.
222    // These should be considered system functions.
223    if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
224      return FD->isOverloadedOperator() && FD->isImplicit() && FD->isGlobal();
225
226    return false;
227  }
228
229  /// \brief Returns a source range for the entire call, suitable for
230  /// outputting in diagnostics.
231  virtual SourceRange getSourceRange() const {
232    return getOriginExpr()->getSourceRange();
233  }
234
235  /// \brief Returns the value of a given argument at the time of the call.
236  virtual SVal getArgSVal(unsigned Index) const;
237
238  /// \brief Returns the expression associated with a given argument.
239  /// May be null if this expression does not appear in the source.
240  virtual const Expr *getArgExpr(unsigned Index) const { return nullptr; }
241
242  /// \brief Returns the source range for errors associated with this argument.
243  ///
244  /// May be invalid if the argument is not written in the source.
245  virtual SourceRange getArgSourceRange(unsigned Index) const;
246
247  /// \brief Returns the result type, adjusted for references.
248  QualType getResultType() const;
249
250  /// \brief Returns the return value of the call.
251  ///
252  /// This should only be called if the CallEvent was created using a state in
253  /// which the return value has already been bound to the origin expression.
254  SVal getReturnValue() const;
255
256  /// \brief Returns true if any of the arguments appear to represent callbacks.
257  bool hasNonZeroCallbackArg() const;
258
259  /// \brief Returns true if any of the arguments are known to escape to long-
260  /// term storage, even if this method will not modify them.
261  // NOTE: The exact semantics of this are still being defined!
262  // We don't really want a list of hardcoded exceptions in the long run,
263  // but we don't want duplicated lists of known APIs in the short term either.
264  virtual bool argumentsMayEscape() const {
265    return hasNonZeroCallbackArg();
266  }
267
268  /// \brief Returns true if the callee is an externally-visible function in the
269  /// top-level namespace, such as \c malloc.
270  ///
271  /// You can use this call to determine that a particular function really is
272  /// a library function and not, say, a C++ member function with the same name.
273  ///
274  /// If a name is provided, the function must additionally match the given
275  /// name.
276  ///
277  /// Note that this deliberately excludes C++ library functions in the \c std
278  /// namespace, but will include C library functions accessed through the
279  /// \c std namespace. This also does not check if the function is declared
280  /// as 'extern "C"', or if it uses C++ name mangling.
281  // FIXME: Add a helper for checking namespaces.
282  // FIXME: Move this down to AnyFunctionCall once checkers have more
283  // precise callbacks.
284  bool isGlobalCFunction(StringRef SpecificName = StringRef()) const;
285
286  /// \brief Returns the name of the callee, if its name is a simple identifier.
287  ///
288  /// Note that this will fail for Objective-C methods, blocks, and C++
289  /// overloaded operators. The former is named by a Selector rather than a
290  /// simple identifier, and the latter two do not have names.
291  // FIXME: Move this down to AnyFunctionCall once checkers have more
292  // precise callbacks.
293  const IdentifierInfo *getCalleeIdentifier() const {
294    const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(getDecl());
295    if (!ND)
296      return nullptr;
297    return ND->getIdentifier();
298  }
299
300  /// \brief Returns an appropriate ProgramPoint for this call.
301  ProgramPoint getProgramPoint(bool IsPreVisit = false,
302                               const ProgramPointTag *Tag = nullptr) const;
303
304  /// \brief Returns a new state with all argument regions invalidated.
305  ///
306  /// This accepts an alternate state in case some processing has already
307  /// occurred.
308  ProgramStateRef invalidateRegions(unsigned BlockCount,
309                                    ProgramStateRef Orig = nullptr) const;
310
311  typedef std::pair<Loc, SVal> FrameBindingTy;
312  typedef SmallVectorImpl<FrameBindingTy> BindingsTy;
313
314  /// Populates the given SmallVector with the bindings in the callee's stack
315  /// frame at the start of this call.
316  virtual void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
317                                            BindingsTy &Bindings) const = 0;
318
319  /// Returns a copy of this CallEvent, but using the given state.
320  template <typename T>
321  CallEventRef<T> cloneWithState(ProgramStateRef NewState) const;
322
323  /// Returns a copy of this CallEvent, but using the given state.
324  CallEventRef<> cloneWithState(ProgramStateRef NewState) const {
325    return cloneWithState<CallEvent>(NewState);
326  }
327
328  /// \brief Returns true if this is a statement is a function or method call
329  /// of some kind.
330  static bool isCallStmt(const Stmt *S);
331
332  /// \brief Returns the result type of a function or method declaration.
333  ///
334  /// This will return a null QualType if the result type cannot be determined.
335  static QualType getDeclaredResultType(const Decl *D);
336
337  /// \brief Returns true if the given decl is known to be variadic.
338  ///
339  /// \p D must not be null.
340  static bool isVariadic(const Decl *D);
341
342  // Iterator access to formal parameters and their types.
343private:
344  typedef std::const_mem_fun_t<QualType, ParmVarDecl> get_type_fun;
345
346public:
347  /// Return call's formal parameters.
348  ///
349  /// Remember that the number of formal parameters may not match the number
350  /// of arguments for all calls. However, the first parameter will always
351  /// correspond with the argument value returned by \c getArgSVal(0).
352  virtual ArrayRef<ParmVarDecl*> parameters() const = 0;
353
354  typedef llvm::mapped_iterator<ArrayRef<ParmVarDecl*>::iterator, get_type_fun>
355    param_type_iterator;
356
357  /// Returns an iterator over the types of the call's formal parameters.
358  ///
359  /// This uses the callee decl found by default name lookup rather than the
360  /// definition because it represents a public interface, and probably has
361  /// more annotations.
362  param_type_iterator param_type_begin() const {
363    return llvm::map_iterator(parameters().begin(),
364                              get_type_fun(&ParmVarDecl::getType));
365  }
366  /// \sa param_type_begin()
367  param_type_iterator param_type_end() const {
368    return llvm::map_iterator(parameters().end(),
369                              get_type_fun(&ParmVarDecl::getType));
370  }
371
372  // For debugging purposes only
373  void dump(raw_ostream &Out) const;
374  void dump() const;
375};
376
377
378/// \brief Represents a call to any sort of function that might have a
379/// FunctionDecl.
380class AnyFunctionCall : public CallEvent {
381protected:
382  AnyFunctionCall(const Expr *E, ProgramStateRef St,
383                  const LocationContext *LCtx)
384    : CallEvent(E, St, LCtx) {}
385  AnyFunctionCall(const Decl *D, ProgramStateRef St,
386                  const LocationContext *LCtx)
387    : CallEvent(D, St, LCtx) {}
388  AnyFunctionCall(const AnyFunctionCall &Other) : CallEvent(Other) {}
389
390public:
391  // This function is overridden by subclasses, but they must return
392  // a FunctionDecl.
393  const FunctionDecl *getDecl() const override {
394    return cast<FunctionDecl>(CallEvent::getDecl());
395  }
396
397  RuntimeDefinition getRuntimeDefinition() const override {
398    const FunctionDecl *FD = getDecl();
399    // Note that the AnalysisDeclContext will have the FunctionDecl with
400    // the definition (if one exists).
401    if (FD) {
402      AnalysisDeclContext *AD =
403        getLocationContext()->getAnalysisDeclContext()->
404        getManager()->getContext(FD);
405      if (AD->getBody())
406        return RuntimeDefinition(AD->getDecl());
407    }
408
409    return RuntimeDefinition();
410  }
411
412  bool argumentsMayEscape() const override;
413
414  void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
415                                    BindingsTy &Bindings) const override;
416
417  ArrayRef<ParmVarDecl *> parameters() const override;
418
419  static bool classof(const CallEvent *CA) {
420    return CA->getKind() >= CE_BEG_FUNCTION_CALLS &&
421           CA->getKind() <= CE_END_FUNCTION_CALLS;
422  }
423};
424
425/// \brief Represents a C function or static C++ member function call.
426///
427/// Example: \c fun()
428class SimpleFunctionCall : public AnyFunctionCall {
429  friend class CallEventManager;
430
431protected:
432  SimpleFunctionCall(const CallExpr *CE, ProgramStateRef St,
433                     const LocationContext *LCtx)
434    : AnyFunctionCall(CE, St, LCtx) {}
435  SimpleFunctionCall(const SimpleFunctionCall &Other)
436    : AnyFunctionCall(Other) {}
437  void cloneTo(void *Dest) const override {
438    new (Dest) SimpleFunctionCall(*this);
439  }
440
441public:
442  virtual const CallExpr *getOriginExpr() const {
443    return cast<CallExpr>(AnyFunctionCall::getOriginExpr());
444  }
445
446  const FunctionDecl *getDecl() const override;
447
448  unsigned getNumArgs() const override { return getOriginExpr()->getNumArgs(); }
449
450  const Expr *getArgExpr(unsigned Index) const override {
451    return getOriginExpr()->getArg(Index);
452  }
453
454  Kind getKind() const override { return CE_Function; }
455
456  static bool classof(const CallEvent *CA) {
457    return CA->getKind() == CE_Function;
458  }
459};
460
461/// \brief Represents a call to a block.
462///
463/// Example: <tt>^{ /* ... */ }()</tt>
464class BlockCall : public CallEvent {
465  friend class CallEventManager;
466
467protected:
468  BlockCall(const CallExpr *CE, ProgramStateRef St,
469            const LocationContext *LCtx)
470    : CallEvent(CE, St, LCtx) {}
471
472  BlockCall(const BlockCall &Other) : CallEvent(Other) {}
473  void cloneTo(void *Dest) const override { new (Dest) BlockCall(*this); }
474
475  void getExtraInvalidatedValues(ValueList &Values) const override;
476
477public:
478  virtual const CallExpr *getOriginExpr() const {
479    return cast<CallExpr>(CallEvent::getOriginExpr());
480  }
481
482  unsigned getNumArgs() const override { return getOriginExpr()->getNumArgs(); }
483
484  const Expr *getArgExpr(unsigned Index) const override {
485    return getOriginExpr()->getArg(Index);
486  }
487
488  /// \brief Returns the region associated with this instance of the block.
489  ///
490  /// This may be NULL if the block's origin is unknown.
491  const BlockDataRegion *getBlockRegion() const;
492
493  const BlockDecl *getDecl() const override {
494    const BlockDataRegion *BR = getBlockRegion();
495    if (!BR)
496      return nullptr;
497    return BR->getDecl();
498  }
499
500  RuntimeDefinition getRuntimeDefinition() const override {
501    return RuntimeDefinition(getDecl());
502  }
503
504  bool argumentsMayEscape() const override {
505    return true;
506  }
507
508  void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
509                                    BindingsTy &Bindings) const override;
510
511  ArrayRef<ParmVarDecl*> parameters() const override;
512
513  Kind getKind() const override { return CE_Block; }
514
515  static bool classof(const CallEvent *CA) {
516    return CA->getKind() == CE_Block;
517  }
518};
519
520/// \brief Represents a non-static C++ member function call, no matter how
521/// it is written.
522class CXXInstanceCall : public AnyFunctionCall {
523protected:
524  void getExtraInvalidatedValues(ValueList &Values) const override;
525
526  CXXInstanceCall(const CallExpr *CE, ProgramStateRef St,
527                  const LocationContext *LCtx)
528    : AnyFunctionCall(CE, St, LCtx) {}
529  CXXInstanceCall(const FunctionDecl *D, ProgramStateRef St,
530                  const LocationContext *LCtx)
531    : AnyFunctionCall(D, St, LCtx) {}
532
533
534  CXXInstanceCall(const CXXInstanceCall &Other) : AnyFunctionCall(Other) {}
535
536public:
537  /// \brief Returns the expression representing the implicit 'this' object.
538  virtual const Expr *getCXXThisExpr() const { return nullptr; }
539
540  /// \brief Returns the value of the implicit 'this' object.
541  virtual SVal getCXXThisVal() const;
542
543  const FunctionDecl *getDecl() const override;
544
545  RuntimeDefinition getRuntimeDefinition() const override;
546
547  void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
548                                    BindingsTy &Bindings) const override;
549
550  static bool classof(const CallEvent *CA) {
551    return CA->getKind() >= CE_BEG_CXX_INSTANCE_CALLS &&
552           CA->getKind() <= CE_END_CXX_INSTANCE_CALLS;
553  }
554};
555
556/// \brief Represents a non-static C++ member function call.
557///
558/// Example: \c obj.fun()
559class CXXMemberCall : public CXXInstanceCall {
560  friend class CallEventManager;
561
562protected:
563  CXXMemberCall(const CXXMemberCallExpr *CE, ProgramStateRef St,
564                const LocationContext *LCtx)
565    : CXXInstanceCall(CE, St, LCtx) {}
566
567  CXXMemberCall(const CXXMemberCall &Other) : CXXInstanceCall(Other) {}
568  void cloneTo(void *Dest) const override { new (Dest) CXXMemberCall(*this); }
569
570public:
571  virtual const CXXMemberCallExpr *getOriginExpr() const {
572    return cast<CXXMemberCallExpr>(CXXInstanceCall::getOriginExpr());
573  }
574
575  unsigned getNumArgs() const override {
576    if (const CallExpr *CE = getOriginExpr())
577      return CE->getNumArgs();
578    return 0;
579  }
580
581  const Expr *getArgExpr(unsigned Index) const override {
582    return getOriginExpr()->getArg(Index);
583  }
584
585  const Expr *getCXXThisExpr() const override;
586
587  RuntimeDefinition getRuntimeDefinition() const override;
588
589  Kind getKind() const override { return CE_CXXMember; }
590
591  static bool classof(const CallEvent *CA) {
592    return CA->getKind() == CE_CXXMember;
593  }
594};
595
596/// \brief Represents a C++ overloaded operator call where the operator is
597/// implemented as a non-static member function.
598///
599/// Example: <tt>iter + 1</tt>
600class CXXMemberOperatorCall : public CXXInstanceCall {
601  friend class CallEventManager;
602
603protected:
604  CXXMemberOperatorCall(const CXXOperatorCallExpr *CE, ProgramStateRef St,
605                        const LocationContext *LCtx)
606    : CXXInstanceCall(CE, St, LCtx) {}
607
608  CXXMemberOperatorCall(const CXXMemberOperatorCall &Other)
609    : CXXInstanceCall(Other) {}
610  void cloneTo(void *Dest) const override {
611    new (Dest) CXXMemberOperatorCall(*this);
612  }
613
614public:
615  virtual const CXXOperatorCallExpr *getOriginExpr() const {
616    return cast<CXXOperatorCallExpr>(CXXInstanceCall::getOriginExpr());
617  }
618
619  unsigned getNumArgs() const override {
620    return getOriginExpr()->getNumArgs() - 1;
621  }
622  const Expr *getArgExpr(unsigned Index) const override {
623    return getOriginExpr()->getArg(Index + 1);
624  }
625
626  const Expr *getCXXThisExpr() const override;
627
628  Kind getKind() const override { return CE_CXXMemberOperator; }
629
630  static bool classof(const CallEvent *CA) {
631    return CA->getKind() == CE_CXXMemberOperator;
632  }
633};
634
635/// \brief Represents an implicit call to a C++ destructor.
636///
637/// This can occur at the end of a scope (for automatic objects), at the end
638/// of a full-expression (for temporaries), or as part of a delete.
639class CXXDestructorCall : public CXXInstanceCall {
640  friend class CallEventManager;
641
642protected:
643  typedef llvm::PointerIntPair<const MemRegion *, 1, bool> DtorDataTy;
644
645  /// Creates an implicit destructor.
646  ///
647  /// \param DD The destructor that will be called.
648  /// \param Trigger The statement whose completion causes this destructor call.
649  /// \param Target The object region to be destructed.
650  /// \param St The path-sensitive state at this point in the program.
651  /// \param LCtx The location context at this point in the program.
652  CXXDestructorCall(const CXXDestructorDecl *DD, const Stmt *Trigger,
653                    const MemRegion *Target, bool IsBaseDestructor,
654                    ProgramStateRef St, const LocationContext *LCtx)
655    : CXXInstanceCall(DD, St, LCtx) {
656    Data = DtorDataTy(Target, IsBaseDestructor).getOpaqueValue();
657    Location = Trigger->getLocEnd();
658  }
659
660  CXXDestructorCall(const CXXDestructorCall &Other) : CXXInstanceCall(Other) {}
661  void cloneTo(void *Dest) const override {new (Dest) CXXDestructorCall(*this);}
662
663public:
664  SourceRange getSourceRange() const override { return Location; }
665  unsigned getNumArgs() const override { return 0; }
666
667  RuntimeDefinition getRuntimeDefinition() const override;
668
669  /// \brief Returns the value of the implicit 'this' object.
670  SVal getCXXThisVal() const override;
671
672  /// Returns true if this is a call to a base class destructor.
673  bool isBaseDestructor() const {
674    return DtorDataTy::getFromOpaqueValue(Data).getInt();
675  }
676
677  Kind getKind() const override { return CE_CXXDestructor; }
678
679  static bool classof(const CallEvent *CA) {
680    return CA->getKind() == CE_CXXDestructor;
681  }
682};
683
684/// \brief Represents a call to a C++ constructor.
685///
686/// Example: \c T(1)
687class CXXConstructorCall : public AnyFunctionCall {
688  friend class CallEventManager;
689
690protected:
691  /// Creates a constructor call.
692  ///
693  /// \param CE The constructor expression as written in the source.
694  /// \param Target The region where the object should be constructed. If NULL,
695  ///               a new symbolic region will be used.
696  /// \param St The path-sensitive state at this point in the program.
697  /// \param LCtx The location context at this point in the program.
698  CXXConstructorCall(const CXXConstructExpr *CE, const MemRegion *Target,
699                     ProgramStateRef St, const LocationContext *LCtx)
700    : AnyFunctionCall(CE, St, LCtx) {
701    Data = Target;
702  }
703
704  CXXConstructorCall(const CXXConstructorCall &Other) : AnyFunctionCall(Other){}
705  void cloneTo(void *Dest) const override { new (Dest) CXXConstructorCall(*this); }
706
707  void getExtraInvalidatedValues(ValueList &Values) const override;
708
709public:
710  virtual const CXXConstructExpr *getOriginExpr() const {
711    return cast<CXXConstructExpr>(AnyFunctionCall::getOriginExpr());
712  }
713
714  const CXXConstructorDecl *getDecl() const override {
715    return getOriginExpr()->getConstructor();
716  }
717
718  unsigned getNumArgs() const override { return getOriginExpr()->getNumArgs(); }
719
720  const Expr *getArgExpr(unsigned Index) const override {
721    return getOriginExpr()->getArg(Index);
722  }
723
724  /// \brief Returns the value of the implicit 'this' object.
725  SVal getCXXThisVal() const;
726
727  void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
728                                    BindingsTy &Bindings) const override;
729
730  Kind getKind() const override { return CE_CXXConstructor; }
731
732  static bool classof(const CallEvent *CA) {
733    return CA->getKind() == CE_CXXConstructor;
734  }
735};
736
737/// \brief Represents the memory allocation call in a C++ new-expression.
738///
739/// This is a call to "operator new".
740class CXXAllocatorCall : public AnyFunctionCall {
741  friend class CallEventManager;
742
743protected:
744  CXXAllocatorCall(const CXXNewExpr *E, ProgramStateRef St,
745                   const LocationContext *LCtx)
746    : AnyFunctionCall(E, St, LCtx) {}
747
748  CXXAllocatorCall(const CXXAllocatorCall &Other) : AnyFunctionCall(Other) {}
749  void cloneTo(void *Dest) const override { new (Dest) CXXAllocatorCall(*this); }
750
751public:
752  virtual const CXXNewExpr *getOriginExpr() const {
753    return cast<CXXNewExpr>(AnyFunctionCall::getOriginExpr());
754  }
755
756  const FunctionDecl *getDecl() const override {
757    return getOriginExpr()->getOperatorNew();
758  }
759
760  unsigned getNumArgs() const override {
761    return getOriginExpr()->getNumPlacementArgs() + 1;
762  }
763
764  const Expr *getArgExpr(unsigned Index) const override {
765    // The first argument of an allocator call is the size of the allocation.
766    if (Index == 0)
767      return nullptr;
768    return getOriginExpr()->getPlacementArg(Index - 1);
769  }
770
771  Kind getKind() const override { return CE_CXXAllocator; }
772
773  static bool classof(const CallEvent *CE) {
774    return CE->getKind() == CE_CXXAllocator;
775  }
776};
777
778/// \brief Represents the ways an Objective-C message send can occur.
779//
780// Note to maintainers: OCM_Message should always be last, since it does not
781// need to fit in the Data field's low bits.
782enum ObjCMessageKind {
783  OCM_PropertyAccess,
784  OCM_Subscript,
785  OCM_Message
786};
787
788/// \brief Represents any expression that calls an Objective-C method.
789///
790/// This includes all of the kinds listed in ObjCMessageKind.
791class ObjCMethodCall : public CallEvent {
792  friend class CallEventManager;
793
794  const PseudoObjectExpr *getContainingPseudoObjectExpr() const;
795
796protected:
797  ObjCMethodCall(const ObjCMessageExpr *Msg, ProgramStateRef St,
798                 const LocationContext *LCtx)
799    : CallEvent(Msg, St, LCtx) {
800    Data = nullptr;
801  }
802
803  ObjCMethodCall(const ObjCMethodCall &Other) : CallEvent(Other) {}
804  void cloneTo(void *Dest) const override { new (Dest) ObjCMethodCall(*this); }
805
806  void getExtraInvalidatedValues(ValueList &Values) const override;
807
808  /// Check if the selector may have multiple definitions (may have overrides).
809  virtual bool canBeOverridenInSubclass(ObjCInterfaceDecl *IDecl,
810                                        Selector Sel) const;
811
812public:
813  virtual const ObjCMessageExpr *getOriginExpr() const {
814    return cast<ObjCMessageExpr>(CallEvent::getOriginExpr());
815  }
816  const ObjCMethodDecl *getDecl() const override {
817    return getOriginExpr()->getMethodDecl();
818  }
819  unsigned getNumArgs() const override {
820    return getOriginExpr()->getNumArgs();
821  }
822  const Expr *getArgExpr(unsigned Index) const override {
823    return getOriginExpr()->getArg(Index);
824  }
825
826  bool isInstanceMessage() const {
827    return getOriginExpr()->isInstanceMessage();
828  }
829  ObjCMethodFamily getMethodFamily() const {
830    return getOriginExpr()->getMethodFamily();
831  }
832  Selector getSelector() const {
833    return getOriginExpr()->getSelector();
834  }
835
836  SourceRange getSourceRange() const override;
837
838  /// \brief Returns the value of the receiver at the time of this call.
839  SVal getReceiverSVal() const;
840
841  /// \brief Return the value of 'self' if available.
842  SVal getSelfSVal() const;
843
844  /// \brief Get the interface for the receiver.
845  ///
846  /// This works whether this is an instance message or a class message.
847  /// However, it currently just uses the static type of the receiver.
848  const ObjCInterfaceDecl *getReceiverInterface() const {
849    return getOriginExpr()->getReceiverInterface();
850  }
851
852  /// \brief Checks if the receiver refers to 'self' or 'super'.
853  bool isReceiverSelfOrSuper() const;
854
855  /// Returns how the message was written in the source (property access,
856  /// subscript, or explicit message send).
857  ObjCMessageKind getMessageKind() const;
858
859  /// Returns true if this property access or subscript is a setter (has the
860  /// form of an assignment).
861  bool isSetter() const {
862    switch (getMessageKind()) {
863    case OCM_Message:
864      llvm_unreachable("This is not a pseudo-object access!");
865    case OCM_PropertyAccess:
866      return getNumArgs() > 0;
867    case OCM_Subscript:
868      return getNumArgs() > 1;
869    }
870    llvm_unreachable("Unknown message kind");
871  }
872
873  RuntimeDefinition getRuntimeDefinition() const override;
874
875  bool argumentsMayEscape() const override;
876
877  void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
878                                    BindingsTy &Bindings) const override;
879
880  ArrayRef<ParmVarDecl*> parameters() const override;
881
882  Kind getKind() const override { return CE_ObjCMessage; }
883
884  static bool classof(const CallEvent *CA) {
885    return CA->getKind() == CE_ObjCMessage;
886  }
887};
888
889
890/// \brief Manages the lifetime of CallEvent objects.
891///
892/// CallEventManager provides a way to create arbitrary CallEvents "on the
893/// stack" as if they were value objects by keeping a cache of CallEvent-sized
894/// memory blocks. The CallEvents created by CallEventManager are only valid
895/// for the lifetime of the OwnedCallEvent that holds them; right now these
896/// objects cannot be copied and ownership cannot be transferred.
897class CallEventManager {
898  friend class CallEvent;
899
900  llvm::BumpPtrAllocator &Alloc;
901  SmallVector<void *, 8> Cache;
902  typedef SimpleFunctionCall CallEventTemplateTy;
903
904  void reclaim(const void *Memory) {
905    Cache.push_back(const_cast<void *>(Memory));
906  }
907
908  /// Returns memory that can be initialized as a CallEvent.
909  void *allocate() {
910    if (Cache.empty())
911      return Alloc.Allocate<CallEventTemplateTy>();
912    else
913      return Cache.pop_back_val();
914  }
915
916  template <typename T, typename Arg>
917  T *create(Arg A, ProgramStateRef St, const LocationContext *LCtx) {
918    static_assert(sizeof(T) == sizeof(CallEventTemplateTy),
919                  "CallEvent subclasses are not all the same size");
920    return new (allocate()) T(A, St, LCtx);
921  }
922
923  template <typename T, typename Arg1, typename Arg2>
924  T *create(Arg1 A1, Arg2 A2, ProgramStateRef St, const LocationContext *LCtx) {
925    static_assert(sizeof(T) == sizeof(CallEventTemplateTy),
926                  "CallEvent subclasses are not all the same size");
927    return new (allocate()) T(A1, A2, St, LCtx);
928  }
929
930  template <typename T, typename Arg1, typename Arg2, typename Arg3>
931  T *create(Arg1 A1, Arg2 A2, Arg3 A3, ProgramStateRef St,
932            const LocationContext *LCtx) {
933    static_assert(sizeof(T) == sizeof(CallEventTemplateTy),
934                  "CallEvent subclasses are not all the same size");
935    return new (allocate()) T(A1, A2, A3, St, LCtx);
936  }
937
938  template <typename T, typename Arg1, typename Arg2, typename Arg3,
939            typename Arg4>
940  T *create(Arg1 A1, Arg2 A2, Arg3 A3, Arg4 A4, ProgramStateRef St,
941            const LocationContext *LCtx) {
942    static_assert(sizeof(T) == sizeof(CallEventTemplateTy),
943                  "CallEvent subclasses are not all the same size");
944    return new (allocate()) T(A1, A2, A3, A4, St, LCtx);
945  }
946
947public:
948  CallEventManager(llvm::BumpPtrAllocator &alloc) : Alloc(alloc) {}
949
950
951  CallEventRef<>
952  getCaller(const StackFrameContext *CalleeCtx, ProgramStateRef State);
953
954
955  CallEventRef<>
956  getSimpleCall(const CallExpr *E, ProgramStateRef State,
957                const LocationContext *LCtx);
958
959  CallEventRef<ObjCMethodCall>
960  getObjCMethodCall(const ObjCMessageExpr *E, ProgramStateRef State,
961                    const LocationContext *LCtx) {
962    return create<ObjCMethodCall>(E, State, LCtx);
963  }
964
965  CallEventRef<CXXConstructorCall>
966  getCXXConstructorCall(const CXXConstructExpr *E, const MemRegion *Target,
967                        ProgramStateRef State, const LocationContext *LCtx) {
968    return create<CXXConstructorCall>(E, Target, State, LCtx);
969  }
970
971  CallEventRef<CXXDestructorCall>
972  getCXXDestructorCall(const CXXDestructorDecl *DD, const Stmt *Trigger,
973                       const MemRegion *Target, bool IsBase,
974                       ProgramStateRef State, const LocationContext *LCtx) {
975    return create<CXXDestructorCall>(DD, Trigger, Target, IsBase, State, LCtx);
976  }
977
978  CallEventRef<CXXAllocatorCall>
979  getCXXAllocatorCall(const CXXNewExpr *E, ProgramStateRef State,
980                      const LocationContext *LCtx) {
981    return create<CXXAllocatorCall>(E, State, LCtx);
982  }
983};
984
985
986template <typename T>
987CallEventRef<T> CallEvent::cloneWithState(ProgramStateRef NewState) const {
988  assert(isa<T>(*this) && "Cloning to unrelated type");
989  static_assert(sizeof(T) == sizeof(CallEvent),
990                "Subclasses may not add fields");
991
992  if (NewState == State)
993    return cast<T>(this);
994
995  CallEventManager &Mgr = State->getStateManager().getCallEventManager();
996  T *Copy = static_cast<T *>(Mgr.allocate());
997  cloneTo(Copy);
998  assert(Copy->getKind() == this->getKind() && "Bad copy");
999
1000  Copy->State = NewState;
1001  return Copy;
1002}
1003
1004inline void CallEvent::Release() const {
1005  assert(RefCount > 0 && "Reference count is already zero.");
1006  --RefCount;
1007
1008  if (RefCount > 0)
1009    return;
1010
1011  CallEventManager &Mgr = State->getStateManager().getCallEventManager();
1012  Mgr.reclaim(this);
1013
1014  this->~CallEvent();
1015}
1016
1017} // end namespace ento
1018} // end namespace clang
1019
1020namespace llvm {
1021  // Support isa<>, cast<>, and dyn_cast<> for CallEventRef.
1022  template<class T> struct simplify_type< clang::ento::CallEventRef<T> > {
1023    typedef const T *SimpleType;
1024
1025    static SimpleType
1026    getSimplifiedValue(clang::ento::CallEventRef<T> Val) {
1027      return Val.getPtr();
1028    }
1029  };
1030}
1031
1032#endif
1033