diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2002-04-14 18:42:47 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2002-04-14 18:42:47 +0000 |
commit | ebef4e8ca795b46b1f51a82d4b93c35f1eacd54c (patch) | |
tree | 75fa26f503af564c85d2a564dac4f51a833dca58 /gcc/cppexp.c | |
parent | c19a385911ad926bd88713535b5a93c947d9f1bd (diff) | |
download | gcc-ebef4e8ca795b46b1f51a82d4b93c35f1eacd54c.zip gcc-ebef4e8ca795b46b1f51a82d4b93c35f1eacd54c.tar.gz gcc-ebef4e8ca795b46b1f51a82d4b93c35f1eacd54c.tar.bz2 |
cpperror.c (print_location): Don't print include chain if line == 0.
* cpperror.c (print_location): Don't print include chain
if line == 0.
(cpp_begin_message): Update to use DL_ macros.
(cpp_ice, cpp_fatal, cpp_error_from_errno, cpp_warning,
cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line,
cpp_notice, cpp_notice_from_errno): Remove.
(cpp_error, cpp_error_with_line): Update to take a diagnostic
level.
(cpp_errno): New.
* cppexp.c (CPP_ICE): Remove.
(SYNTAX_ERROR, SYNTAX_ERROR2, parse_number, parse_defined,
lex, integer_overflow, _cpp_parse_expr): Update.
* cppfiles.c (read_include_file, find_include_file,
handle_missing_header, _cpp_read_file, remap_filename): Update.
* cpphash.h (enum error_type): Remove.
(_cpp_begin_message): Update.
* cppinit.c (append_include_chain, remove_dup_dirs, output_deps,
cpp_handle_option, cpp_post_options): Update.
* cpplex.c (trigraph_p, skip_escaped_newlines, skip_block_comment,
skip_whitespace, parse_identifier, parse_slow, parse_string,
_cpp_lex_direct, cpp_spell_token, maybe_read_ucs, cpp_parse_escape,
cpp_interpret_charconst): Update.
* cpplib.c (check_eol, directive_diagnostics, _cpp_handle_directive,
lex_macro_node, do_undef, glue_header_name, parse_include,
do_include_common, read_flag, do_line, do_linemarker, do_ident,
cpp_register_pragma, do_pragma_once, do_pragma_system_header,
do_pragma_poison, do_pragma_dependency, _cpp_do__Pragma, do_else,
do_elif, do_endif, parse_answer, parse_assertion, do_assert,
_cpp_pop_buffer, do_diagnostic): Update.
* cpplib.h (DL_WARNING, DL_WARNING_SYSHDR, DL_PEDWARN, DL_ERROR,
DL_FATAL, DL_ICE, DL_EXTRACT, DL_WARNING_P): New.
(cpp_ice, cpp_fatal, cpp_error_from_errno, cpp_warning,
cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line,
cpp_notice, cpp_notice_from_errno): Remove.
(cpp_error, cpp_error_with_line): Update to take a diagnostic
level.
(cpp_errno): New.
* cppmacro.c (builtin_macro, stringify_arg, paste_all_tokens,
collect_args, enter_macro_context, save_parameter, parse_params,
_cpp_create_definition, check_trad_stringification,
cpp_macro_definition): Update.
* cppmain.c (cpp_preprocess_file): Update.
* fix-header.c (read_scan_file): Update.
From-SVN: r52302
Diffstat (limited to 'gcc/cppexp.c')
-rw-r--r-- | gcc/cppexp.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/gcc/cppexp.c b/gcc/cppexp.c index 5766a79..e5b5ef7 100644 --- a/gcc/cppexp.c +++ b/gcc/cppexp.c @@ -54,12 +54,10 @@ struct op /* With -O2, gcc appears to produce nice code, moving the error message load and subsequent jump completely out of the main path. */ -#define CPP_ICE(msgid) \ - do { cpp_ice (pfile, msgid); goto syntax_error; } while(0) #define SYNTAX_ERROR(msgid) \ - do { cpp_error (pfile, msgid); goto syntax_error; } while(0) + do { cpp_error (pfile, DL_ERROR, msgid); goto syntax_error; } while(0) #define SYNTAX_ERROR2(msgid, arg) \ - do { cpp_error (pfile, msgid, arg); goto syntax_error; } while(0) + do { cpp_error (pfile, DL_ERROR, msgid, arg); goto syntax_error; } while(0) struct suffix { @@ -172,23 +170,26 @@ parse_number (pfile, tok) if (CPP_WTRADITIONAL (pfile) && sufftab[i].u && ! cpp_sys_macro_p (pfile)) - cpp_warning (pfile, "traditional C rejects the `U' suffix"); + cpp_error (pfile, DL_WARNING, "traditional C rejects the `U' suffix"); if (sufftab[i].l == 2 && CPP_OPTION (pfile, pedantic) && ! CPP_OPTION (pfile, c99)) - cpp_pedwarn (pfile, "too many 'l' suffixes in integer constant"); + cpp_error (pfile, DL_PEDWARN, + "too many 'l' suffixes in integer constant"); } if (base <= largest_digit) - cpp_pedwarn (pfile, "integer constant contains digits beyond the radix"); + cpp_error (pfile, DL_PEDWARN, + "integer constant contains digits beyond the radix"); if (overflow) - cpp_pedwarn (pfile, "integer constant out of range"); + cpp_error (pfile, DL_PEDWARN, "integer constant out of range"); /* If too big to be signed, consider it unsigned. */ else if ((HOST_WIDEST_INT) n < 0 && ! op.unsignedp) { if (base == 10) - cpp_warning (pfile, "integer constant is so large that it is unsigned"); + cpp_error (pfile, DL_WARNING, + "integer constant is so large that it is unsigned"); op.unsignedp = 1; } @@ -197,7 +198,7 @@ parse_number (pfile, tok) return op; invalid_suffix: - cpp_error (pfile, "invalid suffix '%.*s' on integer constant", + cpp_error (pfile, DL_ERROR, "invalid suffix '%.*s' on integer constant", (int) (end - p), p); syntax_error: op.op = CPP_ERROR; @@ -230,20 +231,21 @@ parse_defined (pfile) node = token->val.node; if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN) { - cpp_error (pfile, "missing ')' after \"defined\""); + cpp_error (pfile, DL_ERROR, "missing ')' after \"defined\""); node = 0; } } else { - cpp_error (pfile, "operator \"defined\" requires an identifier"); + cpp_error (pfile, DL_ERROR, + "operator \"defined\" requires an identifier"); if (token->flags & NAMED_OP) { cpp_token op; op.flags = 0; op.type = token->type; - cpp_error (pfile, + cpp_error (pfile, DL_ERROR, "(\"%s\" is an alternative token for \"%s\" in C++)", cpp_token_as_text (pfile, token), cpp_token_as_text (pfile, &op)); @@ -255,7 +257,8 @@ parse_defined (pfile) else { if (pfile->context != initial_context) - cpp_warning (pfile, "this use of \"defined\" may not be portable"); + cpp_error (pfile, DL_WARNING, + "this use of \"defined\" may not be portable"); op.value = node->type == NT_MACRO; op.unsignedp = 0; @@ -326,8 +329,9 @@ lex (pfile, skip_evaluation) and stdbool.h has not been included. */ if (CPP_PEDANTIC (pfile) && ! cpp_defined (pfile, DSC("__bool_true_false_are_defined"))) - cpp_pedwarn (pfile, "ISO C++ does not permit \"%s\" in #if", - NODE_NAME (token->val.node)); + cpp_error (pfile, DL_PEDWARN, + "ISO C++ does not permit \"%s\" in #if", + NODE_NAME (token->val.node)); return op; } else @@ -337,8 +341,8 @@ lex (pfile, skip_evaluation) op.value = 0; if (CPP_OPTION (pfile, warn_undef) && !skip_evaluation) - cpp_warning (pfile, "\"%s\" is not defined", - NODE_NAME (token->val.node)); + cpp_error (pfile, DL_WARNING, "\"%s\" is not defined", + NODE_NAME (token->val.node)); return op; } @@ -378,7 +382,8 @@ integer_overflow (pfile) cpp_reader *pfile; { if (CPP_PEDANTIC (pfile)) - cpp_pedwarn (pfile, "integer overflow in preprocessor expression"); + cpp_error (pfile, DL_PEDWARN, + "integer overflow in preprocessor expression"); } /* Handle shifting A left by B bits. UNSIGNEDP is non-zero if A is @@ -657,8 +662,8 @@ _cpp_parse_expr (pfile) switch (top[1].op) { default: - cpp_ice (pfile, "impossible operator '%s'", - op_as_text (pfile, top[1].op)); + cpp_error (pfile, DL_ICE, "impossible operator '%s'", + op_as_text (pfile, top[1].op)); goto syntax_error; case CPP_NOT: UNARY(!); break; @@ -688,7 +693,7 @@ _cpp_parse_expr (pfile) top->flags |= HAVE_VALUE; if (CPP_WTRADITIONAL (pfile)) - cpp_warning (pfile, + cpp_error (pfile, DL_WARNING, "traditional C rejects the unary plus operator"); } else @@ -767,7 +772,8 @@ _cpp_parse_expr (pfile) break; case CPP_COMMA: if (CPP_PEDANTIC (pfile)) - cpp_pedwarn (pfile, "comma operator in operand of #if"); + cpp_error (pfile, DL_PEDWARN, + "comma operator in operand of #if"); top->value = v2; top->unsignedp = unsigned2; break; @@ -860,7 +866,10 @@ _cpp_parse_expr (pfile) result = (top[1].value != 0); if (top != stack) - CPP_ICE ("unbalanced stack in #if"); + { + cpp_error (pfile, DL_ICE, "unbalanced stack in #if"); + goto syntax_error; + } else if (!(top[1].flags & HAVE_VALUE)) { SYNTAX_ERROR ("#if with no expression"); |