[C++ Patch/RFC] PR 70572 ("[4.9/5/6/7 Regression] ICE on code with decltype (auto) on x86_64-linux-gnu in digest_init_r")

Jason Merrill jason@redhat.com
Wed May 18 21:13:00 GMT 2016


On 05/18/2016 11:48 AM, Paolo Carlini wrote:
> Hi,
>
> this issue should be easy to fix. Broken code like:
>
> void foo ()
> {
>   decltype (auto) a = foo;
> }
>
> triggers the gcc_assert in digest_init_r:
>
>   /* Come here only for aggregates: records, arrays, unions, complex
> numbers
>      and vectors.  */
>   gcc_assert (TREE_CODE (type) == ARRAY_TYPE
>           || VECTOR_TYPE_P (type)
>           || TREE_CODE (type) == RECORD_TYPE
>           || TREE_CODE (type) == UNION_TYPE
>           || TREE_CODE (type) == COMPLEX_TYPE);
>
> because of course TREE_CODE (type) == FUNCTION_TYPE, none of the above.
> I said should be easy to fix because in fact convert_for_initialization
> is perfectly able to handle these cases and emit proper diagnostic, if
> called. What shall we do then? The patchlet below passes testing but we
> could also relax the gcc_assert itself, include FUNCTION_TYPE
> with/without checking cxx_dialect >= cxx14. We could drop the latter
> check in my patchlet. Or something else entirely.
>
> Thanks!
> Paolo.
>
> ////////////////////////

Shouldn't we have complained about declaring a variable with function 
type before we get here?

Jason



More information about the Gcc-patches mailing list