From d9421784980276b42ecdce85b6dde28e965c88c6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 6 Apr 2022 20:04:21 -0400 Subject: c++: vector compound literal [PR105187] My cleanup in r12-296 cleared TREE_HAS_CONSTRUCTOR on digested class initializers, but we leave it set for vectors, since we can't wrap them in TARGET_EXPR. PR c++/105187 gcc/cp/ChangeLog: * typeck2.cc (store_init_value): Allow TREE_HAS_CONSTRUCTOR for vectors. gcc/testsuite/ChangeLog: * gcc.c-torture/compile/20050113-1.c: Moved to... * c-c++-common/torture/20050113-1.c: ...here. --- gcc/cp/typeck2.cc | 1 + gcc/testsuite/c-c++-common/torture/20050113-1.c | 16 ++++++++++++++++ gcc/testsuite/gcc.c-torture/compile/20050113-1.c | 16 ---------------- 3 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/torture/20050113-1.c delete mode 100644 gcc/testsuite/gcc.c-torture/compile/20050113-1.c (limited to 'gcc') diff --git a/gcc/cp/typeck2.cc b/gcc/cp/typeck2.cc index cebe6ac..23ed81e 100644 --- a/gcc/cp/typeck2.cc +++ b/gcc/cp/typeck2.cc @@ -922,6 +922,7 @@ store_init_value (tree decl, tree init, vec** cleanups, int flags) here it should have been digested into an actual value for the type. */ gcc_checking_assert (TREE_CODE (value) != CONSTRUCTOR || processing_template_decl + || TREE_CODE (type) == VECTOR_TYPE || !TREE_HAS_CONSTRUCTOR (value)); /* If the initializer is not a constant, fill in DECL_INITIAL with diff --git a/gcc/testsuite/c-c++-common/torture/20050113-1.c b/gcc/testsuite/c-c++-common/torture/20050113-1.c new file mode 100644 index 0000000..6e36ed6 --- /dev/null +++ b/gcc/testsuite/c-c++-common/torture/20050113-1.c @@ -0,0 +1,16 @@ +/* PR c/17297 */ + +typedef float V2SF __attribute__ ((vector_size (8))); + +int test0 (V2SF, V2SF); + +int +main (void) +{ + V2SF a = (V2SF) {1.0f/0.0f - 1.0f/0.0f, 1.0f/0.0f - 1.0f/0.0f}; + V2SF b = (V2SF) {567.345, 1984.0}; + int i; + + i = test0 (a, b); + return i; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20050113-1.c b/gcc/testsuite/gcc.c-torture/compile/20050113-1.c deleted file mode 100644 index 6e36ed6..0000000 --- a/gcc/testsuite/gcc.c-torture/compile/20050113-1.c +++ /dev/null @@ -1,16 +0,0 @@ -/* PR c/17297 */ - -typedef float V2SF __attribute__ ((vector_size (8))); - -int test0 (V2SF, V2SF); - -int -main (void) -{ - V2SF a = (V2SF) {1.0f/0.0f - 1.0f/0.0f, 1.0f/0.0f - 1.0f/0.0f}; - V2SF b = (V2SF) {567.345, 1984.0}; - int i; - - i = test0 (a, b); - return i; -} -- cgit v1.1