diff --git a/tests/basics/subclass_native_exc_new.py b/tests/basics/subclass_native_exc_new.py
new file mode 100644
index 0000000000000000000000000000000000000000..c1bd89a6fa69b9330dff351ae1cbb80da35a9c04
--- /dev/null
+++ b/tests/basics/subclass_native_exc_new.py
@@ -0,0 +1,39 @@
+# test subclassing exceptions and providing __new__
+
+
+class Dummy(BaseException):
+    pass
+
+
+class GoodException(BaseException):
+    def __new__(cls, *args, **kwargs):
+        print("GoodException __new__")
+        return Dummy(*args, **kwargs)
+
+
+class BadException(BaseException):
+    def __new__(cls, *args, **kwargs):
+        print("BadException __new__")
+        return 1
+
+
+try:
+    raise GoodException("good message")
+except BaseException as good:
+    print(type(good), good.args[0])
+
+try:
+    raise BadException("bad message")
+except Exception as bad:
+    # Should be TypeError 'exceptions must derive from BaseException'
+    print(type(bad), bad.args[0])
+
+try:
+
+    def gen():
+        yield
+
+    gen().throw(BadException)
+except Exception as genbad:
+    # Should be TypeError 'exceptions must derive from BaseException'
+    print(type(genbad), genbad.args[0])
diff --git a/tests/basics/subclass_native_exc_new.py.exp b/tests/basics/subclass_native_exc_new.py.exp
new file mode 100644
index 0000000000000000000000000000000000000000..65709b2ccf26b27a2e86c353ce8d9e1f998a655b
--- /dev/null
+++ b/tests/basics/subclass_native_exc_new.py.exp
@@ -0,0 +1,6 @@
+GoodException __new__
+<class 'Dummy'> good message
+BadException __new__
+<class 'TypeError'> exceptions must derive from BaseException
+BadException __new__
+<class 'TypeError'> exceptions must derive from BaseException