Dear Paul,

Paul Richard Thomas wrote:
Bootstrapped and regtested on i686/Ubuntu 11.1 - OK for trunk?

2011-12-30  Paul Thomas<pa...@gcc.gnu.org>

        * trans-array.c (gfc_array_allocate): Null allocated memory of
        newly allocted class arrays.

PR fortran/51529

        PR fortran/46328
        * interface.c(build_compcall_for_operator): Add a type to the
        expression.

You might want to quote additionally PR fortran/51052 and PR fortran/51052.

*** gcc/fortran/interface.c     (revision 182566)
--- gcc/fortran/interface.c     (working copy)
***************
*** 3256,3261 ****
--- 3256,3269 ----

I would have liked a diff with "-p" flag which shows the function name in the diff (for instance "svn diff -x -p" or "svn diff -x '-p -u'").


+   if (expr->ts.type == BT_CLASS&&  expr3)
+     {
+       tmp = build_int_cst (unsigned_char_type_node, 0);
+       /* With class objects, it is best to play safe and null the
+        memory because we cannot know if dynamic types have allocatable
+        components or not.  */

I don't like the comment; how about something along the following: "For class objects we need to nullify the memory in case they have allocatable components; the reason is that _copy, which is used for initialization, first frees the destination."


+ gfc_trans_class_init_assign (gfc_code *code)
+ {
+   stmtblock_t block;
+   tree tmp;
+   gfc_se dst,src,memsz;

Space after each comma.

+   gfc_expr *lhs,*rhs,*sz;

Ditto.


***************
*** 3301,3306 ****
--- 3502,3514 ----
                {
                  gfc_conv_expr_reference (&parmse, e);

+                 /* Catch base objects that are not variables.  */
+                 if (e->ts.type == BT_CLASS
+                       &&  e->expr_type != EXPR_VARIABLE
+                       &&  expr&&  e == expr->base_expr)

The indentation looks wrong.


+         for (args= e->value.function.actual; args; args = args->next)
+           {
+             if (expr == args->expr)
+               expr = args->expr;
+           }

Space before the equal sign in "args=". If you want, you can also remove the curly braces as they are not required.

+         args= code->expr1->value.function.actual;
+         for (; args; args = args->next)
+           {
+             if (expr == args->expr)
+               expr = args->expr;
+           }

Ditto.

   get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
!                       gfc_expr *e)
--- 5623,5629 ----
   get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
!                       gfc_expr *e, bool types)

I think "types" deserves a comment line in the comment block before the function; additionally - and related - I wonder whether the name is well chosen. "types" reminds me of "bt" rather than of "bool". In the changelog, you use: "Add 'types' argument to switch checking of derived types on or off." Thus, "check_types" would be a possible choice.

Otherwise, the patch looks okay to me.

Happy new year to every one!

Tobias

Reply via email to