public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then @ 2010-05-20 13:54 boschmann at tp1 dot physik dot uni-siegen dot de 2010-05-20 19:15 ` [Bug fortran/44212] " janus at gcc dot gnu dot org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: boschmann at tp1 dot physik dot uni-siegen dot de @ 2010-05-20 13:54 UTC (permalink / raw) To: gcc-bugs module ice_module type :: B_type class(A_type),pointer :: A_comp ! A_type is not yet defined end type B_type type :: A_type contains procedure :: A_proc end type A_type contains subroutine A_proc(this) class(A_type),target,intent(inout) :: this end subroutine A_proc subroutine ice_proc(this) class(A_type) :: this call this%A_proc() end subroutine ice_proc end module ice_module f951: interner Compiler-Fehler: in gfc_add_component_ref, bei fortran/class.c:77 Sorry, the error is in german, but you will understand it :) -- Summary: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: boschmann at tp1 dot physik dot uni-siegen dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44212 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug fortran/44212] [OOP] ICE when defining a pointer component before defining the class and calling a TBP then 2010-05-20 13:54 [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then boschmann at tp1 dot physik dot uni-siegen dot de @ 2010-05-20 19:15 ` janus at gcc dot gnu dot org 2010-05-20 20:14 ` janus at gcc dot gnu dot org ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: janus at gcc dot gnu dot org @ 2010-05-20 19:15 UTC (permalink / raw) To: gcc-bugs ------- Comment #1 from janus at gcc dot gnu dot org 2010-05-20 19:15 ------- Confirmed. I think the code is valid. At least 'A_type' being defined after 'B_type' is not a problem, since the Fortran 2003 standard says: C438 (R440) If the POINTER attribute is not specified for a component, the declaration-type-spec in the component-def-stmt shall be CLASS(*) or shall specify an intrinsic type or a previously defined derived type. C439 (R440) If the POINTER attribute is specified for a component, the declaration-type-spec in the component-def-stmt shall be CLASS(*) or shall specify an intrinsic type or any accessible derived type including the type being defined. -- janus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords| |ice-on-valid-code Known to fail| |4.6.0 Last reconfirmed|0000-00-00 00:00:00 |2010-05-20 19:15:09 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44212 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug fortran/44212] [OOP] ICE when defining a pointer component before defining the class and calling a TBP then 2010-05-20 13:54 [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then boschmann at tp1 dot physik dot uni-siegen dot de 2010-05-20 19:15 ` [Bug fortran/44212] " janus at gcc dot gnu dot org @ 2010-05-20 20:14 ` janus at gcc dot gnu dot org 2010-05-21 6:22 ` dominiq at lps dot ens dot fr ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: janus at gcc dot gnu dot org @ 2010-05-20 20:14 UTC (permalink / raw) To: gcc-bugs ------- Comment #2 from janus at gcc dot gnu dot org 2010-05-20 20:14 ------- To fix this, one basically has to defer the generation of the vtype symbol to resolution stage, which is what the following patch does: Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 159561) +++ gcc/fortran/resolve.c (working copy) @@ -10589,6 +10589,22 @@ resolve_fl_derived (gfc_symbol *sym) int i; super_type = gfc_get_derived_super_type (sym); + + if (sym->attr.is_class && sym->ts.u.derived == NULL) + { + /* Fix up incomplete CLASS symbols. */ + gfc_component *data; + gfc_component *vptr; + gfc_symbol *vtab; + data = gfc_find_component (sym, "$data", true, true); + vptr = gfc_find_component (sym, "$vptr", true, true); + if (vptr->ts.u.derived == NULL) + { + vtab = gfc_find_derived_vtab (data->ts.u.derived, false); + gcc_assert (vtab); + vptr->ts.u.derived = vtab->ts.u.derived; + } + } /* F2008, C432. */ if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp) Index: gcc/fortran/parse.c =================================================================== --- gcc/fortran/parse.c (revision 159561) +++ gcc/fortran/parse.c (working copy) @@ -2110,22 +2110,6 @@ endType: || c->attr.access == ACCESS_PRIVATE || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.private_comp)) sym->attr.private_comp = 1; - - /* Fix up incomplete CLASS components. */ - if (c->ts.type == BT_CLASS) - { - gfc_component *data; - gfc_component *vptr; - gfc_symbol *vtab; - data = gfc_find_component (c->ts.u.derived, "$data", true, true); - vptr = gfc_find_component (c->ts.u.derived, "$vptr", true, true); - if (vptr->ts.u.derived == NULL) - { - vtab = gfc_find_derived_vtab (data->ts.u.derived, false); - gcc_assert (vtab); - vptr->ts.u.derived = vtab->ts.u.derived; - } - } } if (!seen_component) This patch fixes the test case, but has not been regtested yet. -- janus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |janus at gcc dot gnu dot org |dot org | Status|NEW |ASSIGNED Last reconfirmed|2010-05-20 19:15:09 |2010-05-20 20:14:13 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44212 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug fortran/44212] [OOP] ICE when defining a pointer component before defining the class and calling a TBP then 2010-05-20 13:54 [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then boschmann at tp1 dot physik dot uni-siegen dot de 2010-05-20 19:15 ` [Bug fortran/44212] " janus at gcc dot gnu dot org 2010-05-20 20:14 ` janus at gcc dot gnu dot org @ 2010-05-21 6:22 ` dominiq at lps dot ens dot fr 2010-05-22 19:01 ` janus at gcc dot gnu dot org 2010-05-22 19:31 ` janus at gcc dot gnu dot org 4 siblings, 0 replies; 6+ messages in thread From: dominiq at lps dot ens dot fr @ 2010-05-21 6:22 UTC (permalink / raw) To: gcc-bugs ------- Comment #3 from dominiq at lps dot ens dot fr 2010-05-21 06:21 ------- The patch in comment #2 fixes the ICE, but is probably the cause of FAIL: gfortran.dg/select_type_1.f03 -O (internal compiler error) FAIL: gfortran.dg/select_type_1.f03 -O (test for errors, line 63) FAIL: gfortran.dg/select_type_1.f03 -O (test for errors, line 65) FAIL: gfortran.dg/select_type_1.f03 -O (test for excess errors) The ICE is /opt/gcc/_clean/gcc/testsuite/gfortran.dg/select_type_1.f03:54.77: class default ! { dg-error "cannot be followed by a second DEFAULT CASE" } 1 /opt/gcc/_clean/gcc/testsuite/gfortran.dg/select_type_1.f03:56.77: class default ! { dg-error "cannot be followed by a second DEFAULT CASE" } 2 Error: The DEFAULT CASE at (1) cannot be followed by a second DEFAULT CASE at (2) f951: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. and the missing errors are /opt/gcc/_clean/gcc/testsuite/gfortran.dg/select_type_1.f03:63.11: type is (t2) ! { dg-error "overlaps with CASE label" } 1 /opt/gcc/_clean/gcc/testsuite/gfortran.dg/select_type_1.f03:65.11: type is (t2) ! { dg-error "overlaps with CASE label" } 2 Error: CASE label at (1) overlaps with CASE label at (2) Otherwise I did not noticed other side effects. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44212 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug fortran/44212] [OOP] ICE when defining a pointer component before defining the class and calling a TBP then 2010-05-20 13:54 [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then boschmann at tp1 dot physik dot uni-siegen dot de ` (2 preceding siblings ...) 2010-05-21 6:22 ` dominiq at lps dot ens dot fr @ 2010-05-22 19:01 ` janus at gcc dot gnu dot org 2010-05-22 19:31 ` janus at gcc dot gnu dot org 4 siblings, 0 replies; 6+ messages in thread From: janus at gcc dot gnu dot org @ 2010-05-22 19:01 UTC (permalink / raw) To: gcc-bugs ------- Comment #4 from janus at gcc dot gnu dot org 2010-05-22 19:01 ------- Subject: Bug 44212 Author: janus Date: Sat May 22 18:55:53 2010 New Revision: 159745 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=159745 Log: 2010-05-22 Janus Weil <janus@gcc.gnu.org> PR fortran/44212 * match.c (gfc_match_select_type): On error jump back out of the local namespace. * parse.c (parse_derived): Defer creation of vtab symbols to resolution stage, more precisely to ... * resolve.c (resolve_fl_derived): ... this place. 2010-05-22 Janus Weil <janus@gcc.gnu.org> PR fortran/44212 * gfortran.dg/class_22.f03: New. Added: trunk/gcc/testsuite/gfortran.dg/class_22.f03 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/match.c trunk/gcc/fortran/parse.c trunk/gcc/fortran/resolve.c trunk/gcc/testsuite/ChangeLog -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44212 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug fortran/44212] [OOP] ICE when defining a pointer component before defining the class and calling a TBP then 2010-05-20 13:54 [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then boschmann at tp1 dot physik dot uni-siegen dot de ` (3 preceding siblings ...) 2010-05-22 19:01 ` janus at gcc dot gnu dot org @ 2010-05-22 19:31 ` janus at gcc dot gnu dot org 4 siblings, 0 replies; 6+ messages in thread From: janus at gcc dot gnu dot org @ 2010-05-22 19:31 UTC (permalink / raw) To: gcc-bugs ------- Comment #5 from janus at gcc dot gnu dot org 2010-05-22 19:31 ------- Fixed with r159745. Closing. -- janus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution| |FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44212 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-05-22 19:31 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-05-20 13:54 [Bug fortran/44212] New: [OOP] ICE when defining a pointer component before defining the class and calling a TBP then boschmann at tp1 dot physik dot uni-siegen dot de 2010-05-20 19:15 ` [Bug fortran/44212] " janus at gcc dot gnu dot org 2010-05-20 20:14 ` janus at gcc dot gnu dot org 2010-05-21 6:22 ` dominiq at lps dot ens dot fr 2010-05-22 19:01 ` janus at gcc dot gnu dot org 2010-05-22 19:31 ` janus at gcc dot gnu dot org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).