edit: Given these lines, it should be a compiler bug:
Special attention needs to be given to the async let _ = ... form of declarations. This form is interesting because it creates a child-task of the right-hand-side initializer, however it actively chooses to ignore the result. Such a declaration (and the associated child-task) will run and be awaited-on implicitly, as the scope it was declared in is about to exit — the same way as an unused async let declaration would be.
If you have read SE-0317, you will notice that async let is actually a pure syntactic sugar around Task:
async let myProduct = build()
// …
return await myProduct
While we typically await for the value after async let — if we don’t do so, Swift will call cancel() and wait() on the task. An anonymous async let variable, resulting in an anonymous Task, cannot be referenced. That’s why async let _ fails to compile.