aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-09-26 07:09:29 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-09-26 07:09:29 +0200
commite7b012c0443aa04b8b128e64fa1a5e193c8cc340 (patch)
treeb02577ee4e89f768c0114466de99d6a7f83a9969 /gcc
parent83d48fad1f3dc5d869fd3f567293ef12bf495392 (diff)
downloadgcc-e7b012c0443aa04b8b128e64fa1a5e193c8cc340.zip
gcc-e7b012c0443aa04b8b128e64fa1a5e193c8cc340.tar.gz
gcc-e7b012c0443aa04b8b128e64fa1a5e193c8cc340.tar.bz2
re PR c/37645 (ICE with weakref attribute)
PR c/37645 * c-common.c (handle_weakref_attribute): Ignore the attribute unless the decl is a VAR_DECL or FUNCTION_DECL. * gcc.dg/pr37645.c: New test. From-SVN: r140680
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/c-common.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr37645.c5
4 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 86d2c46..66031cc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,7 +1,12 @@
+2008-09-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37645
+ * c-common.c (handle_weakref_attribute): Ignore the attribute unless
+ the decl is a VAR_DECL or FUNCTION_DECL.
+
2008-09-25 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/37535
-
* ira-lives.c (mark_reg_live, mark_reg_dead): New functions.
(mark_ref_live, mark_ref_dead): Use them.
(def_conflicts_with_inputs_p): Remove.
@@ -14,7 +19,6 @@
2008-09-25 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/37448
-
* ira-int.h (IRA_ALLOCNO_TEMP): Rename to ALLOCNO_TEMP.
(ira_compress_allocno_live_ranges): New prototype.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 680b9b5..5d69211 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -6131,7 +6131,9 @@ handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
/* We must ignore the attribute when it is associated with
local-scoped decls, since attribute alias is ignored and many
such symbols do not even have a DECL_WEAK field. */
- if (decl_function_context (*node) || current_function_decl)
+ if (decl_function_context (*node)
+ || current_function_decl
+ || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
*no_add_attrs = true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7cf9972..959ab49 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-09-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37645
+ * gcc.dg/pr37645.c: New test.
+
2008-09-25 Steve Ellcey <sje@cup.hp.com>
* gcc.dg/vect/slp-7.c: Add alignment attribute, change target tests.
diff --git a/gcc/testsuite/gcc.dg/pr37645.c b/gcc/testsuite/gcc.dg/pr37645.c
new file mode 100644
index 0000000..ac1e5a9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr37645.c
@@ -0,0 +1,5 @@
+/* PR c/37645 */
+/* { dg-do compile } */
+
+typedef int T __attribute__((__weakref__ ("U"))); /* { dg-warning "attribute ignored" } */
+void foo (int i __attribute__((__weakref__ ("j")))); /* { dg-warning "attribute ignored" } */