Handling error conditions in libgomp
Nathan Sidwell
nathan@codesourcery.com
Fri Feb 28 16:16:00 GMT 2014
On 02/28/14 16:05, Richard Henderson wrote:
> I'd be ok with some kind of registration interface, like
>
> old = omp_set_error_handler (new);
>
> so that a library can set and restore the handler around its own omp usage.
I agree. An explicit API should be exposed to do this.
> As for the interface of the handler itself... I dunno. I'd hate to make it
> too complicated to actually use. If severity is restricted to a single bit
> meaning "cannot possibly continue" or "transient error". Maybe with the error
> string, since who knows what kind of weirdness is going on in the plugin.
I wonder whether there should be 2 separate handlers -- one for the diagnostic
and one for fatality? Something like:
typedef void omp_diag_t (void *usr_data, unsigned flags, const char *, va_list);
void *OMP_diag_data;
omp_diag_t *OMP_diag_fn = OMP_diag_default;
void (*OMP_fatal_fn) (void) = abort;
then in gomp:
void OMP_error (unsigned flags, const char *fmt, ...) {
va_list args;
...
OMP_diag_fn (OMP_diag_data, flags, fmt, args);
}
void __attribute__ ((noreturn))
OMP_fatal (const char *fmt, ...) {
...
OMP_diag_fn (OMP_diag_data, SOMETHING, fmt, args);
OMP_fatal_fn ();
}
That way the non-returning nature of OMP_fatal can be exposed to the compiler
(I'm sure that'll kill a lot of false positive compiler warnings).
nathan
--
Nathan Sidwell
More information about the Gcc
mailing list