From f2ce74d1578c3a5c6be5fddeb842c5115eb002c8 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 15 Sep 2011 19:48:27 +0200 Subject: [PATCH] re PR fortran/50401 (SIGSEGV in resolve_transfer) 2011-09-15 Janus Weil PR fortran/50401 * resolve.c (resolve_transfer): Check if component 'ref' is defined. PR fortran/50403 * symbol.c (gfc_use_derived): Check if argument 'sym' is defined. 2011-09-15 Janus Weil PR fortran/50401 PR fortran/50403 * gfortran.dg/function_types_3.f90: New. From-SVN: r178889 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/resolve.c | 2 +- gcc/fortran/symbol.c | 2 ++ gcc/testsuite/ChangeLog | 6 ++++++ .../gfortran.dg/function_types_3.f90 | 19 +++++++++++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/function_types_3.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index eeb462f7fc2..a8e02732dc4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2011-09-15 Janus Weil + + PR fortran/50401 + * resolve.c (resolve_transfer): Check if component 'ref' is defined. + + PR fortran/50403 + * symbol.c (gfc_use_derived): Check if argument 'sym' is defined. + 2011-09-14 Tobias Burnus PR fortran/34547 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 9aab8365e45..62750af850b 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8222,7 +8222,7 @@ resolve_transfer (gfc_code *code) } } - if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE + if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL) { gfc_error ("Data transfer element at %L cannot be a full reference to " diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index b2f0f2b6b78..e2f13b8f9a9 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -1945,6 +1945,8 @@ gfc_use_derived (gfc_symbol *sym) gfc_symtree *st; int i; + if (!sym) return NULL; + if (sym->components != NULL || sym->attr.zero_comp) return sym; /* Already defined. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 86cdde08bac..0accd60a78f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-09-15 Janus Weil + + PR fortran/50401 + PR fortran/50403 + * gfortran.dg/function_types_3.f90: New. + 2011-09-15 Jason Merrill PR c++/50365 diff --git a/gcc/testsuite/gfortran.dg/function_types_3.f90 b/gcc/testsuite/gfortran.dg/function_types_3.f90 new file mode 100644 index 00000000000..8d00f5f7f1e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/function_types_3.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! Contributed by Vittorio Zecca +! +! PR 50401: SIGSEGV in resolve_transfer + + interface + function f() ! { dg-error "must be a dummy argument" } + dimension f(*) + end function + end interface + print *,f() +end + +! PR 50403: SIGSEGV in gfc_use_derived + +type(f) function f() ! { dg-error "conflicts with DERIVED attribute|is not accessible" } + f=110 ! { dg-error "Unclassifiable statement" } +end -- 2.30.2