https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120049
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |jvdelisle at gcc dot gnu.org Status|NEW |ASSIGNED --- Comment #21 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- I have been digging in on this further. The basic types are defined in libgfortran.h as shown here: typedef enum { BT_UNKNOWN = 0, BT_INTEGER, BT_LOGICAL, BT_REAL, BT_COMPLEX, BT_DERIVED, BT_CHARACTER, BT_CLASS, BT_PROCEDURE, BT_HOLLERITH, BT_VOID, BT_ASSUMED, BT_UNION, BT_BOZ, BT_UNSIGNED } bt; I have been checking for each one of these and building a test case. Obviously our original checks based on (ts.type != BT_DERIVED) is too broad and short circuiting based on the expr_type is too narrow. The simpler types BT_INTEGER, BT_LOGICAL, BT_REAL, BT_COMPLEX, BT_CHARACTER, BT_HOLLERITH, BT_BOZ, BT_UNSIGNED I think can be rejected The BT_CLASS, BT_PROCEDURE, BT_ASSUMED, BT_UNION seem to not make sense to me either. Steve, what do yo think about these last types. I can easily reject them as well. Look at my WIP patch now I am pretty sure I will be able to re-factor this code and I will work on this while waiting for further feedback on this.