Commit e1e3b9d3 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/56845 ([OOP] _vptr not set to declared type for CLASS + SAVE)

2013-04-12  Tobias Burnus  <burnus@net-b.de>

        PR fortran/56845
        * trans-decl.c (gfc_trans_deferred_vars): Restrict
        static CLASS init to SAVE and -fno-automatic.

2013-04-12  Tobias Burnus  <burnus@net-b.de>

        PR fortran/56845
        * gfortran.dg/class_allocate_15.f90: New.

        Revert:
        2013-04-12  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray_lib_alloc_2.f90: Update
        scan-tree-dump-times.

From-SVN: r197848
parent 06f9b387
2013-04-12 Tobias Burnus <burnus@net-b.de>
PR fortran/56845
* trans-decl.c (gfc_trans_deferred_vars): Restrict
static CLASS init to SAVE and -fno-automatic.
2013-04-12 Tobias Burnus <burnus@net-b.de>
PR fortran/56845
* trans-decl.c (gfc_trans_deferred_vars): Set _vptr for
allocatable static BT_CLASS.
* trans-expr.c (gfc_class_set_static_fields): New function.
......
......@@ -3649,7 +3649,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
NULL_TREE);
}
if (sym->ts.type == BT_CLASS && TREE_STATIC (sym->backend_decl)
if (sym->ts.type == BT_CLASS
&& (sym->attr.save || gfc_option.flag_max_stack_var_size == 0)
&& CLASS_DATA (sym)->attr.allocatable)
{
tree vptr;
......
2013-04-12 Tobias Burnus <burnus@net-b.de>
PR fortran/56845
* gfortran.dg/class_allocate_15.f90: New.
Revert:
2013-04-12 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/coarray_lib_alloc_2.f90: Update
scan-tree-dump-times.
2013-04-12 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/56918
......
! { dg-do run }
! { dg-options "-fdump-tree-original -fdump-tree-original -fmax-stack-var-size=1" }
!
! PR fortran/56845
!
type t
end type t
type, extends(t) :: t2
end type t2
type(t) :: y
call foo()
call bar()
contains
subroutine foo()
class(t), allocatable :: x
if(allocated(x)) call abort()
if(.not.same_type_as(x,y)) call abort()
allocate (t2 :: x)
end
subroutine bar()
class(t), allocatable :: x(:)
if(allocated(x)) call abort()
if(.not.same_type_as(x,y)) call abort()
allocate (t2 :: x(4))
end
end
! { dg-final { scan-tree-dump-times "__builtin_free" 2 "original" } }
! { dg-final { cleanup-tree-dump "original" } }
......@@ -18,6 +18,6 @@
! { dg-final { scan-tree-dump-times "_gfortran_caf_register .1, 1, &yy._data.token, &stat.., &errmsg, 200.;" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister .&xx._data.token, &stat.., &errmsg, 200.;" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister .&yy._data.token, &stat.., &errmsg, 200.;" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister .&yy._data.token, 0B, 0B, 0.;" 0 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister .&xx._data.token, 0B, 0B, 0.;" 0 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister .&yy._data.token, 0B, 0B, 0.;" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister .&xx._data.token, 0B, 0B, 0.;" 1 "original" } }
! { dg-final { cleanup-tree-dump "original" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment