aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2011-09-15 19:48:27 +0200
committerJanus Weil <janus@gcc.gnu.org>2011-09-15 19:48:27 +0200
commitf2ce74d1578c3a5c6be5fddeb842c5115eb002c8 (patch)
tree631a6e0f480743673c8c76432cd395c91d411ddc /gcc
parent5d248b41e343955bd4fdd274a351a3bb91203cc3 (diff)
downloadgcc-f2ce74d1578c3a5c6be5fddeb842c5115eb002c8.zip
gcc-f2ce74d1578c3a5c6be5fddeb842c5115eb002c8.tar.gz
gcc-f2ce74d1578c3a5c6be5fddeb842c5115eb002c8.tar.bz2
re PR fortran/50401 (SIGSEGV in resolve_transfer)
2011-09-15 Janus Weil <janus@gcc.gnu.org> 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 <janus@gcc.gnu.org> PR fortran/50401 PR fortran/50403 * gfortran.dg/function_types_3.f90: New. From-SVN: r178889
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/fortran/symbol.c2
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/function_types_3.f9019
5 files changed, 36 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index eeb462f..a8e0273 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2011-09-15 Janus Weil <janus@gcc.gnu.org>
+
+ 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 <burnus@net-b.de>
PR fortran/34547
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 9aab836..62750af 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 b2f0f2b..e2f13b8 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 86cdde0..0accd60 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-15 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/50401
+ PR fortran/50403
+ * gfortran.dg/function_types_3.f90: New.
+
2011-09-15 Jason Merrill <jason@redhat.com>
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 0000000..8d00f5f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/function_types_3.f90
@@ -0,0 +1,19 @@
+! { dg-do compile }
+!
+! Contributed by Vittorio Zecca <zeccav@gmail.com>
+!
+! 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