diff options
author | Eric Fiselier <eric@efcs.ca> | 2017-05-31 19:36:59 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2017-05-31 19:36:59 +0000 |
commit | 37b8a374d99cc93b77e8ccf5c77f101f8a3b75e0 (patch) | |
tree | 7226de382ad50472f13fe3170604b4b33d21000b /clang/test | |
parent | 0dc251076207c749bb26ef33b70d5c0057cb3776 (diff) | |
download | bcm5719-llvm-37b8a374d99cc93b77e8ccf5c77f101f8a3b75e0.tar.gz bcm5719-llvm-37b8a374d99cc93b77e8ccf5c77f101f8a3b75e0.zip |
[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
llvm-svn: 304331
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/coreturn.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp | 44 |
2 files changed, 45 insertions, 1 deletions
diff --git a/clang/test/SemaCXX/coreturn.cpp b/clang/test/SemaCXX/coreturn.cpp index 0ec94d1b599..7265d7c19c2 100644 --- a/clang/test/SemaCXX/coreturn.cpp +++ b/clang/test/SemaCXX/coreturn.cpp @@ -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; diff --git a/clang/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp b/clang/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp new file mode 100644 index 00000000000..5bdb232d530 --- /dev/null +++ b/clang/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp @@ -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); +} |