<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/98923>98923</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang fails to diagnose a co_await in a default argument, and ICEs if the default argument is used in a lambda
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ArsenArsen
      </td>
    </tr>
</table>

<pre>
    we received [PR115906](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115906) in GCC, which presented the following code:

```c++
#include <coroutine>

struct Promise;

struct Handle : std::coroutine_handle<Promise> {
    using promise_type = Promise;
};

struct Promise {
    Handle get_return_object() noexcept {
        return {Handle::from_promise(*this)};
    }
 std::suspend_never initial_suspend() const noexcept { return {}; }
 std::suspend_never final_suspend() const noexcept { return {}; }
    void return_void() const noexcept {}
    void unhandled_exception() const noexcept {}
};

Handle Coro() {
    struct Awaiter : std::suspend_never {
        int await_resume() { return 0; }
 };

    void foo(int = co_await Awaiter{});
#if 0 // flip on for ICE
    [] { foo(); } ();
#endif
    co_return;
}

int main() {
    Coro();

    return 0;
}
```

... this is invalid per https://eel.is/c++draft/expr.await#2 but clang does not diagnose it.

before realizing that, I was checking what clang and MSVC do in this case.  clang accepted this code, as I said, and had it DTRT in the basic case; MSVC rejected it.

I was further tweaking the code a bit and discovered that I can get clang to crash by adding the IILE above (presumably, any non-coroutine or perhaps a different coroutine with `foo` in scope would have done, but I have not tried).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVs1u4zgTfBr60oggU_GPDjo4dvyNgW-BwexgrwJFtiTu0KRAUvZknn7RkvyXZDGHDQQlorqri9XNUkQIurGIBVu8sMVuJvrYOl9sfEA73GaVU2_FGcGjRH1CBWzx8vXbfL7I0yVb7BhftzF2gWUbxveM7xspk8b2ifMN4_uqb35pYwTj-9C6c1n1TSIbzbK9VizbTTA8B23hf9st41s4t1q20HkMaCMqiC1C7YxxZ20bkE4h1Up3LL3cl-l4ScZf6BpXeaatNL1CYNlWOu_6qC2y7PU-N0TfywhfvTvqgCx7-eTlF2GVIZQNhKioeLa54pXt8JZl2yvGK7DVhAMA0Afi3Y1vy_jWEdTuY8nV7vPyU-Aj6MSpwVh6jL23pav-RhkZX5Oa1uFPiV18TKKfMZrWv0zEaTu1d8dyojhAbGKrA-P5PStKp-fx4SpF6EOHVpUWT-hBWx21MOW0OvGRzob4wOqOyFjj99C1tv8RGABOTqsppKS__xXnY1Zvx16rcozSzv4--2Nbp9ZtnXdT-kOTpq5vzkJH9I9T96jHh95qG0FQXukx9Ee8wV9ESR_1-EjuutnaETtCpGGVrhyAL7SmHfL8ls4zXUMKowlAbXQHzkLtPBy2r3cDNPjMwGksMYIQFbg-XSHRKl3fkqWbpv3h1NzRJ75Hoe1nwt4E_2TPd_q8B764y31KkiRAJwTosidhtIIOPTxaIaJJ6BTtJ2NSXtSR1n92Phn0ZDzjUPURpBG2AeUwgHURlBaNdQFBx-S-boW18-TFwuhfZCuxFZFM8wBnEUC2KH_Q8rkVF0xhFfzx519bUI5MdmAtRcAELgGShnYwWnpF_sq3IAIcIAg6INsBoxUKdITd92_fRxyESgQtBzDq4FDEI7kQqvfER35172OLHuIZxY-RPg4VQUCl41BH6SDdCf1ASEQ4gBSWjG6iGx1IL0IL1RsIpS4oh8P_X0FU7oQ0Rt1wAERl3kb6b2CdfbqaNjhP7WpFF0CA0nWNHm2EW8BZxxbYMqUZXaa04SBdh3B2vSEtTgjK2UEpat9hXKLWRa9RMZ4nM1VkKs9yMcNivuLzdJGvcz5rC4n18ypby9VCztc5zyo-T5VAmam8nnNczHTBU_6cruaL-XI-z9JErfM1z1fyebGs5rVasucUj0KbxJjTkb60Mx1CjwUVyGZGVGjC8EXnfBCNcU4fd19Q_FPVN4E9p0aHGG4IUUeDxahxLbQJpPR1DsXNArQlzbAWvYkgfNMf0cbLlBy2rwF0PbTkfQwdlj7QbBCCEcdKiVnvTfHuHwgd275KpDsyvid606-nzrvxE7cfdksHa9zwqeD_BAAA__-Hf66e">