diff --git a/Lib/inspect.py b/Lib/inspect.py
index fefcddb..f0c1247 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -1530,9 +1530,6 @@
     if not callable(obj):
         raise TypeError('{!r} is not a callable object'.format(obj))
 
-    if _signature_is_builtin(obj):
-        return Signature.from_builtin(obj)
-
     if isinstance(obj, types.MethodType):
         # In this case we skip the first parameter of the underlying
         # function (usually `self` or `cls`).
@@ -1570,6 +1567,9 @@
 
         return sig.replace(parameters=new_params)
 
+    if _signature_is_builtin(obj):
+        return Signature.from_builtin(obj)
+
     if isinstance(obj, types.FunctionType):
         return Signature.from_function(obj)
 
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 2ef3ca2..4f19f29 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -1655,6 +1655,21 @@
             __call__ = type
         test_callable(ThisWorksNow())
 
+    @unittest.skipIf(MISSING_C_DOCSTRINGS,
+                     "Signature information for builtins requires docstrings")
+    def test_signature_on_decorated_builtins(self):
+        func = _testcapi.docstring_with_signature_with_defaults
+
+        def decorator(func):
+            @functools.wraps(func)
+            def wrapper(*args, **kwargs) -> int:
+                return func(*args, **kwargs)
+            return wrapper
+
+        decorated_func = decorator(func)
+
+        self.assertEqual(inspect.signature(func),
+                         inspect.signature(decorated_func))
 
     def test_signature_on_builtins_no_signature(self):
         with self.assertRaisesRegex(ValueError, 'no signature found for builtin'):
