diff --git a/loopy/expression.py b/loopy/expression.py
index a363013ea0549827438124150a1e4c0c2af94c64..40d1aab88326d9b0bb98d96b8cd006316d051688 100644
--- a/loopy/expression.py
+++ b/loopy/expression.py
@@ -51,7 +51,8 @@ def dtype_to_type_context(target, dtype):
     if isinstance(dtype, NumpyType) and dtype.dtype in [np.float32, np.complex64]:
         return 'f'
     if target.is_vector_dtype(dtype):
-        return dtype_to_type_context(target, dtype.fields["x"][0])
+        return dtype_to_type_context(
+                target, NumpyType(dtype.numpy_dtype.fields["x"][0]))
 
     return None
 
diff --git a/loopy/target/cuda.py b/loopy/target/cuda.py
index 2fa510b5f83887026697e032a8b463c5df8ed2d1..89d090b7af0d03b6005755c68027e27795378cc8 100644
--- a/loopy/target/cuda.py
+++ b/loopy/target/cuda.py
@@ -202,7 +202,8 @@ class CudaTarget(CTarget):
         return result
 
     def is_vector_dtype(self, dtype):
-        return dtype.numpy_dtype in list(vec.types.values())
+        return (isinstance(dtype, NumpyType)
+                and dtype.numpy_dtype in list(vec.types.values()))
 
     def vector_dtype(self, base, count):
         return NumpyType(vec.types[base.numpy_dtype, count])
diff --git a/loopy/target/opencl.py b/loopy/target/opencl.py
index db53b7cb29224f8620bcc6466b3f42da5a52107f..1d60f4c8fc7420f88c01825c81e4d3b4664cc7f9 100644
--- a/loopy/target/opencl.py
+++ b/loopy/target/opencl.py
@@ -243,7 +243,8 @@ class OpenCLTarget(CTarget):
         return result
 
     def is_vector_dtype(self, dtype):
-        return dtype.numpy_dtype in list(vec.types.values())
+        return (isinstance(dtype, NumpyType)
+                and dtype.numpy_dtype in list(vec.types.values()))
 
     def vector_dtype(self, base, count):
         return NumpyType(vec.types[base.numpy_dtype, count])
diff --git a/loopy/target/pyopencl.py b/loopy/target/pyopencl.py
index e14a1dd9d5d74bdabc30e8f70382738d4db4bbbe..e17f9515ad8528244ab585bb3826ae8a473c4b78 100644
--- a/loopy/target/pyopencl.py
+++ b/loopy/target/pyopencl.py
@@ -296,7 +296,8 @@ class PyOpenCLTarget(OpenCLTarget):
 
     def is_vector_dtype(self, dtype):
         from pyopencl.array import vec
-        return dtype in list(vec.types.values())
+        return (isinstance(dtype, NumpyType)
+                and dtype.numpy_dtype in list(vec.types.values()))
 
     def vector_dtype(self, base, count):
         from pyopencl.array import vec