On 01/08/2018 12:14 PM, Jakub Jelinek wrote:
On Mon, Jan 08, 2018 at 12:10:50PM -0500, Nathan Sidwell wrote:
Both "_S_terminal" VAR_DECLs have a "_CharT" TEMPLATE_TYPE_PARM, but
these types are different tree nodes.
correct. they are not EQ but are EQUAL (same_type_p will be true).
So perhaps location_wrapper_p could use that instead of pointer comparison.
Though it would be expensive.
If TYPE_STRUCTURAL_COMPARISON_P (or however it's spelt) is true, it'll
be expensive. Otherwise it's a function call, a couple of indirections
and a pointer compare. But still more expensive than ...
Add a flag on the VIEW_CONVERT/NON_LVALUE expr explicitly noting its
wrapperness (rather than infer it from TREE_TYPE == TREE_TYPE
(TREE_OPERAND)). TREE_LANG_FLAG_0 looks available?
Yeah, I think most if not all lang flags are still available for those two
tree codes and checking that should be quite cheap.
... a bit test on the node itself.
location_wrapper_p could contain something like
bool result = TREE_LANG_FLAG_$FOO (t);
gcc_checking_assert (result == same_type_p (TREE_TYPE (t), TREE_TYPE
(TREE_OPERAND (t, 0)));
return result;
for the paranoid.
nathan
--
Nathan Sidwell