diff options
Diffstat (limited to 'gcc/go/gofrontend/go-diagnostics.h')
-rw-r--r-- | gcc/go/gofrontend/go-diagnostics.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/go-diagnostics.h b/gcc/go/gofrontend/go-diagnostics.h new file mode 100644 index 0000000..70c97cb --- /dev/null +++ b/gcc/go/gofrontend/go-diagnostics.h @@ -0,0 +1,64 @@ +// go-diagnostics.h -- interface to diagnostic reporting -*- C++ -*- + +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#ifndef GO_DIAGNOSTICS_H +#define GO_DIAGNOSTICS_H + +#include "go-linemap.h" + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) +#define GO_ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (__gcc_tdiag__, m, n))) __attribute__ ((__nonnull__ (m))) +#else +#define GO_ATTRIBUTE_GCC_DIAG(m, n) +#endif + +// These declarations define the interface through which the frontend +// reports errors and warnings. These functions accept printf-like +// format specifiers (e.g. %d, %f, %s, etc), with the following additional +// extensions: +// +// 1. 'q' qualifier may be applied to a specifier to add quoting, e.g. +// %qd produces a quoted decimal output, %qs a quoted string output. +// [This extension is supported only with single-character format +// specifiers]. +// +// 2. %m specifier outputs value of "strerror(errno)" at time of call. +// +// 3. %< outputs an opening quote, %> a closing quote. +// +// All other format specifiers are as defined by 'sprintf'. The final resulting +// message is then sent to the back end via go_be_error_at/go_be_warning_at. + +extern void go_error_at(const Location, const char* fmt, ...) + GO_ATTRIBUTE_GCC_DIAG(2,3); +extern void go_warning_at(const Location, int opt, const char* fmt, ...) + GO_ATTRIBUTE_GCC_DIAG(3,4); +extern void go_fatal_error(const Location, const char* fmt, ...) + GO_ATTRIBUTE_GCC_DIAG(2,3); +extern void go_inform(const Location, const char* fmt, ...) + GO_ATTRIBUTE_GCC_DIAG(2,3); + +// These interfaces provide a way for the front end to ask for +// the open/close quote characters it should use when formatting +// diagnostics (warnings, errors). +extern const char* go_open_quote(); +extern const char* go_close_quote(); + +// These interfaces are used by utilities above to pass warnings and +// errors (once format specifiers have been expanded) to the back end, +// and to determine quoting style. Avoid calling these routines directly; +// instead use the equivalent routines above. The back end is required to +// implement these routines. + +extern void go_be_error_at(const Location, const std::string& errmsg); +extern void go_be_warning_at(const Location, int opt, + const std::string& warningmsg); +extern void go_be_fatal_error(const Location, const std::string& errmsg); +extern void go_be_inform(const Location, const std::string& infomsg); +extern void go_be_get_quotechars(const char** open_quote, + const char** close_quote); + +#endif // !defined(GO_DIAGNOSTICS_H) |