                     // Save off the first partial product that this thread block will scatter
                     if (segment_idx == first_segment_idx)
                     {
-                        temp_storage.first_partial = partial;
+                        temp_storage.first_partial.partial = partial;
                     }
                 }
             }
 
-            // Barrier for smem reuse and coherence
+            // Barrier for smem reuse
             __syncthreads();
 
             block_diagonal += TILE_ITEMS;

        };

        // The first partial reduction scattered by this thread block
        SizeT first_partial;
    };

    //---------------------------------------------------------------------

    // Parameterized BlockScan type for reduce-value-by-segment scan
    typedef BlockScan<PartialReduction, BLOCK_THREADS, SCAN_ALGORITHM> BlockScan;

    // Shared memory type for this threadblock
    struct TempStorage
    {
