diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-02-26 19:48:14 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-02-26 19:48:14 +0000 |
commit | 6aeae7fa9cfaacba3a4077d62c01c2531d88a63e (patch) | |
tree | bd8c2f3b6c51b4be6a658a39b44f517dfa09fc0e /lib/CodeGen/CodeGenTypes.cpp | |
parent | bb71001d287fda144c4bcf096124d8e3667d6930 (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.cpp | 16 |
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()); } |