diff options
author | Janus Weil <janus@gcc.gnu.org> | 2018-09-16 21:57:52 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2018-09-16 21:57:52 +0200 |
commit | 74b08343dab5369d2229e52c7c2d2056378cbe4e (patch) | |
tree | cc9e71ec9710800de03ae5d6644b3f0977215365 /gcc | |
parent | ed33417a64bfe3d5d8159e29751532c34cb54990 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/match.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_assign_2.f90 | 22 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_assign_3.f90 | 9 |
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 |