diff -r f2f5d1c928eb Lib/test/test_coroutines.py --- a/Lib/test/test_coroutines.py Sun Jun 28 11:15:13 2015 -0400 +++ b/Lib/test/test_coroutines.py Mon Jun 29 12:29:07 2015 -0400 @@ -106,6 +106,16 @@ with self.assertRaisesRegex(SyntaxError, 'invalid syntax'): import test.badsyntax_async9 + def test_badsyntax_10(self): + ns = {} + for comp in {'(await a for a in b)', + '[await a for a in b]', + '{await a for a in b}', + '{await a: c for a in b}'}: + + with self.assertRaisesRegex( SyntaxError, 'await.*in comprehen'): + exec('async def f():\n\t{}'.format(comp), ns, ns) + class TokenizerRegrTest(unittest.TestCase): diff -r f2f5d1c928eb Python/compile.c --- a/Python/compile.c Sun Jun 28 11:15:13 2015 -0400 +++ b/Python/compile.c Mon Jun 29 12:29:07 2015 -0400 @@ -3856,7 +3856,10 @@ if (c->u->u_ste->ste_type != FunctionBlock) return compiler_error(c, "'await' outside function"); - /* this check won't be triggered while we have AWAIT token */ + if (c->u->u_scope_type == COMPILER_SCOPE_COMPREHENSION) + return compiler_error( + c, "'await' expressions in comprehensions are not supported"); + if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION) return compiler_error(c, "'await' outside async function");