85cb1a0283e1a98ff501bbbe84de2914fc4ba703
[ghc.git] / mk / warnings.mk
1 # See Note [Order of warning flags].
2 SRC_CC_OPTS += -Wall $(WERROR)
3 SRC_HC_OPTS += -Wall
4 # Don't add -Werror to SRC_HC_OPTS_STAGE0 (or SRC_HC_OPTS), because otherwise
5 # validate may unnecessarily fail when booting with an older compiler.
6 # It would be better to only exclude certain warnings from becoming errors
7 # (e.g. '-Werror -Wno-error=unused-imports -Wno-error=...'), but -Wno-error
8 # isn't supported yet (https://ghc.haskell.org/trac/ghc/wiki/Design/Warnings).
9 #
10 # See Note [Stage number in build variables] in mk/config.mk.in.
11 SRC_HC_OPTS_STAGE1 += $(WERROR)
12 SRC_HC_OPTS_STAGE2 += $(WERROR)
13
14 # Enable -Wcpp-undef for GHC components only as we don't (currently) expect core
15 # libraries to build in this configuration (see #13636).
16 GhcRtsHcOpts += -Wcpp-undef
17 GhcStage1HcOpts += -Wcpp-undef
18 GhcStage2HcOpts += -Wcpp-undef
19
20 ifneq "$(GccIsClang)" "YES"
21
22 # Debian doesn't turn -Werror=unused-but-set-variable on by default, so
23 # we turn it on explicitly for consistency with other users
24 ifeq "$(GccLT46)" "NO"
25 # Never set the flag on Windows as the host gcc may be too old.
26 ifneq "$(HostOS_CPP)" "mingw32"
27 SRC_CC_WARNING_OPTS += -Werror=unused-but-set-variable
28 endif
29 endif
30
31 ifeq "$(GccLT44)" "NO"
32 # Suppress the warning about __sync_fetch_and_nand (#9678).
33 libraries/ghc-prim/cbits/atomic_CC_OPTS += -Wno-sync-nand
34 # gcc 4.6 gives 3 warnings for giveCapabilityToTask not being inlined
35 # gcc 4.4 gives 2 warnings for lockClosure not being inlined
36 SRC_CC_WARNING_OPTS += -Wno-error=inline
37 endif
38
39 else
40
41 # Don't warn about unknown GCC pragmas when using clang
42 SRC_CC_WARNING_OPTS += -Wno-unknown-pragmas
43
44 endif
45
46 SRC_HC_WARNING_OPTS_STAGE1 += -Wnoncanonical-monad-instances
47 SRC_HC_WARNING_OPTS_STAGE2 += -Wnoncanonical-monad-instances
48
49
50 ######################################################################
51 # Disable some warnings in packages we use
52
53 # NB: The GHC version used for bootstrapping may not support the
54 # `-W`-aliases for `-f(no-)warn` flags introduced in GHC 8.0, so in
55 # some cases (watch out for make-variables with a name containing
56 # "boot") we need to pass the legacy `-f(no-)warn`-flags instead.
57
58 # Libraries that have dubious RULES
59 libraries/bytestring_dist-install_EXTRA_HC_OPTS += -Wno-inline-rule-shadowing
60
61 # Turn off import warnings for bad unused imports
62 utils/haddock_dist_EXTRA_HC_OPTS += -Wno-unused-imports
63 libraries/vector_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
64 libraries/directory_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
65
66 # haddock's attoparsec uses deprecated `inlinePerformIO`
67 utils/haddock_dist_EXTRA_HC_OPTS += -Wno-deprecations
68 # binary too
69 libraries/binary_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
70
71 # On Windows, there are/were some unused import warnings
72 ifeq "$(HostOS_CPP)" "mingw32"
73 libraries/time_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports -Wno-identities
74 endif
75
76 # On Windows, the pattern for CallConv is already exaustive. Ignore the warning
77 ifeq "$(HostOS_CPP)" "mingw32"
78 libraries/ghci_dist-install_EXTRA_HC_OPTS += -Wno-overlapping-patterns
79 endif
80
81 # haskeline has warnings about deprecated use of block/unblock
82 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
83 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
84 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
85 libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-simplifiable-class-constraints
86
87
88 # temporarily turn off unused-imports warnings for pretty
89 libraries/pretty_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
90
91 # primitive has a warning about deprecated use of GHC.IOBase
92 libraries/primitive_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
93 # primitive uses deprecated Control.Monad.Trans.Error
94 libraries/primitive_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
95
96 # See https://github.com/haskell/random/pull/20
97 libraries/random_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
98
99 # temporarily turn off unused-imports warnings for terminfo
100 libraries/terminfo_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-imports
101 libraries/terminfo_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
102
103 # vector has some unused match warnings
104 libraries/vector_dist-install_EXTRA_HC_OPTS += -Wwarn
105
106 # temporarily turn off unused-imports warnings for xhtml
107 libraries/xhtml_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
108 libraries/xhtml_dist-install_EXTRA_HC_OPTS += -Wno-tabs
109
110 libraries/dph/dph-base_dist-install_EXTRA_HC_OPTS += -Wwarn
111 libraries/dph/dph-prim-interface_dist-install_EXTRA_HC_OPTS += -Wwarn
112 libraries/dph/dph-prim-seq_dist-install_EXTRA_HC_OPTS += -Wwarn
113 libraries/dph/dph-prim-par_dist-install_EXTRA_HC_OPTS += -Wwarn
114 libraries/dph/dph-lifted-common-install_EXTRA_HC_OPTS += -Wwarn
115
116 # transformers has unused function parameters warnings
117 libraries/transformers_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
118 libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-unused-matches -Wno-unused-imports
119 libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
120 libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-orphans
121
122 # parsec has various warnings
123 libraries/parsec_dist-install_EXTRA_HC_OPTS += -Wno-name-shadowing -Wno-unused-matches
124 libraries/parsec_dist-install_EXTRA_HC_OPTS += -Wno-unused-do-bind -Wno-missing-signatures
125 libraries/parsec_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports -Wno-type-defaults
126
127 # Turn of trustworthy-safe warning
128 libraries/base_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
129 libraries/ghc-prim_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
130 libraries/Win32_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
131
132 # We need -Wno-deprecated-flags to avoid failure with -Werror
133 GhcLibExtraHcOpts += -Wno-deprecated-flags
134 GhcBootLibExtraHcOpts += -fno-warn-deprecated-flags
135
136 # Note [Order of warning flags]
137 #
138 # In distdir-way-opts, build flags are added in the following order (this
139 # list is not exhaustive):
140 #
141 # * SRC_HC_OPTS(_STAGE$4)
142 # * ghc-options from .cabal files ($1_$2_HC_OPTS)
143 # * SRC_HC_WARNING_OPTS(_STAGE$4)
144 #
145 # Considerations:
146 #
147 # * Most .cabal files specify -Wall. But not all, and not all building we
148 # do relies on .cabal files. So we have to add -Wall ourselves somewhere.
149 #
150 # * Some .cabal also specify warning suppression flags. Because -Wall
151 # overrides any warning suppression flags that come before it, we have to
152 # make sure -Wall comes before any warning suppression flags. So we add it
153 # to SRC_HC_OPTS.
154 #
155 # * Similarly, our own warning suppression should come after the -Wall from
156 # the .cabal files, so we do *not* add them to SRC_HC_OPTS.