From 302a2cc5c6b2e6e6e1778146f691e67a5ccd0eea Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 29 Sep 2004 21:27:26 +0100 Subject: [PATCH] re PR c/7425 (deprecated attribute doesn't merge with multiple declarations) PR c/7425 * c-decl.c (merge_decls): Merge TREE_DEPRECATED. cp: * decl.c (duplicate_decls): Merge TREE_DEPRECATED. testsuite: * gcc.dg/deprecated-3.c, g++.dg/warn/deprecated-2.C: New tests. From-SVN: r88303 --- gcc/ChangeLog | 5 +++++ gcc/c-decl.c | 4 ++++ gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl.c | 4 ++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/deprecated-2.C | 11 +++++++++++ gcc/testsuite/gcc.dg/deprecated-3.c | 11 +++++++++++ 7 files changed, 44 insertions(+) create mode 100644 gcc/testsuite/g++.dg/warn/deprecated-2.C create mode 100644 gcc/testsuite/gcc.dg/deprecated-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ef37139c795..cf4671908c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-09-29 Joseph S. Myers + + PR c/7425 + * c-decl.c (merge_decls): Merge TREE_DEPRECATED. + 2004-09-29 Eric Christopher * fold-const.c (tree_swap_operands_p): Remove duplicated code. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 413787633dc..38a13fd201c 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -1586,6 +1586,10 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) make_var_volatile (newdecl); } + /* Merge deprecatedness. */ + if (TREE_DEPRECATED (newdecl)) + TREE_DEPRECATED (olddecl) = 1; + /* Keep source location of definition rather than declaration. */ if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0) DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl); diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4933e07af12..fa42fad9a43 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2004-09-29 Joseph S. Myers + + * decl.c (duplicate_decls): Merge TREE_DEPRECATED. + 2004-09-29 Jason Merrill PR tree-optimization/17697 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 3e394ab43e8..c27d041378b 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1722,6 +1722,10 @@ duplicate_decls (tree newdecl, tree olddecl) if (TREE_NOTHROW (newdecl)) TREE_NOTHROW (olddecl) = 1; + /* Merge deprecatedness. */ + if (TREE_DEPRECATED (newdecl)) + TREE_DEPRECATED (olddecl) = 1; + /* Merge the initialization information. */ if (DECL_INITIAL (newdecl) == NULL_TREE && DECL_INITIAL (olddecl) != NULL_TREE) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 05c6e3f4cbc..13e29d9a153 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-09-29 Joseph S. Myers + + PR c/7425 + * gcc.dg/deprecated-3.c, g++.dg/warn/deprecated-2.C: New tests. + 2004-09-29 Jakub Jelinek * gcc.c-torture/execute/stdarg-1.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/deprecated-2.C b/gcc/testsuite/g++.dg/warn/deprecated-2.C new file mode 100644 index 00000000000..afddc8f0bbd --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/deprecated-2.C @@ -0,0 +1,11 @@ +/* Test __attribute__((deprecated)). Test merging with multiple + declarations. Bug 7425 (C++ version). */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void func(void); +void func(void) __attribute__((deprecated)); + +void f(void) { + func(); /* { dg-warning "'func' is deprecated" } */ +} diff --git a/gcc/testsuite/gcc.dg/deprecated-3.c b/gcc/testsuite/gcc.dg/deprecated-3.c new file mode 100644 index 00000000000..2c35bb314e5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/deprecated-3.c @@ -0,0 +1,11 @@ +/* Test __attribute__((deprecated)). Test merging with multiple + declarations. Bug 7425. */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void func(void); +void func(void) __attribute__((deprecated)); + +void f(void) { + func(); /* { dg-warning "'func' is deprecated" } */ +} -- 2.30.2