+2018-10-09 David Malcolm <dmalcolm@redhat.com>
+
+ * genmatch.c (error_cb): Rename to...
+ (diagnostic_cb): ...this, converting int params to enums.
+ (fatal_at): Update for renaming.
+ (warning_at): Likewise.
+ (main): Likewise.
+ * input.c (selftest::ebcdic_execution_charset::apply):
+ Update for renaming of...
+ (selftest::ebcdic_execution_charset::on_error): ...this, renaming
+ to...
+ (selftest::ebcdic_execution_charset::on_diagnostic): ...this,
+ converting level and reason to enums.
+ (class selftest::lexer_error_sink): Rename to...
+ (class selftest::lexer_test_options): ...this, renaming field
+ "m_errors" to "m_diagnostics".
+ (selftest::lexer_test_options::apply): Update for renaming of...
+ (selftest::lexer_test_options::on_error): ...this, renaming to...
+ (selftest::lexer_test_options::on_diagnostic): ...this
+ converting level and reason to enums.
+ (selftest::test_lexer_string_locations_raw_string_unterminated):
+ Update for renamings.
+ * opth-gen.awk (struct cpp_reason_option_codes_t): Use enum for
+ "reason".
+
2018-10-09 Paul A. Clarke <pc@us.ibm.com>
* config.gcc (powerpc*-*-*): Add pmmintrin.h to extra_headers.
+2018-10-09 David Malcolm <dmalcolm@redhat.com>
+
+ * c-common.c (c_option_controlling_cpp_error): Rename to...
+ (c_option_controlling_cpp_diagnostic): ...this, and convert
+ "reason" from int to enum.
+ (c_cpp_error): Rename to...
+ (c_cpp_diagnostic): ...this, converting level and reason to enums.
+ * c-common.h (c_cpp_error): Rename to...
+ (c_cpp_diagnostic): ...this, converting level and reason to enums.
+ * c-opts.c (c_common_init_options): Update for renaming.
+
2018-10-08 Richard Sandiford <richard.sandiford@arm.com>
PR c/87286
message, or 0 if none. */
static int
-c_option_controlling_cpp_error (int reason)
+c_option_controlling_cpp_diagnostic (enum cpp_warning_reason reason)
{
const struct cpp_reason_option_codes_t *entry;
return 0;
}
-/* Callback from cpp_error for PFILE to print diagnostics from the
+/* Callback from cpp_diagnostic for PFILE to print diagnostics from the
preprocessor. The diagnostic is of type LEVEL, with REASON set
to the reason code if LEVEL is represents a warning, at location
RICHLOC unless this is after lexing and the compiler's location
otherwise. */
bool
-c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level, int reason,
- rich_location *richloc,
- const char *msg, va_list *ap)
+c_cpp_diagnostic (cpp_reader *pfile ATTRIBUTE_UNUSED,
+ enum cpp_diagnostic_level level,
+ enum cpp_warning_reason reason,
+ rich_location *richloc,
+ const char *msg, va_list *ap)
{
diagnostic_info diagnostic;
diagnostic_t dlevel;
richloc->set_range (0, input_location, SHOW_RANGE_WITH_CARET);
diagnostic_set_info_translated (&diagnostic, msg, ap,
richloc, dlevel);
- diagnostic_override_option_index (&diagnostic,
- c_option_controlling_cpp_error (reason));
+ diagnostic_override_option_index
+ (&diagnostic,
+ c_option_controlling_cpp_diagnostic (reason));
ret = diagnostic_report_diagnostic (global_dc, &diagnostic);
if (level == CPP_DL_WARNING_SYSHDR)
global_dc->dc_warn_system_headers = save_warn_system_headers;
extern void c_cpp_builtins (cpp_reader *);
extern void c_cpp_builtins_optimize_pragma (cpp_reader *, tree, tree);
-extern bool c_cpp_error (cpp_reader *, int, int, rich_location *,
- const char *, va_list *)
+extern bool c_cpp_diagnostic (cpp_reader *, enum cpp_diagnostic_level,
+ enum cpp_warning_reason, rich_location *,
+ const char *, va_list *)
ATTRIBUTE_GCC_DIAG(5,0);
extern int c_common_has_attribute (cpp_reader *);
parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
ident_hash, line_table);
cb = cpp_get_callbacks (parse_in);
- cb->error = c_cpp_error;
+ cb->diagnostic = c_cpp_diagnostic;
cpp_opts = cpp_get_options (parse_in);
cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
+2018-10-09 David Malcolm <dmalcolm@redhat.com>
+
+ * cpp.c (gfc_cpp_init_0): Update for renamings.
+ (cb_cpp_error): Rename to...
+ (cb_cpp_diagnostic): ...this, converting level and reason to
+ enums.
+
2018-10-09 Tobias Burnus <burnus@net-b.de>
PR fortran/83522
static void cb_ident (cpp_reader *, source_location, const cpp_string *);
static void cb_used_define (cpp_reader *, source_location, cpp_hashnode *);
static void cb_used_undef (cpp_reader *, source_location, cpp_hashnode *);
-static bool cb_cpp_error (cpp_reader *, int, int, rich_location *,
- const char *, va_list *)
+static bool cb_cpp_diagnostic (cpp_reader *, enum cpp_diagnostic_level,
+ enum cpp_warning_reason, rich_location *,
+ const char *, va_list *)
ATTRIBUTE_GCC_DIAG(5,0);
void pp_dir_change (cpp_reader *, const char *);
cb->line_change = cb_line_change;
cb->ident = cb_ident;
cb->def_pragma = cb_def_pragma;
- cb->error = cb_cpp_error;
+ cb->diagnostic = cb_cpp_diagnostic;
if (gfc_cpp_option.dump_includes)
cb->include = cb_include;
Returns true if a diagnostic was emitted, false otherwise. */
static bool
-cb_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level, int reason,
- rich_location *richloc,
- const char *msg, va_list *ap)
+cb_cpp_diagnostic (cpp_reader *pfile ATTRIBUTE_UNUSED,
+ enum cpp_diagnostic_level level,
+ enum cpp_warning_reason reason,
+ rich_location *richloc,
+ const char *msg, va_list *ap)
{
diagnostic_info diagnostic;
diagnostic_t dlevel;
#if GCC_VERSION >= 4001
__attribute__((format (printf, 5, 0)))
#endif
-error_cb (cpp_reader *, int errtype, int, rich_location *richloc,
- const char *msg, va_list *ap)
+diagnostic_cb (cpp_reader *, enum cpp_diagnostic_level errtype,
+ enum cpp_warning_reason, rich_location *richloc,
+ const char *msg, va_list *ap)
{
const line_map_ordinary *map;
source_location location = richloc->get_loc ();
rich_location richloc (line_table, tk->src_loc);
va_list ap;
va_start (ap, msg);
- error_cb (NULL, CPP_DL_FATAL, 0, &richloc, msg, &ap);
+ diagnostic_cb (NULL, CPP_DL_FATAL, CPP_W_NONE, &richloc, msg, &ap);
va_end (ap);
}
rich_location richloc (line_table, loc);
va_list ap;
va_start (ap, msg);
- error_cb (NULL, CPP_DL_FATAL, 0, &richloc, msg, &ap);
+ diagnostic_cb (NULL, CPP_DL_FATAL, CPP_W_NONE, &richloc, msg, &ap);
va_end (ap);
}
rich_location richloc (line_table, tk->src_loc);
va_list ap;
va_start (ap, msg);
- error_cb (NULL, CPP_DL_WARNING, 0, &richloc, msg, &ap);
+ diagnostic_cb (NULL, CPP_DL_WARNING, CPP_W_NONE, &richloc, msg, &ap);
va_end (ap);
}
rich_location richloc (line_table, loc);
va_list ap;
va_start (ap, msg);
- error_cb (NULL, CPP_DL_WARNING, 0, &richloc, msg, &ap);
+ diagnostic_cb (NULL, CPP_DL_WARNING, CPP_W_NONE, &richloc, msg, &ap);
va_end (ap);
}
r = cpp_create_reader (CLK_GNUC99, NULL, line_table);
cpp_callbacks *cb = cpp_get_callbacks (r);
- cb->error = error_cb;
+ cb->diagnostic = diagnostic_cb;
/* Add the build directory to the #include "" search path. */
cpp_dir *dir = XCNEW (cpp_dir);
cpp_opts->narrow_charset = "IBM1047";
cpp_callbacks *callbacks = cpp_get_callbacks (test.m_parser);
- callbacks->error = on_error;
+ callbacks->diagnostic = on_diagnostic;
}
- static bool on_error (cpp_reader *pfile ATTRIBUTE_UNUSED,
- int level ATTRIBUTE_UNUSED,
- int reason ATTRIBUTE_UNUSED,
- rich_location *richloc ATTRIBUTE_UNUSED,
- const char *msgid, va_list *ap ATTRIBUTE_UNUSED)
+ static bool on_diagnostic (cpp_reader *pfile ATTRIBUTE_UNUSED,
+ enum cpp_diagnostic_level level ATTRIBUTE_UNUSED,
+ enum cpp_warning_reason reason ATTRIBUTE_UNUSED,
+ rich_location *richloc ATTRIBUTE_UNUSED,
+ const char *msgid, va_list *ap ATTRIBUTE_UNUSED)
ATTRIBUTE_FPTR_PRINTF(5,0)
{
gcc_assert (s_singleton);
ebcdic_execution_charset *ebcdic_execution_charset::s_singleton;
-/* A lexer_test_options subclass that records a list of error
+/* A lexer_test_options subclass that records a list of diagnostic
messages emitted by the lexer. */
-class lexer_error_sink : public lexer_test_options
+class lexer_diagnostic_sink : public lexer_test_options
{
public:
- lexer_error_sink ()
+ lexer_diagnostic_sink ()
{
gcc_assert (s_singleton == NULL);
s_singleton = this;
}
- ~lexer_error_sink ()
+ ~lexer_diagnostic_sink ()
{
gcc_assert (s_singleton == this);
s_singleton = NULL;
int i;
char *str;
- FOR_EACH_VEC_ELT (m_errors, i, str)
+ FOR_EACH_VEC_ELT (m_diagnostics, i, str)
free (str);
}
void apply (lexer_test &test) FINAL OVERRIDE
{
cpp_callbacks *callbacks = cpp_get_callbacks (test.m_parser);
- callbacks->error = on_error;
+ callbacks->diagnostic = on_diagnostic;
}
- static bool on_error (cpp_reader *pfile ATTRIBUTE_UNUSED,
- int level ATTRIBUTE_UNUSED,
- int reason ATTRIBUTE_UNUSED,
- rich_location *richloc ATTRIBUTE_UNUSED,
- const char *msgid, va_list *ap)
+ static bool on_diagnostic (cpp_reader *pfile ATTRIBUTE_UNUSED,
+ enum cpp_diagnostic_level level ATTRIBUTE_UNUSED,
+ enum cpp_warning_reason reason ATTRIBUTE_UNUSED,
+ rich_location *richloc ATTRIBUTE_UNUSED,
+ const char *msgid, va_list *ap)
ATTRIBUTE_FPTR_PRINTF(5,0)
{
char *msg = xvasprintf (msgid, *ap);
- s_singleton->m_errors.safe_push (msg);
+ s_singleton->m_diagnostics.safe_push (msg);
return true;
}
- auto_vec<char *> m_errors;
+ auto_vec<char *> m_diagnostics;
private:
- static lexer_error_sink *s_singleton;
+ static lexer_diagnostic_sink *s_singleton;
};
-lexer_error_sink *lexer_error_sink::s_singleton;
+lexer_diagnostic_sink *lexer_diagnostic_sink::s_singleton;
/* Constructor. Override line_table with a new instance based on CASE_,
and write CONTENT to a tempfile. Create a cpp_reader, and use it to
{
const char *content = "R\"ouch()ouCh\" /* etc */";
- lexer_error_sink errors;
- lexer_test test (case_, content, &errors);
+ lexer_diagnostic_sink diagnostics;
+ lexer_test test (case_, content, &diagnostics);
test.m_implicitly_expect_EOF = false;
/* Attempt to parse the raw string. */
const cpp_token *tok = test.get_token ();
ASSERT_EQ (tok->type, CPP_EOF);
- ASSERT_EQ (1, errors.m_errors.length ());
+ ASSERT_EQ (1, diagnostics.m_diagnostics.length ());
/* We expect the message "unterminated raw string"
in the "cpplib" translation domain.
It's not clear that dgettext is available on all supported hosts,
so this assertion is commented-out for now.
ASSERT_STREQ (dgettext ("cpplib", "unterminated raw string"),
- errors.m_errors[0]);
+ diagnostics.m_diagnostics[0]);
*/
}
print "#include <cpplib.h>"
print "struct cpp_reason_option_codes_t"
print "{"
-print " const int reason; /* cpplib message reason. */"
-print " const int option_code; /* gcc option that controls this message. */"
+print " /* cpplib message reason. */"
+print " const enum cpp_warning_reason reason;"
+print " /* gcc option that controls this message. */"
+print " const int option_code;"
print "};"
print ""
print "static const struct cpp_reason_option_codes_t cpp_reason_option_codes[] = {"
+2018-10-09 David Malcolm <dmalcolm@redhat.com>
+
+ * charset.c (noop_error_cb): Rename to...
+ (noop_diagnostic_cb): ...this, converting params to enums.
+ (cpp_interpret_string_ranges): Update for renaming and enums.
+ * directives.c (check_eol_1): Convert reason to enum.
+ (do_diagnostic): Convert code and reason to enum.
+ (do_error): Use CPP_W_NONE rather than 0.
+ (do_pragma_dependency): Likewise.
+ * errors.c (cpp_diagnostic_at): Convert level and reason to enums.
+ Update for renaming.
+ (cpp_diagnostic): Convert level and reason to enums.
+ (cpp_error): Convert level to enum.
+ (cpp_warning): Convert reason to enums.
+ (cpp_pedwarning): Likewise.
+ (cpp_warning_syshdr): Likewise.
+ (cpp_diagnostic_with_line): Convert level and reason to enums.
+ Update for renaming.
+ (cpp_error_with_line): Convert level to enum.
+ (cpp_warning_with_line): Convert reason to enums.
+ (cpp_pedwarning_with_line): Likewise.
+ (cpp_warning_with_line_syshdr): Likewise.
+ (cpp_error_at): Convert level to enum.
+ (cpp_errno): Likewise.
+ (cpp_errno_filename): Likewise.
+ * include/cpplib.h (enum cpp_diagnostic_level): Name this enum,
+ and move to before struct cpp_callbacks.
+ (enum cpp_warning_reason): Likewise.
+ (cpp_callbacks::diagnostic): Convert params from int to enums.
+ (cpp_error): Convert int param to enum cpp_diagnostic_level.
+ (cpp_warning): Convert int param to enum cpp_warning_reason.
+ (cpp_pedwarning): Likewise.
+ (cpp_warning_syshdr): Likewise.
+ (cpp_errno): Convert int param to enum cpp_diagnostic_level.
+ (cpp_errno_filename): Likewise.
+ (cpp_error_with_line): Likewise.
+ (cpp_warning_with_line): Convert int param to enum
+ cpp_warning_reason.
+ (cpp_pedwarning_with_line): Likewise.
+ (cpp_warning_with_line_syshdr): Likewise.
+ (cpp_error_at): Convert int param to enum cpp_diagnostic_level.
+ * macro.c (create_iso_definition): Convert int to enum.
+ (_cpp_create_definition): Likewise.
+
2018-09-17 David Malcolm <dmalcolm@redhat.com>
* include/line-map.h (range_label::get_text): Add param
return cpp_interpret_string_1 (pfile, from, count, to, type, NULL, NULL);
}
-/* A "do nothing" error-handling callback for use by
+/* A "do nothing" diagnostic-handling callback for use by
cpp_interpret_string_ranges, so that it can temporarily suppress
- error-handling. */
+ diagnostic-handling. */
static bool
-noop_error_cb (cpp_reader *, int, int, rich_location *,
- const char *, va_list *)
+noop_diagnostic_cb (cpp_reader *, enum cpp_diagnostic_level,
+ enum cpp_warning_reason, rich_location *,
+ const char *, va_list *)
{
/* no-op. */
return true;
return "execution character set != source character set";
/* For on-demand strings we have already lexed the strings, so there
- should be no errors. However, if we have bogus source location
+ should be no diagnostics. However, if we have bogus source location
data (or stringified macro arguments), the attempt to lex the
- strings could fail with an error. Temporarily install an
- error-handler to catch the error, so that it can lead to this call
+ strings could fail with an diagnostic. Temporarily install an
+ diagnostic-handler to catch the diagnostic, so that it can lead to this call
failing, rather than being emitted as a user-visible diagnostic.
- If an error does occur, we should see it via the return value of
+ If an diagnostic does occur, we should see it via the return value of
cpp_interpret_string_1. */
- bool (*saved_error_handler) (cpp_reader *, int, int, rich_location *,
- const char *, va_list *)
+ bool (*saved_diagnostic_handler) (cpp_reader *, enum cpp_diagnostic_level,
+ enum cpp_warning_reason, rich_location *,
+ const char *, va_list *)
ATTRIBUTE_FPTR_PRINTF(5,0);
- saved_error_handler = pfile->cb.error;
- pfile->cb.error = noop_error_cb;
+ saved_diagnostic_handler = pfile->cb.diagnostic;
+ pfile->cb.diagnostic = noop_diagnostic_cb;
bool result = cpp_interpret_string_1 (pfile, from, count, NULL, type,
loc_readers, out);
- /* Restore the saved error-handler. */
- pfile->cb.error = saved_error_handler;
+ /* Restore the saved diagnostic-handler. */
+ pfile->cb.diagnostic = saved_diagnostic_handler;
if (!result)
return "cpp_interpret_string_1 failed";
static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
static unsigned int read_flag (cpp_reader *, unsigned int);
static bool strtolinenum (const uchar *, size_t, linenum_type *, bool *);
-static void do_diagnostic (cpp_reader *, int, int, int);
+static void do_diagnostic (cpp_reader *, enum cpp_diagnostic_level code,
+ enum cpp_warning_reason reason, int);
static cpp_hashnode *lex_macro_node (cpp_reader *, bool);
static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
static void do_include_common (cpp_reader *, enum include_type);
/* Helper function for check_oel. */
static void
-check_eol_1 (cpp_reader *pfile, bool expand, int reason)
+check_eol_1 (cpp_reader *pfile, bool expand, enum cpp_warning_reason reason)
{
if (! SEEN_EOL () && (expand
? cpp_get_token (pfile)
/* Report a warning or error detected by the program we are
processing. Use the directive's tokens in the error message. */
static void
-do_diagnostic (cpp_reader *pfile, int code, int reason, int print_dir)
+do_diagnostic (cpp_reader *pfile, enum cpp_diagnostic_level code,
+ enum cpp_warning_reason reason, int print_dir)
{
const unsigned char *dir_name;
unsigned char *line;
static void
do_error (cpp_reader *pfile)
{
- do_diagnostic (pfile, CPP_DL_ERROR, 0, 1);
+ do_diagnostic (pfile, CPP_DL_ERROR, CPP_W_NONE, 1);
}
static void
if (cpp_get_token (pfile)->type != CPP_EOF)
{
_cpp_backup_tokens (pfile, 1);
- do_diagnostic (pfile, CPP_DL_WARNING, 0, 0);
+ do_diagnostic (pfile, CPP_DL_WARNING, CPP_W_NONE, 0);
}
}
ATTRIBUTE_FPTR_PRINTF(5,0)
static bool
-cpp_diagnostic_at (cpp_reader * pfile, int level, int reason,
- rich_location *richloc,
+cpp_diagnostic_at (cpp_reader * pfile, enum cpp_diagnostic_level level,
+ enum cpp_warning_reason reason, rich_location *richloc,
const char *msgid, va_list *ap)
{
bool ret;
- if (!pfile->cb.error)
+ if (!pfile->cb.diagnostic)
abort ();
- ret = pfile->cb.error (pfile, level, reason, richloc, _(msgid), ap);
+ ret = pfile->cb.diagnostic (pfile, level, reason, richloc, _(msgid), ap);
return ret;
}
ATTRIBUTE_FPTR_PRINTF(4,0)
static bool
-cpp_diagnostic (cpp_reader * pfile, int level, int reason,
- const char *msgid, va_list *ap)
+cpp_diagnostic (cpp_reader * pfile, enum cpp_diagnostic_level level,
+ enum cpp_warning_reason reason,
+ const char *msgid, va_list *ap)
{
source_location src_loc;
/* Print a warning or error, depending on the value of LEVEL. */
bool
-cpp_error (cpp_reader * pfile, int level, const char *msgid, ...)
+cpp_error (cpp_reader * pfile, enum cpp_diagnostic_level level,
+ const char *msgid, ...)
{
va_list ap;
bool ret;
/* Print a warning. The warning reason may be given in REASON. */
bool
-cpp_warning (cpp_reader * pfile, int reason, const char *msgid, ...)
+cpp_warning (cpp_reader * pfile, enum cpp_warning_reason reason,
+ const char *msgid, ...)
{
va_list ap;
bool ret;
/* Print a pedantic warning. The warning reason may be given in REASON. */
bool
-cpp_pedwarning (cpp_reader * pfile, int reason, const char *msgid, ...)
+cpp_pedwarning (cpp_reader * pfile, enum cpp_warning_reason reason,
+ const char *msgid, ...)
{
va_list ap;
bool ret;
given in REASON. */
bool
-cpp_warning_syshdr (cpp_reader * pfile, int reason, const char *msgid, ...)
+cpp_warning_syshdr (cpp_reader * pfile, enum cpp_warning_reason reason,
+ const char *msgid, ...)
{
va_list ap;
bool ret;
ATTRIBUTE_FPTR_PRINTF(6,0)
static bool
-cpp_diagnostic_with_line (cpp_reader * pfile, int level, int reason,
- source_location src_loc, unsigned int column,
- const char *msgid, va_list *ap)
+cpp_diagnostic_with_line (cpp_reader * pfile, enum cpp_diagnostic_level level,
+ enum cpp_warning_reason reason,
+ source_location src_loc, unsigned int column,
+ const char *msgid, va_list *ap)
{
bool ret;
- if (!pfile->cb.error)
+ if (!pfile->cb.diagnostic)
abort ();
rich_location richloc (pfile->line_table, src_loc);
if (column)
richloc.override_column (column);
- ret = pfile->cb.error (pfile, level, reason, &richloc, _(msgid), ap);
+ ret = pfile->cb.diagnostic (pfile, level, reason, &richloc, _(msgid), ap);
return ret;
}
/* Print a warning or error, depending on the value of LEVEL. */
bool
-cpp_error_with_line (cpp_reader *pfile, int level,
+cpp_error_with_line (cpp_reader *pfile, enum cpp_diagnostic_level level,
source_location src_loc, unsigned int column,
const char *msgid, ...)
{
/* Print a warning. The warning reason may be given in REASON. */
bool
-cpp_warning_with_line (cpp_reader *pfile, int reason,
+cpp_warning_with_line (cpp_reader *pfile, enum cpp_warning_reason reason,
source_location src_loc, unsigned int column,
const char *msgid, ...)
{
/* Print a pedantic warning. The warning reason may be given in REASON. */
bool
-cpp_pedwarning_with_line (cpp_reader *pfile, int reason,
- source_location src_loc, unsigned int column,
- const char *msgid, ...)
+cpp_pedwarning_with_line (cpp_reader *pfile, enum cpp_warning_reason reason,
+ source_location src_loc, unsigned int column,
+ const char *msgid, ...)
{
va_list ap;
bool ret;
given in REASON. */
bool
-cpp_warning_with_line_syshdr (cpp_reader *pfile, int reason,
- source_location src_loc, unsigned int column,
- const char *msgid, ...)
+cpp_warning_with_line_syshdr (cpp_reader *pfile, enum cpp_warning_reason reason,
+ source_location src_loc, unsigned int column,
+ const char *msgid, ...)
{
va_list ap;
bool ret;
a column override. */
bool
-cpp_error_at (cpp_reader * pfile, int level, source_location src_loc,
- const char *msgid, ...)
+cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level level,
+ source_location src_loc, const char *msgid, ...)
{
va_list ap;
bool ret;
a column override. */
bool
-cpp_error_at (cpp_reader * pfile, int level, rich_location *richloc,
- const char *msgid, ...)
+cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level level,
+ rich_location *richloc, const char *msgid, ...)
{
va_list ap;
bool ret;
information from errno. */
bool
-cpp_errno (cpp_reader *pfile, int level, const char *msgid)
+cpp_errno (cpp_reader *pfile, enum cpp_diagnostic_level level,
+ const char *msgid)
{
return cpp_error (pfile, level, "%s: %s", _(msgid), xstrerror (errno));
}
that is not localized, but "" is replaced with localized "stdout". */
bool
-cpp_errno_filename (cpp_reader *pfile, int level, const char *filename,
+cpp_errno_filename (cpp_reader *pfile, enum cpp_diagnostic_level level,
+ const char *filename,
source_location loc)
{
if (filename[0] == '\0')
bool canonical_system_headers;
};
+/* Diagnostic levels. To get a diagnostic without associating a
+ position in the translation unit with it, use cpp_error_with_line
+ with a line number of zero. */
+
+enum cpp_diagnostic_level {
+ /* 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 CPP_W_NONE for unclassified
+ warnings and diagnostics that are not warnings. */
+
+enum cpp_warning_reason {
+ 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,
+ CPP_W_LITERAL_SUFFIX,
+ CPP_W_DATE_TIME,
+ CPP_W_PEDANTIC,
+ CPP_W_C90_C99_COMPAT,
+ CPP_W_CXX11_COMPAT,
+ CPP_W_EXPANSION_TO_DEFINED
+};
+
/* Callback for header lookup for HEADER, which is the name of a
source file. It is used as a method of last resort to find headers
that are not otherwise found during the normal include processing.
/* Called to emit a diagnostic. This callback receives the
translated message. */
- bool (*error) (cpp_reader *, int, int, rich_location *,
- const char *, va_list *)
+ bool (*diagnostic) (cpp_reader *,
+ enum cpp_diagnostic_level,
+ enum cpp_warning_reason,
+ rich_location *,
+ const char *, va_list *)
ATTRIBUTE_FPTR_PRINTF(5,0);
/* Callbacks for when a macro is expanded, or tested (whether
others assumed clear, to fill out a cpp_num structure. */
cpp_num cpp_num_sign_extend (cpp_num, size_t);
-/* Diagnostic levels. To get a diagnostic without associating a
- position in the translation unit with it, use cpp_error_with_line
- with a line number of zero. */
-
-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,
- CPP_W_LITERAL_SUFFIX,
- CPP_W_DATE_TIME,
- CPP_W_PEDANTIC,
- CPP_W_C90_C99_COMPAT,
- CPP_W_CXX11_COMPAT,
- CPP_W_EXPANSION_TO_DEFINED
-};
-
/* Output a diagnostic of some kind. */
-extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
+extern bool cpp_error (cpp_reader *, enum cpp_diagnostic_level,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_3;
-extern bool cpp_warning (cpp_reader *, int, const char *msgid, ...)
+extern bool cpp_warning (cpp_reader *, enum cpp_warning_reason,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_3;
-extern bool cpp_pedwarning (cpp_reader *, int, const char *msgid, ...)
+extern bool cpp_pedwarning (cpp_reader *, enum cpp_warning_reason,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_3;
-extern bool cpp_warning_syshdr (cpp_reader *, int, const char *msgid, ...)
+extern bool cpp_warning_syshdr (cpp_reader *, enum cpp_warning_reason reason,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_3;
/* Output a diagnostic with "MSGID: " preceding the
error string of errno. No location is printed. */
-extern bool cpp_errno (cpp_reader *, int, const char *msgid);
+extern bool cpp_errno (cpp_reader *, enum cpp_diagnostic_level,
+ const char *msgid);
/* Similarly, but with "FILENAME: " instead of "MSGID: ", where
the filename is not localized. */
-extern bool cpp_errno_filename (cpp_reader *, int, const char *filename,
- source_location loc);
+extern bool cpp_errno_filename (cpp_reader *, enum cpp_diagnostic_level,
+ const char *filename, source_location loc);
/* 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, ...)
+extern bool cpp_error_with_line (cpp_reader *, enum cpp_diagnostic_level,
+ source_location, unsigned,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_5;
-extern bool cpp_warning_with_line (cpp_reader *, int, source_location,
- unsigned, const char *msgid, ...)
+extern bool cpp_warning_with_line (cpp_reader *, enum cpp_warning_reason,
+ source_location, unsigned,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_5;
-extern bool cpp_pedwarning_with_line (cpp_reader *, int, source_location,
- unsigned, const char *msgid, ...)
+extern bool cpp_pedwarning_with_line (cpp_reader *, enum cpp_warning_reason,
+ 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, ...)
+extern bool cpp_warning_with_line_syshdr (cpp_reader *, enum cpp_warning_reason,
+ source_location, unsigned,
+ const char *msgid, ...)
ATTRIBUTE_PRINTF_5;
-extern bool cpp_error_at (cpp_reader * pfile, int level,
+extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
source_location src_loc, const char *msgid, ...)
ATTRIBUTE_PRINTF_4;
-extern bool cpp_error_at (cpp_reader * pfile, int level,
- rich_location *richloc, const char *msgid,
- ...)
+extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
+ rich_location *richloc, const char *msgid, ...)
ATTRIBUTE_PRINTF_4;
/* In lex.c */
: N_("ISO C99 requires whitespace after the macro name"));
else
{
- int warntype = CPP_DL_WARNING;
+ enum cpp_diagnostic_level warntype = CPP_DL_WARNING;
switch (token->type)
{
case CPP_ATSIGN:
if (warn_of_redefinition (pfile, node, macro))
{
- const int reason
+ const enum cpp_warning_reason reason
= (cpp_builtin_macro_p (node) && !(node->flags & NODE_WARN))
? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;