diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/power.f90 | 11 |
4 files changed, 21 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2d4a86a..1850b31 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2004-08-16 Huang Chun <chunhuang73@hotmail.com> + + * trans-expr.c (gfc_conv_power_op): Evaluate the expression before + expand. + 2005-08-14 Asher Langton <langton2@llnl.gov> * parse.c (match): Enclosed macro in do...while(0) and braces. diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 0e4e55d..69b2410 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -654,6 +654,7 @@ gfc_conv_power_op (gfc_se * se, gfc_expr * expr) gfc_init_se (&lse, se); gfc_conv_expr_val (&lse, expr->value.op.op1); + lse.expr = gfc_evaluate_now (lse.expr, &lse.pre); gfc_add_block_to_block (&se->pre, &lse.pre); gfc_init_se (&rse, se); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7d05ac7..407be8c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-08-16 Feng Wang <fengwang@nudt.edu.cn> + + * gfortran.dg/power.f90: New test. + 2005-08-16 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/23299 diff --git a/gcc/testsuite/gfortran.dg/power.f90 b/gcc/testsuite/gfortran.dg/power.f90 new file mode 100644 index 0000000..5f6b6c6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/power.f90 @@ -0,0 +1,11 @@ +! { dg-do run } +integer i +i = 0 +if ( a (i) ** 5 .ne. 1) call abort () +contains +function a (i) +integer a, i +i = i + 1 +a = i +end function +end |