aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Schlüter <tobi@gcc.gnu.org>2007-04-12 18:53:26 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2007-04-12 18:53:26 +0200
commit2f11881446ab72f0e85eedb8391ae47cd89d3244 (patch)
tree1be65cae232e27fb532bca1c95d395b50376e17f /gcc
parent2d3649b23f90ddd51b968a00c8e8ab6ccf5bd93c (diff)
downloadgcc-2f11881446ab72f0e85eedb8391ae47cd89d3244.zip
gcc-2f11881446ab72f0e85eedb8391ae47cd89d3244.tar.gz
gcc-2f11881446ab72f0e85eedb8391ae47cd89d3244.tar.bz2
arith.c (gfc_arith_uplus): Rename to ...
* arith.c (gfc_arith_uplus): Rename to ... (gfc_arith_identity): ... this. (gfc_parentheses): New function. (gfc_uplus): Adapt to renamed function. * arith.h (gfc_parentheses): Add prototype. * expr.c (gfc_copy_expr): Deal with INTRINSIC_PARENTHESES. (simplifiy_intrinsic_op): Treat INTRINSIC_UPLUS separately from INTRINSIC_PARENTHESES. From-SVN: r123750
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog11
-rw-r--r--gcc/fortran/arith.c14
-rw-r--r--gcc/fortran/arith.h1
-rw-r--r--gcc/fortran/expr.c6
4 files changed, 28 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 3bc5b39..1ea9178 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,14 @@
+2007-04-12 Tobias Schlüter <tobi@gcc.gnu.org>
+
+ * arith.c (gfc_arith_uplus): Rename to ...
+ (gfc_arith_identity): ... this.
+ (gfc_parentheses): New function.
+ (gfc_uplus): Adapt to renamed function.
+ * arith.h (gfc_parentheses): Add prototype.
+ * expr.c (gfc_copy_expr): Deal with INTRINSIC_PARENTHESES.
+ (simplifiy_intrinsic_op): Treat INTRINSIC_UPLUS separately from
+ INTRINSIC_PARENTHESES.
+
2007-04-12 Tobias Burnus <burnus@net-b.de>
PR fortran/31472
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c
index e6c2d0f..8c995ea 100644
--- a/gcc/fortran/arith.c
+++ b/gcc/fortran/arith.c
@@ -595,10 +595,11 @@ check_result (arith rc, gfc_expr *x, gfc_expr *r, gfc_expr **rp)
/* It may seem silly to have a subroutine that actually computes the
unary plus of a constant, but it prevents us from making exceptions
- in the code elsewhere. */
+ in the code elsewhere. Used for unary plus and parenthesized
+ expressions. */
static arith
-gfc_arith_uplus (gfc_expr *op1, gfc_expr **resultp)
+gfc_arith_identity (gfc_expr *op1, gfc_expr **resultp)
{
*resultp = gfc_copy_expr (op1);
return ARITH_OK;
@@ -1763,9 +1764,16 @@ eval_intrinsic_f3 (gfc_intrinsic_op operator,
gfc_expr *
+gfc_parentheses (gfc_expr *op)
+{
+ return eval_intrinsic_f2 (INTRINSIC_PARENTHESES, gfc_arith_identity,
+ op, NULL);
+}
+
+gfc_expr *
gfc_uplus (gfc_expr *op)
{
- return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_uplus, op, NULL);
+ return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_identity, op, NULL);
}
diff --git a/gcc/fortran/arith.h b/gcc/fortran/arith.h
index 04d37dc..6a45108 100644
--- a/gcc/fortran/arith.h
+++ b/gcc/fortran/arith.h
@@ -43,6 +43,7 @@ int gfc_compare_expr (gfc_expr *, gfc_expr *);
int gfc_compare_string (gfc_expr *, gfc_expr *);
/* Constant folding for gfc_expr trees. */
+gfc_expr *gfc_parentheses (gfc_expr * op);
gfc_expr *gfc_uplus (gfc_expr * op);
gfc_expr *gfc_uminus (gfc_expr * op);
gfc_expr *gfc_add (gfc_expr *, gfc_expr *);
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index d3f57172..f2064fb 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -465,6 +465,7 @@ gfc_copy_expr (gfc_expr *p)
switch (q->value.op.operator)
{
case INTRINSIC_NOT:
+ case INTRINSIC_PARENTHESES:
case INTRINSIC_UPLUS:
case INTRINSIC_UMINUS:
q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
@@ -771,8 +772,11 @@ simplify_intrinsic_op (gfc_expr *p, int type)
switch (p->value.op.operator)
{
- case INTRINSIC_UPLUS:
case INTRINSIC_PARENTHESES:
+ result = gfc_parentheses (op1);
+ break;
+
+ case INTRINSIC_UPLUS:
result = gfc_uplus (op1);
break;