diff -r 4fee906b9e9e Lib/sre_parse.py --- a/Lib/sre_parse.py Mon Jul 06 19:58:11 2015 +0300 +++ b/Lib/sre_parse.py Tue Jul 07 12:36:59 2015 +0300 @@ -637,6 +637,10 @@ def _parse(source, state): if gid is None: msg = "unknown group name: {0!r}".format(name) raise error(msg) + if not state.checkgroup(gid): + import warnings + warnings.warn("symbolic reference to an open group", + RuntimeWarning) if state.lookbehind: import warnings warnings.warn('group references in lookbehind ' diff -r 4fee906b9e9e Lib/test/test_re.py --- a/Lib/test/test_re.py Mon Jul 06 19:58:11 2015 +0300 +++ b/Lib/test/test_re.py Tue Jul 07 12:36:59 2015 +0300 @@ -195,6 +195,7 @@ class ReTests(unittest.TestCase): re.compile('(?Px)(?P=a)(?(a)y)') re.compile('(?Px)(?P=a1)(?(a1)y)') self.assertRaises(re.error, re.compile, '(?P)(?P)') + self.assertWarns(RuntimeWarning, re.compile, '(?P(?P=a))') self.assertRaises(re.error, re.compile, '(?Px)') self.assertRaises(re.error, re.compile, '(?P=)') self.assertRaises(re.error, re.compile, '(?P=1)')