diff mbox

[C++] Handle #pragma GCC ivdep during tsubst (PR c++/60267)

Message ID 20140219152812.GY22862@tucnak.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek Feb. 19, 2014, 3:28 p.m. UTC
Hi!

This patch fixes ICE on #pragma GCC ivdep used in templates.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2014-02-19  Jakub Jelinek  <jakub@redhat.com>

	PR c++/60267
	* pt.c (tsubst_expr): Handle ANNOTATE_EXPR.

	* g++.dg/ext/ivdep-1.C: New test.


	Jakub

Comments

Jason Merrill Feb. 19, 2014, 6:02 p.m. UTC | #1
OK.

Jason
diff mbox

Patch

--- gcc/cp/pt.c.jj	2014-02-18 08:18:51.000000000 +0100
+++ gcc/cp/pt.c	2014-02-19 10:30:24.201080070 +0100
@@ -13806,6 +13806,11 @@  tsubst_expr (tree t, tree args, tsubst_f
 				    RECUR (TREE_OPERAND (t, 1)),
 				    complain));
 
+    case ANNOTATE_EXPR:
+      tmp = RECUR (TREE_OPERAND (t, 0));
+      RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
+			  TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
+
     default:
       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
 
--- gcc/testsuite/g++.dg/ext/ivdep-1.C.jj	2014-02-19 10:31:41.867639731 +0100
+++ gcc/testsuite/g++.dg/ext/ivdep-1.C	2014-02-19 10:30:59.000000000 +0100
@@ -0,0 +1,18 @@ 
+// PR c++/60267
+// { dg-do compile }
+// { dg-options "-O3" }
+
+template <int N>
+void
+foo (int *a, int *b, int *c)
+{
+#pragma GCC ivdep
+  for (int i = 0; i < N; i++)
+    a[i] = b[i] * c[i];
+}
+
+void
+bar (int *a, int *b, int *c)
+{
+  foo <64> (a, b, c);
+}