summaryrefslogtreecommitdiff
path: root/support/cpp/libcpp/errors.c
diff options
context:
space:
mode:
authorborutr <borutr@4a8a32a2-be11-0410-ad9d-d568d2c75423>2011-08-28 19:03:41 +0000
committerborutr <borutr@4a8a32a2-be11-0410-ad9d-d568d2c75423>2011-08-28 19:03:41 +0000
commitd5253b25191cc31eb45205f19d17fa7aad616a63 (patch)
tree25414a745a92caf69c72fe95b25afa86f68caa1e /support/cpp/libcpp/errors.c
parent5551ac44ed6db573e7228ecf2624595c2653b834 (diff)
* 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
Diffstat (limited to 'support/cpp/libcpp/errors.c')
-rw-r--r--support/cpp/libcpp/errors.c168
1 files changed, 155 insertions, 13 deletions
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)
{