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