From 3693d46c9777b4e24b42467a80e47f32f727aa71 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 6 Apr 2005 18:17:38 +0100 Subject: [PATCH] c-decl.c (finish_decl): Apply pending #pragma weak regardless of scope. * c-decl.c (finish_decl): Apply pending #pragma weak regardless of scope. cp: * decl.c (start_decl): Apply pending #pragma weak regardless of scope. testsuite: * gcc.dg/weak/weak-12.c, g++.dg/ext/weak2.C: New tests. From-SVN: r97733 --- gcc/ChangeLog | 5 +++++ gcc/c-decl.c | 3 +-- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 3 +-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/ext/weak2.C | 17 +++++++++++++++++ gcc/testsuite/gcc.dg/weak/weak-12.c | 17 +++++++++++++++++ 7 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/weak2.C create mode 100644 gcc/testsuite/gcc.dg/weak/weak-12.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7482326151e..6d1882a583f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-04-06 Joseph S. Myers + + * c-decl.c (finish_decl): Apply pending #pragma weak regardless of + scope. + 2005-04-06 Kazu Hirata * cse.c, tree-flow-inline.h, tree-flow.h, tree-ssa-operands.c, diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 100f5a7ad46..d02d7429bad 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -3262,8 +3262,7 @@ finish_decl (tree decl, tree init, tree asmspec_tree) } /* If #pragma weak was used, mark the decl weak now. */ - if (current_scope == file_scope) - maybe_apply_pragma_weak (decl); + maybe_apply_pragma_weak (decl); /* If this is a variable definition, determine its ELF visibility. */ if (TREE_CODE (decl) == VAR_DECL diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 39e5a458e95..e0b452c6ae8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-06 Joseph S. Myers + + * decl.c (start_decl): Apply pending #pragma weak regardless of + scope. + 2005-04-06 Mark Mitchell PR c++/20212 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 9618b4d3c2c..acf8a85ada1 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3654,8 +3654,7 @@ start_decl (const cp_declarator *declarator, cplus_decl_attributes (&decl, attributes, 0); /* If #pragma weak was used, mark the decl weak now. */ - if (global_scope_p (current_binding_level)) - maybe_apply_pragma_weak (decl); + maybe_apply_pragma_weak (decl); if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5715b0ebead..962e7e0059d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-04-06 Joseph S. Myers + + * gcc.dg/weak/weak-12.c, g++.dg/ext/weak2.C: New tests. + 2005-04-06 Joseph S. Myers * gcc.dg/i386-387-7.c, gcc.dg/i386-3dnowA-1.c, diff --git a/gcc/testsuite/g++.dg/ext/weak2.C b/gcc/testsuite/g++.dg/ext/weak2.C new file mode 100644 index 00000000000..1bf2ddcb4d6 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/weak2.C @@ -0,0 +1,17 @@ +// Test for #pragma weak with declaration not at file scope. +// { dg-do compile } +// { dg-require-weak "" } +// { dg-options "" } + +// { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?_Z3foov" } } + +#pragma weak _Z3foov + +int +main (void) +{ + extern int foo (void); + if (&foo) + return foo (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/weak/weak-12.c b/gcc/testsuite/gcc.dg/weak/weak-12.c new file mode 100644 index 00000000000..72cc1445e4b --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-12.c @@ -0,0 +1,17 @@ +/* Test for #pragma weak with declaration not at file scope. */ +/* { dg-do compile } */ +/* { dg-require-weak "" } */ +/* { dg-options "" } */ + +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?foo" } } */ + +#pragma weak foo + +int +main (void) +{ + extern int foo (void); + if (&foo) + return foo (); + return 0; +} -- 2.30.2