diff --git a/loopy/kernel.py b/loopy/kernel.py
index 5e2a060e64c7f2ea0f78d76b1aea697036b84168..4ac55c12a0160a0319322ea28d6adf731f8b3f7a 100644
--- a/loopy/kernel.py
+++ b/loopy/kernel.py
@@ -876,6 +876,12 @@ class LoopKernel(Record):
 
         # }}}
 
+        index_dtype = np.dtype(index_dtype)
+        if index_dtype.kind != 'i':
+            raise TypeError("index_dtype must be an integer")
+        if np.iinfo(index_dtype).min >= 0:
+            raise TypeError("index_dtype must be signed")
+
         Record.__init__(self,
                 device=device, domains=domains,
                 instructions=parsed_instructions,
@@ -897,7 +903,7 @@ class LoopKernel(Record):
                 applied_iname_rewrites=applied_iname_rewrites,
                 function_manglers=function_manglers,
                 symbol_manglers=symbol_manglers,
-                index_dtype=np.dtype(index_dtype))
+                index_dtype=index_dtype)
 
     # {{{ function mangling