[Bug fortran/47189] [OOP] calling STORAGE_SIZE on a NULL-initialized class pointer

2016-11-16 Thread janus at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47189

janus at gcc dot gnu.org changed:

   What|Removed |Added

   Target Milestone|--- |4.6.0

[Bug fortran/47189] [OOP] calling STORAGE_SIZE on a NULL-initialized class pointer

2011-01-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47189

janus at gcc dot gnu.org changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED

--- Comment #3 from janus at gcc dot gnu.org 2011-01-07 17:29:09 UTC ---
Fixed with r168565. Closing.


[Bug fortran/47189] [OOP] calling STORAGE_SIZE on a NULL-initialized class pointer

2011-01-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47189

--- Comment #2 from janus at gcc dot gnu.org 2011-01-07 12:08:48 UTC ---
Author: janus
Date: Fri Jan  7 12:08:21 2011
New Revision: 168565

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=168565
Log:
2011-01-07  Janus Weil  

PR fortran/47189
PR fortran/47194
* gfortran.h (gfc_lval_expr_from_sym): Moved prototype.
* class.c (gfc_class_null_initializer): Initialize _vptr to declared
type.
* expr.c (gfc_lval_expr_from_sym): Moved here from symbol.c.
* resolve.c (resolve_deallocate_expr): _data component will be added
at translation stage.
* symbol.c (gfc_lval_expr_from_sym): Moved to expr.c.
* trans-stmt.c (gfc_trans_deallocate): Reset _vptr to declared type.


2011-01-07  Janus Weil  

PR fortran/47189
PR fortran/47194
* gfortran.dg/storage_size_3.f08: Extended.

Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/class.c
trunk/gcc/fortran/expr.c
trunk/gcc/fortran/gfortran.h
trunk/gcc/fortran/resolve.c
trunk/gcc/fortran/symbol.c
trunk/gcc/fortran/trans-stmt.c
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gfortran.dg/storage_size_3.f08


[Bug fortran/47189] [OOP] calling STORAGE_SIZE on a NULL-initialized class pointer

2011-01-06 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47189

janus at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2011.01.06 13:28:51
 AssignedTo|unassigned at gcc dot   |janus at gcc dot gnu.org
   |gnu.org |
 Ever Confirmed|0   |1

--- Comment #1 from janus at gcc dot gnu.org 2011-01-06 13:28:51 UTC ---
Patch:


Index: gcc/fortran/class.c
===
--- gcc/fortran/class.c(revision 168525)
+++ gcc/fortran/class.c(working copy)
@@ -83,7 +83,8 @@ gfc_add_component_ref (gfc_expr *e, const char *na


 /* Build a NULL initializer for CLASS pointers,
-   initializing the _data and _vptr components to zero.  */
+   initializing the _data component to NULL and
+   the _vptr component to the declared type.  */

 gfc_expr *
 gfc_class_null_initializer (gfc_typespec *ts)
@@ -98,9 +99,10 @@ gfc_class_null_initializer (gfc_typespec *ts)
   for (comp = ts->u.derived->components; comp; comp = comp->next)
 {
   gfc_constructor *ctor = gfc_constructor_get();
-  ctor->expr = gfc_get_expr ();
-  ctor->expr->expr_type = EXPR_NULL;
-  ctor->expr->ts = comp->ts;
+  if (strcmp (comp->name, "_vptr") == 0)
+ctor->expr = gfc_lval_expr_from_sym (gfc_find_derived_vtab
(ts->u.derived));
+  else
+ctor->expr = gfc_get_null_expr (NULL);
   gfc_constructor_append (&init->value.constructor, ctor);
 }