diff --git a/islpy/__init__.py b/islpy/__init__.py
index 6d4e04f83d63b96ec307cfb3fb3cbbdfeba987a0..48ee155d601c8889da68487335bc78ac2f7bd74f 100644
--- a/islpy/__init__.py
+++ b/islpy/__init__.py
@@ -190,6 +190,7 @@ def _add_functionality():
                 # exception.  This is creates a semi-valid state that's just good
                 # enough to get us past the __del__ method.
                 self.data = None
+                raise
             else:
                 self._setup(new_me._release())
 
diff --git a/test/test_isl.py b/test/test_isl.py
index b5469c8c70d6ac27d35e01a10b6153c8b8b10518..28f023d3ca9c90a4260f8852ed501a57f62e2c20 100644
--- a/test/test_isl.py
+++ b/test/test_isl.py
@@ -292,6 +292,14 @@ def test_id_constructor():
     isl.Id(context=ctx, name='x0')
 
 
+def test_creation_error():
+    # note the (intentional) syntax error
+    with pytest.raises(isl.Error):
+        isl.BasicSet(
+                "[n0, n1] -> "
+                "{ [i0, i1, i2] : 0 <= i0 < n1  and 0 and 0 <= i2 <= 15 }")
+
+
 if __name__ == "__main__":
     import sys
     if len(sys.argv) > 1: