diff --git a/loopy/target/opencl.py b/loopy/target/opencl.py
index 7ffd91309b9b82a86c17357abca9fe381a145e33..77ae6a9570b92faef6316dc545ee7d83020e68fa 100644
--- a/loopy/target/opencl.py
+++ b/loopy/target/opencl.py
@@ -276,7 +276,7 @@ def opencl_with_types(in_knl_callable, arg_id_to_dtype):
         dtype = arg_id_to_dtype[0]
         scalar_dtype, offset, field_name = dtype.numpy_dtype.fields["s0"]
         return in_knl_callable.copy(name_in_target=name,
-                arg_id_to_dtype={-1: scalar_dtype, 0: dtype, 1: dtype})
+                arg_id_to_dtype={-1: NumpyType(scalar_dtype), 0: dtype, 1: dtype})
 
     if name in _CL_SIMPLE_MULTI_ARG_FUNCTIONS:
         num_args = _CL_SIMPLE_MULTI_ARG_FUNCTIONS[name]
diff --git a/loopy/target/pyopencl.py b/loopy/target/pyopencl.py
index 4dace7ec2ade8648d736c8094a19b2e696e0c1e4..2952964442b5fd5b45f54b282deec9e1ac26b3fe 100644
--- a/loopy/target/pyopencl.py
+++ b/loopy/target/pyopencl.py
@@ -264,11 +264,12 @@ def pyopencl_with_types(in_knl_callable, arg_id_to_dtype):
                 "sinh", "cosh", "tanh",
                 "conj"]:
             return in_knl_callable.copy(name_in_target="%s_%s" % (tpname, name),
-                    arg_id_to_dtype={0: dtype, -1: dtype})
+                    arg_id_to_dtype={0: NumpyType(dtype), -1: NumpyType(dtype)})
 
         if name in ["real", "imag", "abs"]:
             return in_knl_callable.copy(name_in_target="%s_%s" % (tpname, name),
-                    arg_id_to_dtype={0: dtype, -1: dtype.numpy_dtype.type(0).real})
+                    arg_id_to_dtype={0: NumpyType(dtype), -1: NumpyType(
+                        dtype.numpy_dtype.type(0).real)})
 
     return None