On Wed, 2016-11-30 at 17:18 +0100, Bernd Schmidt wrote: > On 11/29/2016 10:13 PM, Bernd Schmidt wrote: > > On 11/29/2016 07:53 PM, David Malcolm wrote: > > > > > Would you prefer that I went with approach (B), or is approach > > > (A) > > > acceptable? > > > > Well, I was hoping there'd be an approach (C) where the read-rtl > > code > > uses whatever diagnostics framework that is available. Maybe it'll > > turn > > out that's too hard. Somehow the current patch looked strange to > > me, but > > if there's no easy alternative maybe we'll have to go with it. > > So, I've tried to build patches 1-6 + 8, without #7. It looks like > the > differences are as follows: > > - A lack of seen_error in errors.[ch], could be easily added, and > basically a spelling mismatch between have_error and errorcount. > - A lack of fatal in diagnostics.c. Could maybe be added to just call > fatal_error? > > All this seems simpler and cleaner to fix than linking two different > error handling frameworks into one binary. Do you see any other > difficulties? > > > Bernd
Thanks. Here's an implementation of that idea. Given that fatal_error doesn't expose a way to accept va_args, it seemed simplest to just copy the implementation from errors.c, and conditionalize it with #ifndef GENERATOR_FILE. Only lightly tested so far, but it builds (stage 1) and passes the new rtl.exp test suite from patch 9 (which includes an error-handling test). Is this OK, assuming it passes regular testing? gcc/ChangeLog: * read-md.c (have_error): New global, copied from errors.c. (fatal): New function, copied from errors.c. * selftest-rtl.c: Include "diagnostic-core.h". --- gcc/read-md.c | 25 +++++++++++++++++++++++++ gcc/selftest-rtl.c | 1 + 2 files changed, 26 insertions(+) diff --git a/gcc/read-md.c b/gcc/read-md.c index 25bc3c4..ce99473 100644 --- a/gcc/read-md.c +++ b/gcc/read-md.c @@ -31,6 +31,31 @@ along with GCC; see the file COPYING3. If not see #include "vec.h" #include "read-md.h" +#ifndef GENERATOR_FILE + +/* Minimal reimplementation of errors.c for use by RTL frontend + within cc1. */ + +int have_error = 0; + +/* Fatal error - terminate execution immediately. Does not return. */ + +void +fatal (const char *format, ...) +{ + va_list ap; + + va_start (ap, format); + fprintf (stderr, "%s: ", progname); + vfprintf (stderr, format, ap); + va_end (ap); + fputc ('\n', stderr); + exit (FATAL_EXIT_CODE); +} + +#endif /* #ifndef GENERATOR_FILE */ + + /* Associates PTR (which can be a string, etc.) with the file location specified by FILENAME and LINENO. */ struct ptr_loc { diff --git a/gcc/selftest-rtl.c b/gcc/selftest-rtl.c index 8f3c976..c5ab216 100644 --- a/gcc/selftest-rtl.c +++ b/gcc/selftest-rtl.c @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "memmodel.h" #include "emit-rtl.h" #include "selftest-rtl.h" +#include "diagnostic-core.h" #if CHECKING_P -- 1.8.5.3