]> granicus.if.org Git - clang/commitdiff
Change PointersToResolve to list the pointee type to resolve, not the
authorDaniel Dunbar <daniel@zuster.org>
Thu, 26 Feb 2009 19:48:14 +0000 (19:48 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 26 Feb 2009 19:48:14 +0000 (19:48 +0000)
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

lib/CodeGen/CodeGenTypes.cpp
lib/CodeGen/CodeGenTypes.h

index 47ac79f70b54828587c2b1b381f064c3fd7f6cfb..1458ccd91befcf8a9aa2046c7e5718c8fb97fba5 100644 (file)
@@ -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());
   }
     
index 3070c85260987af4d445c83a3edbeca950a2c479..9c548ec09973bbbfcc9052ad3cb0eecc3b847452 100644 (file)
@@ -85,7 +85,7 @@ class CodeGenTypes {
   const llvm::TargetData& TheTargetData;
   mutable const ABIInfo* TheABIInfo;
   
-  llvm::SmallVector<std::pair<const PointerLikeType *,
+  llvm::SmallVector<std::pair<QualType,
                               llvm::OpaqueType *>, 8>  PointersToResolve;
 
   llvm::DenseMap<const Type*, llvm::PATypeHolder> TagDeclTypes;