diff --git a/pyopencl/cache.py b/pyopencl/cache.py
index bf368d4a481c8188e2a1de4405eac935d1580699..0b2583690607e00d7e06bcfaa1a8750c57421e5d 100644
--- a/pyopencl/cache.py
+++ b/pyopencl/cache.py
@@ -387,10 +387,11 @@ def _create_built_program_from_source_cached(ctx, src, options, devices, cache_d
         prg_bins = prg.get_info(_cl.program_info.BINARIES)
         prg_logs = prg._get_build_logs()
 
-        for i, dest_index in enumerate(to_be_built_indices):
-            assert prg_devs[i] == devices[dest_index]
-            binaries[dest_index] = prg_bins[i]
-            _, logs[dest_index] = prg_logs[i]
+        for dest_index in to_be_built_indices:
+            dev = devices[dest_index]
+            src_index = prg_devs.index(dev)
+            binaries[dest_index] = prg_bins[src_index]
+            _, logs[dest_index] = prg_logs[src_index]
 
         if len(to_be_built_indices) == len(devices):
             # Important special case: if code for all devices was built,