[Bug fortran/78021] [5/6/7 Regression] Wrong result with optimization on character constant
tkoenig at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Oct 19 21:25:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78021
--- Comment #3 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
This looks promising, modulo some line breaks:
Index: dependency.c
===================================================================
--- dependency.c (Revision 240928)
+++ dependency.c (Arbeitskopie)
@@ -226,10 +226,24 @@ gfc_dep_compare_functions (gfc_expr *e1, gfc_expr
if ((args1->expr == NULL) ^ (args2->expr == NULL))
return -2;
- if (args1->expr != NULL && args2->expr != NULL
- && gfc_dep_compare_expr (args1->expr, args2->expr) != 0)
- return -2;
+ if (args1->expr != NULL && args2->expr != NULL)
+ {
+ gfc_expr *e1, *e2;
+ e1 = args1->expr;
+ e2 = args2->expr;
+ if (gfc_dep_compare_expr (e1, e2) != 0)
+ return -2;
+
+ /* Special case: String arguments which compare equal can
+ still have different lengths, which makes them different
calls. */
+
+ if (e1->expr_type == EXPR_CONSTANT && e1->ts.type == BT_CHARACTER
+ && e2->expr_type == EXPR_CONSTANT && e2->ts.type ==
BT_CHARACTER
+ && e1->value.character.length != e2->value.character.length)
+ return -2;
+ }
+
args1 = args1->next;
args2 = args2->next;
}
More information about the Gcc-bugs
mailing list