From d5253b25191cc31eb45205f19d17fa7aad616a63 Mon Sep 17 00:00:00 2001 From: borutr Date: Sun, 28 Aug 2011 19:03:41 +0000 Subject: * support\cpp\libiberty\concat.c, support\cpp\libiberty\filenames.h, support\cpp\libiberty\hashtab.c, support\cpp\libiberty\vasprintf.c, support\cpp\libiberty\xmemdup.c, support\cpp\libiberty\hashtab.h, support\cpp\libiberty\splay-tree.c, support\cpp\libiberty\lbasename.c, support\cpp\libiberty\splay-tree.h, support\cpp\libiberty\getpwd.c, support\cpp\libiberty\fopen_unlocked.c, support\cpp\libcpp\directives.c, support\cpp\libcpp\macro.c, support\cpp\libcpp\files.c, support\cpp\libcpp\include\cpplib.h, support\cpp\libcpp\include\symtab.h, support\cpp\libcpp\include\line-map.h, support\cpp\libcpp\init.c, support\cpp\libcpp\errors.c, support\cpp\libcpp\expr.c, support\cpp\libcpp\internal.h, support\cpp\libcpp\lex.c, support\cpp\libcpp\system.h, support\cpp\libcpp\charset.c: SDCPP synchronized with GCC CPP release version 4.6.1 git-svn-id: https://svn.code.sourceforge.net/p/sdcc/code/trunk/sdcc@6773 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- support/cpp/libcpp/errors.c | 168 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 155 insertions(+), 13 deletions(-) (limited to 'support/cpp/libcpp/errors.c') diff --git a/support/cpp/libcpp/errors.c b/support/cpp/libcpp/errors.c index bc8528949..c586749ab 100644 --- a/support/cpp/libcpp/errors.c +++ b/support/cpp/libcpp/errors.c @@ -1,6 +1,6 @@ /* Default error handlers for CPP Library. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000, - 2001, 2002, 2004, 2008, 2009 Free Software Foundation, Inc. + 2001, 2002, 2004, 2008, 2009, 2010 Free Software Foundation, Inc. Written by Per Bothner, 1994. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 @@ -28,16 +28,16 @@ along with this program; see the file COPYING3. If not see #include "cpplib.h" #include "internal.h" -/* Print an error at the location of the previously lexed token. */ -bool -cpp_error (cpp_reader * pfile, int level, const char *msgid, ...) +/* Print a diagnostic at the location of the previously lexed token. */ + +ATTRIBUTE_FPTR_PRINTF(4,0) +static bool +cpp_diagnostic (cpp_reader * pfile, int level, int reason, + const char *msgid, va_list *ap) { source_location src_loc; - va_list ap; bool ret; - va_start (ap, msgid); - if (CPP_OPTION (pfile, traditional)) { if (pfile->state.in_directive) @@ -61,13 +61,95 @@ cpp_error (cpp_reader * pfile, int level, const char *msgid, ...) if (!pfile->cb.error) abort (); - ret = pfile->cb.error (pfile, level, src_loc, 0, _(msgid), &ap); + ret = pfile->cb.error (pfile, level, reason, src_loc, 0, _(msgid), ap); + + return ret; +} + +/* Print a warning or error, depending on the value of LEVEL. */ + +bool +cpp_error (cpp_reader * pfile, int level, const char *msgid, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic (pfile, level, CPP_W_NONE, msgid, &ap); va_end (ap); return ret; } -/* Print an error at a specific location. */ +/* Print a warning. The warning reason may be given in REASON. */ + +bool +cpp_warning (cpp_reader * pfile, int reason, const char *msgid, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic (pfile, CPP_DL_WARNING, reason, msgid, &ap); + + va_end (ap); + return ret; +} + +/* Print a pedantic warning. The warning reason may be given in REASON. */ + +bool +cpp_pedwarning (cpp_reader * pfile, int reason, const char *msgid, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic (pfile, CPP_DL_PEDWARN, reason, msgid, &ap); + + va_end (ap); + return ret; +} + +/* Print a warning, including system headers. The warning reason may be + given in REASON. */ + +bool +cpp_warning_syshdr (cpp_reader * pfile, int reason, const char *msgid, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, reason, msgid, &ap); + + va_end (ap); + return ret; +} + +/* Print a diagnostic at a specific location. */ + +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) +{ + bool ret; + + if (!pfile->cb.error) + abort (); + ret = pfile->cb.error (pfile, level, reason, src_loc, column, _(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, source_location src_loc, unsigned int column, @@ -75,17 +157,77 @@ cpp_error_with_line (cpp_reader *pfile, int level, { va_list ap; bool ret; - + va_start (ap, msgid); - if (!pfile->cb.error) - abort (); - ret = pfile->cb.error (pfile, level, src_loc, column, _(msgid), &ap); + ret = cpp_diagnostic_with_line (pfile, level, CPP_W_NONE, src_loc, + column, msgid, &ap); + + va_end (ap); + return ret; +} + +/* Print a warning. The warning reason may be given in REASON. */ + +bool +cpp_warning_with_line (cpp_reader *pfile, int reason, + source_location src_loc, unsigned int column, + const char *msgid, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic_with_line (pfile, CPP_DL_WARNING, reason, src_loc, + column, msgid, &ap); + + va_end (ap); + return ret; +} + +/* 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, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic_with_line (pfile, CPP_DL_PEDWARN, reason, src_loc, + column, msgid, &ap); va_end (ap); return ret; } +/* Print a warning, including system headers. The warning reason may be + given in REASON. */ + +bool +cpp_warning_with_line_syshdr (cpp_reader *pfile, int reason, + source_location src_loc, unsigned int column, + const char *msgid, ...) +{ + va_list ap; + bool ret; + + va_start (ap, msgid); + + ret = cpp_diagnostic_with_line (pfile, CPP_DL_WARNING_SYSHDR, reason, src_loc, + column, msgid, &ap); + + va_end (ap); + return ret; +} + +/* Print a warning or error, depending on the value of LEVEL. Include + information from errno. */ + bool cpp_errno (cpp_reader *pfile, int level, const char *msgid) { -- cgit v1.2.3