https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61577
John David Anglin <danglin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-07-13 Component|target |middle-end Ever confirmed|0 |1 --- Comment #67 from John David Anglin <danglin at gcc dot gnu.org> --- It looks to me as if the pointer computed to load __SB_masks in islower is zero extended rather than pointer extended: (insn 66 73 74 3 (set (reg/f:DI 14 r14 [349]) (lo_sum:DI (mem/u/c:DI (reg/f:DI 14 r14 [349]) [0 S8 A64]) (symbol_ref:DI ("__SB_masks") [flags 0x44] <var_decl 7ee7f1b8 __SB_masks>))) "islower.c":9 111 {*load_symptr_low} (expr_list:REG_EQUAL (symbol_ref:DI ("__SB_masks") [flags 0x44] <var_decl 7ee7f1b8 __SB_masks>) (nil))) (insn 74 66 12 3 (unspec_volatile [ (const_int 3 [0x3]) ] UNSPECV_INSN_GROUP_BARRIER) "islower.c":9 364 {insn_group_barrier} (nil)) (insn 12 74 75 3 (set (reg/f:DI 14 r14 [orig:341 __SB_masks.2_2+-4 ] [341]) (zero_extend:DI (mem/f/c:SI (reg/f:DI 14 r14 [349]) [2 __SB_masks+0 S4 A32]))) "islower.c":9 137 {zero_extendsidi2} (nil)) In hpux.h, we have: /* A C expression whose value is zero if pointers that need to be extended from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and greater then zero if they are zero-extended and less then zero if the ptr_extend instruction should be used. */ #define POINTERS_EXTEND_UNSIGNED -1 So, I would say this is a middle-end bug, not a target bug. ia64-hpux is the only target where POINTERS_EXTEND_UNSIGNED is -1. It would help to bisect from working compiler to determine change that broke things.