Hi Andre, Thanks for the review. I have partially responded to your comments - see below.
Committed as revision 241450. Cheers Paul On 23 October 2016 at 14:45, Andre Vehreschild <ve...@gmx.de> wrote: > Hi Paul, > > here are my comments to your patch: > >> Index: gcc/fortran/class.c >> =================================================================== >> *** gcc/fortran/class.c (revision 241439) >> --- gcc/fortran/class.c (working copy) >> *************** add_procs_to_declared_vtab (gfc_symbol * >> --- 2187,2219 ---- >> gfc_symbol * >> gfc_find_derived_vtab (gfc_symbol *derived) >> { >> ! gfc_namespace *ns = NULL; > > Setting this to NULL for consistency? Indeed - =NULL eliminated. It was needed in one incarnation of the patch. > >> Index: gcc/fortran/dump-parse-tree.c >> =================================================================== >> *** gcc/fortran/dump-parse-tree.c (revision 241439) >> --- gcc/fortran/dump-parse-tree.c (working copy) >> *************** show_code_node (int level, gfc_code *c) >> *** 1843,1848 **** >> --- 1843,1877 ---- > > Well, the code in this chunk is identical to the one of EXEC_SELECT, besides > two lines where the statement's name is printed. I propose to do something > like: > > case EXEC_SELECT: > case EXEC_SELECT_TYPE: > d= .. > fputs ("SELECT", dumpfile); > if (c->op == EXEC_SELECT_TYPE) > fputs (" TYPE", dumpfile); > ... > // and the same for "END SELECT..." > > This would reduce the amount of copied code. An improvement in one > EXEC_SELECT-dump-handler would then automagically available in the other, too. Have done this, except for the end, where I have retained "END SELECT" for both. > >> Index: gcc/fortran/resolve.c >> =================================================================== >> *** gcc/fortran/resolve.c (revision 241439) >> --- gcc/fortran/resolve.c (working copy) > <snipp> >> *************** resolve_select_type (gfc_code *code, gfc > <snipp> >> --- 8595,8641 ---- >> else >> ns->code->next = new_st; >> code = new_st; >> ! code->op = EXEC_SELECT_TYPE; >> >> + /* Use the intrinsic LOC function to generate the an integer expression >> + for the vtable of the selector. Note that the rank of the selector >> + expression has to be set to zero. */ > > double article: _the an_ !!! Corrected - thanks. > >> Index: gcc/fortran/trans-stmt.c >> =================================================================== >> *** gcc/fortran/trans-stmt.c (revision 241439) >> --- gcc/fortran/trans-stmt.c (working copy) >> *************** gfc_trans_do_while (gfc_code * code) >> *** 2331,2336 **** >> --- 2331,2455 ---- > <snipp> >> + >> + /* Translate an assignment to a CLASS object >> + (pointer or ordinary assignment). */ >> + >> + > > Here is no routine the above comment could document. Left over from prior > version? This is in your tree, not mine :-) > >> /* End of prototype trans-class.c */ > > >> Index: gcc/fortran/trans-stmt.c >> =================================================================== >> *** gcc/fortran/trans-stmt.c (revision 241439) >> --- gcc/fortran/trans-stmt.c (working copy) >> *************** gfc_trans_do_while (gfc_code * code) >> *** 2331,2336 **** >> --- 2331,2455 ---- > > Can one optimize this by using the "old style" for intrinsic types, i.e. a > computed goto (switch-case) for them? And in the default case the if-chain on > the derived types/classes? Would we gain any speed by this? What is your > opinion on this? Maybe this would gain something but I suspect that it would not amount to much. > >> Please find attached a revised version of the patch that corrects one >> or two tiny wrinkles. I have removed the tidy up of vtable retrieval > > I haven't understood yet, what you need to do for this. Looking forward to > that > patch. OK will submit this separately. > > With the above small changes the patch is ok for trunk given that Dominique > doesn't find any issues. > > Beware, that my big patch on polymorphic assignment will *not* be backported > to gcc-6. I.e., this version of your patch will most probably not be > applyable. > You rather will need to apply the old version. > > Thanks for the work. > > Regards, > Andre > >> Functionally, the patch is as described in the original submission. >> >> As attached, it bootstraps and regtests on FC21/x86_64. OK for trunk >> and, after a decent interval for 6-branch? >> >> Cheers >> >> Paul >> >> 2016-10-22 Paul Thomas <pa...@gcc.gnu.org> >> >> PR fortran/69834 >> * class.c (gfc_find_derived_vtab): Obtain the gsymbol for the >> derived type's module. If the gsymbol is present and the top >> level namespace corresponds to a module, use the gsymbol name >> space. In the search to see if the vtable exists, try the gsym >> namespace first. >> * dump-parse-tree (show_code_node): Add explicit dump for the >> select type construct. >> * resolve.c (build_loc_call): New function. >> (resolve_select_type): Add check for repeated type is cases. >> Retain selector expression and use it later instead of expr1. >> Exclude deferred length TYPE IS cases and emit error message. >> Store the address for the vtable in the 'low' expression and >> the hash value in the 'high' expression, for each case. Do not >> call resolve_select. >> * trans.c(trans_code) : Call gfc_trans_select_type. >> * trans-stmt.c (gfc_trans_select_type_cases): New function. >> (gfc_trans_select_type): New function. >> * trans-stmt.h : Add prototype for gfc_trans_select_type. >> >> 2016-10-22 Paul Thomas <pa...@gcc.gnu.org> >> >> PR fortran/69834 >> * gfortran.dg/select_type_1.f03: Change error for overlapping >> TYPE IS cases. >> * gfortran.dg/select_type_36.f03: New test. > > > -- > Andre Vehreschild * Email: vehre ad gmx dot de -- The difference between genius and stupidity is; genius has its limits. Albert Einstein