https://bugs.openldap.org/show_bug.cgi?id=9916

--- Comment #14 from jrt...@jrtc27.com ---
#define mp_lower        mp_pb.pb.pb_lower
#define mp_upper        mp_pb.pb.pb_upper
#define mp_pages        mp_pb.pb_pages
        union {
                struct {
                        indx_t          pb_lower;               /**< lower
bound of free space */
                        indx_t          pb_upper;               /**< upper
bound of free space */
                } pb;
                uint32_t        pb_pages;       /**< number of overflow pages
*/
        } mp_pb;

That alone means the struct must be uint32_t aligned otherwise you have UB. It
is perfectly legal therefore for GCC to optimise the two loads to a single
wider load. In fact, struct MDB_page even has a pointer in it inside mp_p so it
needs to be pointer-aligned, i.e. 64-bit-aligned, to not have UB.

-- 
You are receiving this mail because:
You are on the CC list for the issue.

Reply via email to