OSDN Git Service

2007-04-07 Paul Thomas <pault@gcc.gnu.org>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Apr 2007 20:18:17 +0000 (20:18 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Apr 2007 20:18:17 +0000 (20:18 +0000)
PR fortran/31214
* trans-decl.c (gfc_get_symbol_decl): Allow unreferenced use
associated symbols.

2007-04-07  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/31424
* gfortran.dg/unreferenced_use_assoc_1.f90: New test.

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

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

index e72aa0d..2079580 100644 (file)
@@ -1,5 +1,11 @@
 2007-04-07  Paul Thomas  <pault@gcc.gnu.org>
 
+       PR fortran/31214
+       * trans-decl.c (gfc_get_symbol_decl): Allow unreferenced use
+       associated symbols.
+
+2007-04-07  Paul Thomas  <pault@gcc.gnu.org>
+
        PR fortran/31293
        * symbol.c (gfc_check_function_type): New function.
        * gfortran.h : Add prototype for previous.
index 6cd1304..fa75260 100644 (file)
@@ -873,7 +873,8 @@ gfc_get_symbol_decl (gfc_symbol * sym)
   int byref;
 
   gcc_assert (sym->attr.referenced
-               || sym->ns->proc_name->attr.if_source == IFSRC_IFBODY);
+               || sym->attr.use_assoc
+               || sym->ns->proc_name->attr.if_source == IFSRC_IFBODY);
 
   if (sym->ns && sym->ns->proc_name->attr.function)
     byref = gfc_return_by_reference (sym->ns->proc_name);
index 2f7fe10..8bb0934 100644 (file)
@@ -1,5 +1,10 @@
 2007-04-07  Paul Thomas  <pault@gcc.gnu.org>
 
+       PR fortran/31424
+       * gfortran.dg/unreferenced_use_assoc_1.f90: New test.
+
+2007-04-07  Paul Thomas  <pault@gcc.gnu.org>
+
        PR fortran/31293
        * gfortran.dg/interface_12.f90: New test.
 
diff --git a/gcc/testsuite/gfortran.dg/unreferenced_use_assoc_1.f90 b/gcc/testsuite/gfortran.dg/unreferenced_use_assoc_1.f90
new file mode 100644 (file)
index 0000000..57892d5
--- /dev/null
@@ -0,0 +1,40 @@
+! { dg-do compile }
+! Tests the  fix for PR31424.
+!
+module InternalCompilerError
+
+   type Byte
+      private 
+      character(len=1)     :: singleByte
+   end type
+
+   type (Byte)             :: BytesPrototype(1)
+
+   type UserType
+      real :: r
+   end type
+
+contains
+
+   function UserTypeToBytes(user) result (bytes) 
+      type(UserType) :: user 
+      type(Byte)     :: bytes(size(transfer(user, BytesPrototype)))
+      bytes = transfer(user, BytesPrototype) 
+   end function
+
+   subroutine DoSomethingWithBytes(bytes)
+      type(Byte), intent(in)     :: bytes(:)
+   end subroutine
+
+end module
+
+
+program main
+   use InternalCompilerError
+   type (UserType) :: user 
+
+   ! The following line caused the ICE 
+   call DoSomethingWithBytes( UserTypeToBytes(user) )
+
+end program 
+! { dg-final { cleanup-modules "InternalCompilerError" } }