PR c++/70501
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 12 Apr 2016 16:24:11 +0000 (16:24 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 12 Apr 2016 16:24:11 +0000 (16:24 +0000)
cp/
* constexpr.c (cxx_eval_bare_aggregate): Handle VECTOR_TYPE
similarly to PMF.

testsuite/
* g++.dg/init/pr70501.C: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234904 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/pr70501.C [new file with mode: 0644]

index d1f1851..ee830a2 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-12  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/70501
+       * constexpr.c (cxx_eval_bare_aggregate): Handle VECTOR_TYPE
+       similarly to PMF.
+
 2016-04-11  Jason Merrill  <jason@redhat.com>
 
        * mangle.c (decl_is_template_id): The template itself counts as a
index e6e2cf6..13f385b 100644 (file)
@@ -2394,10 +2394,10 @@ cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
   tree type = TREE_TYPE (t);
 
   constexpr_ctx new_ctx;
-  if (TYPE_PTRMEMFUNC_P (type))
+  if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
     {
-      /* We don't really need the ctx->ctor business for a PMF, but it's
-        simpler to use the same code.  */
+      /* We don't really need the ctx->ctor business for a PMF or
+        vector, but it's simpler to use the same code.  */
       new_ctx = *ctx;
       new_ctx.ctor = build_constructor (type, NULL);
       new_ctx.object = NULL_TREE;
index 64753aa..1c2b5a7 100644 (file)
@@ -1,3 +1,8 @@
+2016-04-12  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/70501
+       * g++.dg/init/pr70501.C: New.
+
 2016-04-12  David Wohlferd  <dw@LimeGreenSocks.com>
 
        * gcc.target/i386/asm-flag-6.c: New test.
diff --git a/gcc/testsuite/g++.dg/init/pr70501.C b/gcc/testsuite/g++.dg/init/pr70501.C
new file mode 100644 (file)
index 0000000..901b3c1
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-options "" } Not pedantic */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+struct S { v4si v; };
+
+void
+fn2 (int i, int j)
+{
+  struct S s = { .v = i <= j + (v4si){(1, 2)} };
+}