aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2011-02-18 13:23:56 +0100
committerJanus Weil <janus@gcc.gnu.org>2011-02-18 13:23:56 +0100
commit357f98e5520d628b5acf21b516c8ce5f408a605f (patch)
treec6ece472baf6d67524d413ba4f571b00b8b82ba0 /gcc
parentabfea58d53f78e426da355c0618a868056e30592 (diff)
downloadgcc-357f98e5520d628b5acf21b516c8ce5f408a605f.zip
gcc-357f98e5520d628b5acf21b516c8ce5f408a605f.tar.gz
gcc-357f98e5520d628b5acf21b516c8ce5f408a605f.tar.bz2
re PR fortran/47768 (ICE: printing a derived-type variable with proc-pointer components)
2011-02-18 Janus Weil <janus@gcc.gnu.org> PR fortran/47768 * resolve.c (resolve_transfer): Reject variables with procedure pointer components. 2011-02-18 Janus Weil <janus@gcc.gnu.org> PR fortran/47768 * gfortran.dg/proc_ptr_comp_30.f90: New. From-SVN: r170271
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_30.f9015
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 8d7614a..31ed636 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2011-02-18 Janus Weil <janus@gcc.gnu.org>
+ PR fortran/47768
+ * resolve.c (resolve_transfer): Reject variables with procedure pointer
+ components.
+
+2011-02-18 Janus Weil <janus@gcc.gnu.org>
+
PR fortran/47767
* gfortran.h (gfc_check_access): Removed prototype.
(gfc_check_symbol_access): Added prototype.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 1c10243..1fef22b 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -8091,6 +8091,14 @@ resolve_transfer (gfc_code *code)
return;
}
+ /* F08:C935. */
+ if (ts->u.derived->attr.proc_pointer_comp)
+ {
+ gfc_error ("Data transfer element at %L cannot have "
+ "procedure pointer components", &code->loc);
+ return;
+ }
+
if (ts->u.derived->attr.alloc_comp)
{
gfc_error ("Data transfer element at %L cannot have "
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 40e2553..595db76 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-18 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/47768
+ * gfortran.dg/proc_ptr_comp_30.f90: New.
+
2011-02-18 Jakub Jelinek <jakub@redhat.com>
PR debug/47780
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_30.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_30.f90
new file mode 100644
index 0000000..afcc4c7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_30.f90
@@ -0,0 +1,15 @@
+! { dg-do compile }
+!
+! PR 47768: ICE: printing a derived-type variable with proc-pointer components
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+type :: t
+ integer :: i = 3
+ procedure(type(t)), pointer, nopass :: ppc
+end type
+
+type(t) :: x
+
+print *,x ! { dg-error "cannot have procedure pointer components" }
+end