<div dir="ltr"><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"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><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>
Date: Mon Apr 18 13:19:45 2016<br>
New Revision: 266645<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=266645&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=266645&view=rev</a><br>
Log:<br>
[Parser][ObjC] Make sure c++11 in-class initialization is done when the<br>
constructor's definition is in an implementation block.<br></blockquote><div><br></div><div>This doesn't just fix the C++11 case, it also fixes this:</div><div><br></div><div><div>struct Q { Q(); };</div><div>struct S { S(); Q q;  };</div><div><br></div><div>@implementation I</div><div>S::S() {}</div><div>@end</div></div><div><br></div><div>We previously did not run the Q default constructor from the S default constructor.</div><div><br></div><div>Can you also add that to the test, please?</div><div><br></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>
following code:<br>
<br>
struct S {<br>
  S();<br>
  void *ptr = nullptr;<br>
};<br>
<br>
@implementation I<br>
  S::S() {}<br>
@end<br>
<br>
rdar://problem/25693624<br>
<br>
Added:<br>
    cfe/trunk/test/Parser/<a href="http://objc-default-ctor-init.mm" rel="noreferrer" target="_blank">objc-default-ctor-init.mm</a><br>
Modified:<br>
    cfe/trunk/lib/Parse/ParseObjc.cpp<br>
<br>
Modified: cfe/trunk/lib/Parse/ParseObjc.cpp<br>
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">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=266645&r1=266644&r2=266645&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)<br>
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Mon Apr 18 13:19:45 2016<br>
@@ -3651,6 +3651,8 @@ void Parser::ParseLexedObjCMethodDefs(Le<br>
   else {<br>
     if (Tok.is(tok::colon))<br>
       ParseConstructorInitializer(MCDecl);<br>
+    else<br>
+      Actions.ActOnDefaultCtorInitializers(MCDecl);<br>
     ParseFunctionStatementBody(MCDecl, BodyScope);<br>
   }<br>
<br>
<br>
Added: cfe/trunk/test/Parser/<a href="http://objc-default-ctor-init.mm" rel="noreferrer" target="_blank">objc-default-ctor-init.mm</a><br>
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">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/objc-default-ctor-init.mm?rev=266645&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Parser/<a href="http://objc-default-ctor-init.mm" rel="noreferrer" target="_blank">objc-default-ctor-init.mm</a> (added)<br>
+++ cfe/trunk/test/Parser/<a href="http://objc-default-ctor-init.mm" rel="noreferrer" target="_blank">objc-default-ctor-init.mm</a> Mon Apr 18 13:19:45 2016<br>
@@ -0,0 +1,17 @@<br>
+// RUN: %clang_cc1 -triple x86_64-apple-macosx10.10 -std=c++11 -ast-dump %s | FileCheck %s<br>
+// CHECK: CXXCtorInitializer Field {{.*}} 'ptr' 'void *'<br>
+<br>
+@interface NSObject<br>
+@end<br>
+<br>
+@interface I : NSObject<br>
+@end<br>
+<br>
+struct S {<br>
+  S();<br>
+  void *ptr = nullptr;<br>
+};<br>
+<br>
+@implementation I<br>
+S::S() {}<br>
+@end<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>