summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2011-03-11 14:13:49 +0000
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2011-03-11 14:13:49 +0000
commit24b244ec71a319ce40b183a54e3f67f3b37d008a (patch)
treee1ce9cd7209b8df941cfdbb87c7a0b47b479fa08
parent7019fd3f5002854994385fbfe043618d0f3e314e (diff)
downloadgcc-24b244ec71a319ce40b183a54e3f67f3b37d008a.tar.gz
2011-03-11 Janus Weil <janus@gcc.gnu.org>
PR fortran/47768 * module.c (ab_attribute,attr_bits): Add AB_PROC_POINTER_COMP. (mio_symbol_attribute): Handle attribute 'proc_pointer_comp'. 2011-03-11 Janus Weil <janus@gcc.gnu.org> PR fortran/47768 * gfortran.dg/proc_ptr_comp_31.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170871 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/module.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_31.f9022
4 files changed, 42 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a479ef67210..a0b88054589 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-11 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/47768
+ * module.c (ab_attribute,attr_bits): Add AB_PROC_POINTER_COMP.
+ (mio_symbol_attribute): Handle attribute 'proc_pointer_comp'.
+
2011-03-06 Paul Thomas <pault@gcc.gnu.org>
Jerry DeLisle <jvdelisle@gcc.gnu.org>
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 6f1520c0205..923f8c695e4 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -1671,8 +1671,9 @@ typedef enum
AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE,
AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT,
- AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP,
- AB_POINTER_COMP, AB_PRIVATE_COMP, AB_VALUE, AB_VOLATILE, AB_PROTECTED,
+ AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE,
+ AB_ALLOC_COMP, AB_POINTER_COMP, AB_PROC_POINTER_COMP, AB_PRIVATE_COMP,
+ AB_VALUE, AB_VOLATILE, AB_PROTECTED,
AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP,
AB_IS_CLASS, AB_PROCEDURE, AB_PROC_POINTER, AB_ASYNCHRONOUS, AB_CODIMENSION,
AB_COARRAY_COMP, AB_VTYPE, AB_VTAB, AB_CONTIGUOUS, AB_CLASS_POINTER,
@@ -1716,6 +1717,7 @@ static const mstring attr_bits[] =
minit ("ALLOC_COMP", AB_ALLOC_COMP),
minit ("COARRAY_COMP", AB_COARRAY_COMP),
minit ("POINTER_COMP", AB_POINTER_COMP),
+ minit ("PROC_POINTER_COMP", AB_PROC_POINTER_COMP),
minit ("PRIVATE_COMP", AB_PRIVATE_COMP),
minit ("ZERO_COMP", AB_ZERO_COMP),
minit ("PROTECTED", AB_PROTECTED),
@@ -1881,6 +1883,8 @@ mio_symbol_attribute (symbol_attribute *attr)
MIO_NAME (ab_attribute) (AB_ALLOC_COMP, attr_bits);
if (attr->pointer_comp)
MIO_NAME (ab_attribute) (AB_POINTER_COMP, attr_bits);
+ if (attr->proc_pointer_comp)
+ MIO_NAME (ab_attribute) (AB_PROC_POINTER_COMP, attr_bits);
if (attr->private_comp)
MIO_NAME (ab_attribute) (AB_PRIVATE_COMP, attr_bits);
if (attr->coarray_comp)
@@ -2027,6 +2031,9 @@ mio_symbol_attribute (symbol_attribute *attr)
case AB_POINTER_COMP:
attr->pointer_comp = 1;
break;
+ case AB_PROC_POINTER_COMP:
+ attr->proc_pointer_comp = 1;
+ break;
case AB_PRIVATE_COMP:
attr->private_comp = 1;
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 48619b6b7e1..54d77a6d253 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-11 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/47768
+ * gfortran.dg/proc_ptr_comp_31.f90: New.
+
2011-03-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47278
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_31.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_31.f90
new file mode 100644
index 00000000000..6a5d8c967e2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_31.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR 47768: printing a derived-type variable with proc-pointer components
+!
+! Contributed by Arjen Markus <arjen.markus895@gmail.com>
+
+module proc_pointers
+ implicit none
+ type :: rectangle
+ real :: width, height
+ procedure(real), pointer, nopass :: get_special_area
+ end type
+end module
+
+program test_objects
+ use proc_pointers
+ implicit none
+ type(rectangle) :: rect
+ write(*,*) rect ! { dg-error "cannot have procedure pointer components" }
+end program
+
+! { dg-final { cleanup-modules "proc_pointers" } }