// Errors:
//
// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
//   return missing;
//          ^^^^^^^
//
// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
// g() sync* => dummy;
//              ^^^^^

library;
import self as self;
import "dart:core" as core;

static method f() → dynamic /* originally sync* */ {
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  function :sync_op(core::_SyncIterator<dynamic> :iterator) → core::bool yielding {
    {
      invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
  return missing;
  ^";
    }
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method g() → dynamic /* originally sync* */ {
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  function :sync_op(core::_SyncIterator<dynamic> :iterator) → core::bool yielding {
    invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
g() sync* => dummy;
             ^";
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method h() → dynamic /* originally sync* */ {
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  function :sync_op(core::_SyncIterator<dynamic> :iterator) → core::bool yielding {
    {
      (() → core::String => "return").call();
    }
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method main() → dynamic {}
