/* Handle errors.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+ 2010
Free Software Foundation, Inc.
Contributed by Andy Vaught & Niels Kristian Bech Jensen
static int suppress_errors = 0;
+static int warnings_not_errors = 0;
+
static int terminal_width, buffer_flag, errors, warnings;
static gfc_error_buf error_buffer, warning_buffer, *cur_error_buffer;
offset = 0;
- /* When the loci is not associated with a column, it will have a
- value of zero. We adjust this to 1 so that it will appear. */
-
- if (c1 == 0)
- c1 = 1;
- if (c2 == 0)
- c2 = 1;
-
/* If the two loci would appear in the same column, we shift
'2' one column to the right, so as to print '12' rather than
just '1'. We do this here so it will be accounted for in the
c1 -= offset;
c2 -= offset;
- for (i = 1; i <= cmax; i++)
+ for (i = 0; i <= cmax; i++)
{
if (i == c1)
error_char ('1');
case 'u':
arg[pos].type = TYPE_UINTEGER;
+ break;
case 'l':
c = *format++;
/* Wrapper for error_print(). */
static void
-error_printf (const char *nocmsgid, ...)
+error_printf (const char *gmsgid, ...)
{
va_list argp;
- va_start (argp, nocmsgid);
- error_print ("", _(nocmsgid), argp);
+ va_start (argp, gmsgid);
+ error_print ("", _(gmsgid), argp);
va_end (argp);
}
/* Issue a warning. */
void
-gfc_warning (const char *nocmsgid, ...)
+gfc_warning (const char *gmsgid, ...)
{
va_list argp;
warning_buffer.index = 0;
cur_error_buffer = &warning_buffer;
- va_start (argp, nocmsgid);
- error_print (_("Warning:"), _(nocmsgid), argp);
+ va_start (argp, gmsgid);
+ error_print (_("Warning:"), _(gmsgid), argp);
va_end (argp);
error_char ('\0');
an error is generated. */
gfc_try
-gfc_notify_std (int std, const char *nocmsgid, ...)
+gfc_notify_std (int std, const char *gmsgid, ...)
{
va_list argp;
bool warning;
cur_error_buffer->flag = 1;
cur_error_buffer->index = 0;
- va_start (argp, nocmsgid);
+ va_start (argp, gmsgid);
if (warning)
- error_print (_("Warning:"), _(nocmsgid), argp);
+ error_print (_("Warning:"), _(gmsgid), argp);
else
- error_print (_("Error:"), _(nocmsgid), argp);
+ error_print (_("Error:"), _(gmsgid), argp);
va_end (argp);
error_char ('\0');
/* Immediate warning (i.e. do not buffer the warning). */
void
-gfc_warning_now (const char *nocmsgid, ...)
+gfc_warning_now (const char *gmsgid, ...)
{
va_list argp;
int i;
i = buffer_flag;
buffer_flag = 0;
warnings++;
- if (warnings_are_errors)
- gfc_increment_error_count();
- va_start (argp, nocmsgid);
- error_print (_("Warning:"), _(nocmsgid), argp);
+ va_start (argp, gmsgid);
+ error_print (_("Warning:"), _(gmsgid), argp);
va_end (argp);
error_char ('\0');
+
+ if (warnings_are_errors)
+ gfc_increment_error_count();
+
buffer_flag = i;
}
/* Issue an error. */
void
-gfc_error (const char *nocmsgid, ...)
+gfc_error (const char *gmsgid, ...)
{
va_list argp;
+ if (warnings_not_errors)
+ goto warning;
+
if (suppress_errors)
return;
error_buffer.index = 0;
cur_error_buffer = &error_buffer;
- va_start (argp, nocmsgid);
- error_print (_("Error:"), _(nocmsgid), argp);
+ va_start (argp, gmsgid);
+ error_print (_("Error:"), _(gmsgid), argp);
va_end (argp);
error_char ('\0');
if (buffer_flag == 0)
gfc_increment_error_count();
+
+ return;
+
+warning:
+
+ if (inhibit_warnings)
+ return;
+
+ warning_buffer.flag = 1;
+ warning_buffer.index = 0;
+ cur_error_buffer = &warning_buffer;
+
+ va_start (argp, gmsgid);
+ error_print (_("Warning:"), _(gmsgid), argp);
+ va_end (argp);
+
+ error_char ('\0');
+
+ if (buffer_flag == 0)
+ {
+ warnings++;
+ if (warnings_are_errors)
+ gfc_increment_error_count();
+ }
}
/* Immediate error. */
void
-gfc_error_now (const char *nocmsgid, ...)
+gfc_error_now (const char *gmsgid, ...)
{
va_list argp;
int i;
i = buffer_flag;
buffer_flag = 0;
- va_start (argp, nocmsgid);
- error_print (_("Error:"), _(nocmsgid), argp);
+ va_start (argp, gmsgid);
+ error_print (_("Error:"), _(gmsgid), argp);
va_end (argp);
error_char ('\0');
/* Fatal error, never returns. */
void
-gfc_fatal_error (const char *nocmsgid, ...)
+gfc_fatal_error (const char *gmsgid, ...)
{
va_list argp;
buffer_flag = 0;
- va_start (argp, nocmsgid);
- error_print (_("Fatal Error:"), _(nocmsgid), argp);
+ va_start (argp, gmsgid);
+ error_print (_("Fatal Error:"), _(gmsgid), argp);
va_end (argp);
exit (3);
gfc_clear_error (void)
{
error_buffer.flag = 0;
+ warnings_not_errors = 0;
}
if (e != NULL)
*e = errors;
}
+
+
+/* Switch errors into warnings. */
+
+void
+gfc_errors_to_warnings (int f)
+{
+ warnings_not_errors = (f == 1) ? 1 : 0;
+}