From c59ebd85732d37eece59455f992ba391e25aff03 Mon Sep 17 00:00:00 2001
From: Mikael Morin <mikael.morin@sfr.fr>
Date: Sat, 12 Feb 2011 15:56:32 +0100
Subject: [PATCH] re PR fortran/45586 (ICE non-trivial conversion at
 assignment)

2011-02-12  Mikael Morin  <mikael.morin@sfr.fr>

	PR fortran/45586
	* gfortran.dg/extends_11.f03: New.

From-SVN: r170074
---
 gcc/testsuite/ChangeLog                  |  5 +++
 gcc/testsuite/gfortran.dg/extends_11.f03 | 41 ++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 gcc/testsuite/gfortran.dg/extends_11.f03

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 91cd4bb70d53..d6bd220d1031 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 000000000000..58bde73acb1d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/extends_11.f03
@@ -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" } }
-- 
GitLab