[GHC] #10752: Print which warning-flag controls/enabled an emitted warning
GHC
ghc-devs at haskell.org
Sat Feb 20 08:22:53 UTC 2016
#10752: Print which warning-flag controls/enabled an emitted warning
-------------------------------------+-------------------------------------
Reporter: hvr | Owner: barrucadu
Type: feature request | Status: new
Priority: normal | Milestone: 8.2.1
Component: Compiler | Version:
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Incorrect | Unknown/Multiple
warning at compile-time | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1934
Wiki Page: Design/Warnings |
-------------------------------------+-------------------------------------
@@ -30,0 +30,23 @@
+
+ -----
+
+ As an obvious extension, (which maybe should be controlled by some `-f`
+ flag, e.g. `-f(no-)show-warning-groups`), GHC could then also show by
+ which warning-group a given warning is implied, e.g.
+
+
+ {{{
+ WCompatWarningsOn.hs:16:1: warning: [-Wsemigroup (in -Wcompat)]
+ Local definition of ‘<>’ clashes with a future Prelude name.
+ This will become an error in a future release.
+
+ WCompatWarningsOn.hs:22:3: warning: [-Wnoncanonical-monoid-instances (in
+ -Wcompat)]
+ Noncanonical ‘(<>) = mappend’ definition detected
+ in the instance declaration for ‘Semi.Semigroup S’.
+ Move definition from ‘mappend’ to ‘(<>)’
+ }}}
+
+ For the warning-sets which form a superset chain (Weverything > Wextra >
+ Wall > Wdefault) we'd only mention the smallest one (and omit the trivial
+ `-Weverything` set altogether) to keep the output concise.
New description:
Both `gcc` and `clang` tell which warning flag a reported warning can be
controlled with, e.g.
{{{
$ clang-3.5 -Wall -c hello.c
hello.c:3:7: warning: unused variable 'x' [-Wunused-variable]
int x;
^
1 warning generated.
}}}
{{{
$ gcc -Wall -c hello.c
hello.c: In function ‘main’:
hello.c:3:7: warning: unused variable ‘x’ [-Wunused-variable]
int x;
^
hello.c:4:1: warning: control reaches end of non-void function [-Wreturn-
type]
}
^
}}}
With GHC however, we need to lookup the documentation (or memorise all
warning flags) to find out which `-fno-warn-*` flag we need to use to
silence a specific warning.
I propose we augment GHC's warnings in a similar style to how
`gcc`/`clang` report flags in compile warnings.
-----
As an obvious extension, (which maybe should be controlled by some `-f`
flag, e.g. `-f(no-)show-warning-groups`), GHC could then also show by
which warning-group a given warning is implied, e.g.
{{{
WCompatWarningsOn.hs:16:1: warning: [-Wsemigroup (in -Wcompat)]
Local definition of ‘<>’ clashes with a future Prelude name.
This will become an error in a future release.
WCompatWarningsOn.hs:22:3: warning: [-Wnoncanonical-monoid-instances (in
-Wcompat)]
Noncanonical ‘(<>) = mappend’ definition detected
in the instance declaration for ‘Semi.Semigroup S’.
Move definition from ‘mappend’ to ‘(<>)’
}}}
For the warning-sets which form a superset chain (Weverything > Wextra >
Wall > Wdefault) we'd only mention the smallest one (and omit the trivial
`-Weverything` set altogether) to keep the output concise.
--
Comment (by hvr):
@barrucadu This looks very promising... but have you talked to David
(`quchen`) before you took the ticket from him? He had already started
working on a warning refactoring in his Github repo afaik (see .e.g.
https://github.com/quchen/ghc/commits/warn-refactoring)...
PS: I've extended the ticket description with a bonus task
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10752#comment:12>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list