[PATCH] D33660: [coroutines] Fix assertion during -Wuninitialized analysis

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 7 00:59:32 PDT 2017


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 <dblaikie at gmail.com> wrote:

>
>
> On Mon, May 29, 2017 at 3:28 PM Eric Fiselier via Phabricator via
> cfe-commits <cfe-commits at 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 at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170607/16363d09/attachment-0001.html>


More information about the cfe-commits mailing list