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_commentand 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
