diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2007-01-26 23:36:11 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2007-01-26 23:36:11 +0000 |
commit | 2e6a83a7924e9079240b7a60206c39806c46b32d (patch) | |
tree | 7a682d1aa6f6a5cbec61cb18bd4059b652ab736e | |
parent | d4da97d78e4f63c4e1e2f7d0bbc6399acb819168 (diff) | |
download | gcc-2e6a83a7924e9079240b7a60206c39806c46b32d.zip gcc-2e6a83a7924e9079240b7a60206c39806c46b32d.tar.gz gcc-2e6a83a7924e9079240b7a60206c39806c46b32d.tar.bz2 |
Steven G.
2007-01-26 Steven Bosscher <stevenb.gcc@gmail.com>
Steven G. Kargl <kargl@gcc.gnu,org>
* testsuite/gfortran.dg/backslash_3.f: New test.
* fortran/io.c (next_char): Deal with backslash escaped characters.
Issue warnings in non -std=gnu cases.
* fortran/primary.c (next_string_char): Issue warnings in non
From-SVN: r121218
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/io.c | 45 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/backslash_3.f | 25 |
5 files changed, 82 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5c2b184..641d50d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2007-01-26 Steven Bosscher <stevenb.gcc@gmail.com> + Steven G. Kargl <kargl@gcc.gnu.org> + + * fortran/io.c (next_char): Deal with backslash escaped characters. + Issue warnings in non -std=gnu cases. + * fortran/primary.c (next_string_char): Issue warnings in non + 2007-01-26 Tobias Burnus <burnus@net-b.de> * lang-specs.h: Add support for .f03 and .F03 extensions. diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 312bb39..8c17b3a 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -137,11 +137,52 @@ next_char (int in_string) c = gfc_next_char_literal (in_string); if (c == '\n') c = '\0'; + } + + if (gfc_option.flag_backslash && c == '\\') + { + locus old_locus = gfc_current_locus; - if (mode == MODE_COPY) - *format_string++ = c; + 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; + + default: + /* Unknown backslash codes are simply not expanded. */ + gfc_current_locus = old_locus; + break; + } + + if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings) + gfc_warning ("Extension: backslash character at %C"); } + if (mode == MODE_COPY) + *format_string++ = c; + c = TOUPPER (c); return c; } diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index a2f70a0..64cc5e4 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -764,6 +764,9 @@ next_string_char (char delimiter) gfc_current_locus = old_locus; break; } + + if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings) + gfc_warning ("Extension: backslash character at %C"); } if (c != delimiter) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bfa9388..536b038 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-01-26 Steven G. Kargl <kargl@gcc.gnu.org> + + * gfortran.dg/backslash_3.f: New test. + 2007-01-26 Richard Guenther <rguenther@suse.de> * gcc.dg/tree-ssa/pr23382.c: Fix typo. diff --git a/gcc/testsuite/gfortran.dg/backslash_3.f b/gcc/testsuite/gfortran.dg/backslash_3.f new file mode 100644 index 0000000..08c86f3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/backslash_3.f @@ -0,0 +1,25 @@ +C { dg-do run } +C PR fortran/30278 + program a + character(len=1), parameter :: c1 = char(8), c2 = char(92) + character(len=35) str1, str2 + character(len=37) :: str4, str3 + + open(10, status='scratch') + write(10, 100) + rewind(10) + read(10,'(A34)') str1 + str2 = 'Does ' // c1 // 'ackslash result in ' // c1 // 'ackslash' + if (str1 .ne. str2) call abort + + rewind(10) + write (10, 200) + rewind(10) + read(10,'(A37)') str3 + str4 = 'Does ' //c2// 'backslash result in ' //c2// 'backslash' + if (str3 .ne. str4) call abort + + stop + 100 format ('Does \backslash result in \backslash') + 200 format ('Does \\backslash result in \\backslash') + end |