diff options
author | Theophile Ranquet <ranquet@lrde.epita.fr> | 2012-10-26 18:12:53 +0000 |
---|---|---|
committer | Theophile Ranquet <ranquet@lrde.epita.fr> | 2012-10-26 18:28:37 +0000 |
commit | 697a8022c656f8081d71d470e7b538f699af372c (patch) | |
tree | 84ae7d5426b197f7172992f9e8e897015db1e160 /src/complain.c | |
parent | 8f6bbe0c106114eec8988eadaa25d59969439986 (diff) | |
download | bison-697a8022c656f8081d71d470e7b538f699af372c.tar.gz |
warnings: fix early exit of warnings treated as errors
Treating warnings as errors caused Bison to exit earlier than needed, making it
hide warnings that would have been printed had -Werror not been set.
Also, fix a bug that caused some context information of errors to not be
shown.
* src/complain.c (complaint_issued): Rename as...
(complaint_status): This, and change its type from boolean to
* src/complain.h (err_status): This, new enumeration.
* src/main.c (main): Adjust (only finish early if an actual complaint was
risen, not a mere warning treated an error).
* src/reader.c: Adjust.
Diffstat (limited to 'src/complain.c')
-rw-r--r-- | src/complain.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/complain.c b/src/complain.c index 0fa812ab..2e4e71af 100644 --- a/src/complain.c +++ b/src/complain.c @@ -34,7 +34,7 @@ warnings warnings_flag = warnings errors_flag; -bool complaint_issued; +err_status complaint_status = status_none; static unsigned *indent_ptr = 0; void @@ -129,8 +129,11 @@ complains (const location *loc, warnings flags, const char *message, : flags & (errors_flag | complaint) ? _("error") : _("warning"); - complaint_issued |= flags & (complaint | errors_flag); - if (flags & (warnings_flag | silent | fatal | complaint)) + if ((flags & complaint) && complaint_status < status_complaint) + complaint_status = status_complaint; + else if ((flags & (warnings_flag & errors_flag)) && ! complaint_status) + complaint_status = status_warning_as_error; + if (flags & (warnings_flag | fatal | complaint)) error_message (loc, flags, prefix, message, args); if (flags & fatal) exit (EXIT_FAILURE); |