diff options
author | mpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-08-25 20:28:59 +0000 |
---|---|---|
committer | mpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-08-25 20:28:59 +0000 |
commit | 9e6bcade584171839b8e1d11babd2c49fd1611cb (patch) | |
tree | 06eefc14c8475e442a71d5919bce7072a7d7e3b2 | |
parent | 39ba392ee7454657526c4e9d4adcb1c225b8ffed (diff) | |
download | gcc-9e6bcade584171839b8e1d11babd2c49fd1611cb.tar.gz |
PR middle-end/67330
* varasm.c (declare_weak): Return after giving an error.
* c-common.c (handle_weak_attribute): Don't check whether the
visibility can be changed here.
* gcc.dg/weak/weak-18.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227190 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/weak/weak-18.c | 9 | ||||
-rw-r--r-- | gcc/varasm.c | 5 |
6 files changed, 30 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c79fb4870f7..fd4ade37af3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-08-25 Marek Polacek <polacek@redhat.com> + + PR middle-end/67330 + * varasm.c (declare_weak): Return after giving an error. + 2015-08-25 David Malcolm <dmalcolm@redhat.com> * gcc-main.c (main): Add params to driver ctor. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 2a5758aac59..8b4009e85fd 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2015-08-25 Marek Polacek <polacek@redhat.com> + + PR middle-end/67330 + * c-common.c (handle_weak_attribute): Don't check whether the + visibility can be changed here. + 2015-08-22 Manuel López-Ibáñez <manu@gcc.gnu.org> * c-lex.c (c_lex_with_flags): Use explicit locations. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index ff502e56dbb..7691035c7f8 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -8328,12 +8328,7 @@ handle_weak_attribute (tree *node, tree name, return NULL_TREE; } else if (VAR_OR_FUNCTION_DECL_P (*node)) - { - struct symtab_node *n = symtab_node::get (*node); - if (n && n->refuse_visibility_changes) - error ("%+D declared weak after being used", *node); - declare_weak (*node); - } + declare_weak (*node); else warning (OPT_Wattributes, "%qE attribute ignored", name); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7deb14776ca..e8365be37f0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-08-25 Marek Polacek <polacek@redhat.com> + + PR middle-end/67330 + * gcc.dg/weak/weak-18.c: New test. + 2015-08-25 David Malcolm <dmalcolm@redhat.com> * jit.dg/test-error-pr63969-missing-driver.c: Add call to diff --git a/gcc/testsuite/gcc.dg/weak/weak-18.c b/gcc/testsuite/gcc.dg/weak/weak-18.c new file mode 100644 index 00000000000..ebeb4d5ba8a --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-18.c @@ -0,0 +1,9 @@ +/* PR middle-end/67330 */ +/* { dg-do compile } */ +/* { dg-require-weak "" } */ + +void +f (void) +{ + __attribute__ ((weak)) int a; /* { dg-error "weak declaration of .a. must be public" } */ +} diff --git a/gcc/varasm.c b/gcc/varasm.c index 7fa2e7be8e4..d9290a17cbb 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -5403,7 +5403,10 @@ declare_weak (tree decl) { gcc_assert (TREE_CODE (decl) != FUNCTION_DECL || !TREE_ASM_WRITTEN (decl)); if (! TREE_PUBLIC (decl)) - error ("weak declaration of %q+D must be public", decl); + { + error ("weak declaration of %q+D must be public", decl); + return; + } else if (!TARGET_SUPPORTS_WEAK) warning (0, "weak declaration of %q+D not supported", decl); |