From 671d3c0a6ba921f2a6cab749a632fe2f9cd514ee Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Fri, 7 Jun 2013 11:24:38 -0400
Subject: [PATCH] Be more strict about what kwargs are accepted in ArrayBase.

---
 loopy/kernel/array.py | 9 ++++++++-
 loopy/kernel/data.py  | 6 ++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py
index ad6bacee2..e12bf77d5 100644
--- a/loopy/kernel/array.py
+++ b/loopy/kernel/array.py
@@ -184,6 +184,7 @@ def convert_computed_to_fixed_dim_tags(name, num_user_axes, num_target_axes,
     #
     # - target axes are implementation facing. Normal in-memory arrays have one.
     #   3D images have three.
+    import loopy as lp
 
     # {{{ pick apart arg dim tags into computed, fixed and vec
 
@@ -248,7 +249,7 @@ def convert_computed_to_fixed_dim_tags(name, num_user_axes, num_target_axes,
                 new_dim_tags[i] = FixedStrideArrayDimTag(stride_so_far,
                         target_axis=dim_tag.target_axis)
 
-                if shape is None:
+                if shape is None or shape is lp.auto:
                     # unable to normalize without known shape
                     return None
 
@@ -316,6 +317,8 @@ class ArrayBase(Record):
     # Note that order may also wind up in attributes, if the
     # number of dimensions has not yet been determined.
 
+    allowed_extra_kwargs = []
+
     def __init__(self, name, dtype=None, shape=None, dim_tags=None, offset=0,
             strides=None, order=None, **kwargs):
         """
@@ -385,6 +388,10 @@ class ArrayBase(Record):
               whether the passed arrays have offsets or not.
         """
 
+        for kwarg_name in kwargs:
+            if kwarg_name not in self.allowed_extra_kwargs:
+                raise TypeError("invalid kwarg: %s" % kwarg_name)
+
         import loopy as lp
 
         if dtype is not None and dtype is not lp.auto:
diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py
index 60cba66f0..ee9b07bdb 100644
--- a/loopy/kernel/data.py
+++ b/loopy/kernel/data.py
@@ -236,6 +236,12 @@ class TemporaryVariable(ArrayBase):
     min_target_axes = 0
     max_target_axes = 1
 
+    allowed_extra_kwargs = [
+            "storage_shape",
+            "base_indices",
+            "is_local"
+            ]
+
     def __init__(self, name, dtype, shape, is_local,
             dim_tags=None, offset=0, strides=None, order=None,
             base_indices=None, storage_shape=None):
-- 
GitLab