summaryrefslogtreecommitdiff
path: root/libcpp/errors.c
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-03 23:08:18 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-03 23:08:18 +0000
commiteb0d20b7a488402286290a18e539c8d02b12b62b (patch)
tree4d26b7322a593e1c409570f2ca4e99dccb8dc759 /libcpp/errors.c
parent8e3caacfd31e8064785cba5c6ca2cec3a67d9f73 (diff)
downloadgcc-eb0d20b7a488402286290a18e539c8d02b12b62b.tar.gz
gcc:
PR c++/17964 * diagnostic.c (diagnostic_set_info_translated): New function. (diagnostic_set_info): Use it. Add comment. * diagnostic.h (diagnostic_set_info_translated): Declare. gcc/cp: * error.c (cp_cpp_error): New function. * cp-tree.h (cp_cpp_error): Declare. * parser.c (cp_lexer_new_main): Set CPP option client_diagnostic and error callback after lexing. gcc/testsuite: * g++.dg/cpp/string-1.C: New test. libcpp: * include/cpplib.h (struct cpp_options): Add client_diagnostic. (struct cpp_callbacks): Add error. * errors.c (cpp_error): If client_diagnostic, use error callback. * charset.c (convert_escape): Don't use %03o in diagnostic. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106454 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp/errors.c')
-rw-r--r--libcpp/errors.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/libcpp/errors.c b/libcpp/errors.c
index 477101e3041..554d9e3c5f1 100644
--- a/libcpp/errors.c
+++ b/libcpp/errors.c
@@ -140,20 +140,25 @@ cpp_error (cpp_reader * pfile, int level, const char *msgid, ...)
va_start (ap, msgid);
- if (CPP_OPTION (pfile, traditional))
- {
- if (pfile->state.in_directive)
- src_loc = pfile->directive_line;
- else
- src_loc = pfile->line_table->highest_line;
- }
+ if (CPP_OPTION (pfile, client_diagnostic))
+ pfile->cb.error (pfile, level, _(msgid), ap);
else
{
- src_loc = pfile->cur_token[-1].src_loc;
- }
+ if (CPP_OPTION (pfile, traditional))
+ {
+ if (pfile->state.in_directive)
+ src_loc = pfile->directive_line;
+ else
+ src_loc = pfile->line_table->highest_line;
+ }
+ else
+ {
+ src_loc = pfile->cur_token[-1].src_loc;
+ }
- if (_cpp_begin_message (pfile, level, src_loc, 0))
- v_message (msgid, ap);
+ if (_cpp_begin_message (pfile, level, src_loc, 0))
+ v_message (msgid, ap);
+ }
va_end (ap);
}