aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-26 19:48:14 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-26 19:48:14 +0000
commit6aeae7fa9cfaacba3a4077d62c01c2531d88a63e (patch)
treebd8c2f3b6c51b4be6a658a39b44f517dfa09fc0e /lib/CodeGen/CodeGenTypes.cpp
parentbb71001d287fda144c4bcf096124d8e3667d6930 (diff)
Change PointersToResolve to list the pointee type to resolve, not the
pointer type. - Drops use of PointerLikeType. - No intended functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65566 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenTypes.cpp')
-rw-r--r--lib/CodeGen/CodeGenTypes.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp
index 47ac79f70b..1458ccd91b 100644
--- a/lib/CodeGen/CodeGenTypes.cpp
+++ b/lib/CodeGen/CodeGenTypes.cpp
@@ -85,13 +85,13 @@ const llvm::Type *CodeGenTypes::ConvertType(QualType T) {
// circular types. Loop through all these defered pointees, if any, and
// resolve them now.
while (!PointersToResolve.empty()) {
- std::pair<const PointerLikeType *, llvm::OpaqueType*> P =
+ std::pair<QualType, llvm::OpaqueType*> P =
PointersToResolve.back();
PointersToResolve.pop_back();
// We can handle bare pointers here because we know that the only pointers
// to the Opaque type are P.second and from other types. Refining the
// opqaue type away will invalidate P.second, but we don't mind :).
- const llvm::Type *NT = ConvertTypeRecursive(P.first->getPointeeType());
+ const llvm::Type *NT = ConvertTypeRecursive(P.first);
P.second->refineAbstractTypeTo(NT);
}
@@ -223,12 +223,18 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
ConvertTypeRecursive(cast<ComplexType>(Ty).getElementType());
return llvm::StructType::get(EltTy, EltTy, NULL);
}
- case Type::Reference:
+ case Type::Reference: {
+ const ReferenceType &RTy = cast<ReferenceType>(Ty);
+ QualType ETy = RTy.getPointeeType();
+ llvm::OpaqueType *PointeeType = llvm::OpaqueType::get();
+ PointersToResolve.push_back(std::make_pair(ETy, PointeeType));
+ return llvm::PointerType::get(PointeeType, ETy.getAddressSpace());
+ }
case Type::Pointer: {
- const PointerLikeType &PTy = cast<PointerLikeType>(Ty);
+ const PointerType &PTy = cast<PointerType>(Ty);
QualType ETy = PTy.getPointeeType();
llvm::OpaqueType *PointeeType = llvm::OpaqueType::get();
- PointersToResolve.push_back(std::make_pair(&PTy, PointeeType));
+ PointersToResolve.push_back(std::make_pair(ETy, PointeeType));
return llvm::PointerType::get(PointeeType, ETy.getAddressSpace());
}