My bad, I should have realized that would be a problem when I did the packed rs_block_sigs to save memory.
I'll try to fix it in the next week or so. What is the best practice for avoiding alignment problems like this? Would aligning it to sizeof(int) be good enough? Or should I align to sizeof(rs_weak_sum_t) be better (since that's the size of the first element of the rs_block_sig_t.
You can use __alignof__(rs_block_sig_t) to find out the minimum alignment requirements. That's non-standard (though both GCC and Clang implement it), and it's always safe to align to sizeof(largest_member). The structure alignment is always defined recursively as the maximum alignment over each of its members, so no, just looking at the first member isn't correct (though may happen to be if it also has the strictest alignment requirements).