CGCXX.cpp (193326) | CGCXX.cpp (193401) |
---|---|
1//===--- CGDecl.cpp - Emit LLVM Code for declarations ---------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 175 unchanged lines hidden (view full) --- 184 if (RD->hasTrivialConstructor()) 185 return; 186 187 // Call the constructor. 188 EmitCXXConstructorCall(E->getConstructor(), Ctor_Complete, Dest, 189 E->arg_begin(), E->arg_end()); 190} 191 | 1//===--- CGDecl.cpp - Emit LLVM Code for declarations ---------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 175 unchanged lines hidden (view full) --- 184 if (RD->hasTrivialConstructor()) 185 return; 186 187 // Call the constructor. 188 EmitCXXConstructorCall(E->getConstructor(), Ctor_Complete, Dest, 189 E->arg_begin(), E->arg_end()); 190} 191 |
192void CodeGenFunction::PushCXXTemporary(const CXXTemporary *Temporary, 193 llvm::Value *Ptr) { 194 LiveTemporaries.push_back(Temporary); 195 196 // Make a cleanup scope and emit the destructor. 197 { 198 CleanupScope Scope(*this); 199 200 EmitCXXDestructorCall(Temporary->getDestructor(), Dtor_Complete, Ptr); 201 } 202} 203 204RValue 205CodeGenFunction::EmitCXXExprWithTemporaries(const CXXExprWithTemporaries *E, 206 llvm::Value *AggLoc, 207 bool isAggLocVolatile) { 208 // Keep track of the current cleanup stack depth. 209 size_t CleanupStackDepth = CleanupEntries.size(); 210 211 unsigned OldNumLiveTemporaries = LiveTemporaries.size(); 212 213 RValue RV = EmitAnyExpr(E->getSubExpr(), AggLoc, isAggLocVolatile); 214 215 // Go through the temporaries backwards. 216 for (unsigned i = E->getNumTemporaries(); i != 0; --i) { 217 assert(LiveTemporaries.back() == E->getTemporary(i - 1)); 218 LiveTemporaries.pop_back(); 219 } 220 221 assert(OldNumLiveTemporaries == LiveTemporaries.size() && 222 "Live temporary stack mismatch!"); 223 224 EmitCleanupBlocks(CleanupStackDepth); 225 226 return RV; 227} 228 | |
229llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) { 230 if (E->isArray()) { 231 ErrorUnsupported(E, "new[] expression"); 232 return llvm::UndefValue::get(ConvertType(E->getType())); 233 } 234 235 QualType AllocType = E->getAllocatedType(); 236 FunctionDecl *NewFD = E->getOperatorNew(); --- 218 unchanged lines hidden --- | 192llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) { 193 if (E->isArray()) { 194 ErrorUnsupported(E, "new[] expression"); 195 return llvm::UndefValue::get(ConvertType(E->getType())); 196 } 197 198 QualType AllocType = E->getAllocatedType(); 199 FunctionDecl *NewFD = E->getOperatorNew(); --- 218 unchanged lines hidden --- |