diff options
author | Tom Wood <wood@gnu.org> | 1992-07-01 12:58:09 +0000 |
---|---|---|
committer | Tom Wood <wood@gnu.org> | 1992-07-01 12:58:09 +0000 |
commit | a3100298b45f4e059f519c7e675330130c035ef0 (patch) | |
tree | c6909f7341d467275d2b569db10ee820a9792648 /gcc | |
parent | 207f835880ce6053a22e5029d2b5449af5dfeaf4 (diff) | |
download | gcc-a3100298b45f4e059f519c7e675330130c035ef0.zip gcc-a3100298b45f4e059f519c7e675330130c035ef0.tar.gz gcc-a3100298b45f4e059f519c7e675330130c035ef0.tar.bz2 |
Undo rcs botch
From-SVN: r1370
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-lex.c | 55 | ||||
-rw-r--r-- | gcc/c-pragma.c | 39 |
2 files changed, 50 insertions, 44 deletions
diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 75a7f4d..8d91eb1 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -482,13 +482,7 @@ check_newline () && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n')) { #ifdef HANDLE_SYSV_PRAGMA - c = handle_sysv_pragma (finput, c); - if (c >= 0) - ; - else if (nextchar >= 0) - c = nextchar, nextchar = -1; - else - c = getc (finput); + return handle_sysv_pragma (finput, c); #endif /* HANDLE_SYSV_PRAGMA */ #ifdef HANDLE_PRAGMA HANDLE_PRAGMA (finput); @@ -741,9 +735,8 @@ linenum: #ifdef HANDLE_SYSV_PRAGMA /* Handle a #pragma directive. INPUT is the current input stream, - and C is a character to reread. - Returns a character for the caller to reread, - or -1 meaning there isn't one. */ + and C is a character to reread. Processes the entire input line + and returns a character for the caller to reread: either \n or EOF. */ /* This function has to be in this file, in order to get at the token types. */ @@ -753,26 +746,32 @@ handle_sysv_pragma (input, c) FILE *input; int c; { - while (c == ' ' || c == '\t') - c = getc (input); - if (c == '\n' || c == EOF) - { - handle_pragma_token (0, 0); - return c; - } - ungetc (c, input); - switch (yylex ()) + for (;;) { - case IDENTIFIER: - case TYPENAME: - case STRING: - case CONSTANT: - handle_pragma_token (token_buffer, yylval.ttype); - break; - default: - handle_pragma_token (token_buffer, 0); + while (c == ' ' || c == '\t') + c = getc (input); + if (c == '\n' || c == EOF) + { + handle_pragma_token (0, 0); + return c; + } + ungetc (c, input); + switch (yylex ()) + { + case IDENTIFIER: + case TYPENAME: + case STRING: + case CONSTANT: + handle_pragma_token (token_buffer, yylval.ttype); + break; + default: + handle_pragma_token (token_buffer, 0); + } + if (nextchar >= 0) + c = nextchar, nextchar = -1; + else + c = getc (input); } - return -1; } #endif /* HANDLE_SYSV_PRAGMA */ diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c index e8324ca..934318e 100644 --- a/gcc/c-pragma.c +++ b/gcc/c-pragma.c @@ -23,12 +23,20 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HANDLE_SYSV_PRAGMA +/* Support #pragma weak by default if WEAK_ASM_OP is defined. */ +#if !defined (HANDLE_PRAGMA_WEAK) && defined (WEAK_ASM_OP) +#define HANDLE_PRAGMA_WEAK 1 +#endif + /* When structure field packing is in effect, this variable is the number of bits to use as the maximum alignment. When packing is not in effect, this is zero. */ extern int maximum_field_alignment; +/* File used for outputting assembler code. */ +extern FILE *asm_out_file; + /* Handle one token of a pragma directive. TOKEN is the current token, and STRING is its printable form. */ @@ -64,27 +72,30 @@ handle_pragma_token (string, token) else warning ("malformed `#pragma pack'"); } -#ifdef WEAK_ASM_OP else if (type == ps_weak) { - if (state == ps_name || state == ps_value) +#ifdef HANDLE_PRAGMA_WEAK + if (HANDLE_PRAGMA_WEAK) { - fprintf (asm_out_file, "\t%s\t", WEAK_ASM_OP); - ASM_OUTPUT_LABELREF (asm_out_file, name); - fputc ('\n', asm_out_file); - if (state == ps_value) + if (state == ps_name || state == ps_value) { - fprintf (asm_out_file, "\t%s\t", SET_ASM_OP); + fprintf (asm_out_file, "\t%s\t", WEAK_ASM_OP); ASM_OUTPUT_LABELREF (asm_out_file, name); - fputc (',', asm_out_file); - ASM_OUTPUT_LABELREF (asm_out_file, value); fputc ('\n', asm_out_file); + if (state == ps_value) + { + fprintf (asm_out_file, "\t%s\t", SET_ASM_OP); + ASM_OUTPUT_LABELREF (asm_out_file, name); + fputc (',', asm_out_file); + ASM_OUTPUT_LABELREF (asm_out_file, value); + fputc ('\n', asm_out_file); + } } + else if (! (state == ps_done || state == ps_start)) + warning ("malformed `#pragma weak'"); } - else if (! (state == ps_done || state == ps_start)) - warning ("malformed `#pragma weak'"); +#endif /* HANDLE_PRAMA_WEAK */ } -#endif /* WEAK_ASM_OP */ type = state = ps_start; return; @@ -97,10 +108,8 @@ handle_pragma_token (string, token) { if (strcmp (IDENTIFIER_POINTER (token), "pack") == 0) type = state = ps_pack; -#ifdef WEAK_ASM_OP else if (strcmp (IDENTIFIER_POINTER (token), "weak") == 0) type = state = ps_weak; -#endif else type = state = ps_done; } @@ -108,7 +117,6 @@ handle_pragma_token (string, token) type = state = ps_done; break; -#ifdef WEAK_ASM_OP case ps_weak: if (token && TREE_CODE (token) == IDENTIFIER_NODE) { @@ -136,7 +144,6 @@ handle_pragma_token (string, token) case ps_value: state = ps_bad; break; -#endif /* WEAK_ASM_OP */ case ps_pack: if (strcmp (string, "(") == 0) |