54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
2013-01-21 Jakub Jelinek <jakub@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
|