On Thu, 27 Jun 2013, Jakub Jelinek wrote:

On Thu, Jun 27, 2013 at 05:24:45PM +0200, Marc Glisse wrote:
On Thu, 27 Jun 2013, Jason Merrill wrote:

On 06/27/2013 07:59 AM, Marc Glisse wrote:
I assume I can't call directly c_build_vec_perm_expr on the original
arguments without build_non_dependent_expr?

It looks like c_build_vec_perm_expr is safe to take the original
arguments, since it doesn't look deep into the expression.  So
either way is fine.

Cool, I'll go with the short version then (I tested it before posting):

+tree
+build_x_vec_perm_expr (location_t loc,
+                       tree arg0, tree arg1, tree arg2,
+                       tsubst_flags_t complain)
+{
+  if (processing_template_decl
+      && (type_dependent_expression_p (arg0)
+         || type_dependent_expression_p (arg1)
+         || type_dependent_expression_p (arg2)))
+    return build_min_nt_loc (loc, VEC_PERM_EXPR, arg0, arg1, arg2);
+  return c_build_vec_perm_expr (loc, arg0, arg1, arg2, complain & tf_error);
+}

But then you won't diagnose errors in never instantiated templates that
could be diagnosed (i.e. where the arguments aren't type dependent).

I don't really see why, as I am still calling c_build_vec_perm_expr in the same cases, just possibly not exactly with the same arguments (they don't go through build_non_dependent_expr, but Jason seemed to imply that it did not matter since we don't look too deep through the arguments).

I think the standard C++ FE way is doing something like:
[snip previous version that Jason accepted]

If you prefer the long version, I don't mind going back to it.

--
Marc Glisse

Reply via email to