Repository: nedbat/coveragepy
Issue: python3.8 try-finally-return reports wrong branch coverage with async functions

**Describe the bug**
I'm afraid I have a similar case to #707, although somehow, decorators and coroutine functions are involved.

**To Reproduce**


1. What version of Python are you using? python3.8
1. What version of coverage.py are you using? 5.0.4., [sys.txt](https://github.com/nedbat/coveragepy/files/4376970/sys.txt) attached
1. What versions of what packages do you have installed? [pip-freeze.txt](https://github.com/nedbat/coveragepy/files/4376971/pip-freeze.txt)
1. What commands did you run? `coverage run --branch test.py ; coverage html`
1. What code are you running?
```python
import asyncio

def foo(x):
    return x

@foo
async def f1():
    try:
        return 2
    finally:
        print('finally')

asyncio.run(f1())
```


**Expected behavior**
Full branch coverage for `f1()`

**Additional context**
systrace has `frame.f_code.co_firstlineno` on the line with the `@foo` decorator.
When `f1` is async, `AstArcAnalyzer` finds an arc to the line containing `async def`:
```
Adding arc: (11, -9): "the return on line {lineno} wasn't executed", "didn't return from function 'f1'"
     _code_object__FunctionDef : /home/kb/repos/pysomeip/.tox/coverage/lib/python3.8/site-packages/coverage/parser.py:1155
                 add_body_arcs : /home/kb/repos/pysomeip/.tox/coverage/lib/python3.8/site-packages/coverage/parser.py:690
                      add_arcs : /home/kb/repos/pysomeip/.tox/coverage/lib/python3.8/site-packages/coverage/parser.py:653
                  _handle__Try : /home/kb/repos/pysomeip/.tox/coverage/lib/python3.8/site-packages/coverage/parser.py:1059
          process_return_exits : /home/kb/repos/pysomeip/.tox/coverage/lib/python3.8/site-packages/coverage/parser.py:843
                       add_arc : /home/kb/repos/pysomeip/.tox/coverage/lib/python3.8/site-packages/coverage/parser.py:563
```

If I make `f1` non-async, `AstArcAnalyzer` finds the line with the decorator:
```
Adding arc: (11, -8): "the return on line {lineno} wasn't executed", "didn't return from function 'f1'"
[same stack]
```

Changed files:
coverage/parser.py, tests/test_arcs.py

diff --git a/coverage/parser.py b/coverage/parser.py
index f0d378c6..70be0230 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -611,6 +611,8 @@ class AstArcAnalyzer(object):
 
     _line__FunctionDef = _line_decorated
 
+    _line__AsyncFunctionDef = _line_decorated
+
     def _line__List(self, node):
         if node.elts:
             return self.line_for_node(node.elts[0])
diff --git a/tests/test_arcs.py b/tests/test_arcs.py
index bf17f712..a02e9f7d 100644
--- a/tests/test_arcs.py
+++ b/tests/test_arcs.py
@@ -1557,6 +1557,23 @@ class AsyncTest(CoverageTest):
             arcz_missing=".2 23 3.",
         )
 
+    def test_async_decorator(self):
+        if env.PYBEHAVIOR.trace_decorated_def:
+            arcz = ".1 14 45 5.  .2 2.  -46 6-4"
+        else:
+            arcz = ".1 14 4.     .2 2.  -46 6-4"
+        self.check_coverage("""\\
+            def wrap(f):        # 1
+                return f
+
+            @wrap               # 4
+            async def go():
+                return
+            """,
+            arcz=arcz,
+            arcz_missing='-46 6-4',
+        )
+
 
 class ExcludeTest(CoverageTest):
     """Tests of exclusions to indicate known partial branches."""