diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc
index 81fb8c9..eb31ecd 100644
--- a/gcc/cp/coroutines.cc
+++ b/gcc/cp/coroutines.cc
@@ -1358,6 +1358,9 @@ co_await_expander (tree *stmt, int * /*do_subtree*/, void *d)
 				 &buried_stmt, NULL))
 	saved_co_await = r;
     }
+  else if ((stmt_code == CONVERT_EXPR || stmt_code == NOP_EXPR)
+	   && TREE_CODE (TREE_OPERAND (stripped_stmt, 0)) == CO_AWAIT_EXPR)
+    saved_co_await = TREE_OPERAND (stripped_stmt, 0);
 
   if (!saved_co_await)
     return NULL_TREE;
@@ -1515,6 +1518,11 @@ co_await_expander (tree *stmt, int * /*do_subtree*/, void *d)
     default: /* not likely to work .. but... */
       append_to_statement_list (resume_call, &stmt_list);
       break;
+    case CONVERT_EXPR:
+    case NOP_EXPR:
+      TREE_OPERAND (stripped_stmt, 0) = resume_call;
+      append_to_statement_list (saved_statement, &stmt_list);
+      break;
     case INIT_EXPR:
     case MODIFY_EXPR:
     case CALL_EXPR:
diff --git a/gcc/testsuite/g++.dg/coroutines/co-await-syntax-09-convert.C b/gcc/testsuite/g++.dg/coroutines/co-await-syntax-09-convert.C
new file mode 100644
index 0000000..dde0bab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/coroutines/co-await-syntax-09-convert.C
@@ -0,0 +1,23 @@
+//  { dg-additional-options "-std=c++17 -w" }
+
+#include "coro.h"
+
+class mycoro {
+public:
+  class promise_type {
+  public:
+    std::suspend_always initial_suspend() const noexcept { return {}; }
+    std::suspend_always final_suspend() const noexcept { return {}; }
+    void unhandled_exception() noexcept { }
+    mycoro get_return_object() { return mycoro{}; }
+  };
+};
+
+class await {
+public:
+  bool await_ready() const noexcept { return false; }
+  bool await_suspend(std::coroutine_handle<>) noexcept {return true;}
+  mycoro await_resume() { return mycoro{}; }
+};
+
+mycoro foo(mycoro source) { (void) co_await await{}; }
