[PATCH] Fix up one OpenMP Fortran OOP ICE (PR fortran/56052)
Jakub Jelinek
jakub@redhat.com
Tue Jan 22 16:38:00 GMT 2013
Hi!
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?
2013-01-22 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
Jakub
More information about the Fortran
mailing list