aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/io.c')
-rw-r--r--gcc/fortran/io.c39
1 files changed, 8 insertions, 31 deletions
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 8e81d6a..4d12b24 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -141,40 +141,17 @@ next_char (int in_string)
if (gfc_option.flag_backslash && c == '\\')
{
+ int tmp;
locus old_locus = gfc_current_locus;
- switch (gfc_next_char_literal (1))
- {
- case 'a':
- c = '\a';
- break;
- case 'b':
- c = '\b';
- break;
- case 't':
- c = '\t';
- break;
- case 'f':
- c = '\f';
- break;
- case 'n':
- c = '\n';
- break;
- case 'r':
- c = '\r';
- break;
- case 'v':
- c = '\v';
- break;
- case '\\':
- c = '\\';
- break;
+ /* Use a temp variable to avoid side effects from gfc_match_special_char
+ since it uses an int * for its argument. */
+ tmp = (int)c;
- default:
- /* Unknown backslash codes are simply not expanded. */
- gfc_current_locus = old_locus;
- break;
- }
+ if (gfc_match_special_char (&tmp) == MATCH_NO)
+ gfc_current_locus = old_locus;
+
+ c = (char)tmp;
if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
gfc_warning ("Extension: backslash character at %C");