From 020491e63b0eaf2141f3ea9f65184551e94ecbad Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 21 Jan 2016 15:26:21 -0500 Subject: [PATCH] re PR c++/65687 (Inconsistent behavior for __attribute__((__deprecated__)) between C and C++.) PR c++/65687 * decl.c (type_is_deprecated): Don't look into a typedef. From-SVN: r232703 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/decl.c | 10 +++++++--- gcc/testsuite/g++.dg/warn/deprecated-10.C | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/deprecated-10.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c592cbf4f72..af5c907713e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2016-01-21 Jason Merrill + PR c++/65687 + * decl.c (type_is_deprecated): Don't look into a typedef. + PR c++/40751 PR c++/64987 * decl.c (copy_type_enum): Respect TYPE_USER_ALIGN. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 020e9bd2510..f4604b61ee0 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -11595,9 +11595,13 @@ type_is_deprecated (tree type) enum tree_code code; if (TREE_DEPRECATED (type)) return type; - if (TYPE_NAME (type) - && TREE_DEPRECATED (TYPE_NAME (type))) - return type; + if (TYPE_NAME (type)) + { + if (TREE_DEPRECATED (TYPE_NAME (type))) + return type; + else + return NULL_TREE; + } /* Do warn about using typedefs to a deprecated class. */ if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type)) diff --git a/gcc/testsuite/g++.dg/warn/deprecated-10.C b/gcc/testsuite/g++.dg/warn/deprecated-10.C new file mode 100644 index 00000000000..55cdf3dd7f6 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/deprecated-10.C @@ -0,0 +1,14 @@ +// PR c++/65687 + +typedef struct old_visible_stuff *opaquePointer; + +struct old_visible_stuff { + int things_we_no_longer; + int wish_to_expose; +} __attribute__((__deprecated__("do not refer to this, the layout might change"))); + +typedef struct old_visible_stuff *another; // { dg-warning "deprecated" } + +opaquePointer runtime_function (opaquePointer someObject); + +opaquePointer bad_runtime_call (struct old_visible_stuff *otherObject); // { dg-warning "deprecated" } -- 2.30.2