diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 9b11983dc43..907770675a9 100644 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -4965,7 +4965,7 @@ def analyse_types(self, env, getting=True): elif index.type.is_int or index.type.is_pyobject: if index.type.is_pyobject and not self.warned_untyped_idx: - performance_hint(index.pos, "Index should be typed for more efficient access") + performance_hint(index.pos, "Index should be typed for more efficient access", env) MemoryViewIndexNode.warned_untyped_idx = True self.is_memview_index = True diff --git a/tests/memoryview/memoryview.pyx b/tests/memoryview/memoryview.pyx index 9a954ad6f7f..c23b9dd791f 100644 --- a/tests/memoryview/memoryview.pyx +++ b/tests/memoryview/memoryview.pyx @@ -1,4 +1,5 @@ # mode: run +# tag: perf_hints # Test declarations, behaviour and coercions of the memoryview type itself. @@ -1298,3 +1299,21 @@ def test_assignment_typedef(): y = x for v in y: print(v) + +def test_untyped_index(i): + """ + >>> test_untyped_index(2) + 3 + >>> test_untyped_index(0) + 5 + >>> test_untyped_index(-1) + 0 + """ + cdef int[6] arr + arr = [5, 4, 3, 2, 1, 0] + cdef int[:] mview_arr = arr + return mview_arr[i] # should generate a performance hint + +_PERFORMANCE_HINTS = """ +1315:21: Index should be typed for more efficient access +"""