2013-02-01 Jakub Jelinek Backported from mainline 2013-01-23 Jakub Jelinek 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 (revision 195398) +++ gcc/fortran/trans-decl.c (revision 195399) @@ -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 (revision 0) +++ gcc/testsuite/gfortran.dg/gomp/pr56052.f90 (revision 195399) @@ -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