diff options
author | Nick Clifton <nickc@redhat.com> | 2016-04-27 11:29:20 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2016-04-27 11:29:20 +0000 |
commit | 9ec5d66b5daec672f1194f1e15a31a7636915c87 (patch) | |
tree | c69639793f1984427b5b0b349f8a3377588e2da7 | |
parent | 2e885a6f7ce629d6517c2bf8dc14824be8e93987 (diff) | |
download | gcc-9ec5d66b5daec672f1194f1e15a31a7636915c87.zip gcc-9ec5d66b5daec672f1194f1e15a31a7636915c87.tar.gz gcc-9ec5d66b5daec672f1194f1e15a31a7636915c87.tar.bz2 |
re PR go/49889 (Calling a function whose name is obscured by a local variable does not produce an error)
PR middle-end/49889
gcc * varasm.c (merge_weak): Generate an error if an attempt is made
to convert a non-weak static function into a weak, public function.
testsuite * gcc.dg/pr49889.c: New test.
From-SVN: r235484
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr49899.c | 3 | ||||
-rw-r--r-- | gcc/varasm.c | 5 |
4 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a12ae4e..ed251d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-04-27 Nick Clifton <nickc@redhat.com> + + PR middle-end/49889 + * varasm.c (merge_weak): Generate an error if an attempt is made + to convert a non-weak static function into a weak, public function. + 2016-04-27 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> * params.def (MAX_PARTITION_SIZE): New param. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6fd6cfa..4752a4c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-27 Nick Clifton <nickc@redhat.com> + + PR middle-end/49889 + * gcc.dg/pr49889.c: New test. + 2016-04-27 Bernd Schmidt <bschmidt@redhat.com> * c-c++-common/memset-array.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr49899.c b/gcc/testsuite/gcc.dg/pr49899.c new file mode 100644 index 0000000..b5b3259 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr49899.c @@ -0,0 +1,3 @@ +static int foo (void) { return 0; } /* { dg-error "weak declaration of 'foo' being applied to a already existing, static definition" } */ +int foo (void) __attribute__((weak)); + diff --git a/gcc/varasm.c b/gcc/varasm.c index c7ed06e..4a7124e 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -5371,6 +5371,11 @@ merge_weak (tree newdecl, tree olddecl) gcc_assert (!TREE_USED (olddecl) || !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl))); + /* PR 49899: You cannot convert a static function into a weak, public function. */ + if (! TREE_PUBLIC (olddecl) && TREE_PUBLIC (newdecl)) + error ("weak declaration of %q+D being applied to a already " + "existing, static definition", newdecl); + if (TARGET_SUPPORTS_WEAK) { /* We put the NEWDECL on the weak_decls list at some point. |