Commit 6075a3c6 authored by Stefan Behnel's avatar Stefan Behnel

fix negative-index warning on empty slices

parent 47c41a3f
......@@ -106,14 +106,14 @@ def check_negative_indices(*nodes):
Used to find (potential) bugs inside of "wraparound=False" sections.
"""
for node in nodes:
if not isinstance(node.constant_result, (int, float, long)):
if (node is None
or not isinstance(node.constant_result, (int, float, long))):
continue
if node.constant_result >= 0:
continue
warning(node.pos,
"the result of using negative indices inside of "
"code sections marked as 'wraparound=False' is "
"undefined", level=1)
if node.constant_result < 0:
warning(node.pos,
"the result of using negative indices inside of "
"code sections marked as 'wraparound=False' is "
"undefined", level=1)
class ExprNode(Node):
......
......@@ -7,13 +7,18 @@ s = "abc"
l = [1, 2, 3]
def normal_wraparound(int i, bytes B not None, list L not None):
a = s[:]
a = s[1:2]
a = s[-2:-1]
a = "abc"[-2:-1]
a = "abc"[-2:i]
a = B[-2:-1]
a = B[:-1]
a = B[-2:]
b = l[1:2]
b = l[:2]
b = l[1:]
b = l[-2:-1]
b = [1, 2, 3][-2:-1]
b = [1, 2, 3][-2:i]
......@@ -21,27 +26,35 @@ def normal_wraparound(int i, bytes B not None, list L not None):
@cython.wraparound(False)
def no_wraparound(int i, bytes B not None, list L not None):
a = s[:]
a = s[1:2]
a = s[-2:-1]
a = "abc"[-2:-1]
a = "abc"[-2:-1] # evaluated at compile time
a = "abc"[-2:i]
a = B[:]
a = B[-2:-1]
a = B[:-1]
a = B[-2:]
b = l[1:2]
b = l[:2]
b = l[1:]
b = l[-2:-1]
b = [1, 2, 3][-2:i]
b = L[-2:-1]
_ERRORS = """
25:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
25:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
27:15: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
28:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
28:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
31:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
31:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
32:19: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
33:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
33:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
33:15: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
35:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
35:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
36:12: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
37:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
42:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
42:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
43:19: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
44:11: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
44:14: the result of using negative indices inside of code sections marked as 'wraparound=False' is undefined
"""
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment