aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2018-09-16 21:57:52 +0200
committerJanus Weil <janus@gcc.gnu.org>2018-09-16 21:57:52 +0200
commit74b08343dab5369d2229e52c7c2d2056378cbe4e (patch)
treecc9e71ec9710800de03ae5d6644b3f0977215365 /gcc
parented33417a64bfe3d5d8159e29751532c34cb54990 (diff)
downloadgcc-74b08343dab5369d2229e52c7c2d2056378cbe4e.zip
gcc-74b08343dab5369d2229e52c7c2d2056378cbe4e.tar.gz
gcc-74b08343dab5369d2229e52c7c2d2056378cbe4e.tar.bz2
fix PR 86484 and PR 84543
2018-09-16 Janus Weil <janus@gcc.gnu.org> PR fortran/86484 PR fortran/84543 * match.c (gfc_match_assignment): For a polymorphic assignment, make sure that the vtab for the rhs type is generated. 2018-09-16 Janus Weil <janus@gcc.gnu.org> PR fortran/86484 PR fortran/84543 * gfortran.dg/class_assign_2.f90: New test case. * gfortran.dg/class_assign_3.f90: New test case. From-SVN: r264350
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/match.c3
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/class_assign_2.f9022
-rw-r--r--gcc/testsuite/gfortran.dg/class_assign_3.f909
5 files changed, 48 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6f4872e..4c6c244 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2018-09-16 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/86484
+ PR fortran/84543
+ * match.c (gfc_match_assignment): For a polymorphic assignment,
+ make sure that the vtab for the rhs type is generated.
+
2018-09-16 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/37802
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 85247dd8..badd3c4 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -1366,6 +1366,9 @@ gfc_match_assignment (void)
gfc_check_do_variable (lvalue->symtree);
+ if (lvalue->ts.type == BT_CLASS)
+ gfc_find_vtab (&rvalue->ts);
+
return MATCH_YES;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e37c177..79ecbb7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2018-09-16 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/86484
+ PR fortran/84543
+ * gfortran.dg/class_assign_2.f90: New test case.
+ * gfortran.dg/class_assign_3.f90: New test case.
+
2018-09-16 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/37802
diff --git a/gcc/testsuite/gfortran.dg/class_assign_2.f90 b/gcc/testsuite/gfortran.dg/class_assign_2.f90
new file mode 100644
index 0000000..3b8db4a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_assign_2.f90
@@ -0,0 +1,22 @@
+! { dg-do link }
+!
+! PR 86484:[OOP] Undefined symbol when using polymorphic intrinsic assignment
+!
+! Contributed by Rich Townsend <townsend@astro.wisc.edu>
+
+program test_assign
+
+ implicit none
+
+ type :: foo_t
+ end type
+
+ type, extends (foo_t) :: bar_t
+ end type
+
+ class(foo_t), allocatable :: f
+ type(bar_t) :: b
+
+ f = b
+
+end
diff --git a/gcc/testsuite/gfortran.dg/class_assign_3.f90 b/gcc/testsuite/gfortran.dg/class_assign_3.f90
new file mode 100644
index 0000000..e51651e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_assign_3.f90
@@ -0,0 +1,9 @@
+! { dg-do link }
+!
+! PR 84543: undefined reference to __copy_INTEGER_4_.3788
+!
+! Contributed by Neil Carlson <neil.n.carlson@gmail.com>
+
+class(*), allocatable :: x
+x = 42
+end