*PING* of my 11.03.21 18:15 CET patch.
The issue is that the TREE_TYPE of the fndecl does not match its arglist.
In some cases, the middle end looks at the function type – and then it
goes wrong.
The issue only occurs for -fcoarray=lib as other hidden arguments are
properly handled.
Solution: Add the missing args to the fndecl (in gfc_get_function_type)
– and increment hidden_typelist in build_function_decl – the latter is
used in a gcc_assert which was supposed to check for this mismatch ...
Tobias
On 14.03.21 12:04, Tobias Burnus wrote:
Early ping – and minor post script:
+ hidden_typelist = TREE_CHAIN (hidden_typelist);
This change is to avoid running into the ICE:
gcc_assert (hidden_typelist == NULL_TREE
|| TREE_VALUE (hidden_typelist) == void_type_node);
The purpose of this assert is to check that the TREE_TYPE (fndecl)
arg list and the one created by
create_function_arglist (gfc_symbol * sym)
are the same (at least in terms of the number of arguments). Namely:
typelist = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
...
hidden_typelist = typelist;
Tobias
On 11.03.21 18:15, Tobias Burnus wrote:
This fixes an ICE with OpenMP 'omp decare simd' but is a generic bug.
Namely TREE_TYPE(fndecl) has a mismatch to the arglist chain,
missing some hidden arguments with -fcoarray=lib.
OK for mainline and GCC 10?
Tobias
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung,
Frank Thürauf