clang 20.0.0git
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
14namespace clang {
15namespace 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.
20public:
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 operator bool() const { return isValid(); }
37
38 bool operator==(const DynamicTypeInfo &RHS) const {
39 return DynTy == RHS.DynTy && CanBeASubClass == RHS.CanBeASubClass;
40 }
41
42 void Profile(llvm::FoldingSetNodeID &ID) const {
43 ID.Add(DynTy);
44 ID.AddBoolean(CanBeASubClass);
45 }
46
47private:
48 QualType DynTy;
49 bool CanBeASubClass;
50};
51
52} // namespace ento
53} // namespace clang
54
55#endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_DYNAMICTYPEINFO_H
static char ID
Definition: Arena.cpp:183
C Language Family Type Representation.
#define bool
Definition: amdgpuintrin.h:20
A (possibly-)qualified type.
Definition: Type.h:929
bool isNull() const
Return true if this QualType doesn't point to a type yet.
Definition: Type.h:996
Stores the currently inferred strictest bound on the runtime type of a region in a given state along ...
bool operator==(const DynamicTypeInfo &RHS) const
void Profile(llvm::FoldingSetNodeID &ID) const
bool canBeASubClass() const
Returns false if the type information is precise (the type 'DynTy' is the only type in the lattice),...
QualType getType() const
Returns the currently inferred upper bound on the runtime type.
bool isValid() const
Returns true if the dynamic type info is available.
DynamicTypeInfo(QualType Ty, bool CanBeSub=true)
The JSON file list parser is used to communicate input to InstallAPI.