diff options
author | Jason Merrill <jason@redhat.com> | 2014-01-29 08:40:49 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-01-29 08:40:49 -0500 |
commit | dc9e1b866ba338e7d1c52433e271cfd0d8d2c76f (patch) | |
tree | 2884b25b500be7055b093c87a0abe4b435b58015 | |
parent | 4ca56230c68d953102c411f6accfb42a7a61094e (diff) | |
download | gcc-dc9e1b866ba338e7d1c52433e271cfd0d8d2c76f.zip gcc-dc9e1b866ba338e7d1c52433e271cfd0d8d2c76f.tar.gz gcc-dc9e1b866ba338e7d1c52433e271cfd0d8d2c76f.tar.bz2 |
re PR c++/59315 (g++.dg/warn/Wunused-3.C FAILs with -fno-use-cxa-atexit)
PR c++/59315
* decl.c (cxx_maybe_build_cleanup): Call mark_used.
From-SVN: r207236
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wunused-3.C | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3ed0ef8..f2ff37a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2014-01-29 Jason Merrill <jason@redhat.com> + + PR c++/59315 + * decl.c (cxx_maybe_build_cleanup): Call mark_used. + 2014-01-29 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58702 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index e14e401..10f4e64 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -14353,6 +14353,13 @@ cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain) destructor call instead. */ if (cleanup != NULL && EXPR_P (cleanup)) SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION); + + if (cleanup + && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))) + /* Treat objects with destructors as used; the destructor may do + something substantive. */ + mark_used (decl); + return cleanup; } diff --git a/gcc/testsuite/g++.dg/warn/Wunused-3.C b/gcc/testsuite/g++.dg/warn/Wunused-3.C index 3100909..2d00dda 100644 --- a/gcc/testsuite/g++.dg/warn/Wunused-3.C +++ b/gcc/testsuite/g++.dg/warn/Wunused-3.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-Wunused -O" } +// { dg-options "-Wunused -O -fno-use-cxa-atexit" } void do_cleanups(); |