diff --git a/loopy/compiled.py b/loopy/compiled.py
index 940dad1a40ac02fcc127f07791dc02e1ea2668cc..89bf3036f01a31e1161e82b1c42a96d784fb8b16 100644
--- a/loopy/compiled.py
+++ b/loopy/compiled.py
@@ -217,12 +217,17 @@ class CompiledKernel:
 
                 from pytools import all
                 assert all(s > 0 for s in numpy_strides)
-                alloc_size = sum(astrd*(alen-1)
-                        for alen, astrd in zip(shape, numpy_strides)) + 1
+                alloc_size = (sum(astrd*(alen-1)
+                        for alen, astrd in zip(shape, numpy_strides))
+                        + arg.dtype.itemsize)
+
+                if allocator is None:
+                    storage = cl.Buffer(queue.context, cl.mem_flags.READ_WRITE, alloc_size)
+                else:
+                    storage = allocator(alloc_size)
 
-                storage = cl_array.empty(queue, alloc_size, arg.dtype,
-                        allocator=allocator)
-                val = cl_array.as_strided(storage, shape, numpy_strides)
+                val = cl_array.Array(queue, shape, arg.dtype,
+                        strides=numpy_strides, data=storage, allocator=allocator)
             else:
                 assert _arg_matches_spec(arg, val, kwargs)
 
diff --git a/loopy/symbolic.py b/loopy/symbolic.py
index d11bf2cb14e01b42230baa9f44b4126000524433..a7571512a90de985e5a04086de0f5827e3809c68 100644
--- a/loopy/symbolic.py
+++ b/loopy/symbolic.py
@@ -144,6 +144,9 @@ class LinearSubscript(AlgebraicLeaf):
     def __getinitargs__(self):
         return self.aggregate, self.index
 
+    def stringifier(self):
+        return StringifyMapper
+
     mapper_method = intern("map_linear_subscript")
 
 # }}}