PR c++/70584 - error with parenthesized builtin arg
authorJason Merrill <jason@redhat.com>
Mon, 23 May 2016 21:21:24 +0000 (17:21 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 23 May 2016 21:21:24 +0000 (17:21 -0400)
* cp-gimplify.c (cp_fold) [INDIRECT_REF]: Call
maybe_undo_parenthesized_ref.

From-SVN: r236616

gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c
gcc/testsuite/g++.dg/other/i386-10.C [new file with mode: 0644]

index 232acc6772b6f1646e48b632eef1ea688863daf9..a93439cc7dc3dd3263876f92dee4a4b982196e4e 100644 (file)
@@ -1,5 +1,9 @@
 2016-05-23  Jason Merrill  <jason@redhat.com>
 
+       PR c++/70584
+       * cp-gimplify.c (cp_fold) [INDIRECT_REF]: Call
+       maybe_undo_parenthesized_ref.
+
        PR c++/70735
        * pt.c (tsubst_copy): Just return a local variable from
        non-template context.  Don't call rest_of_decl_compilation for
index de04bcbb190095f3f22ae3f489fe200ce1d70bf6..eeba26829b71eaead00b91431e34d8a5d78dbffb 100644 (file)
@@ -1996,6 +1996,15 @@ cp_fold (tree x)
 
       break;
 
+    case INDIRECT_REF:
+      /* We don't need the decltype(auto) obfuscation anymore.  */
+      if (REF_PARENTHESIZED_P (x))
+       {
+         tree p = maybe_undo_parenthesized_ref (x);
+         return cp_fold_maybe_rvalue (p, rval_ops);
+       }
+      goto unary;
+
     case ADDR_EXPR:
     case REALPART_EXPR:
     case IMAGPART_EXPR:
@@ -2008,7 +2017,7 @@ cp_fold (tree x)
     case BIT_NOT_EXPR:
     case TRUTH_NOT_EXPR:
     case FIXED_CONVERT_EXPR:
-    case INDIRECT_REF:
+    unary:
 
       loc = EXPR_LOCATION (x);
       op0 = cp_fold_maybe_rvalue (TREE_OPERAND (x, 0), rval_ops);
diff --git a/gcc/testsuite/g++.dg/other/i386-10.C b/gcc/testsuite/g++.dg/other/i386-10.C
new file mode 100644 (file)
index 0000000..96def72
--- /dev/null
@@ -0,0 +1,12 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-options -maes }
+
+typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
+
+int main()
+{
+    const char index = 1;
+    __m128i r = { };
+
+    r = __builtin_ia32_aeskeygenassist128 (r, (int)(index));
+}