<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, May 29, 2017 at 3:28 PM Eric Fiselier via Phabricator via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">EricWF created this revision.<br>
<br>
@rsmith Is there a better place to put this test?<br>
<br>
<br>
<a href="https://reviews.llvm.org/D33660" rel="noreferrer" target="_blank">https://reviews.llvm.org/D33660</a><br>
<br>
Files:<br>
  lib/Sema/SemaCoroutine.cpp<br>
  test/SemaCXX/coreturn.cpp<br>
  test/SemaCXX/coroutine-uninitialized-warning-crash.cpp<br>
<br>
<br>
Index: test/SemaCXX/coroutine-uninitialized-warning-crash.cpp<br>
===================================================================<br>
--- /dev/null<br>
+++ test/SemaCXX/coroutine-uninitialized-warning-crash.cpp<br>
@@ -0,0 +1,44 @@<br>
+// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts -fsyntax-only -Wall -Wextra -Wuninitialized  -fblocks<br></blockquote><div><br></div><div>A test case that tests only "this doesn't crash" is usually a bit of a hint to me, at least, that something's under-tested. I assume there's some specific behavior that's desired more than "does anything other than crashing" that should be being tested for here?<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+#include "Inputs/std-coroutine.h"<br>
+<br>
+using namespace std::experimental;<br>
+<br>
+<br>
+struct A {<br>
+  bool await_ready() { return true; }<br>
+  int await_resume() { return 42; }<br>
+  template <typename F><br>
+  void await_suspend(F) {}<br>
+};<br>
+<br>
+<br>
+struct coro_t {<br>
+  struct promise_type {<br>
+    coro_t get_return_object() { return {}; }<br>
+    suspend_never initial_suspend() { return {}; }<br>
+    suspend_never final_suspend() { return {}; }<br>
+    A yield_value(int) { return {}; }<br>
+    void return_void() {}<br>
+    static void unhandled_exception() {}<br>
+  };<br>
+};<br>
+<br>
+coro_t f(int n) {<br>
+  if (n == 0)<br>
+    co_return;<br>
+  co_yield 42;<br>
+  int x = co_await A{};<br>
+}<br>
+<br>
+template <class Await><br>
+coro_t g(int n) {<br>
+  if (n == 0)<br>
+    co_return;<br>
+  co_yield 42;<br>
+  int x = co_await Await{};<br>
+}<br>
+<br>
+int main() {<br>
+  f(0);<br>
+  g<A>(0);<br>
+}<br>
Index: test/SemaCXX/coreturn.cpp<br>
===================================================================<br>
--- test/SemaCXX/coreturn.cpp<br>
+++ test/SemaCXX/coreturn.cpp<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts -fsyntax-only -Wignored-qualifiers -Wno-error=return-type -verify -fblocks -Wno-unreachable-code -Wno-unused-value<br>
+// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts -fsyntax-only -Wignored-qualifiers -Wno-error=return-type -verify -fblocks -Wall -Wextra -Wno-error=unreachable-code<br>
 #include "Inputs/std-coroutine.h"<br>
<br>
 using std::experimental::suspend_always;<br>
Index: lib/Sema/SemaCoroutine.cpp<br>
===================================================================<br>
--- lib/Sema/SemaCoroutine.cpp<br>
+++ lib/Sema/SemaCoroutine.cpp<br>
@@ -437,6 +437,7 @@<br>
   if (VD->isInvalidDecl())<br>
     return nullptr;<br>
   ActOnUninitializedDecl(VD);<br>
+  FD->addDecl(VD);<br>
   assert(!VD->isInvalidDecl());<br>
   return VD;<br>
 }<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></div>