https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70646
--- Comment #5 from Denis Vlasenko <vda.linux at googlemail dot com> --- Even smaller reproducer. Bug disappears if "__attribute__((always_inline))" is removed everywhere. typedef unsigned char u8; typedef unsigned int u32; typedef unsigned long long u64; static inline __attribute__((__const__)) u64 __fswab64(u64 val) { return __builtin_bswap64(val); } static inline __attribute__((always_inline)) u64 __swab64p(const u64 *p) { return (__builtin_constant_p((u64)(*p)) ? ((u64)( (((u64)(*p) & (u64)0x00000000000000ffULL) << 56) | (((u64)(*p) & (u64)0x000000000000ff00ULL) << 40) | (((u64)(*p) & (u64)0x0000000000ff0000ULL) << 24) | (((u64)(*p) & (u64)0x00000000ff000000ULL) << 8) | (((u64)(*p) & (u64)0x000000ff00000000ULL) >> 8) | (((u64)(*p) & (u64)0x0000ff0000000000ULL) >> 24) | (((u64)(*p) & (u64)0x00ff000000000000ULL) >> 40) | (((u64)(*p) & (u64)0xff00000000000000ULL) >> 56))) : __fswab64(*p)); } static inline __attribute__((always_inline)) u64 __be64_to_cpup(const u64 *p) { return __swab64p((u64 *)p); } static inline __attribute__((always_inline)) u64 get_unaligned_be64(const void *p) { return __be64_to_cpup((u64 *)p); } static inline u64 wwn_to_u64(u8 *wwn) { return get_unaligned_be64(wwn); } struct Scsi_Host { void *shost_data; unsigned long hostdata[0]; }; static inline void *shost_priv(struct Scsi_Host *shost) { return (void *)shost->hostdata; } typedef struct scsi_qla_host { u8 fabric_node_name[8]; u32 device_flags; } scsi_qla_host_t; struct fc_host_attrs { u64 fabric_name; }; static void qla2x00_get_host_fabric_name(struct Scsi_Host *shost) { scsi_qla_host_t *vha = shost_priv(shost); u8 node_name[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; u64 fabric_name = wwn_to_u64(node_name); if (vha->device_flags & 0x1) fabric_name = wwn_to_u64(vha->fabric_node_name); (((struct fc_host_attrs *)(shost)->shost_data)->fabric_name) = fabric_name; } void *get_host_fabric_name = qla2x00_get_host_fabric_name;