OSDN Git Service

2011-02-12 Mikael Morin <mikael.morin@sfr.fr>
authormikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 12 Feb 2011 14:56:32 +0000 (14:56 +0000)
committermikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 12 Feb 2011 14:56:32 +0000 (14:56 +0000)
PR fortran/45586
* gfortran.dg/extends_11.f03: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170074 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/extends_11.f03 [new file with mode: 0644]

index 91cd4bb..d6bd220 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-12  Mikael Morin  <mikael.morin@sfr.fr>
+
+       PR fortran/45586
+       * gfortran.dg/extends_11.f03: New.
+
 2011-02-11  Xinliang David Li  <davidxl@google.com>
 
        PR tree-optimization/47707
diff --git a/gcc/testsuite/gfortran.dg/extends_11.f03 b/gcc/testsuite/gfortran.dg/extends_11.f03
new file mode 100644 (file)
index 0000000..58bde73
--- /dev/null
@@ -0,0 +1,41 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/45586
+! Test that access to inherited components are properly generated
+!
+! Stripped down from extends_1.f03
+!
+  type :: person
+    integer :: ss = 1
+  end type person
+
+  type, extends(person) :: education
+    integer ::  attainment = 0
+  end type education
+
+  type, extends(education) :: service
+    integer :: personnel_number = 0
+  end type service
+
+  type, extends(service) :: person_record
+    type (person_record), pointer :: supervisor => NULL ()
+  end type person_record
+  
+  type(person_record) :: recruit
+  
+
+  ! Check that references by ultimate component and by parent type work
+  ! All the following component access are equivalent
+  recruit%ss = 2
+  recruit%person%ss = 3
+  recruit%education%ss = 4
+  recruit%education%person%ss = 5
+  recruit%service%ss = 6
+  recruit%service%person%ss = 7
+  recruit%service%education%ss = 8
+  recruit%service%education%person%ss = 9
+end
+
+! { dg-final { scan-tree-dump-times " +recruit\\.service\\.education\\.person\\.ss =" 8 "original"} }
+! { dg-final { cleanup-tree-dump "original" } }