summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornineonine <mail4chemik@gmail.com>2022-02-17 00:01:44 -0800
committernineonine <mail4chemik@gmail.com>2022-02-23 10:00:45 -0800
commitcabc9c32eaa49734d9873973c99787278e194aee (patch)
treeaed180f70eb6d3a3a419e46bf39ffecc8c63c585
parent59b7f764489d3eb765e0b40e916b1438ff76e1fa (diff)
downloadhaskell-wip/T20214.tar.gz
ghci: show helpful error message when loading module with SIMD vector operations (#20214)wip/T20214
Previously, when trying to load module with SIMD vector operations, ghci would panic in 'GHC.StgToByteCode.findPushSeq'. Now, a more helpful message is displayed.
-rw-r--r--compiler/GHC/StgToByteCode.hs3
-rw-r--r--compiler/GHC/StgToCmm/ArgRep.hs1
-rw-r--r--testsuite/tests/ghci/should_fail/Makefile3
-rw-r--r--testsuite/tests/ghci/should_fail/T20214.hs8
-rw-r--r--testsuite/tests/ghci/should_fail/T20214.stdout1
-rw-r--r--testsuite/tests/ghci/should_fail/all.T1
6 files changed, 17 insertions, 0 deletions
diff --git a/compiler/GHC/StgToByteCode.hs b/compiler/GHC/StgToByteCode.hs
index 885af12944..a5931c2dd6 100644
--- a/compiler/GHC/StgToByteCode.hs
+++ b/compiler/GHC/StgToByteCode.hs
@@ -784,6 +784,9 @@ findPushSeq (D: rest)
= (PUSH_APPLY_D, 1, rest)
findPushSeq (L: rest)
= (PUSH_APPLY_L, 1, rest)
+findPushSeq argReps
+ | any (`elem` [V16, V32, V64]) argReps
+ = sorry "SIMD vector operations are not available in GHCi"
findPushSeq _
= panic "GHC.StgToByteCode.findPushSeq"
diff --git a/compiler/GHC/StgToCmm/ArgRep.hs b/compiler/GHC/StgToCmm/ArgRep.hs
index cc618a16ed..9db0ed7afc 100644
--- a/compiler/GHC/StgToCmm/ArgRep.hs
+++ b/compiler/GHC/StgToCmm/ArgRep.hs
@@ -52,6 +52,7 @@ data ArgRep = P -- GC Ptr
| V16 -- 16-byte (128-bit) vectors of Float/Double/Int8/Word32/etc.
| V32 -- 32-byte (256-bit) vectors of Float/Double/Int8/Word32/etc.
| V64 -- 64-byte (512-bit) vectors of Float/Double/Int8/Word32/etc.
+ deriving Eq
instance Outputable ArgRep where ppr = text . argRepString
argRepString :: ArgRep -> String
diff --git a/testsuite/tests/ghci/should_fail/Makefile b/testsuite/tests/ghci/should_fail/Makefile
index 9101fbd40a..c9fd6f0d6c 100644
--- a/testsuite/tests/ghci/should_fail/Makefile
+++ b/testsuite/tests/ghci/should_fail/Makefile
@@ -1,3 +1,6 @@
TOP=../../..
include $(TOP)/mk/boilerplate.mk
include $(TOP)/mk/test.mk
+
+T20214:
+ "$(TEST_HC)" $(TEST_HC_OPTS_INTERACTIVE) T20214.hs 2>&1 | grep "SIMD"
diff --git a/testsuite/tests/ghci/should_fail/T20214.hs b/testsuite/tests/ghci/should_fail/T20214.hs
new file mode 100644
index 0000000000..da5d292b1d
--- /dev/null
+++ b/testsuite/tests/ghci/should_fail/T20214.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE UnboxedTuples, MagicHash #-}
+
+module T20214 where
+
+import GHC.Exts
+
+main = print $ case unpackDoubleX2# (broadcastDoubleX2# 4.4##) of
+ (# a, b #) -> (D# a, D# b)
diff --git a/testsuite/tests/ghci/should_fail/T20214.stdout b/testsuite/tests/ghci/should_fail/T20214.stdout
new file mode 100644
index 0000000000..c416819de1
--- /dev/null
+++ b/testsuite/tests/ghci/should_fail/T20214.stdout
@@ -0,0 +1 @@
+ SIMD vector operations are not available in GHCi
diff --git a/testsuite/tests/ghci/should_fail/all.T b/testsuite/tests/ghci/should_fail/all.T
index f2618ce08c..3e24f19ad3 100644
--- a/testsuite/tests/ghci/should_fail/all.T
+++ b/testsuite/tests/ghci/should_fail/all.T
@@ -5,3 +5,4 @@ test('T16013', [], ghci_script, ['T16013.script'])
test('T16287', [], ghci_script, ['T16287.script'])
test('T18052b', [], ghci_script, ['T18052b.script'])
test('T18027a', [], ghci_script, ['T18027a.script'])
+test('T20214', [], makefile_test, ['T20214'])