Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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
- Loading branch information
Showing
3 changed files
with
46 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
44 changes: 44 additions & 0 deletions
44
clang/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |