[pypy-commit] pypy py3.6: hg merge default

arigo pypy.commits at gmail.com
Sat Aug 31 10:16:47 EDT 2019


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.6
Changeset: r97350:c0dcb6566060
Date: 2019-08-31 16:16 +0200
http://bitbucket.org/pypy/pypy/changeset/c0dcb6566060/

Log:	hg merge default

diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -566,11 +566,12 @@
         if not isinstance(w_check_class, Constant):
             raise FlowingError("Non-constant except guard.")
         check_class = w_check_class.value
-        if check_class in (NotImplementedError, AssertionError):
-            raise FlowingError(
-                "Catching %s is not valid in RPython" % check_class.__name__)
         if not isinstance(check_class, tuple):
             # the simple case
+            if issubclass(check_class, (NotImplementedError, AssertionError)):
+                raise FlowingError(
+                    "Catching %s is not valid in RPython" %
+                    check_class.__name__)
             return self.guessbool(op.issubtype(w_exc_type, w_check_class).eval(self))
         # special case for StackOverflow (see rlib/rstackovf.py)
         if check_class == rstackovf.StackOverflow:
diff --git a/rpython/flowspace/test/test_objspace.py b/rpython/flowspace/test/test_objspace.py
--- a/rpython/flowspace/test/test_objspace.py
+++ b/rpython/flowspace/test/test_objspace.py
@@ -1135,6 +1135,23 @@
                 pass
         py.test.raises(FlowingError, "self.codetest(f)")
 
+    def test_cannot_catch_special_exceptions_2(self):
+        class MyNIE(NotImplementedError):
+            pass
+        def f():
+            try:
+                f()
+            except MyNIE:
+                pass
+        py.test.raises(FlowingError, "self.codetest(f)")
+        #
+        def f():
+            try:
+                f()
+            except (ValueError, MyNIE):
+                pass
+        py.test.raises(FlowingError, "self.codetest(f)")
+
     def test_locals_dict(self):
         def f():
             x = 5
diff --git a/rpython/rlib/rawstorage.py b/rpython/rlib/rawstorage.py
--- a/rpython/rlib/rawstorage.py
+++ b/rpython/rlib/rawstorage.py
@@ -55,7 +55,7 @@
     misaligned_is_fine = False
 
 
-class AlignmentError(NotImplementedError):
+class AlignmentError(Exception):
     "Means that raw_storage_{get,set}item was used on unaligned memory"
 
 # Tweak?  It seems a reasonable value for any system out there: requiring


More information about the pypy-commit mailing list