diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-02-05 23:35:08 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-02-05 23:35:08 +0100 |
commit | 5a8ad97b6e4823d4ded00a3ce8d80e4bf93368d4 (patch) | |
tree | c38a33ff26fed72b473b3a6031fba7c67aa6767b /gcc/testsuite | |
parent | d10cddeaad2a315c114063b7c1ff11c6a356ab65 (diff) | |
download | gcc-5a8ad97b6e4823d4ded00a3ce8d80e4bf93368d4.zip gcc-5a8ad97b6e4823d4ded00a3ce8d80e4bf93368d4.tar.gz gcc-5a8ad97b6e4823d4ded00a3ce8d80e4bf93368d4.tar.bz2 |
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.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/Wunused-var-17.c | 19 |
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0a6513e..10021ad 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/c-c++-common/Wunused-var-17.c b/gcc/testsuite/c-c++-common/Wunused-var-17.c new file mode 100644 index 0000000..ab995f8 --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wunused-var-17.c @@ -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); +} |