diff --git a/loopy/compiled.py b/loopy/compiled.py
index 125d07d727cef80d24c89f463a89f7b17c8e05d2..c23e0b4f37d628310e0c3a5759a0848e2936e850 100644
--- a/loopy/compiled.py
+++ b/loopy/compiled.py
@@ -146,10 +146,12 @@ class CompiledKernel:
         outputs = []
         encountered_non_numpy = False
 
+        kwargs_copy = kwargs.copy()
+
         for arg in self.kernel.args:
             is_written = arg.name in self.kernel.get_written_variables()
 
-            val = kwargs.get(arg.name)
+            val = kwargs_copy.pop(arg.name, None)
             if val is None:
                 if not is_written:
                     raise TypeError("must supply input argument '%s'" % arg.name)
@@ -181,6 +183,9 @@ class CompiledKernel:
             else:
                 args.append(val)
 
+        assert not kwargs_copy, (
+                "extra arguments: "+", ".join(kwargs_copy.iterkeys()))
+
         evt = self.cl_kernel(queue,
                 self.global_size_func(**domain_parameters),
                 self.local_size_func(**domain_parameters),