From 8a902edbbdb53a00209e88b6182457941ff196a9 Mon Sep 17 00:00:00 2001
From: Marek Polacek <mpolacek@gcc.gnu.org>
Date: Thu, 29 Aug 2019 03:11:50 +0000
Subject: 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.

From-SVN: r275022
---
 gcc/doc/invoke.texi | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

(limited to 'gcc/doc')

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 1391a56..aa9886e 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -243,7 +243,7 @@ in the following sections.
 -Wno-non-template-friend  -Wold-style-cast @gol
 -Woverloaded-virtual  -Wno-pmf-conversions @gol
 -Wno-class-conversion  -Wno-terminate @gol
--Wsign-promo  -Wvirtual-inheritance}
+-Wsign-promo  -Wvirtual-inheritance  -Wvolatile}
 
 @item Objective-C and Objective-C++ Language Options
 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
@@ -3516,6 +3516,19 @@ result in a call to @code{terminate}.
 Disable the warning about the case when a conversion function converts an
 object to the same type, to a base class of that type, or to void; such
 a conversion function will never be called.
+
+@item -Wvolatile @r{(C++ and Objective-C++ only)}
+@opindex Wvolatile
+@opindex Wno-volatile
+Warn about deprecated uses of the volatile qualifier.  This includes postfix
+and prefix @code{++} and @code{--} expressions of volatile-qualified types,
+using simple assignments where the left operand is a volatile-qualified
+non-class type for their value, compound assignments where the left operand
+is a volatile-qualified non-class type, volatile-qualified function return
+type, volatile-qualified parameter type, and structured bindings of a
+volatile-qualified type.  This usage was deprecated in C++20.
+
+Enabled by default with @option{-std=c++2a}.
 @end table
 
 @node Objective-C and Objective-C++ Dialect Options
-- 
cgit v1.1