re PR tree-optimization/42781 (ICE in pt_solutions_same_restrict_base, at tree-ssa...
authorRichard Guenther <rguenther@suse.de>
Mon, 18 Jan 2010 09:57:11 +0000 (09:57 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 18 Jan 2010 09:57:11 +0000 (09:57 +0000)
2010-01-18  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/42781
* tree-ssa-structalias.c (find_what_var_points_to): Skip
restrict processing only if the original variable was
artificial.

* gfortran.fortran-torture/compile/pr42781.f90: New testcase.

From-SVN: r156006

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90 [new file with mode: 0644]
gcc/tree-ssa-structalias.c

index 5c839a87d7cb8fa75fd87d964091a59d93ed041d..2ad9c06d356a6ad34c182d083b000bdc087ce86d 100644 (file)
@@ -1,3 +1,10 @@
+2010-01-18  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/42781
+       * tree-ssa-structalias.c (find_what_var_points_to): Skip
+       restrict processing only if the original variable was
+       artificial.
+
 2010-01-18  Joern Rennecke  <amylaar@spamcop.net>
 
        * doc/tm.texi (TARGET_ASM_FUNCTION_EPILOGUE): Update text on where to
index f494a09d62b873089ee05097a92779d51a8137ae..dabbca1ada6a9bc796d8b44fd45ea0f6bdca9592 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-18  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/42781
+       * gfortran.fortran-torture/compile/pr42781.f90: New testcase.
+
 2010-01-17  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/42248
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90
new file mode 100644 (file)
index 0000000..9522850
--- /dev/null
@@ -0,0 +1,59 @@
+! ICE with gfortran 4.5 at -O1:
+!gfcbug98.f90: In function ‘convert_cof’:
+!gfcbug98.f90:36:0: internal compiler error: in pt_solutions_same_restrict_base,
+!at tree-ssa-structalias.c:5072
+module foo
+  implicit none
+  type t_time
+     integer :: secs = 0
+  end type t_time
+contains
+  elemental function time_cyyyymmddhh (cyyyymmddhh) result (time)
+    type (t_time)                :: time
+    character(len=10),intent(in) :: cyyyymmddhh
+  end function time_cyyyymmddhh
+
+  function nf90_open(path, mode, ncid)
+    character(len = *), intent(in) :: path
+    integer, intent(in)  :: mode
+    integer, intent(out) :: ncid
+    integer              :: nf90_open
+  end function nf90_open
+end module foo
+!==============================================================================
+module gfcbug98
+  use foo
+  implicit none
+
+  type t_fileinfo
+     character(len=10) :: atime = ' '
+  end type t_fileinfo
+
+  type t_body
+     real         :: bg(10)
+  end type t_body
+contains
+  subroutine convert_cof (ifile)
+    character(len=*) ,intent(in) :: ifile
+
+    character(len=5)         :: version
+    type(t_fileinfo)         :: gattr
+    type(t_time)             :: atime
+    type(t_body),allocatable :: tmp_dat(:)
+    real        ,allocatable :: BDA(:, :, :)
+
+    call open_input
+    call convert_data
+  contains
+    subroutine open_input
+      integer             :: i,j
+      version = ''
+      j = nf90_open(ifile, 1, i)
+    end subroutine open_input
+    !--------------------------------------------------------------------------
+    subroutine convert_data
+      BDA(1,:,1) = tmp_dat(1)% bg(:)
+      atime = time_cyyyymmddhh (gattr% atime)
+    end subroutine convert_data
+  end subroutine convert_cof
+end module gfcbug98
index 753eefee909c7808b98b4bf85d2d9bbd1d1ed80d..3db28745f1a8123ae9e5e19ebde8cd0bb5e7a1f9 100644 (file)
@@ -4776,18 +4776,19 @@ set_uids_in_ptset (bitmap into, bitmap from, struct pt_solution *pt)
 /* Compute the points-to solution *PT for the variable VI.  */
 
 static void
-find_what_var_points_to (varinfo_t vi, struct pt_solution *pt)
+find_what_var_points_to (varinfo_t orig_vi, struct pt_solution *pt)
 {
   unsigned int i;
   bitmap_iterator bi;
   bitmap finished_solution;
   bitmap result;
+  varinfo_t vi;
 
   memset (pt, 0, sizeof (struct pt_solution));
 
   /* This variable may have been collapsed, let's get the real
      variable.  */
-  vi = get_varinfo (find (vi->id));
+  vi = get_varinfo (find (orig_vi->id));
 
   /* Translate artificial variables into SSA_NAME_PTR_INFO
      attributes.  */
@@ -4822,7 +4823,7 @@ find_what_var_points_to (varinfo_t vi, struct pt_solution *pt)
   /* Instead of doing extra work, simply do not create
      elaborate points-to information for pt_anything pointers.  */
   if (pt->anything
-      && (vi->is_artificial_var
+      && (orig_vi->is_artificial_var
          || !pt->vars_contains_restrict))
     return;