From: Trevor Saunders <[email protected]>
Hi,
In this pr we have a section attribute being applied to something in a comdat
group. Since its ok for things to be in a comdat group and have an implicit
section it seems it should also be fine to have a section from the attribute.
bootstrapped + regtested x86_64-unknown-linux-gnu, ok?
Trev
gcc/
* symtab.c (symtab_node::verify): Check for section attribute before
asserting something isn't in a section and a comdat group.
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 29839e6..0535670 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -1102,7 +1102,8 @@ symtab_node::verify_base (void)
error_found = true;
}
if (get_section () && get_comdat_group ()
- && !implicit_section)
+ && !implicit_section
+ && !lookup_attribute ("section", DECL_ATTRIBUTES (decl)))
{
error ("Both section and comdat group is set");
error_found = true;
diff --git a/gcc/testsuite/g++.dg/ipa/pr63621.C
b/gcc/testsuite/g++.dg/ipa/pr63621.C
new file mode 100644
index 0000000..c8262b8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr63621.C
@@ -0,0 +1,29 @@
+// { dg-do compile }
+ class A
+{
+ public:
+ int __attribute__((section("a"))) f1(bool);
+ int f2(void *);
+ int f3(bool);
+};
+
+inline int A::f1(bool b)
+{
+ static int c;
+ if (c)
+ ;
+ return 0;
+}
+
+inline int A::f3(bool b)
+{
+ static __attribute__((section(""))) int c;
+ if (c)
+ ;
+ return 0;
+}
+
+int A::f2(void *c)
+{
+ return f1(c) + f3(c);
+}
--
2.1.3