On 01/09/2018 06:53 AM, David Malcolm wrote:
+    case NON_LVALUE_EXPR:
+    case VIEW_CONVERT_EXPR:
+       {
+         /* Handle location wrappers by substituting the wrapped node
+            first,*then*  reusing the resulting type.  Doing the type
+            first ensures that we handle template parameters and
+            parameter pack expansions.  */
+         gcc_assert (location_wrapper_p (t));
+         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
+         return build1 (code, TREE_TYPE (op0), op0);
+       }

Doesn't this lose the location information?

+      /* We should only see these for location wrapper nodes, or for
+        VIEW_CONVERT_EXPRs within instantiate_non_dependent_expr (when
+        args is NULL_TREE).  */
+      gcc_assert (location_wrapper_p (t)
+                 || (TREE_CODE (t) == VIEW_CONVERT_EXPR
+                     && args == NULL_TREE));

Let's just say "|| args == NULL_TREE", it might be possible to see a NON_LVALUE_EXPR in that context as well.

Jason

Reply via email to