diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2000-01-12 00:35:36 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2000-01-12 00:35:36 +0000 |
commit | 40c79d58a3f379be9eb020e7d338319bf0e93907 (patch) | |
tree | e9b1edb4e28f5f27868000490ca3a879bdf09c87 /gcc | |
parent | 2e76d35c7c6d9da8bbe0743362f43699cb384b56 (diff) | |
download | gcc-40c79d58a3f379be9eb020e7d338319bf0e93907.zip gcc-40c79d58a3f379be9eb020e7d338319bf0e93907.tar.gz gcc-40c79d58a3f379be9eb020e7d338319bf0e93907.tar.bz2 |
cpplib.h (struct cpp_options): Change lang_asm to char.
2000-01-11 16:24 -0800 Zack Weinberg <zack@wolery.cumb.org>
* cpplib.h (struct cpp_options): Change lang_asm to char.
Add lang_fortran.
* cppinit.c (builtin_array): Take out __STDC_VERSION__, it's
done in cpp_handle_option now.
(initialize_builtins): Take out special case code used only by
__STDC_VERSION__.
(cpp_handle_option): Turn off trigraphs and trigraph warnings
if -traditional. Recognize -lang-fortran and set
lang_fortran, also turn off cplusplus_comments.
(print_help): Document -lang-fortran.
* cpplib.c (handle_directive): Ignore `# 123 "file"' if
lang_asm. Ignore all directives other than `# 123 "file"' if
CPP_PREPROCESSED.
(cpp_get_token): If -traditional, don't recognize directives
unless the # is in column 1.
(parse_string): If lang_fortran or lang_asm, silently
terminate strings ('' or "") at end of line.
Remove unnecessary braces.
From-SVN: r31342
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 24 | ||||
-rw-r--r-- | gcc/cppinit.c | 17 | ||||
-rw-r--r-- | gcc/cpplib.c | 42 | ||||
-rw-r--r-- | gcc/cpplib.h | 14 |
4 files changed, 72 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5879885..613166f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,26 @@ -2000-01-11 Alexandre Oliva <oliva@lsd.ic.unicamp.br>, Richard Henderson <rth@cygnus.com> +2000-01-11 16:24 -0800 Zack Weinberg <zack@wolery.cumb.org> + + * cpplib.h (struct cpp_options): Change lang_asm to char. + Add lang_fortran. + * cppinit.c (builtin_array): Take out __STDC_VERSION__, it's + done in cpp_handle_option now. + (initialize_builtins): Take out special case code used only by + __STDC_VERSION__. + (cpp_handle_option): Turn off trigraphs and trigraph warnings + if -traditional. Recognize -lang-fortran and set + lang_fortran, also turn off cplusplus_comments. + (print_help): Document -lang-fortran. + * cpplib.c (handle_directive): Ignore `# 123 "file"' if + lang_asm. Ignore all directives other than `# 123 "file"' if + CPP_PREPROCESSED. + (cpp_get_token): If -traditional, don't recognize directives + unless the # is in column 1. + (parse_string): If lang_fortran or lang_asm, silently + terminate strings ('' or "") at end of line. + Remove unnecessary braces. + +2000-01-11 Alexandre Oliva <oliva@lsd.ic.unicamp.br> + Richard Henderson <rth@cygnus.com> * resource.c (mark_referenced_resources): Mark a set strict_low_part as used. diff --git a/gcc/cppinit.c b/gcc/cppinit.c index b5c5d3a..b854a30 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -496,8 +496,6 @@ cpp_cleanup (pfile) VALUE (if any). FLAGS tweaks the behavior a little: DUMP write debug info for this macro STDC define only if not -traditional - C89 define only if -lang-c89 - C9X define only if -lang-c9x ULP value is the global user_label_prefix (which can't be put directly into the table). */ @@ -511,8 +509,6 @@ struct builtin }; #define DUMP 0x01 #define STDC 0x02 -#define C89 0x04 -#define C9X 0x08 #define ULP 0x10 static const struct builtin builtin_array[] = @@ -536,8 +532,6 @@ static const struct builtin builtin_array[] = { "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP }, #endif { "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP }, - { "__STDC_VERSION__", "199409L", T_CONST, DUMP|STDC|C89 }, - { "__STDC_VERSION__", "199909L", T_CONST, DUMP|STDC|C9X }, { 0, 0, 0, 0 } }; @@ -555,10 +549,6 @@ initialize_builtins (pfile) { if ((b->flags & STDC) && CPP_TRADITIONAL (pfile)) continue; - if ((b->flags & C89) && CPP_OPTIONS (pfile)->c9x) - continue; - if ((b->flags & C9X) && !CPP_OPTIONS (pfile)->c9x) - continue; val = (b->flags & ULP) ? user_label_prefix : b->value; len = strlen (b->name); @@ -571,8 +561,6 @@ initialize_builtins (pfile) } #undef DUMP #undef STDC -#undef C89 -#undef C9X #undef ULP /* Another subroutine of cpp_start_read. This one sets up to do @@ -1312,6 +1300,8 @@ cpp_handle_option (pfile, argc, argv) { opts->traditional = 1; opts->cplusplus_comments = 0; + opts->trigraphs = 0; + opts->warn_trigraphs = 0; } else if (!strcmp (argv[i], "-trigraphs")) opts->trigraphs = 1; @@ -1339,6 +1329,8 @@ cpp_handle_option (pfile, argc, argv) opts->c9x = 0, opts->objc = 1; if (! strcmp (argv[i], "-lang-asm")) opts->lang_asm = 1; + if (! strcmp (argv[i], "-lang-fortran")) + opts->lang_fortran = 1, opts->cplusplus_comments = 0; if (! strcmp (argv[i], "-lint")) opts->for_lint = 1; if (! strcmp (argv[i], "-lang-chill")) @@ -1722,6 +1714,7 @@ Switches:\n\ -lang-objc Assume that the input sources are in ObjectiveC\n\ -lang-objc++ Assume that the input sources are in ObjectiveC++\n\ -lang-asm Assume that the input sources are in assembler\n\ + -lang-fortran Assume that the input sources are in Fortran\n\ -lang-chill Assume that the input sources are in Chill\n\ -std=<std name> Specify the conformance standard; one of:\n\ gnu89, gnu9x, c89, c9x, iso9899:1990,\n\ diff --git a/gcc/cpplib.c b/gcc/cpplib.c index c3e3960..90f6c80 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -527,11 +527,18 @@ handle_directive (pfile) cpp_skip_hspace (pfile); c = PEEKC (); + /* # followed by a number is equivalent to #line. Do not recognize + this form in assembly language source files. Complain about this + form if we're being pedantic, but not if this is regurgitated + input (preprocessed or fed back in by the C++ frontend). */ if (c >= '0' && c <= '9') { - /* Handle # followed by a line number. Complain about using that - form if we're being pedantic, but not if this is regurgitated - input (preprocessed or fed back in by the C++ frontend). */ + if (CPP_OPTIONS (pfile)->lang_asm) + { + skip_rest_of_line (pfile); + return 1; + } + if (CPP_PEDANTIC (pfile) && ! CPP_PREPROCESSED (pfile) && ! CPP_BUFFER (pfile)->manual_pop) @@ -540,6 +547,11 @@ handle_directive (pfile) return 1; } + /* If we are rescanning preprocessed input, don't obey any directives + other than # nnn. */ + if (CPP_PREPROCESSED (pfile)) + return 0; + /* Now find the directive name. */ CPP_PUTC (pfile, '#'); parse_name (pfile, GETC()); @@ -2388,6 +2400,12 @@ cpp_get_token (pfile) if (!pfile->only_seen_white) goto randomchar; + /* -traditional directives are recognized only with the # in + column 1. + XXX Layering violation. */ + if (CPP_TRADITIONAL (pfile) + && CPP_BUFFER (pfile)->cur - CPP_BUFFER (pfile)->line_base != 1) + goto randomchar; if (handle_directive (pfile)) return CPP_DIRECTIVE; pfile->only_seen_white = 0; @@ -2872,9 +2890,17 @@ parse_string (pfile, c) case '\n': CPP_BUMP_LINE (pfile); pfile->lineno++; + + /* In Fortran and assembly language, silently terminate + strings of either variety at end of line. This is a + kludge around not knowing where comments are in these + languages. */ + if (CPP_OPTIONS (pfile)->lang_fortran + || CPP_OPTIONS (pfile)->lang_asm) + return; /* Character constants may not extend over multiple lines. - In ANSI, neither may strings. We accept multiline strings - as an extension. */ + In Standard C, neither may strings. We accept multiline + strings as an extension. */ if (c == '\'') { cpp_error_with_line (pfile, start_line, start_column, @@ -2882,10 +2908,8 @@ parse_string (pfile, c) return; } if (CPP_PEDANTIC (pfile) && pfile->multiline_string_line == 0) - { - cpp_pedwarn_with_line (pfile, start_line, start_column, - "string constant runs past end of line"); - } + cpp_pedwarn_with_line (pfile, start_line, start_column, + "string constant runs past end of line"); if (pfile->multiline_string_line == 0) pfile->multiline_string_line = start_line; break; diff --git a/gcc/cpplib.h b/gcc/cpplib.h index f18a61d..a517a26 100644 --- a/gcc/cpplib.h +++ b/gcc/cpplib.h @@ -346,10 +346,18 @@ struct cpp_options { char objc; - /* Nonzero means this is an assembly file, and allow - unknown directives, which could be comments. */ + /* Nonzero means this is an assembly file, so ignore unrecognized + directives and the "# 33" form of #line, both of which are + probably comments. Also, permit unbalanced ' strings (again, + likely to be in comments). */ - int lang_asm; + char lang_asm; + + /* Nonzero means this is Fortran, and we don't know where the + comments are, so permit unbalanced ' strings. Unlike lang_asm, + this does not ignore unrecognized directives. */ + + char lang_fortran; /* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */ |