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): ...@@ -106,14 +106,14 @@ def check_negative_indices(*nodes):
Used to find (potential) bugs inside of "wraparound=False" sections. Used to find (potential) bugs inside of "wraparound=False" sections.
""" """
for node in nodes: 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 continue
if node.constant_result >= 0: if node.constant_result < 0:
continue warning(node.pos,
warning(node.pos, "the result of using negative indices inside of "
"the result of using negative indices inside of " "code sections marked as 'wraparound=False' is "
"code sections marked as 'wraparound=False' is " "undefined", level=1)
"undefined", level=1)
class ExprNode(Node): class ExprNode(Node):
......
...@@ -7,13 +7,18 @@ s = "abc" ...@@ -7,13 +7,18 @@ s = "abc"
l = [1, 2, 3] l = [1, 2, 3]
def normal_wraparound(int i, bytes B not None, list L not None): def normal_wraparound(int i, bytes B not None, list L not None):
a = s[:]
a = s[1:2] a = s[1:2]
a = s[-2:-1] a = s[-2:-1]
a = "abc"[-2:-1] a = "abc"[-2:-1]
a = "abc"[-2:i] a = "abc"[-2:i]
a = B[-2:-1] a = B[-2:-1]
a = B[:-1]
a = B[-2:]
b = l[1:2] b = l[1:2]
b = l[:2]
b = l[1:]
b = l[-2:-1] b = l[-2:-1]
b = [1, 2, 3][-2:-1] b = [1, 2, 3][-2:-1]
b = [1, 2, 3][-2:i] b = [1, 2, 3][-2:i]
...@@ -21,27 +26,35 @@ def normal_wraparound(int i, bytes B not None, list L not None): ...@@ -21,27 +26,35 @@ def normal_wraparound(int i, bytes B not None, list L not None):
@cython.wraparound(False) @cython.wraparound(False)
def no_wraparound(int i, bytes B not None, list L not None): def no_wraparound(int i, bytes B not None, list L not None):
a = s[:]
a = s[1:2] a = s[1:2]
a = s[-2:-1] a = s[-2:-1]
a = "abc"[-2:-1] a = "abc"[-2:-1] # evaluated at compile time
a = "abc"[-2:i] a = "abc"[-2:i]
a = B[:]
a = B[-2:-1] a = B[-2:-1]
a = B[:-1]
a = B[-2:]
b = l[1:2] b = l[1:2]
b = l[:2]
b = l[1:]
b = l[-2:-1] b = l[-2:-1]
b = [1, 2, 3][-2:i] b = [1, 2, 3][-2:i]
b = L[-2:-1] b = L[-2:-1]
_ERRORS = """ _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: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 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:15: 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 35: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 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