diff options
Diffstat (limited to 'gcc/f/com.c')
-rw-r--r-- | gcc/f/com.c | 16 |
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) |