diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py
index 02fa08e1d7d6a2dd1a0ec5c6a4cf778d70f3ecb2..0b68de82e12dae3487d46c9b969705e50cc5ba88 100644
--- a/pyopencl/__init__.py
+++ b/pyopencl/__init__.py
@@ -1269,9 +1269,16 @@ def _add_functionality():
             }
 
     def to_string(cls, value, default_format=None):
+        names = []
         for name in dir(cls):
-            if (not name.startswith("_") and getattr(cls, name) == value):
-                return name
+            attr = getattr(cls, name)
+            if name.startswith('_') or type(attr) is not type(value):
+                continue
+            if attr == value or attr & value:
+                names.append(name)
+
+        if names:
+            return " ".join(names)
 
         if default_format is None:
             raise ValueError("a name for value %d was not found in %s"