aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-11-14 00:03:20 +0000
committerTed Kremenek <kremenek@apple.com>2007-11-14 00:03:20 +0000
commitea0c6fb7c52df99349066ff1aed58e4dfc4c7289 (patch)
treef1efde962e1e9ae82de4e210e9c58a533d80cf25
parentaaa3cf8e52dd2b431a81fca5c28efe9a95587555 (diff)
Modified ASTContext::getTagDeclType() to accept a NULL pointer for the passed
in TagDecl*. This allows the deserializer to use ASTContext to create the TagTypes. Deserialize TagTypes then rely on pointer-backpatching to resolve the decls. This may not be the interface that we want, but as the implementation of TagTypes will potentially change significantly in the future, I'm leaving this for now. An appropriate FIXME is in place. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44089 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--AST/ASTContext.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp
index b844adf431..9d597bcc43 100644
--- a/AST/ASTContext.cpp
+++ b/AST/ASTContext.cpp
@@ -717,12 +717,19 @@ QualType ASTContext::getTypeOfType(QualType tofType) {
/// getTagDeclType - Return the unique reference to the type for the
/// specified TagDecl (struct/union/class/enum) decl.
QualType ASTContext::getTagDeclType(TagDecl *Decl) {
+ // FIXME: This method currently accepts "Decl" to be NULL for use
+ // by the deserializer. This interface may wished to be changed
+ // in the future.
+
// The decl stores the type cache.
- if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
+ if (Decl && Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
- Decl->TypeForDecl = new TagType(Decl, QualType());
- Types.push_back(Decl->TypeForDecl);
- return QualType(Decl->TypeForDecl, 0);
+ TagType* T = new TagType(Decl, QualType());
+ Types.push_back(T);
+
+ if (Decl) Decl->TypeForDecl = T;
+
+ return QualType(T, 0);
}
/// getSizeType - Return the unique type for "size_t" (C99 7.17), the result