mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-23 07:00:27 +08:00
c++: Mark __builtin_convertvector operand as read [PR93557]
In C++ we weren't calling mark_exp_read on the __builtin_convertvector first argument. I guess it could misbehave even with lambda implicit captures. Fixed by calling decay_conversion on the argument, we use the argument as rvalue so we want the standard lvalue to rvalue conversions, but as the argument must be a vector type, e.g. integral promotions aren't really needed. 2020-02-05 Jakub Jelinek <jakub@redhat.com> PR c++/93557 * semantics.c (cp_build_vec_convert): Call decay_conversion on arg prior to passing it to c_build_vec_convert. * c-c++-common/Wunused-var-17.c: New test.
This commit is contained in:
parent
d10cddeaad
commit
5a8ad97b6e
@ -1,3 +1,9 @@
|
||||
2020-02-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/93557
|
||||
* semantics.c (cp_build_vec_convert): Call decay_conversion on arg
|
||||
prior to passing it to c_build_vec_convert.
|
||||
|
||||
2020-02-05 Michael Meissner <meissner@linux.ibm.com>
|
||||
|
||||
PR target/93568
|
||||
|
@ -10389,7 +10389,8 @@ cp_build_vec_convert (tree arg, location_t loc, tree type,
|
||||
|
||||
tree ret = NULL_TREE;
|
||||
if (!type_dependent_expression_p (arg) && !dependent_type_p (type))
|
||||
ret = c_build_vec_convert (cp_expr_loc_or_input_loc (arg), arg,
|
||||
ret = c_build_vec_convert (cp_expr_loc_or_input_loc (arg),
|
||||
decay_conversion (arg, complain),
|
||||
loc, type, (complain & tf_error) != 0);
|
||||
|
||||
if (!processing_template_decl)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2020-02-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/93557
|
||||
* c-c++-common/Wunused-var-17.c: New test.
|
||||
|
||||
2020-02-05 Jeff Law <law@redhat.com>
|
||||
|
||||
* gcc.target/hppa/shadd-3.c: Disable delay slot filling and
|
||||
|
19
gcc/testsuite/c-c++-common/Wunused-var-17.c
Normal file
19
gcc/testsuite/c-c++-common/Wunused-var-17.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* PR c++/93557 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wunused-but-set-variable" } */
|
||||
|
||||
typedef int VI __attribute__((vector_size (sizeof (int) * 4)));
|
||||
typedef float VF __attribute__((vector_size (sizeof (float) * 4)));
|
||||
|
||||
void
|
||||
foo (VI *p, VF *q)
|
||||
{
|
||||
VI a = (VI) { 1, 2, 3, 4 }; /* { dg-bogus "set but not used" } */
|
||||
q[0] = __builtin_convertvector (a, VF);
|
||||
VI b = p[1]; /* { dg-bogus "set but not used" } */
|
||||
q[1] = __builtin_convertvector (b, VF);
|
||||
VF c = (VF) { 5.0f, 6.0f, 7.0f, 8.0f }; /* { dg-bogus "set but not used" } */
|
||||
p[2] = __builtin_convertvector (c, VI);
|
||||
VF d = q[3]; /* { dg-bogus "set but not used" } */
|
||||
p[3] = __builtin_convertvector (d, VI);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user