Objective-C @synthesize support.
- Only supports simple assignment and atomic semantics are ignored.
- Not quite usable yet because the methods do not actually get added
to the class metadata.
- Added ObjCPropertyDecl::getSetterKind (one of Assign, Copy, Retain).
- Rearrange CodeGenFunction so synthesis can reuse function prolog /
epilog code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55365 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp
index 11fde87..909486a 100644
--- a/lib/CodeGen/CodeGenFunction.cpp
+++ b/lib/CodeGen/CodeGenFunction.cpp
@@ -62,19 +62,15 @@
!T->isVoidType() && !T->isVectorType() && !T->isFunctionType();
}
-void CodeGenFunction::GenerateFunction(const Stmt *Body) {
- // Emit the function body.
- EmitStmt(Body);
-
+void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
// Finish emission of indirect switches.
EmitIndirectSwitches();
// Emit debug descriptor for function end.
CGDebugInfo *DI = CGM.getDebugInfo();
if (DI) {
- const CompoundStmt* s = dyn_cast<CompoundStmt>(Body);
- if (s && s->getRBracLoc().isValid()) {
- DI->setLocation(s->getRBracLoc());
+ if (EndLoc.isValid()) {
+ DI->setLocation(EndLoc);
}
DI->EmitRegionEnd(CurFn, Builder);
}
@@ -156,7 +152,15 @@
EmitParmDecl(*CurParam, V);
}
}
- GenerateFunction(FD->getBody());
+
+ EmitStmt(FD->getBody());
+
+ const CompoundStmt *S = dyn_cast<CompoundStmt>(FD->getBody());
+ if (S) {
+ FinishFunction(S->getRBracLoc());
+ } else {
+ FinishFunction();
+ }
}
/// isDummyBlock - Return true if BB is an empty basic block