This is the DDC specific issue for the behavior reported in #54311, which has the details (some details here: #54311 (comment)).
The main point is that we can have an async function with declared return type FutureOr<Object> that actually returns a Future<dynamic> (it should return a Future<Object>). The Kernel code which is generated for the example program seems to be correct, so the issue seems to be caused by the processing of this Kernel code in backends.