https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92183
Bug ID: 92183 Summary: gcc tries to create a relocation in a mergeable section Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: rafael at espindo dot la Target Milestone: --- Given struct foo { const char *bar; const char *zed; }; void g(struct foo *r); void f() { struct foo t = {"bar", "zed"}; g(&t); } gcc -O3 produces .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "bar" .LC1: .string "zed" .... .section .rodata.cst8,"aM",@progbits,8 .align 8 .LC2: .quad .LC1 While it is not illegal to have a relocation in a mergeable section, I don't know of any linker that supports that, so gcc is being over aggressive.