On 12/14/18 10:55 AM, nick wrote:
Greetings All,
I was attempting to fix this bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88395#add_comment

and managed to track it down to expand_concept in constraint.cc.

Seems that we are hitting this case in tsubst_expr for the NULL_TREE:
if (t == NULL_TREE || t == error_mark_node)
        return t
and we only check result for error_mark_node. Is error_mark_node
equal to a NULL_TREE or is it something else?

error_mark_node is a non-null pointer to a tree_node with ERROR_MARK as its tree code. (if you build with CXXFLAGS=-g3 you'll get macros available so gdb's 'p error_mark_node' will work)

If not than it seems
that we should change our check to:
if (result == error_mark_node || result == NULL_TREE)

and it seems that this is also not checked it the other callers so it
should be fixed.

Swapping the || arguments is not the fix -- it'll make no difference (in a well-formed program).

Let me known if I am missing something,

If the optimizers have removed the 't == NULL_TREE' check, that's because they've determined that 't' cannot be null at that point. Something earlier has convinced them otherwise -- usually a dereference will do that.

nathan
--
Nathan Sidwell

Reply via email to