[cfe-commits] r63137 - /cfe/trunk/lib/AST/ASTContext.cpp
Steve Naroff
snaroff at apple.com
Tue Jan 27 14:08:43 PST 2009
Author: snaroff
Date: Tue Jan 27 16:08:43 2009
New Revision: 63137
URL: http://llvm.org/viewvc/llvm-project?rev=63137&view=rev
Log:
Convert types over to placement new() that takes an ASTContext.
Also changed FunctionTypeProto to be allocated with 8-byte alignment (noticed by Doug). I couldn't think of any reason to allocate on 16-byte boundaries. If anyone remembers why we were doing this, let me know!
Modified:
cfe/trunk/lib/AST/ASTContext.cpp
Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=63137&r1=63136&r2=63137&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Tue Jan 27 16:08:43 2009
@@ -177,8 +177,7 @@
void ASTContext::InitBuiltinType(QualType &R, BuiltinType::Kind K) {
- void *Mem = Allocator.Allocate(sizeof(BuiltinType), 8);
- Types.push_back((R = QualType(new (Mem) BuiltinType(K),0)).getTypePtr());
+ Types.push_back((R = QualType(new (*this,8) BuiltinType(K),0)).getTypePtr());
}
void ASTContext::InitBuiltinTypes() {
@@ -733,8 +732,8 @@
ASQualType *NewIP = ASQualTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(ASQualType), 8);
- ASQualType *New = new (Mem) ASQualType(T.getTypePtr(), Canonical, AddressSpace);
+ ASQualType *New = new (*this, 8) ASQualType(T.getTypePtr(), Canonical,
+ AddressSpace);
ASQualTypes.InsertNode(New, InsertPos);
Types.push_back(New);
return QualType(New, T.getCVRQualifiers());
@@ -763,8 +762,7 @@
ComplexType *NewIP = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(ComplexType), 8);
- ComplexType *New = new (Mem) ComplexType(T, Canonical);
+ ComplexType *New = new (*this,8) ComplexType(T, Canonical);
Types.push_back(New);
ComplexTypes.InsertNode(New, InsertPos);
return QualType(New, 0);
@@ -793,8 +791,7 @@
PointerType *NewIP = PointerTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(PointerType), 8);
- PointerType *New = new (Mem) PointerType(T, Canonical);
+ PointerType *New = new (*this,8) PointerType(T, Canonical);
Types.push_back(New);
PointerTypes.InsertNode(New, InsertPos);
return QualType(New, 0);
@@ -825,8 +822,7 @@
BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(BlockPointerType), 8);
- BlockPointerType *New = new (Mem) BlockPointerType(T, Canonical);
+ BlockPointerType *New = new (*this,8) BlockPointerType(T, Canonical);
Types.push_back(New);
BlockPointerTypes.InsertNode(New, InsertPos);
return QualType(New, 0);
@@ -855,8 +851,7 @@
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(ReferenceType), 8);
- ReferenceType *New = new (Mem) ReferenceType(T, Canonical);
+ ReferenceType *New = new (*this,8) ReferenceType(T, Canonical);
Types.push_back(New);
ReferenceTypes.InsertNode(New, InsertPos);
return QualType(New, 0);
@@ -887,8 +882,7 @@
MemberPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(MemberPointerType), 8);
- MemberPointerType *New = new (Mem) MemberPointerType(T, Cls, Canonical);
+ MemberPointerType *New = new (*this,8) MemberPointerType(T, Cls, Canonical);
Types.push_back(New);
MemberPointerTypes.InsertNode(New, InsertPos);
return QualType(New, 0);
@@ -920,9 +914,8 @@
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(ConstantArrayType), 8);
ConstantArrayType *New =
- new (Mem) ConstantArrayType(EltTy, Canonical, ArySize, ASM, EltTypeQuals);
+ new(*this,8)ConstantArrayType(EltTy, Canonical, ArySize, ASM, EltTypeQuals);
ConstantArrayTypes.InsertNode(New, InsertPos);
Types.push_back(New);
return QualType(New, 0);
@@ -936,9 +929,8 @@
// Since we don't unique expressions, it isn't possible to unique VLA's
// that have an expression provided for their size.
- void *Mem = Allocator.Allocate(sizeof(VariableArrayType), 8);
VariableArrayType *New =
- new (Mem) VariableArrayType(EltTy, QualType(), NumElts, ASM, EltTypeQuals);
+ new(*this,8)VariableArrayType(EltTy,QualType(), NumElts, ASM, EltTypeQuals);
VariableArrayTypes.push_back(New);
Types.push_back(New);
@@ -958,10 +950,9 @@
// Since we don't unique expressions, it isn't possible to unique
// dependently-sized array types.
- void *Mem = Allocator.Allocate(sizeof(DependentSizedArrayType), 8);
DependentSizedArrayType *New =
- new (Mem) DependentSizedArrayType(EltTy, QualType(), NumElts,
- ASM, EltTypeQuals);
+ new (*this,8) DependentSizedArrayType(EltTy, QualType(), NumElts,
+ ASM, EltTypeQuals);
DependentSizedArrayTypes.push_back(New);
Types.push_back(New);
@@ -993,8 +984,7 @@
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(IncompleteArrayType), 8);
- IncompleteArrayType *New = new (Mem) IncompleteArrayType(EltTy, Canonical,
+ IncompleteArrayType *New = new (*this,8) IncompleteArrayType(EltTy, Canonical,
ASM, EltTypeQuals);
IncompleteArrayTypes.InsertNode(New, InsertPos);
@@ -1027,8 +1017,7 @@
VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(VectorType), 8);
- VectorType *New = new (Mem) VectorType(vecType, NumElts, Canonical);
+ VectorType *New = new (*this,8) VectorType(vecType, NumElts, Canonical);
VectorTypes.InsertNode(New, InsertPos);
Types.push_back(New);
return QualType(New, 0);
@@ -1059,8 +1048,7 @@
VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(ExtVectorType), 8);
- ExtVectorType *New = new (Mem) ExtVectorType(vecType, NumElts, Canonical);
+ ExtVectorType *New = new (*this,8) ExtVectorType(vecType, NumElts, Canonical);
VectorTypes.InsertNode(New, InsertPos);
Types.push_back(New);
return QualType(New, 0);
@@ -1089,8 +1077,7 @@
assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
}
- void *Mem = Allocator.Allocate(sizeof(FunctionTypeNoProto), 8);
- FunctionTypeNoProto *New = new (Mem) FunctionTypeNoProto(ResultTy, Canonical);
+ FunctionTypeNoProto *New =new(*this,8)FunctionTypeNoProto(ResultTy,Canonical);
Types.push_back(New);
FunctionTypeNoProtos.InsertNode(New, InsertPos);
return QualType(New, 0);
@@ -1138,10 +1125,9 @@
// FunctionTypeProto objects are allocated with extra bytes after them
// for a variable size array (for parameter types) at the end of them.
- // FIXME: Can we do better than forcing a 16-byte alignment?
FunctionTypeProto *FTP =
(FunctionTypeProto*)Allocator.Allocate(sizeof(FunctionTypeProto) +
- NumArgs*sizeof(QualType), 16);
+ NumArgs*sizeof(QualType), 8);
new (FTP) FunctionTypeProto(ResultTy, ArgArray, NumArgs, isVariadic,
TypeQuals, Canonical);
Types.push_back(FTP);
@@ -1165,26 +1151,20 @@
if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Decl)) {
if (PrevDecl)
Decl->TypeForDecl = PrevDecl->TypeForDecl;
- else {
- void *Mem = Allocator.Allocate(sizeof(CXXRecordType), 8);
- Decl->TypeForDecl = new (Mem) CXXRecordType(CXXRecord);
- }
+ else
+ Decl->TypeForDecl = new (*this,8) CXXRecordType(CXXRecord);
}
else if (RecordDecl *Record = dyn_cast<RecordDecl>(Decl)) {
if (PrevDecl)
Decl->TypeForDecl = PrevDecl->TypeForDecl;
- else {
- void *Mem = Allocator.Allocate(sizeof(RecordType), 8);
- Decl->TypeForDecl = new (Mem) RecordType(Record);
- }
+ else
+ Decl->TypeForDecl = new (*this,8) RecordType(Record);
}
else if (EnumDecl *Enum = dyn_cast<EnumDecl>(Decl)) {
if (PrevDecl)
Decl->TypeForDecl = PrevDecl->TypeForDecl;
- else {
- void *Mem = Allocator.Allocate(sizeof(EnumType), 8);
- Decl->TypeForDecl = new (Mem) EnumType(Enum);
- }
+ else
+ Decl->TypeForDecl = new (*this,8) EnumType(Enum);
}
else
assert(false && "TypeDecl without a type?");
@@ -1199,8 +1179,7 @@
if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
QualType Canonical = getCanonicalType(Decl->getUnderlyingType());
- void *Mem = Allocator.Allocate(sizeof(TypedefType), 8);
- Decl->TypeForDecl = new (Mem) TypedefType(Type::TypeName, Decl, Canonical);
+ Decl->TypeForDecl = new(*this,8) TypedefType(Type::TypeName, Decl, Canonical);
Types.push_back(Decl->TypeForDecl);
return QualType(Decl->TypeForDecl, 0);
}
@@ -1209,8 +1188,7 @@
/// for the specified template type parameter declaration.
QualType ASTContext::getTemplateTypeParmType(TemplateTypeParmDecl *Decl) {
if (!Decl->TypeForDecl) {
- void *Mem = Allocator.Allocate(sizeof(TemplateTypeParmType), 8);
- Decl->TypeForDecl = new (Mem) TemplateTypeParmType(Decl);
+ Decl->TypeForDecl = new (*this,8) TemplateTypeParmType(Decl);
Types.push_back(Decl->TypeForDecl);
}
return QualType(Decl->TypeForDecl, 0);
@@ -1221,8 +1199,7 @@
QualType ASTContext::getObjCInterfaceType(ObjCInterfaceDecl *Decl) {
if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
- void *Mem = Allocator.Allocate(sizeof(ObjCInterfaceType), 8);
- Decl->TypeForDecl = new (Mem) ObjCInterfaceType(Type::ObjCInterface, Decl);
+ Decl->TypeForDecl = new(*this,8) ObjCInterfaceType(Type::ObjCInterface, Decl);
Types.push_back(Decl->TypeForDecl);
return QualType(Decl->TypeForDecl, 0);
}
@@ -1263,9 +1240,8 @@
return QualType(QT, 0);
// No Match;
- void *Mem = Allocator.Allocate(sizeof(ObjCQualifiedInterfaceType), 8);
ObjCQualifiedInterfaceType *QType =
- new (Mem) ObjCQualifiedInterfaceType(Decl, Protocols, NumProtocols);
+ new (*this,8) ObjCQualifiedInterfaceType(Decl, Protocols, NumProtocols);
Types.push_back(QType);
ObjCQualifiedInterfaceTypes.InsertNode(QType, InsertPos);
@@ -1288,9 +1264,8 @@
return QualType(QT, 0);
// No Match;
- void *Mem = Allocator.Allocate(sizeof(ObjCQualifiedIdType), 8);
ObjCQualifiedIdType *QType =
- new (Mem) ObjCQualifiedIdType(Protocols, NumProtocols);
+ new (*this,8) ObjCQualifiedIdType(Protocols, NumProtocols);
Types.push_back(QType);
ObjCQualifiedIdTypes.InsertNode(QType, InsertPos);
return QualType(QType, 0);
@@ -1303,8 +1278,7 @@
/// on canonical type's (which are always unique).
QualType ASTContext::getTypeOfExpr(Expr *tofExpr) {
QualType Canonical = getCanonicalType(tofExpr->getType());
- void *Mem = Allocator.Allocate(sizeof(TypeOfExpr), 8);
- TypeOfExpr *toe = new (Mem) TypeOfExpr(tofExpr, Canonical);
+ TypeOfExpr *toe = new (*this,8) TypeOfExpr(tofExpr, Canonical);
Types.push_back(toe);
return QualType(toe, 0);
}
@@ -1316,8 +1290,7 @@
/// on canonical type's (which are always unique).
QualType ASTContext::getTypeOfType(QualType tofType) {
QualType Canonical = getCanonicalType(tofType);
- void *Mem = Allocator.Allocate(sizeof(TypeOfType), 8);
- TypeOfType *tot = new (Mem) TypeOfType(tofType, Canonical);
+ TypeOfType *tot = new (*this,8) TypeOfType(tofType, Canonical);
Types.push_back(tot);
return QualType(tot, 0);
}
More information about the cfe-commits
mailing list