diff --git a/loopy/codegen/expression.py b/loopy/codegen/expression.py
index fc28f1d7662a8db3914131550950f2a1a4f0b19d..46f8aa6eda33a95683efd9998f618721caf0aba4 100644
--- a/loopy/codegen/expression.py
+++ b/loopy/codegen/expression.py
@@ -168,15 +168,21 @@ class LoopyCCodeMapper(CCodeMapper):
             else:
                 # ArrayArg
                 index_expr = expr.index
-                if isinstance(expr.index, tuple):
+                if not isinstance(expr.index, tuple):
+                    index_expr = (index_expr,)
+
+                if arg.strides is not None:
                     ary_strides = arg.strides
-                    if ary_strides is None:
-                        raise RuntimeError("tuple-indexed variable '%s' does not "
-                                "have stride information" % expr.aggregate.name)
                 else:
                     ary_strides = (1,)
                     index_expr = (index_expr,)
 
+                if len(ary_strides) != len(index_expr):
+                    raise RuntimeError("subscript to '%s' in '%s' has the wrong "
+                            "number of indices (got: %d, expected: %d)" % (
+                                expr.aggregate.name, expr,
+                                len(index_expr), len(ary_strides)))
+
                 from pymbolic.primitives import Subscript
                 return CCodeMapper.map_subscript(self,
                         Subscript(expr.aggregate, arg.offset+sum(