<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Thanks for catching this, r266706.<div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Apr 18, 2016, at 11:38 AM, Richard Smith <<a href="mailto:richard@metafoo.co.uk" class="">richard@metafoo.co.uk</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 18, 2016 at 11:19 AM, Akira Hatanaka via cfe-commits <span dir="ltr" class=""><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" class="">cfe-commits@lists.llvm.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: ahatanak<br class="">
Date: Mon Apr 18 13:19:45 2016<br class="">
New Revision: 266645<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=266645&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=266645&view=rev</a><br class="">
Log:<br class="">
[Parser][ObjC] Make sure c++11 in-class initialization is done when the<br class="">
constructor's definition is in an implementation block.<br class=""></blockquote><div class=""><br class=""></div><div class="">This doesn't just fix the C++11 case, it also fixes this:</div><div class=""><br class=""></div><div class=""><div class="">struct Q { Q(); };</div><div class="">struct S { S(); Q q;  };</div><div class=""><br class=""></div><div class="">@implementation I</div><div class="">S::S() {}</div><div class="">@end</div></div><div class=""><br class=""></div><div class="">We previously did not run the Q default constructor from the S default constructor.</div><div class=""><br class=""></div><div class="">Can you also add that to the test, please?</div><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Without this commit, ptr doesn't get initialized to null in the<br class="">
following code:<br class="">
<br class="">
struct S {<br class="">
  S();<br class="">
  void *ptr = nullptr;<br class="">
};<br class="">
<br class="">
@implementation I<br class="">
  S::S() {}<br class="">
@end<br class="">
<br class="">
<a href="rdar://problem/25693624" class="">rdar://problem/25693624</a><br class="">
<br class="">
Added:<br class="">
    cfe/trunk/test/Parser/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__objc-2Ddefault-2Dctor-2Dinit.mm&d=BQMFaQ&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=WE8Ob6C4AXEAwDpQ1eJKZaHrd05IdBJKmcim2GmXr8Q&m=2HssnazEfepis4JB2nsgaJoLetc07fMAma9p69NVGkY&s=a8F3E2MsE347H22C4F1y4SIv43f9H5WNPeiVaigwWyo&e=" rel="noreferrer" target="_blank" class="">objc-default-ctor-init.mm</a><br class="">
Modified:<br class="">
    cfe/trunk/lib/Parse/ParseObjc.cpp<br class="">
<br class="">
Modified: cfe/trunk/lib/Parse/ParseObjc.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=266645&r1=266644&r2=266645&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=266645&r1=266644&r2=266645&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)<br class="">
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Mon Apr 18 13:19:45 2016<br class="">
@@ -3651,6 +3651,8 @@ void Parser::ParseLexedObjCMethodDefs(Le<br class="">
   else {<br class="">
     if (<a href="http://Tok.is" class="">Tok.is</a>(tok::colon))<br class="">
       ParseConstructorInitializer(MCDecl);<br class="">
+    else<br class="">
+      Actions.ActOnDefaultCtorInitializers(MCDecl);<br class="">
     ParseFunctionStatementBody(MCDecl, BodyScope);<br class="">
   }<br class="">
<br class="">
<br class="">
Added: cfe/trunk/test/Parser/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__objc-2Ddefault-2Dctor-2Dinit.mm&d=BQMFaQ&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=WE8Ob6C4AXEAwDpQ1eJKZaHrd05IdBJKmcim2GmXr8Q&m=2HssnazEfepis4JB2nsgaJoLetc07fMAma9p69NVGkY&s=a8F3E2MsE347H22C4F1y4SIv43f9H5WNPeiVaigwWyo&e=" rel="noreferrer" target="_blank" class="">objc-default-ctor-init.mm</a><br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/objc-default-ctor-init.mm?rev=266645&view=auto" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/objc-default-ctor-init.mm?rev=266645&view=auto</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/test/Parser/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__objc-2Ddefault-2Dctor-2Dinit.mm&d=BQMFaQ&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=WE8Ob6C4AXEAwDpQ1eJKZaHrd05IdBJKmcim2GmXr8Q&m=2HssnazEfepis4JB2nsgaJoLetc07fMAma9p69NVGkY&s=a8F3E2MsE347H22C4F1y4SIv43f9H5WNPeiVaigwWyo&e=" rel="noreferrer" target="_blank" class="">objc-default-ctor-init.mm</a> (added)<br class="">
+++ cfe/trunk/test/Parser/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__objc-2Ddefault-2Dctor-2Dinit.mm&d=BQMFaQ&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=WE8Ob6C4AXEAwDpQ1eJKZaHrd05IdBJKmcim2GmXr8Q&m=2HssnazEfepis4JB2nsgaJoLetc07fMAma9p69NVGkY&s=a8F3E2MsE347H22C4F1y4SIv43f9H5WNPeiVaigwWyo&e=" rel="noreferrer" target="_blank" class="">objc-default-ctor-init.mm</a> Mon Apr 18 13:19:45 2016<br class="">
@@ -0,0 +1,17 @@<br class="">
+// RUN: %clang_cc1 -triple x86_64-apple-macosx10.10 -std=c++11 -ast-dump %s | FileCheck %s<br class="">
+// CHECK: CXXCtorInitializer Field {{.*}} 'ptr' 'void *'<br class="">
+<br class="">
+@interface NSObject<br class="">
+@end<br class="">
+<br class="">
+@interface I : NSObject<br class="">
+@end<br class="">
+<br class="">
+struct S {<br class="">
+  S();<br class="">
+  void *ptr = nullptr;<br class="">
+};<br class="">
+<br class="">
+@implementation I<br class="">
+S::S() {}<br class="">
+@end<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
cfe-commits mailing list<br class="">
<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="">
</blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></div></body></html>