diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Rewrite/RewriteModernObjC.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Rewrite/RewriteModernObjC.cpp b/lib/Rewrite/RewriteModernObjC.cpp index 705a046223..041bd60aa3 100644 --- a/lib/Rewrite/RewriteModernObjC.cpp +++ b/lib/Rewrite/RewriteModernObjC.cpp @@ -4814,8 +4814,13 @@ void RewriteModernObjC::RewriteByRefVar(VarDecl *ND, bool firstDecl, bool hasInit = (ND->getInit() != 0); // FIXME. rewriter does not support __block c++ objects which // require construction. - if (hasInit && dyn_cast<CXXConstructExpr>(ND->getInit())) - hasInit = false; + if (hasInit) + if (CXXConstructExpr *CExp = dyn_cast<CXXConstructExpr>(ND->getInit())) { + CXXConstructorDecl *CXXDecl = CExp->getConstructor(); + if (CXXDecl && CXXDecl->isDefaultConstructor()) + hasInit = false; + } + unsigned flags = 0; if (HasCopyAndDispose) flags |= BLOCK_HAS_COPY_DISPOSE; |