https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100130
Bug ID: 100130 Summary: R section flag handling doesn't cope with intervening decls Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: rsandifo at gcc dot gnu.org Target Milestone: --- c-c++-common/attr-retain-7.c checks that we warn for: int __attribute__((used,retain,section(".data.foo"))) foo2 = 2; int __attribute__((section(".data.foo"))) foo1 = 1; It also makes sure that we output two .section directives, one with the R flag for foo2 and once without for foo1. But this is all keyed on whether we try to “switch” to the same section. It therefore doesn't work if there's an intervening decl, such as: int __attribute__((used,retain,section(".data.foo"))) foo2 = 2; int between = 1; int __attribute__((section(".data.foo"))) foo1 = 1; (-fno-toplevel-reorder should ensure this fails, but it fails for me without as well.) This also doesn't work for -fsection-anchors, which is what made me look at it originally. I guess that's a separate bug, but I think it affects how this PR should be fixed.