]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/56845 ([OOP] _vptr not set to declared type for CLASS + SAVE)
authorTobias Burnus <burnus@net-b.de>
Fri, 12 Apr 2013 08:54:15 +0000 (10:54 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Fri, 12 Apr 2013 08:54:15 +0000 (10:54 +0200)
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

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_allocate_15.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray_lib_alloc_2.f90

index d3c8b58dd5ac379f67ef70171bdaf3e5732095d6..616680d3bc4a47a33597cc685deacf544dd7ea3b 100644 (file)
@@ -1,3 +1,9 @@
+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
index 779df164731abc58b0b9e69dd4ccaa82ae7c3505..f2cf2de4cd3920fa29c8df20bc29ab62fc223ddf 100644 (file)
@@ -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;
index 2c8c87872aa0af52b9a3d89e6610631bd0e943d9..6272c49a18d698bac9efbaa3ee0f94db4519d375 100644 (file)
@@ -1,3 +1,14 @@
+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
diff --git a/gcc/testsuite/gfortran.dg/class_allocate_15.f90 b/gcc/testsuite/gfortran.dg/class_allocate_15.f90
new file mode 100644 (file)
index 0000000..07c1cb4
--- /dev/null
@@ -0,0 +1,28 @@
+! { 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" } }
index a41be79d91a33ba3144664d54d4651f37624a05e..3aaff1e8c3511c5464a2cc12737c3ab5394c63cc 100644 (file)
@@ -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" } }