]> granicus.if.org Git - clang/commitdiff
Fix PR3619 by properly considering size modifiers and type quals when
authorChris Lattner <sabre@nondot.org>
Thu, 19 Feb 2009 17:31:02 +0000 (17:31 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 19 Feb 2009 17:31:02 +0000 (17:31 +0000)
uniquing array types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65046 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Type.h
lib/AST/ASTContext.cpp

index 6da10274532aab21c046e8e456d1578a37492d8f..bf36f7f6ed181ab203a64001433d8963ee3eb305 100644 (file)
@@ -838,21 +838,25 @@ public:
 class ConstantArrayType : public ArrayType {
   llvm::APInt Size; // Allows us to unique the type.
   
-  ConstantArrayType(QualType et, QualType can, llvm::APInt sz,
+  ConstantArrayType(QualType et, QualType can, const llvm::APInt &size,
                     ArraySizeModifier sm, unsigned tq)
-    : ArrayType(ConstantArray, et, can, sm, tq), Size(sz) {}
+    : ArrayType(ConstantArray, et, can, sm, tq), Size(size) {}
   friend class ASTContext;  // ASTContext creates these.
 public:
   const llvm::APInt &getSize() const { return Size; }
   virtual void getAsStringInternal(std::string &InnerString) const;
   
   void Profile(llvm::FoldingSetNodeID &ID) {
-    Profile(ID, getElementType(), getSize());
+    Profile(ID, getElementType(), getSize(), 
+            getSizeModifier(), getIndexTypeQualifier());
   }
   static void Profile(llvm::FoldingSetNodeID &ID, QualType ET,
-                      llvm::APInt ArraySize) {
+                      const llvm::APInt &ArraySize, ArraySizeModifier SizeMod,
+                      unsigned TypeQuals) {
     ID.AddPointer(ET.getAsOpaquePtr());
     ID.AddInteger(ArraySize.getZExtValue());
+    ID.AddInteger(SizeMod);
+    ID.AddInteger(TypeQuals);
   }
   static bool classof(const Type *T) { 
     return T->getTypeClass() == ConstantArray; 
@@ -885,11 +889,14 @@ public:
   friend class StmtIteratorBase;
   
   void Profile(llvm::FoldingSetNodeID &ID) {
-    Profile(ID, getElementType());
+    Profile(ID, getElementType(), getSizeModifier(), getIndexTypeQualifier());
   }
   
-  static void Profile(llvm::FoldingSetNodeID &ID, QualType ET) {
+  static void Profile(llvm::FoldingSetNodeID &ID, QualType ET,
+                      ArraySizeModifier SizeMod, unsigned TypeQuals) {
     ID.AddPointer(ET.getAsOpaquePtr());
+    ID.AddInteger(SizeMod);
+    ID.AddInteger(TypeQuals);
   }
   
 protected:  
index 024fbf8968fb01badcc17c0e7b727a85f8497801..5c02100ec4d87add965328d489bb1f1eeb24f801 100644 (file)
@@ -963,7 +963,7 @@ QualType ASTContext::getConstantArrayType(QualType EltTy,
                                           ArrayType::ArraySizeModifier ASM,
                                           unsigned EltTypeQuals) {
   llvm::FoldingSetNodeID ID;
-  ConstantArrayType::Profile(ID, EltTy, ArySize);
+  ConstantArrayType::Profile(ID, EltTy, ArySize, ASM, EltTypeQuals);
       
   void *InsertPos = 0;
   if (ConstantArrayType *ATP = 
@@ -1031,7 +1031,7 @@ QualType ASTContext::getIncompleteArrayType(QualType EltTy,
                                             ArrayType::ArraySizeModifier ASM,
                                             unsigned EltTypeQuals) {
   llvm::FoldingSetNodeID ID;
-  IncompleteArrayType::Profile(ID, EltTy);
+  IncompleteArrayType::Profile(ID, EltTy, ASM, EltTypeQuals);
 
   void *InsertPos = 0;
   if (IncompleteArrayType *ATP =