aboutsummaryrefslogtreecommitdiff
path: root/CodeGen/CodeGenTypes.h
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-10-25 18:32:36 +0000
committerDevang Patel <dpatel@apple.com>2007-10-25 18:32:36 +0000
commit30ec9972be5a5af1f7a2277360dfa3aa1540b4fa (patch)
tree40aec197a326c44f78a45d114feaccadb83c1929 /CodeGen/CodeGenTypes.h
parent0a449eed1dd2439b4b9c0a6291084816eab390c1 (diff)
Cache llvm::Type through PATypeHolder.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43355 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CodeGenTypes.h')
-rw-r--r--CodeGen/CodeGenTypes.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/CodeGen/CodeGenTypes.h b/CodeGen/CodeGenTypes.h
index de20173d93..7f2641146d 100644
--- a/CodeGen/CodeGenTypes.h
+++ b/CodeGen/CodeGenTypes.h
@@ -20,6 +20,7 @@
namespace llvm {
class Module;
class Type;
+ class PATypeHolder;
}
namespace clang {
@@ -27,6 +28,7 @@ namespace clang {
class TagDecl;
class TargetInfo;
class QualType;
+ class Type;
class FunctionTypeProto;
class FieldDecl;
class RecordDecl;
@@ -77,12 +79,18 @@ class CodeGenTypes {
/// record.
llvm::DenseMap<const RecordDecl *, llvm::Type *> RecordTypesToResolve;
+ /// TypeHolderMap - This map keeps cache of llvm::Types (through PATypeHolder)
+ /// and maps llvm::Types to corresponding clang::Type. llvm::PATypeHolder is
+ /// used instead of llvm::Type because it allows us to bypass potential
+ /// dangling type pointers due to type refinement on llvm side.
+ llvm::DenseMap<Type *, llvm::PATypeHolder *> TypeHolderMap;
public:
CodeGenTypes(ASTContext &Ctx, llvm::Module &M);
~CodeGenTypes();
TargetInfo &getTarget() const { return Target; }
+ const llvm::Type *ConvertNewType(QualType T);
const llvm::Type *ConvertType(QualType T);
void DecodeArgumentTypes(const FunctionTypeProto &FTP,
std::vector<const llvm::Type*> &ArgTys);