aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/except.c
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2018-09-05 02:08:19 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2018-09-05 02:08:19 +0000
commit74be6f512e5feff269be76368b103b10b1d1c54d (patch)
tree743dd774da6b65c853fa72b24d1d8821eae145f3 /gcc/cp/except.c
parentfd64b29375be483365a4e9620d95e123e73c6fef (diff)
downloadgcc-74be6f512e5feff269be76368b103b10b1d1c54d.zip
gcc-74be6f512e5feff269be76368b103b10b1d1c54d.tar.gz
gcc-74be6f512e5feff269be76368b103b10b1d1c54d.tar.bz2
cp-tree.h (treat_lvalue_as_rvalue_p): Declare.
* cp-tree.h (treat_lvalue_as_rvalue_p): Declare. * except.c (build_throw): Use it. Use CP_TYPE_VOLATILE_P. * typeck.c (treat_lvalue_as_rvalue_p): No longer static. Add PARM_OK parameter. (maybe_warn_pessimizing_move): Adjust treat_lvalue_as_rvalue_p call. (check_return_expr): Likewise. From-SVN: r264101
Diffstat (limited to 'gcc/cp/except.c')
-rw-r--r--gcc/cp/except.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index f85ae04..2db90ee 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -676,12 +676,9 @@ build_throw (tree exp)
/* Under C++0x [12.8/16 class.copy], a thrown lvalue is sometimes
treated as an rvalue for the purposes of overload resolution
to favor move constructors over copy constructors. */
- if (/* Must be a local, automatic variable. */
- VAR_P (exp)
- && DECL_CONTEXT (exp) == current_function_decl
- && ! TREE_STATIC (exp)
+ if (treat_lvalue_as_rvalue_p (exp, /*parm_ok*/false)
/* The variable must not have the `volatile' qualifier. */
- && !(cp_type_quals (TREE_TYPE (exp)) & TYPE_QUAL_VOLATILE))
+ && !CP_TYPE_VOLATILE_P (TREE_TYPE (exp)))
{
tree moved = move (exp);
exp_vec = make_tree_vector_single (moved);