[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-04 Thread Joost.VandeVondele at pci dot uzh.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

--- Comment #3 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 
2011-04-04 09:06:32 UTC ---
(In reply to comment #2)
 Hi Joost,
 
 the following patch
 

hmm triggers 276 times on CP2K, quite a few seems things that also the ME would
capture. At least one is a bug in our code :-)

I'll see if can figure out the affected file.


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-04 Thread Joost.VandeVondele at pci dot uzh.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

--- Comment #4 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 
2011-04-04 10:50:57 UTC ---
reduced testcase  aborts at -O1, goes fine at -O0. Thanks for implementing
the warning, without this, it would have been very difficult to find.

INTEGER FUNCTION S1(m,ma,lx)
INTEGER :: m,ma,lx

IF (((m  0).AND.(MODULO(ABS(ma-lx),2) == 1)).OR.
((m  0).AND.(MODULO(ABS(ma-lx),2) == 0))) THEN
   S1=1
ELSE
   S1=0
ENDIF

END FUNCTION

INTEGER :: s1
IF (S1(1,2,1).NE.0) CALL ABORT()
END


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-04 Thread Joost.VandeVondele at pci dot uzh.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

--- Comment #5 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 
2011-04-04 11:49:15 UTC ---
the dumped code:

  __var_2 = __var_1 %[fl] 2;
  __var_1 = ABS_EXPR *ma - *lx;
  if (*m  0  __var_2 == 1 || *m  0  __var_2 == 0)

shows clearly what is wrong, var_2 is using var_1 before it is used.


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-04 Thread tkoenig at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

--- Comment #6 from Thomas Koenig tkoenig at gcc dot gnu.org 2011-04-04 
20:22:27 UTC ---
Author: tkoenig
Date: Mon Apr  4 20:22:21 2011
New Revision: 171952

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=171952
Log:
2011-04-04  Thomas Koenig  tkoe...@gcc.gnu.org

PR fortran/48412
* frontend-passes (cfe_expr_0):  Reverse the order of going
through the loops.

2011-04-04  Thomas Koenig  tkoe...@gcc.gnu.org

PR fortran/48412
* function_optimize_4.f90:  New test.


Added:
trunk/gcc/testsuite/gfortran.dg/function_optimize_4.f90
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/frontend-passes.c
trunk/gcc/testsuite/ChangeLog


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-04 Thread tkoenig at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

Thomas Koenig tkoenig at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||FIXED

--- Comment #7 from Thomas Koenig tkoenig at gcc dot gnu.org 2011-04-04 
20:27:32 UTC ---
Fixed on trunk, closing.

Thanks for the bug report and the analysis!


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-03 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

   Target Milestone|--- |4.7.0


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-03 Thread tkoenig at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

--- Comment #2 from Thomas Koenig tkoenig at gcc dot gnu.org 2011-04-03 
17:28:14 UTC ---
Hi Joost,

the following patch

Index: frontend-passes.c
===
--- frontend-passes.c   (Revision 171913)
+++ frontend-passes.c   (Arbeitskopie)
@@ -279,6 +279,20 @@
   return result;
 }

+/* Warn about function removal, uncontitionally for now.  */
+
+static void
+warn_function_removal(gfc_expr *e)
+{
+  if (e-expr_type != EXPR_FUNCTION)
+return;
+  if (e-value.function.esym)
+gfc_warning (Removing call to function %s at %L,
+e-value.function.esym-name, (e-where));
+  else if (e-value.function.isym)
+gfc_warning (Removing call to function %s at %L,
+e-value.function.isym-name, (e-where));
+}
 /* Callback function for the code walker for doing common function
elimination.  This builds up the list of functions in the expression
and goes through them to detect duplicates, which it then replaces
@@ -311,6 +325,8 @@
{
  if (newvar == NULL)
newvar = create_var (*(expr_array[i]));
+
+ warn_function_removal (*(expr_array[j]));
  gfc_free (*(expr_array[j]));
  *(expr_array[j]) = gfc_copy_expr (newvar);
}

could maybe help you debug this by showing which functions get removed.


[Bug fortran/48412] [4.7 Regression] CP2K miscompiled due to some Fortran frontend pass

2011-04-02 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48412

Steven Bosscher steven at gcc dot gnu.org changed:

   What|Removed |Added

 CC||steven at gcc dot gnu.org

--- Comment #1 from Steven Bosscher steven at gcc dot gnu.org 2011-04-02 
10:25:12 UTC ---
Joost, perhaps you can narrow it down further by using a debug counter.

You'd have to add a debug counter to dbgcnt.def, say frontend1 
Instead of if (0 ...), you would add'd do if (dbg_cnt (frontend1) ...).

Then compile with -fdbg-cnt=frontend1:N where N is a number, run, and see if
the bug occurs. The trick is to find the greatest value for N where the bug
occurs. This can be done with a binary search, as explained in dbgcnt.def.