[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