[cfe-commits] r65046 - in /cfe/trunk: include/clang/AST/Type.h lib/AST/ASTContext.cpp

Chris Lattner sabre at nondot.org
Thu Feb 19 09:31:04 PST 2009


Author: lattner
Date: Thu Feb 19 11:31:02 2009
New Revision: 65046

URL: http://llvm.org/viewvc/llvm-project?rev=65046&view=rev
Log:
Fix PR3619 by properly considering size modifiers and type quals when
uniquing array types.

Modified:
    cfe/trunk/include/clang/AST/Type.h
    cfe/trunk/lib/AST/ASTContext.cpp

Modified: cfe/trunk/include/clang/AST/Type.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=65046&r1=65045&r2=65046&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/Type.h (original)
+++ cfe/trunk/include/clang/AST/Type.h Thu Feb 19 11:31:02 2009
@@ -838,21 +838,25 @@
 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 @@
   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:  

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=65046&r1=65045&r2=65046&view=diff

==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Thu Feb 19 11:31:02 2009
@@ -963,7 +963,7 @@
                                           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 @@
                                             ArrayType::ArraySizeModifier ASM,
                                             unsigned EltTypeQuals) {
   llvm::FoldingSetNodeID ID;
-  IncompleteArrayType::Profile(ID, EltTy);
+  IncompleteArrayType::Profile(ID, EltTy, ASM, EltTypeQuals);
 
   void *InsertPos = 0;
   if (IncompleteArrayType *ATP = 





More information about the cfe-commits mailing list