On 01/09/2018 01:35 PM, David Malcolm wrote:
On Tue, 2018-01-09 at 15:39 +0100, Jakub Jelinek wrote:
On Tue, Jan 09, 2018 at 09:36:58AM -0500, Jason Merrill wrote:
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?
And the public_flag...
Jakub
Ooops, yes. Thanks. I'm not convinced we always retain location
information in the tsubst_* calls: although we override input_location
within them, I see lots of pre-existing "build1" calls (as opposed to
"build1_loc"), which as I understand it set any EXPR_LOCATION to be
UNKNOWN_LOCATION. On the other hand, even if I'm correct, that feels
like a pre-existing issue and orthogonal to this patch kit.
Here's an updated version of the patch which uses maybe_wrap_with_location
in tsubst_copy and tsubst_copy_and_build when copying the wrappers
(thus setting the flag, but hiding it as an implementation detail
within maybe_wrap_with_location).
I also updated the assertion as per Jason's other comment
(re NON_LVALUE_EXPR when args is NULL_TREE).
Successfully bootstrapped®rtested on x86_64-pc-linux-gnu, as
part of the kit.
Also, manually tested with "make s-selftest-c++" (since we don't run
the selftests for cc1plus by default).
OK for trunk in conjunction with the rest of the kit?
OK.
Jason