summaryrefslogtreecommitdiff
path: root/testsuite/tests/numeric/should_run/T10962.hs
blob: 435f3637d75e29ae78470eb1353a166c803d067d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{-# LANGUAGE MagicHash     #-}
{-# LANGUAGE UnboxedTuples #-}

module Main (main) where

import GHC.Base

unW# :: Word -> Word#
unW# (W# w) = w

type WordOpC = Word# -> Word# -> (# Word#, Int# #)

check :: WordOpC -> Word# -> Word# -> IO ()
check op a b = do
  let (# w, c #) = op a b
  print (W# w, I# c)

checkSubInlNoInl :: WordOpC -> Word# -> Word# -> IO ()
checkSubInlNoInl op a b = do
  inline check op a b   -- constant folding
  noinline check op a b -- lowering of PrimOp
{-# INLINE checkSubInlNoInl #-}

main :: IO ()
main = do
  -- Overflow.
  checkSubInlNoInl subWordC# 1## 3##
  checkSubInlNoInl addWordC# (unW# (inline maxBound)) 3##

  -- No overflow.
  checkSubInlNoInl subWordC# 5## 2##
  checkSubInlNoInl addWordC# (unW# (inline maxBound-1)) 1##