[GHC] #12056: Too aggressive `-w` option
GHC
ghc-devs at haskell.org
Sat Jun 11 16:39:13 UTC 2016
#12056: Too aggressive `-w` option
-------------------------------------+-------------------------------------
Reporter: asr | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords: newcomer
Operating System: Unknown/Multiple | Architecture:
Type of failure: Incorrect | Unknown/Multiple
warning at compile-time | Test Case:
Blocked By: | Blocking:
Related Tickets: #11429, #11789 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by thomie):
> It looks like this only happens when -w is combined with
`-Wunrecognised-warning-flags`.
To be clear, what I meant by that is that `-w` is too aggressive only when
placed before `-Wunrecognised-warning-flags`. When `-w` is combined with
other (existing) `-W` flags, GHC does the right thing (take the order in
which the flags are passed into account).
Here is an example, with `Test.hs` containing:
{{{
module Test where
import System.FilePath
}}}
* TEST `-w` BEFORE.
`-w` disables all warning flags, but since we supply `-Wunused-imports`
afterwards, we *do* get a warning:
{{{
$ ghc -w -Wunused-imports -fforce-recomp Test.hs
[1 of 1] Compiling Test ( Test.hs, Test.o )
Test.hs:2:1: warning: [-Wunused-imports]
The import of ‘System.FilePath’ is redundant
except perhaps to import instances from ‘System.FilePath’
To import instances alone, use: import System.FilePath()
}}}
* TEST `-w` AFTER
We give `-Wunused-imports` first. But since we give `-w` afterwards, which
reverts the previous flag, we do *not* get a warning:
{{{
$ ghc -Wunused-imports -w -fforce-recomp Test.hs
}}}
Both are expected behavior.
== Question
What should happen in the following example:
{{{
ghc -Wfoo1 -w -Wfoo2 -Wunrecognised-warning-flags -Wfoo3 Main.hs
}}}
== Option 1
* warn about `-Wfoo` (since `-Wunrecognised-warning-flags` is on by
default)
* not warn about `-Wfoo2` (since it comes after `-w`)
* warn about `-Wfoo3` (since it comes after `-Wunrecognised-warning-
flags`)
== Option 2
* warn about all `-Wfoo*`, since `-Wunrecognised-warning-flags` came after
`-w`, so `-Wunrecognised-warning-flags` is enabled
wozgonon: thanks for working on this! I think all these flags are Dynamic
though, so I'm not sure that `Note` is relevant. The text "on the
commandline" is coming from `ghc/Main.hs` most likely.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12056#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list