diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index a0aa134..7ca6318 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -2799,18 +2799,6 @@
       }
     }
 
-    if (body is BlockFunctionBody) {
-      var params = element.parameters.map((e) => e.name).toSet();
-      bool shadowsParam = body.block.statements.any((s) =>
-          s is VariableDeclarationStatement &&
-          s.variables.variables.any((v) => params.contains(v.name.name)));
-      if (shadowsParam) {
-        code = new JS.Block([
-          new JS.Block([code], isScope: true)
-        ]);
-      }
-    }
-
     return new JS.Fun(formals, code,
         typeParams: typeFormals, returnType: emitTypeRef(type.returnType));
   }
@@ -2821,8 +2809,23 @@
     _currentFunction = body;
 
     var initArgs = _emitArgumentInitializers(element, parameters);
-    var block = _visit(body);
+    var block = _visit<JS.Block>(body);
+
     if (initArgs != null) block = new JS.Block([initArgs, block]);
+
+    if (body is BlockFunctionBody) {
+      var params = element.parameters.map((e) => e.name).toSet();
+      bool shadowsParam = body.block.statements.any((s) =>
+          s is VariableDeclarationStatement &&
+          s.variables.variables.any((v) => params.contains(v.name.name)));
+
+      if (shadowsParam) {
+        block = new JS.Block([
+          new JS.Block([block], isScope: true)
+        ]);
+      }
+    }
+
     _currentFunction = savedFunction;
 
     return block;
diff --git a/tests/language_strong/shadow_parameter_and_local_test.dart b/tests/language_strong/shadow_parameter_and_local_test.dart
index 813575a..1a00dd3 100644
--- a/tests/language_strong/shadow_parameter_and_local_test.dart
+++ b/tests/language_strong/shadow_parameter_and_local_test.dart
@@ -10,6 +10,25 @@
   return a;
 }
 
-main() {
+// Regression test for https://github.com/dart-lang/sdk/issues/30792 in DDC.
+bar(a) async {
+  var a = 123;
+  return a;
+}
+
+baz(a) sync* {
+  var a = 123;
+  yield a;
+}
+
+qux(a) async* {
+  var a = 123;
+  yield a;
+}
+
+main() async {
   Expect.equals(foo(42), 123);
+  Expect.equals(await bar(42), 123);
+  Expect.equals(baz(42).single, 123);
+  Expect.equals(await qux(42).single, 123);
 }
