https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91361
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Author: mpolacek Date: Thu Aug 29 03:11:50 2019 New Revision: 275022 URL: https://gcc.gnu.org/viewcvs?rev=275022&root=gcc&view=rev Log: Implement P1152R4: Deprecating some uses of volatile. PR c++/91361 * c-opts.c (c_common_post_options): Enable -Wvolatile by default for C++2a, unless -Wno-deprecated. * c.opt (Wvolatile): New warning. * cp-gimplify.c (cp_fold): Set TREE_THIS_VOLATILE. * decl.c (grokdeclarator): Warn about a volatile-qualified structured binding and return type. (grokparms): Warn about a volatile-qualified function parameter. * expr.c (mark_use) <case MODIFY_EXPR>: Emit a -Wvolatile warning. * typeck.c (cp_build_unary_op): Emit a -Wvolatile warning for pre and post ++/-- on a volatile operand. (genericize_compound_lvalue): Use a better location. Don't lose TREE_THIS_VOLATILE. (cp_build_modify_expr): Emit a -Wvolatile warning for a compound assignment whose LHS is volatile-qualified. Build the assignment with a more precise location. * doc/invoke.texi: Document -Wvolatile. * c-c++-common/Wbool-operation-1.c: Use -Wno-volatile in C++. * c-c++-common/gomp/atomic-1.c: Likewise. * c-c++-common/gomp/atomic-9.c: Likewise. * c-c++-common/gomp/depend-iterator-1.c: Likewise. * c-c++-common/gomp/loop-1.c: Adjust warning location for C++. * c-c++-common/gomp/order-3.c: Likewise. * c-c++-common/pr69733.c: Use -Wno-volatile in C++. * c-c++-common/spec-barrier-2.c: Likewise. * c-c++-common/tm/pr54893.c: Likewise. * g++.dg/cpp0x/pr65327.C: Add dg-warning. * g++.dg/cpp0x/rv-conv2.C: Likewise. * g++.dg/cpp0x/rv1n.C: Likewise. * g++.dg/cpp0x/rv1p.C: Likewise. * g++.dg/cpp0x/rv2n.C: Likewise. * g++.dg/cpp0x/rv2p.C: Likewise. * g++.dg/cpp0x/rv3n.C: Likewise. * g++.dg/cpp0x/rv3p.C: Likewise. * g++.dg/cpp0x/rv4n.C: Likewise. * g++.dg/cpp0x/rv4p.C: Likewise. * g++.dg/cpp0x/rv5n.C: Likewise. * g++.dg/cpp0x/rv5p.C: Likewise. * g++.dg/cpp0x/rv6n.C: Likewise. * g++.dg/cpp0x/rv6p.C: Likewise. * g++.dg/cpp0x/rv7n.C: Likewise. * g++.dg/cpp0x/rv7p.C: Likewise. * g++.dg/cpp0x/rv8p.C: Likewise. * g++.dg/cpp0x/trailing14.C: Use -Wno-volatile. * g++.dg/cpp1y/new1.C: Add dg-warning. * g++.dg/cpp2a/volatile1.C: New test. * g++.dg/cpp2a/volatile2.C: New test. * g++.dg/cpp2a/volatile3.C: New test. * g++.dg/cpp2a/volatile4.C: New test. * g++.dg/expr/bool3.C: Add dg-warning. * g++.dg/expr/bool4.C: Likewise. * g++.dg/expr/cond9.C: Likewise. * g++.dg/ext/vector25.C: Likewise. * g++.dg/gomp/depend-iterator-1.C: Use -Wno-volatile. * g++.dg/inherit/covariant21.C: Add dg-warning. * g++.dg/init/ref18.C: Likewise. * g++.dg/ipa/pr63838.C: Likewise. * g++.dg/overload/rvalue2.C: Likewise. * g++.dg/parse/semicolon4.C: Likewise. * g++.dg/warn/Wreturn-type-4.C: Likewise. * g++.dg/warn/pr36069.C: Likewise. * g++.old-deja/g++.mike/p9506.C: Likewise. * g++.old-deja/g++.other/volatile1.C: Likewise. Added: trunk/gcc/testsuite/g++.dg/cpp2a/volatile1.C trunk/gcc/testsuite/g++.dg/cpp2a/volatile2.C trunk/gcc/testsuite/g++.dg/cpp2a/volatile3.C trunk/gcc/testsuite/g++.dg/cpp2a/volatile4.C Modified: trunk/gcc/ChangeLog trunk/gcc/c-family/ChangeLog trunk/gcc/c-family/c-opts.c trunk/gcc/c-family/c.opt trunk/gcc/cp/ChangeLog trunk/gcc/cp/cp-gimplify.c trunk/gcc/cp/decl.c trunk/gcc/cp/expr.c trunk/gcc/cp/typeck.c trunk/gcc/doc/invoke.texi trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/c-c++-common/Wbool-operation-1.c trunk/gcc/testsuite/c-c++-common/gomp/atomic-1.c trunk/gcc/testsuite/c-c++-common/gomp/atomic-9.c trunk/gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c trunk/gcc/testsuite/c-c++-common/gomp/loop-1.c trunk/gcc/testsuite/c-c++-common/gomp/order-3.c trunk/gcc/testsuite/c-c++-common/pr69733.c trunk/gcc/testsuite/c-c++-common/spec-barrier-2.c trunk/gcc/testsuite/c-c++-common/tm/pr54893.c trunk/gcc/testsuite/g++.dg/cpp0x/pr65327.C trunk/gcc/testsuite/g++.dg/cpp0x/rv-conv2.C trunk/gcc/testsuite/g++.dg/cpp0x/rv1n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv1p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv2n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv2p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv3n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv3p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv4n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv4p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv5n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv5p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv6n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv6p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv7n.C trunk/gcc/testsuite/g++.dg/cpp0x/rv7p.C trunk/gcc/testsuite/g++.dg/cpp0x/rv8p.C trunk/gcc/testsuite/g++.dg/cpp0x/trailing14.C trunk/gcc/testsuite/g++.dg/cpp1y/new1.C trunk/gcc/testsuite/g++.dg/expr/bool3.C trunk/gcc/testsuite/g++.dg/expr/bool4.C trunk/gcc/testsuite/g++.dg/expr/cond9.C trunk/gcc/testsuite/g++.dg/ext/vector25.C trunk/gcc/testsuite/g++.dg/gomp/depend-iterator-1.C trunk/gcc/testsuite/g++.dg/inherit/covariant21.C trunk/gcc/testsuite/g++.dg/init/ref18.C trunk/gcc/testsuite/g++.dg/ipa/pr63838.C trunk/gcc/testsuite/g++.dg/overload/rvalue2.C trunk/gcc/testsuite/g++.dg/parse/semicolon4.C trunk/gcc/testsuite/g++.dg/warn/Wreturn-type-4.C trunk/gcc/testsuite/g++.dg/warn/pr36069.C trunk/gcc/testsuite/g++.old-deja/g++.mike/p9506.C trunk/gcc/testsuite/g++.old-deja/g++.other/volatile1.C