[GHC] #8542: Suggest NegativeLiterals

GHC ghc-devs at haskell.org
Thu Mar 8 09:33:10 UTC 2018


#8542: Suggest NegativeLiterals
-------------------------------------+-------------------------------------
        Reporter:  monoidal          |                Owner:  (none)
            Type:  bug               |               Status:  closed
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.7
      Resolution:  fixed             |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
                                     |  numeric/should_fail/T8542
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by alpmestan):

 The `hpc` way fails on `T8542`:

 {{{
 =====> T8542(hpc) 1 of 1 [0, 0, 0]
 cd "./numeric/should_compile/T8542.run" &&  "/home/alp/ghc/inplace/test
 spaces/ghc-stage2" -c T8542.hs -dcore-lint -dcmm-lint -no-user-package-db
 -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups
 -fdiagnostics-color=never -fno-diagnostics-show-caret -dno-debug-output
 -O -fhpc
 Actual stderr output differs from expected:
 diff -uw "./numeric/should_compile/T8542.run/T8542.stderr.normalised"
 "./numeric/should_compile/T8542.run/T8542.comp.stderr.normalised"
 --- ./numeric/should_compile/T8542.run/T8542.stderr.normalised  2018-03-08
 10:24:05.303965000 +0100
 +++ ./numeric/should_compile/T8542.run/T8542.comp.stderr.normalised
 2018-03-08 10:24:05.303965000 +0100
 @@ -1,4 +1,8 @@

 +T8542.hs:6:6: warning: [-Woverflowed-literals (in -Wdefault)]
 +    Literal 128 is out of the Int8 range -128..127
 +    If you are trying to write a large negative literal, use
 NegativeLiterals
 +
  T8542.hs:9:5: warning: [-Woverflowed-literals (in -Wdefault)]
      Literal 128 is out of the Int8 range -128..127
      If you are trying to write a large negative literal, use
 NegativeLiterals
 *** unexpected failure for T8542(hpc)
 }}}

 Somehow, unlike all the other ways, it ends up warning us about both
 occurences of `128` in:

 {{{#!hs
 module T8542 where

 import GHC.Int

 x :: Int8
 x = -128

 y :: Int8
 y = 128
 }}}

 instead of realizing that the first literal is `-128` directly, which _is_
 within the `[-128 .. 127]` range but supposedly not considered because
 `NegativeLiterals` is not on? It does sound like a little bug, and I'm
 curious as to why we don't see it with any of the other ways, even though
 to be honest I'm not familiar with the `hpc` way.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8542#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list