diff --git a/dead.py b/dead.py
index 5b3fdbc..a9f48c0 100644
--- a/dead.py
+++ b/dead.py
@@ -131,6 +131,7 @@ class Visitor(ast.NodeVisitor):
         with self.scope():
             if not self._is_stub_function(node):
                 for arg in (
+                        *getattr(node.args, 'posonlyargs', ()),
                         *node.args.args,
                         node.args.vararg,
                         *node.args.kwonlyargs,

diff --git a/tests/dead_test.py b/tests/dead_test.py
index 73aa8b2..9de3213 100644
--- a/tests/dead_test.py
+++ b/tests/dead_test.py
@@ -1,4 +1,5 @@
 import subprocess
+import sys
 
 import pytest
 
@@ -247,3 +248,16 @@ def test_ignored_arguments(git_dir):
     )
     subprocess.check_call(('git', 'add', '.'))
     assert not dead.main(())
+
+
+@pytest.mark.xfail(sys.version_info < (3, 8), reason='py38+')
+def test_unused_positional_only_argument(git_dir, capsys):  # pragma: no cover
+    git_dir.join('f.py').write(
+        'def f(unused, /):\n'
+        '    return 1\n'
+        'print(f)\n',
+    )
+    subprocess.check_call(('git', 'add', '.'))
+    assert dead.main(())
+    out, _ = capsys.readouterr()
+    assert out == 'unused is never read, defined in f.py:1\n'

Support posonlyargs
they are notably missing in [this code](https://github.com/asottile/dead/blob/8817aa412121e319fc45dd5e269b0d009e7c2c06/dead.py#L133-L140)
tests/dead_test.py::test_unused_positional_only_argument
tests/dead_test.py::test_dead_disable_regex_matching[# tests/dead_test.py::test_dead_disable_regex_matching[#dead:disable] tests/dead_test.py::test_dead_disable_regex_not_matching[# tests/dead_test.py::test_is_marked_as_used[x tests/dead_test.py::test_is_marked_as_used[def tests/dead_test.py::test_is_marked_as_used[async tests/dead_test.py::test_is_marked_as_used[class tests/dead_test.py::test_is_marked_as_used[from tests/dead_test.py::test_is_marked_as_used[import tests/dead_test.py::test_is_marked_as_used[MyStr tests/dead_test.py::test_deleted_file_dont_raise_error tests/dead_test.py::test_setup_py_entrypoints_mark_as_used tests/dead_test.py::test_setup_cfg_entry_points_marked_as_used tests/dead_test.py::test_setup_cfg_without_entry_points tests/dead_test.py::test_setup_cfg_without_attribute_entry_point tests/dead_test.py::test_never_referenced tests/dead_test.py::test_assignment_not_counted_as_reference tests/dead_test.py::test_only_referenced_in_tests tests/dead_test.py::test_unused_dead_disable_comment tests/dead_test.py::test_partially_disabled tests/dead_test.py::test_unused_argument tests/dead_test.py::test_unused_argument_in_scope tests/dead_test.py::test_using_an_argument tests/dead_test.py::test_ignore_unused_arguments_stubs tests/dead_test.py::test_ignored_arguments