summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-04-10 20:59:00 +0000
committerAnna Zaks <ganna@apple.com>2012-04-10 20:59:00 +0000
commite19f86edab8fb3c2c1e99e0e9815b6058504df9b (patch)
tree3e14d3f8e1a6d36ad4eb676d7f98bf79935a7e1e /include
parent4335a48214dcbb258e08c8867c45648e25edb2ec (diff)
[analyzer] Add support for C++ dynamic_cast.
Simulate the C++ dynamic_cast in the analyzer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154434 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/clang/StaticAnalyzer/Core/PathSensitive/Store.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h b/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
index d0edba175b..5315f4b742 100644
--- a/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
+++ b/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
@@ -120,9 +120,18 @@ public:
virtual SVal ArrayToPointer(Loc Array) = 0;
/// Evaluates DerivedToBase casts.
- virtual SVal evalDerivedToBase(SVal derived, QualType basePtrType) {
- return UnknownVal();
- }
+ virtual SVal evalDerivedToBase(SVal derived, QualType basePtrType) = 0;
+
+ /// \brief Evaluates C++ dynamic_cast cast.
+ /// The callback may result in the following 3 scenarios:
+ /// - Successful cast (ex: derived is subclass of base).
+ /// - Failed cast (ex: derived is definitely not a subclass of base).
+ /// - We don't know (base is a symbolic region and we don't have
+ /// enough info to determine if the cast will succeed at run time).
+ /// The function returns an SVal representing the derived class; it's
+ /// valid only if Failed flag is set to false.
+ virtual SVal evalDynamicCast(SVal base, QualType derivedPtrType,
+ bool &Failed) = 0;
class CastResult {
ProgramStateRef state;