On 2018-12-17 11:12 a.m., nick wrote:
>
>
> On 2018-12-17 10:23 a.m., Nathan Sidwell wrote:
>> On 12/17/18 10:11 AM, Jonathan Wakely wrote:
>>
>>> The second snippet is his suggested fix for the caller of tsubst_expr
>>> in expand_concept. That would have been a lot more helpful as a patch:
>>>
>>> --- a/gcc/cp/constraint.cc
>>> +++ b/gcc/cp/constraint.cc
>>> @@ -563,7 +563,7 @@ expand_concept (tree decl, tree args)
>>> ++processing_template_decl;
>>> tree result = tsubst_expr (def, args, tf_none, NULL_TREE, true);
>>> --processing_template_decl;
>>> - if (result == error_mark_node)
>>> + if (result == error_mark_node || t == NULL_TREE)
>>> return error_mark_node;
>>>
>>> /* And lastly, normalize it, check for implications, and save
>>>
>>> The point is that tsubst_expr can return NULL_TREE, we should check for it.
>>
>> Are there cases that tsubst_expr returns NULL when the incoming T is
>> non-null? I.e. I'm hypothesizing DEF is NULL already.
>>
>> nathan
>>
>
> Sorry about my miscommunication before it.
> As for Nathan's comment you could be right. But the bug reports
> two concept calls in gdb where only one crashes according to it.
> However I managed to track down the differences to this occurring with the
> seg fault caller:
> #45 0x00000000008f3dfa in (anonymous
> namespace)::satisfy_associated_constraints (args=0x7ffff70ca4a0,
> ci=0x7ffff70ca3c0) at ../../gcc/gcc/cp/cp-tree.h:1446
> versus without:
> #30 0x00000000008f55f2 in (anonymous namespace)::tsubst_compound_requirement
> (in_decl=0x0, complain=0, args=0x7ffff70bfde8, t=0x7ffff70bf528) at
> ../../gcc/gcc/tree.h:3658
>
> Don't know why this would cause issues:
> #define OMP_CLAUSE_PRIVATE_DEBUG(NODE) \
> (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE)->base.public_flag)
>
> in gcc/tree.h on line 1448. Any ideas?
>
> Nick
>
I tried working on it more today and it seems that this make be wrong it call.c:
for (ix = 1; args->iterate (ix, &arg); ++ix)
tempvec->quick_push (arg);
for add_candiates. I don't know why we aren't setting it like:
tempvec->quick_push((*arg[ix]));
If you would prefer I send a patch to show the proposed fix just let me known,
Nick