aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/com.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/f/com.c')
-rw-r--r--gcc/f/com.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/f/com.c b/gcc/f/com.c
index c04c4a77089..c326fedaae7 100644
--- a/gcc/f/com.c
+++ b/gcc/f/com.c
@@ -213,8 +213,6 @@ typedef struct { unsigned :16, :16, :16; } vms_ino_t;
/* Externals defined here. */
-#define FFECOM_FASTER_ARRAY_REFS 0 /* Generates faster code? */
-
#if FFECOM_targetCURRENT == FFECOM_targetGCC
/* tree.h declares a bunch of stuff that it expects the front end to
@@ -10600,6 +10598,9 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
assert (ffeinfo_kindtype (ffebld_info (expr))
== FFEINFO_kindtypeCHARACTER1);
+ while (ffebld_op (expr) == FFEBLD_opPAREN)
+ expr = ffebld_left (expr);
+
catlist = ffecom_concat_list_new_ (expr, FFETARGET_charactersizeNONE);
switch (ffecom_concat_list_count_ (catlist))
{
@@ -13042,6 +13043,12 @@ ffecom_prepare_expr_ (ffebld expr, ffebld dest UNUSED)
/* Generate whatever temporaries are needed to represent the result
of the expression. */
+ if (bt == FFEINFO_basictypeCHARACTER)
+ {
+ while (ffebld_op (expr) == FFEBLD_opPAREN)
+ expr = ffebld_left (expr);
+ }
+
switch (ffebld_op (expr))
{
default:
@@ -13061,7 +13068,10 @@ ffecom_prepare_expr_ (ffebld expr, ffebld dest UNUSED)
s = ffebld_symter (ffebld_left (expr));
if (ffesymbol_where (s) == FFEINFO_whereCONSTANT
- || ! ffesymbol_is_f2c (s))
+ || (ffesymbol_where (s) != FFEINFO_whereINTRINSIC
+ && ! ffesymbol_is_f2c (s))
+ || (ffesymbol_where (s) == FFEINFO_whereINTRINSIC
+ && ! ffe_is_f2c_library ()))
break;
}
else if (ffebld_op (expr) == FFEBLD_opPOWER)