<div dir="ltr"><div dir="ltr">Oops, I committed wrong column number in the test due to reindentation. Fixed in r350283.</div><div><br></div><div>~ Alex</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, 2 Jan 2019 at 17:16, Alex Lorenz via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Author: arphaman<br>
Date: Wed Jan  2 17:13:33 2019<br>
New Revision: 350282<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=350282&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=350282&view=rev</a><br>
Log:<br>
[libclang] CoroutineBody/Coreturn statements are UnexposedStmts and not Exprs<br>
<br>
This change ensures that the libclang CXCursor represents the CoroutineBody<br>
and the Coreturn statement using the appropriate CXCursor_UnexposedStmt kind<br>
instead of CXCursor_UnexposedExpr. The problem with CXCursor_UnexposedExpr is<br>
that the consumer functions assumed that CoroutineBody/Coreturn statements<br>
were valid expressions and performed an invalid downcast to Expr causing<br>
assertion failures or other crashes.<br>
<br>
rdar://40204290<br>
<br>
Added:<br>
    cfe/trunk/test/Index/coroutines.cpp<br>
Modified:<br>
    cfe/trunk/tools/libclang/CXCursor.cpp<br>
<br>
Added: cfe/trunk/test/Index/coroutines.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/coroutines.cpp?rev=350282&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/coroutines.cpp?rev=350282&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Index/coroutines.cpp (added)<br>
+++ cfe/trunk/test/Index/coroutines.cpp Wed Jan  2 17:13:33 2019<br>
@@ -0,0 +1,24 @@<br>
+// RUN: c-index-test -test-load-source all -c %s -fsyntax-only -target x86_64-apple-darwin9 -fcoroutines-ts -std=c++1z -I%S/../SemaCXX/Inputs | FileCheck %s<br>
+#include "std-coroutine.h"<br>
+<br>
+using std::experimental::suspend_always;<br>
+using std::experimental::suspend_never;<br>
+<br>
+struct promise_void {<br>
+  void get_return_object();<br>
+  suspend_always initial_suspend();<br>
+  suspend_always final_suspend();<br>
+  void return_void();<br>
+  void unhandled_exception();<br>
+};<br>
+<br>
+template <><br>
+struct std::experimental::coroutine_traits<void> { using promise_type = promise_void; };<br>
+<br>
+void CoroutineTestRet() {<br>
+  co_return;<br>
+}<br>
+// CHECK: [[@LINE-3]]:25: UnexposedStmt=<br>
+// CHECK-SAME: [[@LINE-4]]:25 - [[@LINE-2]]:2]<br>
+// CHECK: [[@LINE-4]]:5: UnexposedStmt=<br>
+// CHECK-SAME: [[@LINE-5]]:5 - [[@LINE-5]]:14]<br>
<br>
Modified: cfe/trunk/tools/libclang/CXCursor.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXCursor.cpp?rev=350282&r1=350281&r2=350282&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXCursor.cpp?rev=350282&r1=350281&r2=350282&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/libclang/CXCursor.cpp (original)<br>
+++ cfe/trunk/tools/libclang/CXCursor.cpp Wed Jan  2 17:13:33 2019<br>
@@ -241,16 +241,19 @@ CXCursor cxcursor::MakeCXCursor(const St<br>
   case Stmt::SEHLeaveStmtClass:<br>
     K = CXCursor_SEHLeaveStmt;<br>
     break;<br>
-  <br>
+<br>
+  case Stmt::CoroutineBodyStmtClass:<br>
+  case Stmt::CoreturnStmtClass:<br>
+    K = CXCursor_UnexposedStmt;<br>
+    break;<br>
+<br>
   case Stmt::ArrayTypeTraitExprClass:<br>
   case Stmt::AsTypeExprClass:<br>
   case Stmt::AtomicExprClass:<br>
   case Stmt::BinaryConditionalOperatorClass:<br>
   case Stmt::TypeTraitExprClass:<br>
-  case Stmt::CoroutineBodyStmtClass:<br>
   case Stmt::CoawaitExprClass:<br>
   case Stmt::DependentCoawaitExprClass:<br>
-  case Stmt::CoreturnStmtClass:<br>
   case Stmt::CoyieldExprClass:<br>
   case Stmt::CXXBindTemporaryExprClass:<br>
   case Stmt::CXXDefaultArgExprClass:<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">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>