Hi Jakub, > Fortran OOP is still to be considered completely unsupported in OpenMP, > but this patch just attempts to fix this because it was easy to do so. > The select_type_temporary vars are artificial (created by the compiler, > not user vars), we shouldn't emit them into debug info, nor they should be > privatized by reference. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
looks good to me. Thanks for the patch! Maybe you also wanna backport this to 4.7? Cheers, Janus > 2013-01-22 Jakub Jelinek <ja...@redhat.com> > > PR fortran/56052 > * trans-decl.c (gfc_get_symbol_decl): Set DECL_ARTIFICIAL > and DECL_IGNORED_P on select_type_temporary and don't set > DECL_BY_REFERENCE. > > * gfortran.dg/gomp/pr56052.f90: New test. > > --- gcc/fortran/trans-decl.c.jj 2013-01-11 09:02:50.000000000 +0100 > +++ gcc/fortran/trans-decl.c 2013-01-21 18:11:39.684529593 +0100 > @@ -1397,6 +1397,12 @@ gfc_get_symbol_decl (gfc_symbol * sym) > DECL_IGNORED_P (decl) = 1; > } > > + if (sym->attr.select_type_temporary) > + { > + DECL_ARTIFICIAL (decl) = 1; > + DECL_IGNORED_P (decl) = 1; > + } > + > if (sym->attr.dimension || sym->attr.codimension) > { > /* Create variables to hold the non-constant bits of array info. */ > @@ -1496,7 +1502,8 @@ gfc_get_symbol_decl (gfc_symbol * sym) > && POINTER_TYPE_P (TREE_TYPE (decl)) > && !sym->attr.pointer > && !sym->attr.allocatable > - && !sym->attr.proc_pointer) > + && !sym->attr.proc_pointer > + && !sym->attr.select_type_temporary) > DECL_BY_REFERENCE (decl) = 1; > > if (sym->attr.vtab > --- gcc/testsuite/gfortran.dg/gomp/pr56052.f90.jj 2013-01-21 > 18:14:38.716547446 +0100 > +++ gcc/testsuite/gfortran.dg/gomp/pr56052.f90 2013-01-21 18:14:59.425432249 > +0100 > @@ -0,0 +1,16 @@ > +! PR fortran/56052 > +! { dg-do compile } > +! { dg-options "-fopenmp" } > + > +subroutine middle(args) > + type args_t > + end type > + type, extends(args_t) :: scan_args_t > + end type > + class(args_t),intent(inout) :: args > + !$omp single > + select type (args) > + type is (scan_args_t) > + end select > + !$omp end single > +end subroutine middle > > Jakub