Author: ericwf Date: Wed May 31 14:36:59 2017 New Revision: 304331 URL: http://llvm.org/viewvc/llvm-project?rev=304331&view=rev Log: [coroutines] Fix assertion during -Wuninitialized analysis
Summary: @rsmith Is there a better place to put this test? Reviewers: GorNishanov, rsmith Reviewed By: GorNishanov Subscribers: cfe-commits, rsmith Differential Revision: https://reviews.llvm.org/D33660 Added: cfe/trunk/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp Modified: cfe/trunk/lib/Sema/SemaCoroutine.cpp cfe/trunk/test/SemaCXX/coreturn.cpp Modified: cfe/trunk/lib/Sema/SemaCoroutine.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCoroutine.cpp?rev=304331&r1=304330&r2=304331&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaCoroutine.cpp (original) +++ cfe/trunk/lib/Sema/SemaCoroutine.cpp Wed May 31 14:36:59 2017 @@ -437,6 +437,7 @@ VarDecl *Sema::buildCoroutinePromise(Sou if (VD->isInvalidDecl()) return nullptr; ActOnUninitializedDecl(VD); + FD->addDecl(VD); assert(!VD->isInvalidDecl()); return VD; } Modified: cfe/trunk/test/SemaCXX/coreturn.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/coreturn.cpp?rev=304331&r1=304330&r2=304331&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/coreturn.cpp (original) +++ cfe/trunk/test/SemaCXX/coreturn.cpp Wed May 31 14:36:59 2017 @@ -1,4 +1,4 @@ -// 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 +// 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 #include "Inputs/std-coroutine.h" using std::experimental::suspend_always; Added: cfe/trunk/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp?rev=304331&view=auto ============================================================================== --- cfe/trunk/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp (added) +++ cfe/trunk/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp Wed May 31 14:36:59 2017 @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts -fsyntax-only -Wall -Wextra -Wuninitialized -fblocks +#include "Inputs/std-coroutine.h" + +using namespace std::experimental; + + +struct A { + bool await_ready() { return true; } + int await_resume() { return 42; } + template <typename F> + void await_suspend(F) {} +}; + + +struct coro_t { + struct promise_type { + coro_t get_return_object() { return {}; } + suspend_never initial_suspend() { return {}; } + suspend_never final_suspend() { return {}; } + A yield_value(int) { return {}; } + void return_void() {} + static void unhandled_exception() {} + }; +}; + +coro_t f(int n) { + if (n == 0) + co_return; + co_yield 42; + int x = co_await A{}; +} + +template <class Await> +coro_t g(int n) { + if (n == 0) + co_return; + co_yield 42; + int x = co_await Await{}; +} + +int main() { + f(0); + g<A>(0); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits