aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTrevor Saunders <tsaunders@mozilla.com>2014-12-08 00:35:33 +0000
committerTrevor Saunders <tbsaunde@gcc.gnu.org>2014-12-08 00:35:33 +0000
commitb0122457bc82d5ae39a9b32655713dd279224ed4 (patch)
tree6fde94058fb755b85e710ae0f24c5c311127ea97 /gcc
parent35efb9ac399c35b12a330aedea8933fdb55f8a61 (diff)
downloadgcc-b0122457bc82d5ae39a9b32655713dd279224ed4.zip
gcc-b0122457bc82d5ae39a9b32655713dd279224ed4.tar.gz
gcc-b0122457bc82d5ae39a9b32655713dd279224ed4.tar.bz2
don't ICE when section attribute is used on things in comdats
gcc/ PR ipa/63621 * symtab.c (symtab_node::verify): Check for section attribute before asserting something isn't in a section and a comdat group. From-SVN: r218476
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/symtab.c3
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr63621.C29
3 files changed, 36 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fa95beb..760f5fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-07 Trevor Saunders <tsaunders@mozilla.com>
+
+ * symtab.c (symtab_node::verify): Check for section attribute before
+ asserting something isn't in a section and a comdat group.
+
2014-12-07 Oleg Endo <olegendo@gcc.gnu.org>
PR target/50751
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 3eceb88..101bc25 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);
+}