https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64697
--- Comment #25 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Eric Botcazou <ebotca...@gcc.gnu.org>: https://gcc.gnu.org/g:021ad8e5cf9ab66e1a0a41dce3a54586facb86e0 commit r12-4036-g021ad8e5cf9ab66e1a0a41dce3a54586facb86e0 Author: Eric Botcazou <ebotca...@adacore.com> Date: Fri Oct 1 10:49:34 2021 +0200 Fix PR c++/64697 at -O1 or above The BFD fix eliminates the link failure and working code is generated at -O0, but _not_ when optimization is enabled because the optimizer changes: movq .refptr._ZTH1s(%rip), %rax testq %rax, %rax je .L2 call _ZTH1s into: leaq _ZTH1s(%rip), %rax testq %rax, %rax je .L2 call _ZTH1s and the leaq now also gets the relocation overflow. So the fix is to teach legitimate_pic_address_disp_p to reject the transformation when the symbol is an external weak function, which yields: cmpq $0, .refptr._ZTH1s(%rip) je .L2 call _ZTH1s and the cmpq keeps a relocation that does not overflow. gcc/ PR c++/64697 * config/i386/i386.c (legitimate_pic_address_disp_p): For PE-COFF do not return true for external weak function symbols in medium model.