The test case attached to http://gcc.gnu.org/ml/fortran/2010-01/msg00001.html fails on fortran-dev (svn rev.155786) with gfcbug96d.f90: In function ‘cg’: gfcbug96d.f90:77:0: internal compiler error: in gimplify_expr, at gimplify.c:7176 No problem on a slightly older trunk.
Confirmed. The ICE disappears if the patch in http://gcc.gnu.org/ml/fortran/2009-12/msg00232.html is reverted (see pr42353#c19 ).
link http://gcc.gnu.org/ml/fortran/2009-12/msg00232.html#c19
Oops! the right link is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42353#c19
Diff between the results of -fdump-tree-original with (good) and without (bad) the patch in http://gcc.gnu.org/ml/fortran/2009-12/msg00232.html reverted: [macbook] f90/bug% diff -up pr42680.f90.003t.original_good pr42680.f90.003t.original_bad --- pr42680.f90.003t.original_good 2010-01-10 15:32:25.000000000 +0100 +++ pr42680.f90.003t.original_bad 2010-01-10 15:33:03.000000000 +0100 @@ -11,7 +11,7 @@ cg (struct .class.gradient_class & restr { struct .class.inner_product_class ip_save; - ip_save = g_initial->$vptr->inquire_inner_product ((struct .class.gradient_class *) g_initial); + ip_save = VIEW_CONVERT_EXPR<struct .class.inner_product_class>(g_initial->$vptr->to_vector ((struct .class.gradient_class *) g_initial)); }
You cannot wrap a function call inside a view-convert expr - at least the gimplifier cannot deal with it by moving the view-convert to the LHS which might not be possible in all cases anyway.
This patch, reverting only the change to interface.c, appears to fix the problem. No other regressions in testsuite. Index: interface.c =================================================================== --- interface.c (revision 155799) +++ interface.c (working copy) @@ -369,8 +369,7 @@ if (derived1 != NULL && derived2 != NULL && strcmp (derived1->name, derived2->name) == 0 && derived1->module != NULL && derived2->module != NULL - && (strcmp (derived1->module, derived2->module) == 0 - || derived1->attr.vtype)) + && strcmp (derived1->module, derived2->module) == 0) return 1; /* Compare type via the rules of the standard. Both types must have
(In reply to comment #6) > This patch, reverting only the change to interface.c, appears to fix the > problem. No other regressions in testsuite. The patch reintroduces pr42353 for the test in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42353#c1 .
This is a duplicate and the patch in 42684 fixes it. *** This bug has been marked as a duplicate of 42684 ***
Same test case fails differently on dev then it did on trunk.
Subject: Bug 42680 Author: jvdelisle Date: Mon Jan 18 02:21:20 2010 New Revision: 155998 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=155998 Log: 2010-01-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/42680 * interface.c (check_interface1): Pass symbol name rather than NULL to gfc_compare_interfaces.(gfc_compare_interfaces): Add assert to trap MULL. (gfc_compare_derived_types): Revert previous change incorporated incorrectly during merge from trunk, r155778. * resolve.c (check_generic_tbp_ambiguity): Pass symbol name rather than NULL to gfc_compare_interfaces. * symbol.c (add_generic_specifics): Likewise. Modified: branches/fortran-dev/gcc/fortran/ChangeLog.fortran-dev branches/fortran-dev/gcc/fortran/interface.c branches/fortran-dev/gcc/fortran/resolve.c branches/fortran-dev/gcc/fortran/symbol.c
Subject: Bug 42680 Author: jvdelisle Date: Mon Jan 18 03:06:10 2010 New Revision: 156000 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=156000 Log: 2010-01-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/42680 * gfortran.dg/interface_32.f90: New test. Added: branches/fortran-dev/gcc/testsuite/gfortran.dg/interface_32.f90 Modified: branches/fortran-dev/gcc/testsuite/ChangeLog.fortran-dev
Closing as fixed. See related PR42353
Subject: Bug 42680 Author: pault Date: Thu Apr 29 19:10:48 2010 New Revision: 158910 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=158910 Log: 2010-04-29 Janus Weil <janus@gcc.gnu.org> PR fortran/43896 * symbol.c (add_proc_component,copy_vtab_proc_comps): Remove initializers for PPC members of the vtabs. 2010-04-29 Janus Weil <janus@gcc.gnu.org> PR fortran/42274 * symbol.c (add_proc_component,add_proc_comps): Correctly set the 'ppc' attribute for all PPC members of the vtypes. (copy_vtab_proc_comps): Copy the correct interface. * trans.h (gfc_trans_assign_vtab_procs): Modified prototype. * trans-expr.c (gfc_trans_assign_vtab_procs): Pass the derived type as a dummy argument and make sure all PPC members of the vtab are initialized correctly. (gfc_conv_derived_to_class,gfc_trans_class_assign): Additional argument in call to gfc_trans_assign_vtab_procs. * trans-stmt.c (gfc_trans_allocate): Ditto. 2010-04-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/43326 * resolve.c (resolve_typebound_function): Renamed resolve_class_compcall.Do all the detection of class references here. (resolve_typebound_subroutine): resolve_class_typebound_call renamed. Otherwise same as resolve_typebound_function. (gfc_resolve_expr): Call resolve_typebound_function. (resolve_code): Call resolve_typebound_subroutine. 2010-04-29 Janus Weil <janus@gcc.gnu.org> PR fortran/43492 * resolve.c (resolve_typebound_generic_call): For CLASS methods pass back the specific symtree name, rather than the target name. 2010-04-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/42353 * resolve.c (resolve_structure_cons): Make the initializer of the vtab component 'extends' the same type as the component. 2010-04-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/42680 * interface.c (check_interface1): Pass symbol name rather than NULL to gfc_compare_interfaces.(gfc_compare_interfaces): Add assert to trap MULL. (gfc_compare_derived_types): Revert previous change incorporated incorrectly during merge from trunk, r155778. * resolve.c (check_generic_tbp_ambiguity): Pass symbol name rather than NULL to gfc_compare_interfaces. * symbol.c (add_generic_specifics): Likewise. 2010-02-29 Janus Weil <janus@gcc.gnu.org> PR fortran/42353 * interface.c (gfc_compare_derived_types): Add condition for vtype. * symbol.c (gfc_find_derived_vtab): Sey access to private. (gfc_find_derived_vtab): Likewise. * module.c (ab_attribute): Add enumerator AB_VTAB. (mio_symbol_attribute): Use new attribute, AB_VTAB. (check_for_ambiguous): Likewise. 2010-04-29 Paul Thomas <pault@gcc.gnu.org> Janus Weil <janus@gcc.gnu.org> PR fortran/41829 * trans-expr.c (select_class_proc): Remove function. (conv_function_val): Delete reference to previous. (gfc_conv_derived_to_class): Add second argument to the call to gfc_find_derived_vtab. (gfc_conv_structure): Exclude proc_pointer components when accessing $data field of class objects. (gfc_trans_assign_vtab_procs): New function. (gfc_trans_class_assign): Add second argument to the call to gfc_find_derived_vtab. * symbol.c (gfc_build_class_symbol): Add delayed_vtab arg and implement holding off searching for the vptr derived type. (add_proc_component): New function. (add_proc_comps): New function. (add_procs_to_declared_vtab1): New function. (copy_vtab_proc_comps): New function. (add_procs_to_declared_vtab): New function. (void add_generic_specifics): New function. (add_generics_to_declared_vtab): New function. (gfc_find_derived_vtab): Add second argument to the call to gfc_find_derived_vtab. Add the calls to add_procs_to_declared_vtab and add_generics_to_declared_vtab. * decl.c (build_sym, build_struct): Use new arg in calls to gfc_build_class_symbol. * gfortran.h : Add vtype bitfield to symbol_attr. Remove the definition of struct gfc_class_esym_list. Modify prototypes of gfc_build_class_symbol and gfc_find_derived_vtab. * trans-stmt.c (gfc_trans_allocate): Add second argument to the call to gfc_find_derived_vtab. * module.c : Add the vtype attribute. * trans.h : Add prototype for gfc_trans_assign_vtab_procs. * resolve.c (resolve_typebound_generic_call): Add second arg to pass along the generic name for class methods. (resolve_typebound_call): The same. (resolve_compcall): Use the second arg to carry the generic name from the above. Remove the reference to class_esym. (check_members, check_class_members, resolve_class_esym, hash_value_expr): Remove functions. (resolve_class_compcall, resolve_class_typebound_call): Modify to use vtable rather than member by member calls. (gfc_resolve_expr): Modify second arg in call to resolve_compcall. (resolve_select_type): Add second arg in call to gfc_find_derived_vtab. (resolve_code): Add second arg in call resolve_typebound_call. (resolve_fl_derived): Exclude vtypes from check for late procedure definitions. Likewise for checking of explicit interface and checking of pass arg. * iresolve.c (gfc_resolve_extends_type_of): Add second arg in calls to gfc_find_derived_vtab. * match.c (select_type_set_tmp): Use new arg in call to gfc_build_class_symbol. * trans-decl.c (gfc_get_symbol_decl): Complete vtable if necessary. * parse.c (endType): Finish incomplete classes. 2010-04-29 Janus Weil <janus@gcc.gnu.org> PR fortran/42274 * gfortran.dg/class_16.f03: New test. 2010-04-29 Janus Weil <janus@gcc.gnu.org> PR fortran/42274 * gfortran.dg/class_15.f03: New. 2010-04-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/43326 * gfortran.dg/dynamic_dispatch_9.f03: New test. 2010-04-29 Janus Weil <janus@gcc.gnu.org> PR fortran/43492 * gfortran.dg/generic_22.f03 : New test. 2010-04-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/42353 * gfortran.dg/class_14.f03: New test. 2010-04-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/42680 * gfortran.dg/interface_32.f90: New test. 2009-04-29 Paul Thomas <pault@gcc.gnu.org> Janus Weil <janus@gcc.gnu.org> PR fortran/41829 * gfortran.dg/dynamic_dispatch_5.f03 : Change to "run". * gfortran.dg/dynamic_dispatch_7.f03 : New test. * gfortran.dg/dynamic_dispatch_8.f03 : New test. Added: trunk/gcc/testsuite/gfortran.dg/class_14.f03 trunk/gcc/testsuite/gfortran.dg/class_15.f03 trunk/gcc/testsuite/gfortran.dg/class_16.f03 trunk/gcc/testsuite/gfortran.dg/dynamic_dispatch_8.f03 trunk/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 trunk/gcc/testsuite/gfortran.dg/generic_22.f03 trunk/gcc/testsuite/gfortran.dg/interface_32.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/decl.c trunk/gcc/fortran/gfortran.h trunk/gcc/fortran/interface.c trunk/gcc/fortran/iresolve.c trunk/gcc/fortran/match.c trunk/gcc/fortran/module.c trunk/gcc/fortran/parse.c trunk/gcc/fortran/resolve.c trunk/gcc/fortran/symbol.c trunk/gcc/fortran/trans-decl.c trunk/gcc/fortran/trans-expr.c trunk/gcc/fortran/trans-stmt.c trunk/gcc/fortran/trans.h trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gfortran.dg/dynamic_dispatch_5.f03 trunk/gcc/testsuite/gfortran.dg/dynamic_dispatch_7.f03