[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 13 commits: rts: Fix `prompt#` when profiling is enabled

Marge Bot (@marge-bot) gitlab at gitlab.haskell.org
Fri Feb 24 16:37:51 UTC 2023



Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC


Commits:
8e170f86 by Alexis King at 2023-02-23T16:59:22-05:00
rts: Fix `prompt#` when profiling is enabled

This commit also adds a new -Dk RTS option to the debug RTS to assist
debugging continuation captures. Currently, the printed information is
quite minimal, but more can be added in the future if it proves to be
useful when debugging future issues.

fixes #23001

- - - - -
e9e7a00d by sheaf at 2023-02-23T17:00:01-05:00
Explicit migration timeline for loopy SC solving

This patch updates the warning message introduced in commit
9fb4ca89bff9873e5f6a6849fa22a349c94deaae to specify an explicit
migration timeline: GHC will no longer support this constraint solving
mechanism starting from GHC 9.10.

Fixes #22912

- - - - -
ce33c5ef by Sylvain Henry at 2023-02-24T11:37:33-05:00
JS: make some arithmetic primops faster (#22835)

Don't use BigInt for wordAdd2, mulWord32, and timesInt32.

Co-authored-by: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org>

- - - - -
cc0e790a by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump terminfo submodule to 0.4.1.6

- - - - -
4b07a156 by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump unix submodule to 2.8.1.0

- - - - -
461603ef by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump deepseq submodule to 1.4.8.1

- - - - -
7356aae1 by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump directory submodule to 1.3.8.1

- - - - -
4cf265d8 by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump process submodule to v1.6.17.0

- - - - -
71989ac3 by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump hsc2hs submodule to 0.68.8

- - - - -
118016fb by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump array submodule to 0.5.4.0

- - - - -
e5617121 by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump Cabal submodule to 3.9 pre-release

- - - - -
28b63f72 by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump filepath submodule to 1.4.100.1

- - - - -
3fcf3e0b by Ben Gamari at 2023-02-24T11:37:33-05:00
Bump haskeline submodule to 0.8.2.1

- - - - -


28 changed files:

- compiler/GHC/StgToJS/Prim.hs
- compiler/GHC/Tc/Errors/Ppr.hs
- docs/users_guide/runtime_control.rst
- libraries/Cabal
- libraries/array
- libraries/deepseq
- libraries/directory
- libraries/filepath
- libraries/haskeline
- libraries/process
- libraries/terminfo
- libraries/unix
- rts/Continuation.c
- rts/ContinuationOps.cmm
- rts/RtsFlags.c
- rts/Trace.h
- rts/include/rts/Flags.h
- rts/js/arith.js
- testsuite/tests/numeric/should_run/all.T
- testsuite/tests/rts/continuations/all.T
- testsuite/tests/typecheck/should_compile/T20666b.stderr
- testsuite/tests/typecheck/should_compile/T22891.stderr
- testsuite/tests/typecheck/should_compile/T22912.stderr
- testsuite/tests/typecheck/should_fail/T20666.stderr
- testsuite/tests/typecheck/should_fail/T20666a.stderr
- testsuite/tests/typecheck/should_fail/T6161.stderr
- testsuite/tests/typecheck/should_fail/tcfail223.stderr
- utils/hsc2hs


Changes:

=====================================
compiler/GHC/StgToJS/Prim.hs
=====================================
@@ -59,7 +59,7 @@ genPrim prof bound ty op = case op of
 
   IntAddOp        -> \[r] [x,y] -> PrimInline $ r |= toI32 (Add x y)
   IntSubOp        -> \[r] [x,y] -> PrimInline $ r |= toI32 (Sub x y)
-  IntMulOp        -> \[r] [x,y] -> PrimInline $ r |= app "h$mulInt32" [x, y]
+  IntMulOp        -> \[r] [x,y] -> PrimInline $ r |= app "Math.imul" [x, y]
   IntMul2Op       -> \[c,hr,lr] [x,y] -> PrimInline $ appT [c,hr,lr] "h$hs_timesInt2" [x, y]
   IntMulMayOfloOp -> \[r] [x,y] -> PrimInline $ jVar \tmp -> mconcat
                                             [ tmp |= Mul x y
@@ -374,7 +374,7 @@ genPrim prof bound ty op = case op of
         ]
   WordAdd2Op    -> \[h,l] [x,y] -> PrimInline $ appT [h,l] "h$wordAdd2" [x,y]
   WordSubOp     -> \  [r] [x,y] -> PrimInline $ r |= toU32 (Sub x y)
-  WordMulOp     -> \  [r] [x,y] -> PrimInline $ r |= app "h$mulWord32" [x, y]
+  WordMulOp     -> \  [r] [x,y] -> PrimInline $ r |= toU32 (app "Math.imul" [x, y])
   WordMul2Op    -> \[h,l] [x,y] -> PrimInline $ appT [h,l] "h$mul2Word32" [x,y]
   WordQuotOp    -> \  [q] [x,y] -> PrimInline $ q |= app "h$quotWord32" [x,y]
   WordRemOp     -> \  [r] [x,y] -> PrimInline $ r |= app "h$remWord32" [x,y]


=====================================
compiler/GHC/Tc/Errors/Ppr.hs
=====================================
@@ -1321,7 +1321,7 @@ instance Diagnostic TcRnMessage where
                  , nest 2 $ pprCtOrigin (ctLocOrigin wtd_loc) <> comma
                  , text "in a way that might turn out to loop at runtime." ]
         warning
-          = vcat [ text "Future versions of GHC will turn this warning into an error." ]
+          = vcat [ text "Starting from GHC 9.10, this warning will turn into an error." ]
         user_manual =
           vcat [ text "See the user manual, § Undecidable instances and loopy superclasses." ]
 


=====================================
docs/users_guide/runtime_control.rst
=====================================
@@ -1367,6 +1367,7 @@ recommended for everyday use!
 .. rts-flag::  -Dc  DEBUG: program coverage
 .. rts-flag::  -Dr  DEBUG: sparks
 .. rts-flag::  -DC  DEBUG: compact
+.. rts-flag::  -Dk  DEBUG: continuation
 
     Debug messages will be sent to the binary event log file instead of
     stdout if the :rts-flag:`-l ⟨flags⟩` option is added. This might be useful


=====================================
libraries/Cabal
=====================================
@@ -1 +1 @@
-Subproject commit 6cd29789ca866464dc3af89f62c98c41264ce3cd
+Subproject commit 280a7a71e495da8f25ae33dbc6e743526b9106f9


=====================================
libraries/array
=====================================
@@ -1 +1 @@
-Subproject commit f7a498b880a1fff833699d8417bac155d58ed59e
+Subproject commit f487b8de85f2b271a3831c14ab6439b9bc9b8343


=====================================
libraries/deepseq
=====================================
@@ -1 +1 @@
-Subproject commit 7e77698d6a78981bc2649df78021a6c33a5d3913
+Subproject commit 0bfe57809f8ecaf1921b82a6791d1ecc317d1998


=====================================
libraries/directory
=====================================
@@ -1 +1 @@
-Subproject commit 7f9066137c694ab7cef9a4ebd8c19a281fad42e4
+Subproject commit 3ae36d84e44737fa9800d74d55ae1e30b75628cf


=====================================
libraries/filepath
=====================================
@@ -1 +1 @@
-Subproject commit 7139cd3383a2aae440a57b5604a8182d9a983715
+Subproject commit bb0e5cd49655b41bd3209b100f7a5a74698cbe83


=====================================
libraries/haskeline
=====================================
@@ -1 +1 @@
-Subproject commit ad40faf532ca86ae6d0839a299234db2ce4fc424
+Subproject commit 1c2ad91edc936a9836d1ad80a26f8be03a7d8bb0


=====================================
libraries/process
=====================================
@@ -1 +1 @@
-Subproject commit d9a8e6e749d2d60422037f3ef4733d521f18a7fc
+Subproject commit e60ab049b92238b0111654589f17b6ee68249f01


=====================================
libraries/terminfo
=====================================
@@ -1 +1 @@
-Subproject commit 0a05f06bc8a56c43578ce06d4ef1339ee70fb3fc
+Subproject commit 98100776edcf33796ddf2e752233e6ef179b876d


=====================================
libraries/unix
=====================================
@@ -1 +1 @@
-Subproject commit 98adc732bfbfca4fef945d546ecbaae13952a950
+Subproject commit 720debbf5b89366007bac473e8d7fd18e4114f1a


=====================================
rts/Continuation.c
=====================================
@@ -12,6 +12,7 @@
 #include "sm/Storage.h"
 #include "sm/Sanity.h"
 #include "Continuation.h"
+#include "Printer.h"
 #include "Threads.h"
 
 #include <string.h>
@@ -392,7 +393,14 @@ StgClosure *captureContinuationAndAbort(Capability *cap, StgTSO *tso, StgPromptT
 
   /* --- Phase 1: Find the matching prompt frame ---------------------------- */
 
+  IF_DEBUG(continuation,
+    debugBelch("captureContinuationAndAbort: searching for prompt\n");
+    debugBelch("  prompt_tag = "); printClosure(prompt_tag));
+
   while (true) {
+    IF_DEBUG(continuation,
+      printStackChunk(frame, frame + stack_frame_sizeW((StgClosure *)frame)));
+
     const StgInfoTable *info_ptr = ((StgClosure *)frame)->header.info;
     const StgRetInfoTable *info = get_ret_itbl((StgClosure *)frame);
     StgWord chunk_words = frame - stack->sp;
@@ -429,6 +437,8 @@ StgClosure *captureContinuationAndAbort(Capability *cap, StgTSO *tso, StgPromptT
                   || info->i.type == ATOMICALLY_FRAME
                   || info->i.type == CATCH_RETRY_FRAME
                   || info->i.type == CATCH_STM_FRAME)) {
+      IF_DEBUG(continuation,
+        debugBelch("captureContinuationAndAbort: could not find prompt, bailing out\n"));
       return NULL; // Bail out
     }
 
@@ -452,6 +462,10 @@ StgClosure *captureContinuationAndAbort(Capability *cap, StgTSO *tso, StgPromptT
 
   /* --- Phase 2: Perform the capture --------------------------------------- */
 
+  IF_DEBUG(continuation,
+    debugBelch("captureContinuationAndAbort: found prompt, "
+               "capturing %" FMT_Word " words of stack\n", total_words));
+
   dirty_TSO(cap, tso);
   dirty_STACK(cap, stack);
 


=====================================
rts/ContinuationOps.cmm
=====================================
@@ -49,7 +49,12 @@ stg_newPromptTagzh()
   return (tag);
 }
 
-INFO_TABLE_RET(stg_prompt_frame, RET_SMALL, W_ info_ptr, P_ tag /* :: PromptTag# a */)
+#define PROMPT_FRAME_FIELDS(w_,p_,info_ptr,p1,p2,tag) \
+  w_ info_ptr,                                        \
+  PROF_HDR_FIELDS(w_,p1,p2)                           \
+  p_ tag
+
+INFO_TABLE_RET(stg_prompt_frame, RET_SMALL, PROMPT_FRAME_FIELDS(W_,P_, info_ptr, p1, p2, tag /* :: PromptTag# a */))
   return (P_ ret /* :: a */)
 {
   return (ret);
@@ -61,7 +66,9 @@ stg_promptzh(P_ tag /* :: PromptTag# a */, P_ io /* :: IO a */)
   STK_CHK_GEN();
   TICK_UNKNOWN_CALL();
   TICK_SLOW_CALL_fast_v();
-  jump stg_ap_v_fast (stg_prompt_frame_info, tag) (io);
+  jump stg_ap_v_fast
+    (PROMPT_FRAME_FIELDS(,,stg_prompt_frame_info, CCCS, 0, tag))
+    (io);
 }
 
 /* --------------------------------------------------------------------------


=====================================
rts/RtsFlags.c
=====================================
@@ -205,6 +205,7 @@ void initRtsFlagsDefaults(void)
     RtsFlags.DebugFlags.sparks          = false;
     RtsFlags.DebugFlags.numa            = false;
     RtsFlags.DebugFlags.compact         = false;
+    RtsFlags.DebugFlags.continuation    = false;
 
 #if defined(PROFILING)
     RtsFlags.CcFlags.doCostCentres      = COST_CENTRES_NONE;
@@ -476,6 +477,7 @@ usage_text[] = {
 "  -Dc  DEBUG: program coverage",
 "  -Dr  DEBUG: sparks",
 "  -DC  DEBUG: compact",
+"  -Dk  DEBUG: continuation",
 "",
 "     NOTE: DEBUG events are sent to stderr by default; add -l to create a",
 "     binary event log file instead.",
@@ -2190,6 +2192,9 @@ static void read_debug_flags(const char* arg)
         case 'C':
             RtsFlags.DebugFlags.compact = true;
             break;
+        case 'k':
+            RtsFlags.DebugFlags.continuation = true;
+            break;
         default:
             bad_option( arg );
         }


=====================================
rts/Trace.h
=====================================
@@ -67,6 +67,7 @@ enum CapsetType { CapsetTypeCustom = CAPSET_TYPE_CUSTOM,
 #define DEBUG_hpc         RtsFlags.DebugFlags.hpc
 #define DEBUG_sparks      RtsFlags.DebugFlags.sparks
 #define DEBUG_compact     RtsFlags.DebugFlags.compact
+#define DEBUG_continuation RtsFlags.DebugFlags.continuation
 
 // Event-enabled flags
 // These semantically booleans but we use a dense packing to minimize their


=====================================
rts/include/rts/Flags.h
=====================================
@@ -113,6 +113,7 @@ typedef struct _DEBUG_FLAGS {
     bool sparks;         /* 'r' */
     bool numa;           /* '--debug-numa' */
     bool compact;        /* 'C' */
+    bool continuation;   /* 'k' */
 } DEBUG_FLAGS;
 
 /* See Note [Synchronization of flags and base APIs] */


=====================================
rts/js/arith.js
=====================================
@@ -203,38 +203,73 @@ function h$hs_uncheckedShiftRLInt64(h,l,n) {
   RETURN_UBX_TUP2(rh,rl);
 }
 
-var h$mulInt32 = Math.imul;
-
 // Compute product of two Ints. Returns (nh,ch,cl)
 // where (ch,cl) are the two parts of the 64-bit result
 // and nh is 0 if ch can be safely dropped (i.e. it's a sign-extension of cl).
 function h$hs_timesInt2(l1,l2) {
-  var a = I32(l1);
-  var b = I32(l2);
-  var r = BigInt.asIntN(64, a * b);
-  TRACE_ARITH("Int32: " + a + " * " + b + " ==> " + r + " (Int64)")
-
-  var rh = I64h(r);
-  var rl = I64l(r)|0;
-  var nh = ((rh === 0 && rl >= 0) || (rh === -1 && rl < 0)) ? 0 : 1;
-  RETURN_UBX_TUP3(nh, rh, rl);
+  var ah = l1 >> 16;
+  var al = l1 & 0xFFFF;
+  var bh = l2 >> 16;
+  var bl = l2 & 0xFFFF;
+
+  var r0 = al * bl;
+  var r1 = r0 >>> 16;
+  r0 &= 0xFFFF;
+
+  r1 += al * bh;
+  var r2 = r1 >> 16;
+  r1 &= 0xFFFF;
+
+  r1 += ah * bl;
+  r2 += r1 >> 16;
+  r1 &= 0xFFFF;
+
+  r2 += ah * bh;
+  var r3 = (r2 >> 16) & 0xFFFF;
+  r2 &= 0xFFFF;
+
+  const rh = r3 << 16 | r2;
+  const rl = r1 << 16 | r0;
+
+  var s = rl >> 31;
+  if (rh === s) {
+    TRACE_ARITH("Int32: " + l1 + " * " + l2 + " ==> " + rl + " (Int64)")
+    RETURN_UBX_TUP3(0, s, rl);
+  }
+  else {
+    TRACE_ARITH("Int32: " + l1 + " * " + l2 + " ==> " + rh + " " + rl + " (Int64)")
+    RETURN_UBX_TUP3(1, rh, rl);
+  }
 }
 
 
-function h$mulWord32(l1,l2) {
-  var a = W32(l1);
-  var b = W32(l2);
-  var r = BigInt.asUintN(32, a * b);
-  TRACE_ARITH("Word32: " + a + " * " + b + " ==> " + r)
-  RETURN_W32(r);
-}
-
 function h$mul2Word32(l1,l2) {
-  var a = W32(l1);
-  var b = W32(l2);
-  var r = BigInt.asUintN(64, a * b);
-  TRACE_ARITH("Word32: " + a + " * " + b + " ==> " + r + " (Word64)")
-  RETURN_W64(r);
+  var ah = l1 >>> 16;
+  var al = l1 & 0xFFFF;
+  var bh = l2 >>> 16;
+  var bl = l2 & 0xFFFF;
+
+  var r0 = al * bl;
+  var r1 = r0 >>> 16;
+  r0 &= 0xFFFF;
+
+  r1 += al * bh;
+  var r2 = r1 >>> 16;
+  r1 &= 0xFFFF;
+
+  r1 += ah * bl;
+  r2 += r1 >>> 16;
+  r1 &= 0xFFFF;
+
+  r2 += ah * bh;
+  var r3 = (r2 >>> 16) & 0xFFFF;
+  r2 &= 0xFFFF;
+
+  const rh = (r3 << 16 | r2) >>> 0;
+  const rl = (r1 << 16 | r0) >>> 0;
+
+  TRACE_ARITH("Word32: " + l1 + " * " + l2 + " ==> " + rh + " " + rl + " (Word64)")
+  RETURN_UBX_TUP2(rh,rl);
 }
 
 function h$quotWord32(n,d) {
@@ -272,11 +307,11 @@ function h$quotRem2Word32(nh,nl,d) {
 }
 
 function h$wordAdd2(l1,l2) {
-  var a = W32(l1);
-  var b = W32(l2);
-  var r = BigInt.asUintN(64, a + b);
-  TRACE_ARITH("Word32: " + a + " + " + b + " ==> " + r + " (Word64)")
-  RETURN_W64(r);
+  var r = (l1 >>> 1) + (l2 >>> 1) + (1 & l1 & l2);
+  var h = r >>> 31;
+  var l = (l1 + l2) >>> 0;
+  TRACE_ARITH("Word32: " + a + " + " + b + " ==> " + h + " " + l + " (Word64)")
+  RETURN_UBX_TUP2(h,l);
 }
 
 function h$isDoubleNegativeZero(d) {


=====================================
testsuite/tests/numeric/should_run/all.T
=====================================
@@ -63,7 +63,7 @@ test('T9407', normal, compile_and_run, [''])
 test('T9810', normal, compile_and_run, [''])
 test('T10011', normal, compile_and_run, [''])
 test('T10962', omit_ways(['ghci']), compile_and_run, ['-O2'])
-test('T11702', [unless(arch("javascript"),extra_ways(['optasm']))], compile_and_run, [''])
+test('T11702', [unless(js_arch(),extra_ways(['optasm']))], compile_and_run, [''])
 test('T12136', normal, compile_and_run, [''])
 test('T15301', normal, compile_and_run, ['-O2'])
 test('T497', normal, compile_and_run, ['-O'])
@@ -79,5 +79,5 @@ test('IntegerToFloat', normal, compile_and_run, [''])
 
 test('T20291', normal, compile_and_run, [''])
 test('T22282', normal, compile_and_run, [''])
-test('T22671', js_broken(22835), compile_and_run, [''])
-test('foundation', js_broken(22576), compile_and_run, ['-O -package transformers'])
+test('T22671', normal, compile_and_run, [''])
+test('foundation', [when(js_arch(), run_timeout_multiplier(2))], compile_and_run, ['-O -package transformers'])


=====================================
testsuite/tests/rts/continuations/all.T
=====================================
@@ -1,4 +1,6 @@
 setTestOpts(js_broken(22261))
+if have_profiling():
+  setTestOpts(extra_ways(['prof']))
 
 test('cont_simple_shift', [extra_files(['ContIO.hs'])], multimod_compile_and_run, ['cont_simple_shift', ''])
 test('cont_exn_masking', [extra_files(['ContIO.hs'])], multimod_compile_and_run, ['cont_exn_masking', ''])


=====================================
testsuite/tests/typecheck/should_compile/T20666b.stderr
=====================================
@@ -3,7 +3,7 @@ T20666b.hs:11:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
     I am solving the constraint ‘Eq (F [a])’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Eq (F [a])’ to the instance context,


=====================================
testsuite/tests/typecheck/should_compile/T22891.stderr
=====================================
@@ -3,7 +3,7 @@ T22891.hs:9:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
     I am solving the constraint ‘Foo f’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Foo f’ to the instance context,


=====================================
testsuite/tests/typecheck/should_compile/T22912.stderr
=====================================
@@ -4,7 +4,7 @@ T22912.hs:17:16: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
       arising from the head of a quantified constraint
       arising from a use of ‘go’,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Implies


=====================================
testsuite/tests/typecheck/should_fail/T20666.stderr
=====================================
@@ -3,7 +3,7 @@ T20666.hs:13:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
     I am solving the constraint ‘Show (T c)’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Show (T c)’ to the instance context,
@@ -13,7 +13,7 @@ T20666.hs:17:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
     I am solving the constraint ‘Show (T c)’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Show (T c)’ to the instance context,


=====================================
testsuite/tests/typecheck/should_fail/T20666a.stderr
=====================================
@@ -3,7 +3,7 @@ T20666a.hs:11:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
     I am solving the constraint ‘Eq (F [a])’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Eq (F [a])’ to the instance context,


=====================================
testsuite/tests/typecheck/should_fail/T6161.stderr
=====================================
@@ -3,7 +3,7 @@ T6161.hs:19:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault)]
     I am solving the constraint ‘Super (Fam a)’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Super (Fam a)’ to the instance context,


=====================================
testsuite/tests/typecheck/should_fail/tcfail223.stderr
=====================================
@@ -3,7 +3,7 @@ tcfail223.hs:10:10: warning: [GHC-36038] [-Wloopy-superclass-solve (in -Wdefault
     I am solving the constraint ‘Class1 a’,
       arising from the superclasses of an instance declaration,
     in a way that might turn out to loop at runtime.
-    Future versions of GHC will turn this warning into an error.
+    Starting from GHC 9.10, this warning will turn into an error.
     See the user manual, § Undecidable instances and loopy superclasses.
     Suggested fix:
       Add the constraint ‘Class1 a’ to the instance context,


=====================================
utils/hsc2hs
=====================================
@@ -1 +1 @@
-Subproject commit 0811ae8f29d0cc2591bbe89bc034ae14143d0443
+Subproject commit 1ba092932f86c1fda15091d355ba7975b8554437



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/c2fc5f945af9c414609d1903e19bc57e7aed512f...3fcf3e0b0964e2b88d13eced5c37c280b6fd2a02

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/c2fc5f945af9c414609d1903e19bc57e7aed512f...3fcf3e0b0964e2b88d13eced5c37c280b6fd2a02
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230224/b5abba86/attachment-0001.html>


More information about the ghc-commits mailing list