From: pault Date: Mon, 12 Feb 2007 23:39:51 +0000 (+0000) Subject: 2007-02-13 Paul Thomas X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6321eb6cec78b9c2b185a97afd1fc64c5b92a70a;p=thirdparty%2Fgcc.git 2007-02-13 Paul Thomas PR fortran/30554 * module.c (read_module): Set pointer_info to referenced if the symbol has no namespace. 2007-02-12 Paul Thomas PR fortran/30554 * gfortran.dg/used_dummy_types_7.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121865 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 86a56529ba80..34a470d6c128 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-02-13 Paul Thomas + + PR fortran/30554 + * module.c (read_module): Set pointer_info to referenced if the + symbol has no namespace. + 2007-02-12 Nick Clifton * lang.opt: Add Warning attribute to warning options. diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 1dd81e389b4f..efb27e33fd34 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3339,7 +3339,7 @@ read_module (void) char name[GFC_MAX_SYMBOL_LEN + 1]; gfc_intrinsic_op i; int ambiguous, j, nuse, symbol; - pointer_info *info; + pointer_info *info, *q; gfc_use_rename *u; gfc_symtree *st; gfc_symbol *sym; @@ -3390,6 +3390,16 @@ read_module (void) info->u.rsym.state = USED; info->u.rsym.sym = sym; + /* Some symbols do not have a namespace (eg. formal arguments), + so the automatic "unique symtree" mechanism must be suppressed + by marking them as referenced. */ + q = get_integer (info->u.rsym.ns); + if (q->u.pointer == NULL) + { + info->u.rsym.referenced = 1; + continue; + } + /* If possible recycle the symtree that references the symbol. If a symtree is not found and the module does not import one, a unique-name symtree is found by read_cleanup. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 60e00e216759..12555562b894 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,9 +1,7 @@ -2007-02-12 Simon Martin +2007-02-13 Paul Thomas - PR c++/14622 - * g++.dg/template/instantiate9.C: New test. - * g++.old-deja/g++.pt/instantiate12.C: Fixed type mismatches in explicit - instantiations. + PR fortran/30554 + * gfortran.dg/used_dummy_types_7.f90: New test.. 2007-02-12 Uros Bizjak diff --git a/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 b/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 new file mode 100644 index 000000000000..9e591b23ea38 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 @@ -0,0 +1,45 @@ +! { dg-do compile } +! This tests a patch for a regression caused by the second part of +! the fix for PR30554. The linked derived types dummy_atom and +! dummy_atom_list caused a segment fault because they do not have +! a namespace. +! +! Contributed by Daniel Franke +! +MODULE types +TYPE :: dummy_atom_list + TYPE(dummy_atom), DIMENSION(:), POINTER :: table => null() +END TYPE + +TYPE :: dummy_atom + TYPE(dummy_atom_private), POINTER :: p => null() +END TYPE + +TYPE :: dummy_atom_private + INTEGER :: id +END TYPE +END MODULE + +MODULE atom +USE types, ONLY: dummy_atom +INTERFACE + SUBROUTINE dummy_atom_insert_symmetry_mate(this, other) + USE types, ONLY: dummy_atom + TYPE(dummy_atom), INTENT(inout) :: this + TYPE(dummy_atom), INTENT(in) :: other + END SUBROUTINE +END INTERFACE +END MODULE + +MODULE list +INTERFACE + SUBROUTINE dummy_atom_list_insert(this, atom) + USE types, ONLY: dummy_atom_list + USE atom, ONLY: dummy_atom + + TYPE(dummy_atom_list), INTENT(inout) :: this + TYPE(dummy_atom), INTENT(in) :: atom + END SUBROUTINE +END INTERFACE +END MODULE +! { dg-final { cleanup-modules "atom types list" } }