forked from OSchip/llvm-project
parent
51fd242cfc
commit
44b4ce8e9b
|
@ -187,12 +187,12 @@ CodeGenFunction::GenerateVarArgsThunk(llvm::Function *Fn,
|
|||
|
||||
if (!Thunk.Return.isEmpty()) {
|
||||
// Fix up the returned value, if necessary.
|
||||
for (llvm::Function::iterator I = Fn->begin(), E = Fn->end(); I != E; I++) {
|
||||
llvm::Instruction *T = I->getTerminator();
|
||||
for (llvm::BasicBlock &BB : *Fn) {
|
||||
llvm::Instruction *T = BB.getTerminator();
|
||||
if (isa<llvm::ReturnInst>(T)) {
|
||||
RValue RV = RValue::get(T->getOperand(0));
|
||||
T->eraseFromParent();
|
||||
Builder.SetInsertPoint(&*I);
|
||||
Builder.SetInsertPoint(&BB);
|
||||
RV = PerformReturnAdjustment(*this, ResultType, RV, Thunk);
|
||||
Builder.CreateRet(RV.getScalarVal());
|
||||
break;
|
||||
|
@ -850,13 +850,9 @@ void CodeGenModule::EmitDeferredVTables() {
|
|||
size_t savedSize = DeferredVTables.size();
|
||||
#endif
|
||||
|
||||
typedef std::vector<const CXXRecordDecl *>::const_iterator const_iterator;
|
||||
for (const_iterator i = DeferredVTables.begin(),
|
||||
e = DeferredVTables.end(); i != e; ++i) {
|
||||
const CXXRecordDecl *RD = *i;
|
||||
for (const CXXRecordDecl *RD : DeferredVTables)
|
||||
if (shouldEmitVTableAtEndOfTranslationUnit(*this, RD))
|
||||
VTables.GenerateClassData(RD);
|
||||
}
|
||||
|
||||
assert(savedSize == DeferredVTables.size() &&
|
||||
"deferred extra v-tables during v-table emission?");
|
||||
|
|
|
@ -1043,25 +1043,25 @@ static CharUnits computeOffsetHint(ASTContext &Context,
|
|||
CharUnits Offset;
|
||||
|
||||
// Now walk all possible inheritance paths.
|
||||
for (CXXBasePaths::paths_iterator I = Paths.begin(), E = Paths.end(); I != E;
|
||||
++I) {
|
||||
if (I->Access != AS_public) // Ignore non-public inheritance.
|
||||
for (const CXXBasePath &Path : Paths) {
|
||||
if (Path.Access != AS_public) // Ignore non-public inheritance.
|
||||
continue;
|
||||
|
||||
++NumPublicPaths;
|
||||
|
||||
for (CXXBasePath::iterator J = I->begin(), JE = I->end(); J != JE; ++J) {
|
||||
for (const CXXBasePathElement &PathElement : Path) {
|
||||
// If the path contains a virtual base class we can't give any hint.
|
||||
// -1: no hint.
|
||||
if (J->Base->isVirtual())
|
||||
if (PathElement.Base->isVirtual())
|
||||
return CharUnits::fromQuantity(-1ULL);
|
||||
|
||||
if (NumPublicPaths > 1) // Won't use offsets, skip computation.
|
||||
continue;
|
||||
|
||||
// Accumulate the base class offsets.
|
||||
const ASTRecordLayout &L = Context.getASTRecordLayout(J->Class);
|
||||
Offset += L.getBaseClassOffset(J->Base->getType()->getAsCXXRecordDecl());
|
||||
const ASTRecordLayout &L = Context.getASTRecordLayout(PathElement.Class);
|
||||
Offset += L.getBaseClassOffset(
|
||||
PathElement.Base->getType()->getAsCXXRecordDecl());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue