OSDN Git Service

2011-11-25 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Nov 2011 16:26:47 +0000 (16:26 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Nov 2011 16:26:47 +0000 (16:26 +0000)
        PR fortran/50408
        * trans-decl.c (gfc_get_module_backend_decl): Also copy
        ts.u.derived from the gsym if the ts.type is BT_CLASS.
        (gfc_get_extern_function_decl): Copy also the backend_decl
        for the symbol's ts.u.{derived,cl} from the gsym.
        * trans-types.c (gfc_copy_dt_decls_ifequal): Directly
        return if "from" and "to" are the same.

2011-11-25  Tobias Burnus  <burnus@net-b.de>

        PR fortran/50408
        * gfortran.dg/whole_file_35.f90: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181725 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 22d0fa4..f0faca4 100644 (file)
@@ -1,5 +1,15 @@
 2011-11-25  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/50408
+       * trans-decl.c (gfc_get_module_backend_decl): Also copy
+       ts.u.derived from the gsym if the ts.type is BT_CLASS.
+       (gfc_get_extern_function_decl): Copy also the backend_decl
+       for the symbol's ts.u.{derived,cl} from the gsym.
+       * trans-types.c (gfc_copy_dt_decls_ifequal): Directly
+       return if "from" and "to" are the same.
+
+2011-11-25  Tobias Burnus  <burnus@net-b.de>
+
        PR fortran/51302
        * trans-stmt.c (gfc_trans_simple_do): Add a fold_convert.
 
index fc8a9ed..67bd3e2 100644 (file)
@@ -718,7 +718,7 @@ gfc_get_module_backend_decl (gfc_symbol *sym)
        }
       else if (s->backend_decl)
        {
-         if (sym->ts.type == BT_DERIVED)
+         if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
            gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
                                       true);
          else if (sym->ts.type == BT_CHARACTER)
@@ -1670,6 +1670,11 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
       gfc_find_symbol (sym->name, gsym->ns, 0, &s);
       if (s && s->backend_decl)
        {
+         if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
+           gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
+                                      true);
+         else if (sym->ts.type == BT_CHARACTER)
+           sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl;
          sym->backend_decl = s->backend_decl;
          return sym->backend_decl;
        }
index 3f4ebd5..d643c2e 100644 (file)
@@ -2188,6 +2188,9 @@ gfc_copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to,
   gfc_component *to_cm;
   gfc_component *from_cm;
 
+  if (from == to)
+    return 1;
+
   if (from->backend_decl == NULL
        || !gfc_compare_derived_types (from, to))
     return 0;
index 6ea8225..34d262f 100644 (file)
@@ -1,5 +1,10 @@
 2011-11-25  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/50408
+       * gfortran.dg/whole_file_35.f90: New.
+
+2011-11-25  Tobias Burnus  <burnus@net-b.de>
+
        PR fortran/51302
        * gfortran.dg/volatile13.f90: New.
 
diff --git a/gcc/testsuite/gfortran.dg/whole_file_35.f90 b/gcc/testsuite/gfortran.dg/whole_file_35.f90
new file mode 100644 (file)
index 0000000..46a8865
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do compile }
+!
+! PR fortran/50408
+!
+! Contributed by Vittorio Zecca
+!
+       module m
+         type int
+           integer  :: val
+         end type int
+         interface ichar
+           module procedure uch
+        end interface
+       contains
+         function uch (c)
+           character (len=1), intent (in) :: c
+           type (int)                     :: uch
+           intrinsic ichar
+           uch%val = 127 - ichar (c)
+         end function uch 
+       end module m
+
+      program p
+        use m
+        print *,ichar('~') ! must print "1"
+      end program p
+
+! { dg-final { cleanup-modules "m" } }