clang  10.0.0svn
DynamicTypeInfo.h
Go to the documentation of this file.
1 //===- DynamicTypeInfo.h - Runtime type information -------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_DYNAMICTYPEINFO_H
10 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_DYNAMICTYPEINFO_H
11 
12 #include "clang/AST/Type.h"
13 
14 namespace clang {
15 namespace ento {
16 
17 /// Stores the currently inferred strictest bound on the runtime type
18 /// of a region in a given state along the analysis path.
20 public:
21  DynamicTypeInfo() : DynTy(QualType()) {}
22 
23  DynamicTypeInfo(QualType Ty, bool CanBeSub = true)
24  : DynTy(Ty), CanBeASubClass(CanBeSub) {}
25 
26  /// Returns false if the type information is precise (the type 'DynTy' is
27  /// the only type in the lattice), true otherwise.
28  bool canBeASubClass() const { return CanBeASubClass; }
29 
30  /// Returns true if the dynamic type info is available.
31  bool isValid() const { return !DynTy.isNull(); }
32 
33  /// Returns the currently inferred upper bound on the runtime type.
34  QualType getType() const { return DynTy; }
35 
36  bool operator==(const DynamicTypeInfo &RHS) const {
37  return DynTy == RHS.DynTy && CanBeASubClass == RHS.CanBeASubClass;
38  }
39 
40  void Profile(llvm::FoldingSetNodeID &ID) const {
41  ID.Add(DynTy);
42  ID.AddBoolean(CanBeASubClass);
43  }
44 
45 private:
46  QualType DynTy;
47  bool CanBeASubClass;
48 };
49 
50 } // namespace ento
51 } // namespace clang
52 
53 #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_DYNAMICTYPEINFO_H
A (possibly-)qualified type.
Definition: Type.h:643
C Language Family Type Representation.
bool isValid() const
Returns true if the dynamic type info is available.
DynamicTypeInfo(QualType Ty, bool CanBeSub=true)
QualType getType() const
Returns the currently inferred upper bound on the runtime type.
bool canBeASubClass() const
Returns false if the type information is precise (the type 'DynTy' is the only type in the lattice)...
Stores the currently inferred strictest bound on the runtime type of a region in a given state along ...
bool isNull() const
Return true if this QualType doesn't point to a type yet.
Definition: Type.h:708
Dataflow Directional Tag Classes.
void Profile(llvm::FoldingSetNodeID &ID) const
bool operator==(const DynamicTypeInfo &RHS) const