The following gives an ICE:
==18935== Invalid read of size 1
==18935== at 0x4C25D82: strlen (in
/usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==18935== by 0x438ABE: compare_to_allowed_values (io.c:1404)
==18935== by 0x43A892: match_io (io.c:2883)
==18935== by 0x451BA9: match_word (parse.c:64)
write(10,*, asynchronous="Y"//"E"//trim("S "))
end
However, it is a valid initialization expression. I tried the following, but it
did not help. (It still fails at "len = strlen (value)".)
--- io.c (Revision 133959)
+++ io.c (Arbeitskopie)
@@ -1389,11 +1389,17 @@ gfc_resolve_open (gfc_open *open)
static int
compare_to_allowed_values (const char *specifier, const char *allowed[],
const char *allowed_f2003[],
- const char *allowed_gnu[], char *value,
+ const char *allowed_gnu[], gfc_expr *expr,
const char *statement, bool warn)
{
int i;
unsigned int len;
+ const char *value;
+
+ if (gfc_simplify_expr (expr, 0) == 0)
+ return 1;
+
+ value = expr->value.character.string;
len = strlen (value);
if (len > 0)
--
Summary: ICE for character expression in I/O specifier
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: burnus at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35840