Deleted Added
full compact
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 ---