aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-06-24 17:48:14 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-06-24 17:48:14 -0400
commit6e085858a266dfeb0b335e8cd876872c633c2634 (patch)
treed9e9f14cb3947724e187a8e909256ad0ab693f18
parent65e009bb74ece005a46393a8dd54080275604aef (diff)
downloadgcc-6e085858a266dfeb0b335e8cd876872c633c2634.zip
gcc-6e085858a266dfeb0b335e8cd876872c633c2634.tar.gz
gcc-6e085858a266dfeb0b335e8cd876872c633c2634.tar.bz2
Fix get_target_expr for bit-field expressions.
* tree.c (get_target_expr_sfinae): Handle bit-fields. (build_target_expr): Call mark_rvalue_use. From-SVN: r237773
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/tree.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 78dd88f..a36cbff 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2016-06-24 Jason Merrill <jason@redhat.com>
+
+ * tree.c (get_target_expr_sfinae): Handle bit-fields.
+ (build_target_expr): Call mark_rvalue_use.
+
2016-06-24 Jakub Jelinek <jakub@redhat.com>
* call.c (magic_varargs_p): Return 3 for __builtin_*_overflow_p.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 6010f63..fa8db0a 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -377,6 +377,8 @@ build_target_expr (tree decl, tree value, tsubst_flags_t complain)
tree t;
tree type = TREE_TYPE (decl);
+ value = mark_rvalue_use (value);
+
gcc_checking_assert (VOID_TYPE_P (TREE_TYPE (value))
|| TREE_TYPE (decl) == TREE_TYPE (value)
/* On ARM ctors return 'this'. */
@@ -729,7 +731,10 @@ get_target_expr_sfinae (tree init, tsubst_flags_t complain)
else if (TREE_CODE (init) == VEC_INIT_EXPR)
return build_target_expr (VEC_INIT_EXPR_SLOT (init), init, complain);
else
- return build_target_expr_with_type (init, TREE_TYPE (init), complain);
+ {
+ init = convert_bitfield_to_declared_type (init);
+ return build_target_expr_with_type (init, TREE_TYPE (init), complain);
+ }
}
tree