Yes, the thing that it's supposed to be testing is -Wuninitialized and other analysis warnings.
I'll re-name the test and add more test cases to this effect shortly. Thanks for the input. On Mon, Jun 5, 2017 at 10:33 AM, David Blaikie <dblai...@gmail.com> wrote: > > > On Mon, May 29, 2017 at 3:28 PM Eric Fiselier via Phabricator via > cfe-commits <cfe-commits@lists.llvm.org> wrote: > >> EricWF created this revision. >> >> @rsmith Is there a better place to put this test? >> >> >> https://reviews.llvm.org/D33660 >> >> Files: >> lib/Sema/SemaCoroutine.cpp >> test/SemaCXX/coreturn.cpp >> test/SemaCXX/coroutine-uninitialized-warning-crash.cpp >> >> >> Index: test/SemaCXX/coroutine-uninitialized-warning-crash.cpp >> =================================================================== >> --- /dev/null >> +++ 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 >> > > 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? > > >> +#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); >> +} >> Index: test/SemaCXX/coreturn.cpp >> =================================================================== >> --- test/SemaCXX/coreturn.cpp >> +++ 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; >> Index: lib/Sema/SemaCoroutine.cpp >> =================================================================== >> --- lib/Sema/SemaCoroutine.cpp >> +++ lib/Sema/SemaCoroutine.cpp >> @@ -437,6 +437,7 @@ >> if (VD->isInvalidDecl()) >> return nullptr; >> ActOnUninitializedDecl(VD); >> + FD->addDecl(VD); >> assert(!VD->isInvalidDecl()); >> return VD; >> } >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits