diagnostic.h (diagnostic_override_option_index): New macro to set a diagnostic's option_index.
* diagnostic.h (diagnostic_override_option_index): New macro to set a diagnostic's option_index. * c-tree.h (c_cpp_error): Add warning reason argument. * opts.c (_warning_as_error_callback): New. (register_warning_as_error_callback): Store callback for warnings enabled via enable_warning_as_error. (enable_warning_as_error): Call callback, minor code tidy. * opts.h (register_warning_as_error_callback): Declare. * c-opts.c (warning_as_error_callback): New, set cpp_opts flag in response to -Werror=. (c_common_init_options): Register warning_as_error_callback in opts.c. * common.opt: Add -Wno-cpp option. * c-common.c (struct reason_option_codes_t): Map cpp warning reason codes to gcc option indexes. * (c_option_controlling_cpp_error): New function, lookup the gcc option index for a cpp warning reason code. * (c_cpp_error): Add warning reason argument, call c_option_controlling_cpp_error for diagnostic_override_option_index. * doc/invoke.texi: Document -Wno-cpp. * cpp.c (cb_cpp_error): Add warning reason argument, set a value for diagnostic_override_option_index if CPP_W_WARNING_DIRECTIVE. * directives.c (do_diagnostic): Add warning reason argument, call appropriate error reporting function for code. (directive_diagnostics): Call specific warning functions with warning reason where appropriate. (do_error, do_warning, do_pragma_dependency): Add warning reason argument to do_diagnostic calls. * macro.c (_cpp_warn_if_unused_macro, enter_macro_context, _cpp_create_definition): Call specific warning functions with warning reason where appropriate. * Makefile.in: Add new diagnostic functions to gettext translations. * include/cpplib.h (struct cpp_callbacks): Add warning reason code to error callback. (CPP_DL_WARNING, CPP_DL_WARNING_SYSHDR, CPP_DL_PEDWARN, CPP_DL_ERROR, CPP_DL_ICE, CPP_DL_NOTE, CPP_DL_FATAL): Replace macros with enums. (CPP_W_NONE, CPP_W_DEPRECATED, CPP_W_COMMENTS, CPP_W_MISSING_INCLUDE_DIRS, CPP_W_TRIGRAPHS, CPP_W_MULTICHAR, CPP_W_TRADITIONAL, CPP_W_LONG_LONG, CPP_W_ENDIF_LABELS, CPP_W_NUM_SIGN_CHANGE, CPP_W_VARIADIC_MACROS, CPP_W_BUILTIN_MACRO_REDEFINED, CPP_W_DOLLARS, CPP_W_UNDEF, CPP_W_UNUSED_MACROS, CPP_W_CXX_OPERATOR_NAMES, CPP_W_NORMALIZE, CPP_W_INVALID_PCH, CPP_W_WARNING_DIRECTIVE): New enums for cpp warning reason codes. (cpp_warning, cpp_pedwarning, cpp_warning_syshdr, cpp_warning_with_line, cpp_pedwarning_with_line, cpp_warning_with_line_syshdr): New specific error reporting functions. * pch.c (cpp_valid_state): Call specific warning functions with warning reason where appropriate. * errors.c (cpp_diagnostic, cpp_diagnostic_with_line): New central diagnostic handlers. (cpp_warning, cpp_pedwarning, cpp_warning_syshdr, cpp_warning_with_line, cpp_pedwarning_with_line, cpp_warning_with_line_syshdr): New specific error reporting functions. * expr.c (cpp_classify_number, eval_token, num_unary_op): Call specific warning functions with warning reason where appropriate. * lex.c (_cpp_process_line_notes, _cpp_skip_block_comment, warn_about_normalization, lex_identifier_intern, lex_identifier, _cpp_lex_direct): Ditto. * charset.c (_cpp_valid_ucn, convert_hex, convert_escape, narrow_str_to_charconst): Ditto. * gcc.dg/cpp/warn-undef-2.c: New. * gcc.dg/cpp/warn-traditional-2.c: New. * gcc.dg/cpp/warn-comments-2.c: New. * gcc.dg/cpp/warning-directive-1.c: New. * gcc.dg/cpp/warn-long-long.c: New. * gcc.dg/cpp/warn-traditional.c: New. * gcc.dg/cpp/warn-variadic-2.c: New. * gcc.dg/cpp/warn-undef.c: New. * gcc.dg/cpp/warn-normalized-1.c: New. * gcc.dg/cpp/warning-directive-2.c: New. * gcc.dg/cpp/warn-long-long-2.c: New. * gcc.dg/cpp/warn-variadic.c: New. * gcc.dg/cpp/warn-normalized-2.c: New. * gcc.dg/cpp/warning-directive-3.c: New. * gcc.dg/cpp/warn-deprecated-2.c: New. * gcc.dg/cpp/warn-trigraphs-1.c: New. * gcc.dg/cpp/warn-multichar-2.c: New. * gcc.dg/cpp/warn-normalized-3.c: New. * gcc.dg/cpp/warning-directive-4.c: New. * gcc.dg/cpp/warn-unused-macros.c: New. * gcc.dg/cpp/warn-trigraphs-2.c: New. * gcc.dg/cpp/warn-cxx-compat-2.c: New. * gcc.dg/cpp/warn-cxx-compat.c: New. * gcc.dg/cpp/warn-redefined.c: New. * gcc.dg/cpp/warn-trigraphs-3.c: New. * gcc.dg/cpp/warn-unused-macros-2.c: New. * gcc.dg/cpp/warn-deprecated.c: New. * gcc.dg/cpp/warn-trigraphs-4.c: New. * gcc.dg/cpp/warn-redefined-2.c: New. * gcc.dg/cpp/warn-comments.c: New. * gcc.dg/cpp/warn-multichar.c: New. * g++.dg/cpp/warning-directive-1.C: New. * g++.dg/cpp/warning-directive-2.C: New. * g++.dg/cpp/warning-directive-3.C: New. * g++.dg/cpp/warning-directive-4.C: New. * gfortran.dg/warning-directive-1.F90: New. * gfortran.dg/warning-directive-3.F90: New. * gfortran.dg/warning-directive-2.F90: New. * gfortran.dg/warning-directive-4.F90: New. From-SVN: r158079
This commit is contained in:
parent
58e0f0d345
commit
87cf065171
61 changed files with 879 additions and 139 deletions
|
@ -497,9 +497,9 @@ struct cpp_callbacks
|
|||
|
||||
/* Called to emit a diagnostic. This callback receives the
|
||||
translated message. */
|
||||
bool (*error) (cpp_reader *, int, source_location, unsigned int,
|
||||
bool (*error) (cpp_reader *, int, int, source_location, unsigned int,
|
||||
const char *, va_list *)
|
||||
ATTRIBUTE_FPTR_PRINTF(5,0);
|
||||
ATTRIBUTE_FPTR_PRINTF(6,0);
|
||||
|
||||
/* Callbacks for when a macro is expanded, or tested (whether
|
||||
defined or not at the time) in #ifdef, #ifndef or "defined". */
|
||||
|
@ -829,25 +829,57 @@ cpp_num cpp_num_sign_extend (cpp_num, size_t);
|
|||
position in the translation unit with it, use cpp_error_with_line
|
||||
with a line number of zero. */
|
||||
|
||||
/* Warning, an error with -Werror. */
|
||||
#define CPP_DL_WARNING 0x00
|
||||
/* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */
|
||||
#define CPP_DL_WARNING_SYSHDR 0x01
|
||||
/* Warning, an error with -pedantic-errors or -Werror. */
|
||||
#define CPP_DL_PEDWARN 0x02
|
||||
/* An error. */
|
||||
#define CPP_DL_ERROR 0x03
|
||||
/* An internal consistency check failed. Prints "internal error: ",
|
||||
otherwise the same as CPP_DL_ERROR. */
|
||||
#define CPP_DL_ICE 0x04
|
||||
/* An informative note following a warning. */
|
||||
#define CPP_DL_NOTE 0x05
|
||||
/* A fatal error. */
|
||||
#define CPP_DL_FATAL 0x06
|
||||
enum {
|
||||
/* Warning, an error with -Werror. */
|
||||
CPP_DL_WARNING = 0,
|
||||
/* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */
|
||||
CPP_DL_WARNING_SYSHDR,
|
||||
/* Warning, an error with -pedantic-errors or -Werror. */
|
||||
CPP_DL_PEDWARN,
|
||||
/* An error. */
|
||||
CPP_DL_ERROR,
|
||||
/* An internal consistency check failed. Prints "internal error: ",
|
||||
otherwise the same as CPP_DL_ERROR. */
|
||||
CPP_DL_ICE,
|
||||
/* An informative note following a warning. */
|
||||
CPP_DL_NOTE,
|
||||
/* A fatal error. */
|
||||
CPP_DL_FATAL
|
||||
};
|
||||
|
||||
/* Warning reason codes. Use a reason code of zero for unclassified warnings
|
||||
and errors that are not warnings. */
|
||||
enum {
|
||||
CPP_W_NONE = 0,
|
||||
CPP_W_DEPRECATED,
|
||||
CPP_W_COMMENTS,
|
||||
CPP_W_MISSING_INCLUDE_DIRS,
|
||||
CPP_W_TRIGRAPHS,
|
||||
CPP_W_MULTICHAR,
|
||||
CPP_W_TRADITIONAL,
|
||||
CPP_W_LONG_LONG,
|
||||
CPP_W_ENDIF_LABELS,
|
||||
CPP_W_NUM_SIGN_CHANGE,
|
||||
CPP_W_VARIADIC_MACROS,
|
||||
CPP_W_BUILTIN_MACRO_REDEFINED,
|
||||
CPP_W_DOLLARS,
|
||||
CPP_W_UNDEF,
|
||||
CPP_W_UNUSED_MACROS,
|
||||
CPP_W_CXX_OPERATOR_NAMES,
|
||||
CPP_W_NORMALIZE,
|
||||
CPP_W_INVALID_PCH,
|
||||
CPP_W_WARNING_DIRECTIVE
|
||||
};
|
||||
|
||||
/* Output a diagnostic of some kind. */
|
||||
extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_3;
|
||||
extern bool cpp_warning (cpp_reader *, int, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_3;
|
||||
extern bool cpp_pedwarning (cpp_reader *, int, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_3;
|
||||
extern bool cpp_warning_syshdr (cpp_reader *, int, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_3;
|
||||
|
||||
/* Output a diagnostic with "MSGID: " preceding the
|
||||
error string of errno. No location is printed. */
|
||||
|
@ -856,8 +888,18 @@ extern bool cpp_errno (cpp_reader *, int, const char *msgid);
|
|||
/* Same as cpp_error, except additionally specifies a position as a
|
||||
(translation unit) physical line and physical column. If the line is
|
||||
zero, then no location is printed. */
|
||||
extern bool cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
|
||||
const char *msgid, ...) ATTRIBUTE_PRINTF_5;
|
||||
extern bool cpp_error_with_line (cpp_reader *, int, source_location,
|
||||
unsigned, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_5;
|
||||
extern bool cpp_warning_with_line (cpp_reader *, int, source_location,
|
||||
unsigned, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_5;
|
||||
extern bool cpp_pedwarning_with_line (cpp_reader *, int, source_location,
|
||||
unsigned, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_5;
|
||||
extern bool cpp_warning_with_line_syshdr (cpp_reader *, int, source_location,
|
||||
unsigned, const char *msgid, ...)
|
||||
ATTRIBUTE_PRINTF_5;
|
||||
|
||||
/* In lex.c */
|
||||
extern int cpp_ideq (const cpp_token *, const char *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue