[Git][ghc/ghc][wip/kill-pre-c11] 8 commits: Replace '?callStack' implicit param with HasCallStack in GHC.Internal.Exception.throw
Cheng Shao (@TerrorJack)
gitlab at gitlab.haskell.org
Sun Jun 9 08:52:22 UTC 2024
Cheng Shao pushed to branch wip/kill-pre-c11 at Glasgow Haskell Compiler / GHC
Commits:
edfe6140 by qqwy at 2024-06-08T11:23:54-04:00
Replace '?callStack' implicit param with HasCallStack in GHC.Internal.Exception.throw
- - - - -
35a64220 by Cheng Shao at 2024-06-08T11:24:30-04:00
rts: cleanup inlining logic
This patch removes pre-C11 legacy code paths related to
INLINE_HEADER/STATIC_INLINE/EXTERN_INLINE macros, ensure EXTERN_INLINE
is treated as static inline in most cases (fixes #24945), and also
corrects the comments accordingly.
- - - - -
9ea90ed2 by Andrew Lelechenko at 2024-06-08T11:25:06-04:00
CODEOWNERS: add @core-libraries to track base interface changes
A low-tech tactical solution for #24919
- - - - -
580fef7b by Ben Gamari at 2024-06-09T01:27:21-04:00
ghc-internal: Update CHANGELOG to reflect current version
- - - - -
391ecff5 by Ben Gamari at 2024-06-09T01:27:21-04:00
ghc-internal: Update prologue.txt to reflect package description
- - - - -
3dca3b7d by Ben Gamari at 2024-06-09T01:27:57-04:00
compiler: Clarify comment regarding need for MOVABS
The comment wasn't clear in stating that it was only applicable to
immediate source and memory target operands.
- - - - -
af425a52 by Cheng Shao at 2024-06-09T08:50:11+00:00
rts: replace ad-hoc MYTASK_USE_TLV with proper CC_SUPPORTS_TLS
This patch replaces the ad-hoc `MYTASK_USE_TLV` with the
`CC_SUPPORTS_TLS` macro. If TLS support is detected by autoconf, then
we should use that for managing `myTask` in the threaded RTS.
- - - - -
41919b33 by Cheng Shao at 2024-06-09T08:51:44+00:00
WIP: always assume __GNUC__ >= 4
- - - - -
23 changed files:
- CODEOWNERS
- compiler/GHC/CmmToAsm/X86/Instr.hs
- libraries/ghc-internal/CHANGELOG.md
- libraries/ghc-internal/prologue.txt
- libraries/ghc-internal/src/GHC/Internal/Exception.hs
- libraries/ghc-prim/cbits/atomic.c
- libraries/ghc-prim/cbits/ctz.c
- rts/Hash.c
- rts/Inlines.c
- rts/RtsStartup.c
- rts/RtsSymbols.c
- rts/Task.c
- rts/Task.h
- rts/include/Rts.h
- rts/include/Stg.h
- rts/include/rts/Types.h
- rts/include/stg/DLL.h
- rts/sm/BlockAlloc.c
- rts/sm/Evac.h
- testsuite/tests/interface-stability/base-exports.stdout
- testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
- testsuite/tests/interface-stability/base-exports.stdout-mingw32
- testsuite/tests/interface-stability/base-exports.stdout-ws-32
Changes:
=====================================
CODEOWNERS
=====================================
@@ -60,6 +60,7 @@
/libraries/base/ @hvr
/libraries/ghci/ @simonmar
/libraries/template-haskell/ @rae
+/testsuite/tests/interface-stability/ @core-libraries
[Internal utilities and libraries]
/utils/iserv-proxy/ @angerman @simonmar
=====================================
compiler/GHC/CmmToAsm/X86/Instr.hs
=====================================
@@ -198,10 +198,13 @@ data Instr
-- Moves.
| MOV Format Operand Operand
- -- ^ N.B. when used with the 'II64' 'Format', the source
+ -- ^ N.B. Due to AT&T assembler quirks, when used with 'II64'
+ -- 'Format' immediate source and memory target operand, the source
-- operand is interpreted to be a 32-bit sign-extended value.
- -- True 64-bit operands need to be moved with @MOVABS@, which we
- -- currently don't use.
+ -- True 64-bit operands need to be either first moved to a register or moved
+ -- with @MOVABS@; we currently do not use this instruction in GHC.
+ -- See https://stackoverflow.com/questions/52434073/whats-the-difference-between-the-x86-64-att-instructions-movq-and-movabsq.
+
| MOVD Format Operand Operand -- ^ MOVD/MOVQ SSE2 instructions
-- (bitcast between a general purpose
-- register and a float register).
=====================================
libraries/ghc-internal/CHANGELOG.md
=====================================
@@ -1,5 +1,5 @@
# Revision history for `ghc-internal`
-## 0.1.0.0 -- YYYY-mm-dd
+## 9.1001.0 -- 2024-05-01
-* First version. Released on an unsuspecting world.
+* Package created containing implementation moved from `base`.
=====================================
libraries/ghc-internal/prologue.txt
=====================================
@@ -1,3 +1,2 @@
-This package contains the @Prelude@ and its support libraries, and a large
-collection of useful libraries ranging from data structures to parsing
-combinators and debugging utilities.
+This package contains the implementation of GHC's standard libraries and is
+not intended for use by end-users.
=====================================
libraries/ghc-internal/src/GHC/Internal/Exception.hs
=====================================
@@ -79,7 +79,7 @@ import GHC.Internal.Exception.Type
-- WARNING: You may want to use 'throwIO' instead so that your pure code
-- stays exception-free.
throw :: forall (r :: RuntimeRep). forall (a :: TYPE r). forall e.
- (?callStack :: CallStack, Exception e) => e -> a
+ (HasCallStack, Exception e) => e -> a
throw e =
let !se = unsafePerformIO (toExceptionWithBacktrace e)
in raise# se
=====================================
libraries/ghc-prim/cbits/atomic.c
=====================================
@@ -163,7 +163,7 @@ hs_atomic_and64(StgWord x, StgWord64 val)
#pragma GCC diagnostic push
#if defined(__clang__)
#pragma GCC diagnostic ignored "-Wsync-fetch-and-nand-semantics-changed"
-#elif defined(__GNUC__)
+#else
#pragma GCC diagnostic ignored "-Wsync-nand"
#endif
=====================================
libraries/ghc-prim/cbits/ctz.c
=====================================
@@ -31,7 +31,7 @@ hs_ctz32(StgWord x)
StgWord
hs_ctz64(StgWord64 x)
{
-#if defined(__GNUC__) && (defined(i386_HOST_ARCH) || defined(powerpc_HOST_ARCH))
+#if defined(i386_HOST_ARCH) || defined(powerpc_HOST_ARCH)
/* On Linux/i386, the 64bit `__builtin_ctzll()` intrinsic doesn't
get inlined by GCC but rather a short `__ctzdi2` runtime function
is inserted when needed into compiled object files.
=====================================
rts/Hash.c
=====================================
@@ -14,18 +14,6 @@
#include "Hash.h"
#include "RtsUtils.h"
-/* This file needs to be compiled with vectorization enabled. Unfortunately
- since we compile these things these days with cabal we can no longer
- specify optimization per file. So we have to resort to pragmas. */
-#if defined(__GNUC__) || defined(__GNUG__)
-#if !defined(__clang__)
-#if !defined(DEBUG)
-#pragma GCC push_options
-#pragma GCC optimize ("O3")
-#endif
-#endif
-#endif
-
#define XXH_INLINE_ALL
#include "xxhash.h"
@@ -563,12 +551,3 @@ int keyCountHashTable (HashTable *table)
{
return table->kcount;
}
-
-
-#if defined(__GNUC__) || defined(__GNUG__)
-#if !defined(__clang__)
-#if !defined(DEBUG)
-#pragma GCC pop_options
-#endif
-#endif
-#endif
=====================================
rts/Inlines.c
=====================================
@@ -1,6 +1,7 @@
-// all functions declared with EXTERN_INLINE in the header files get
-// compiled for real here, just in case the definition was not inlined
-// at some call site:
+// All functions declared with EXTERN_INLINE in the header files get
+// compiled for real here. Some of them are called by Cmm (e.g.
+// recordClosureMutated) and therefore the real thing needs to reside
+// in Inlines.o for Cmm ccall to work.
#define KEEP_INLINES
#include "rts/PosixSource.h"
#include "Rts.h"
=====================================
rts/RtsStartup.c
=====================================
@@ -123,13 +123,7 @@ void _fpreset(void)
x86_init_fpu();
}
-#if defined(__GNUC__)
void __attribute__((alias("_fpreset"))) fpreset(void);
-#else
-void fpreset(void) {
- _fpreset();
-}
-#endif
/* Set the console's CodePage to UTF-8 if using the new I/O manager and the CP
is still the default one. */
=====================================
rts/RtsSymbols.c
=====================================
@@ -956,7 +956,7 @@ extern char **environ;
RTS_INTCHAR_SYMBOLS
// 64-bit support functions in libgcc.a
-#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
+#if SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
#define RTS_LIBGCC_SYMBOLS \
SymI_NeedsProto(__divdi3) \
SymI_NeedsProto(__udivdi3) \
@@ -967,7 +967,7 @@ extern char **environ;
SymI_NeedsProto(__ashrdi3) \
SymI_NeedsProto(__lshrdi3) \
SymI_NeedsProto(__fixunsdfdi)
-#elif defined(__GNUC__) && SIZEOF_VOID_P == 8
+#elif SIZEOF_VOID_P == 8
#define RTS_LIBGCC_SYMBOLS \
SymI_NeedsProto(__udivti3) \
SymI_NeedsProto(__umodti3)
=====================================
rts/Task.c
=====================================
@@ -52,7 +52,7 @@ Mutex all_tasks_mutex;
// A thread-local-storage key that we can use to get access to the
// current thread's Task structure.
#if defined(THREADED_RTS)
-# if defined(MYTASK_USE_TLV)
+# if CC_SUPPORTS_TLS
__thread Task *my_task;
# else
ThreadLocalKey currentTaskKey;
@@ -75,7 +75,7 @@ initTaskManager (void)
peakWorkerCount = 0;
tasksInitialized = 1;
#if defined(THREADED_RTS)
-#if !defined(MYTASK_USE_TLV)
+#if !CC_SUPPORTS_TLS
newThreadLocalKey(¤tTaskKey);
#endif
initMutex(&all_tasks_mutex);
@@ -109,7 +109,7 @@ freeTaskManager (void)
#if defined(THREADED_RTS)
closeMutex(&all_tasks_mutex);
-#if !defined(MYTASK_USE_TLV)
+#if !CC_SUPPORTS_TLS
freeThreadLocalKey(¤tTaskKey);
#endif
#endif
=====================================
rts/Task.h
=====================================
@@ -265,11 +265,7 @@ extern uint32_t peakWorkerCount;
// A thread-local-storage key that we can use to get access to the
// current thread's Task structure.
#if defined(THREADED_RTS)
-#if ((defined(linux_HOST_OS) && \
- (defined(i386_HOST_ARCH) || defined(x86_64_HOST_ARCH))) || \
- (defined(mingw32_HOST_OS) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 4)) && \
- (!defined(CC_LLVM_BACKEND))
-#define MYTASK_USE_TLV
+#if CC_SUPPORTS_TLS
extern __thread Task *my_task;
#else
extern ThreadLocalKey currentTaskKey;
@@ -287,7 +283,7 @@ extern Task *my_task;
INLINE_HEADER Task *
myTask (void)
{
-#if defined(THREADED_RTS) && !defined(MYTASK_USE_TLV)
+#if defined(THREADED_RTS) && !CC_SUPPORTS_TLS
return (Task*) getThreadLocalVar(¤tTaskKey);
#else
return my_task;
@@ -297,7 +293,7 @@ myTask (void)
INLINE_HEADER void
setMyTask (Task *task)
{
-#if defined(THREADED_RTS) && !defined(MYTASK_USE_TLV)
+#if defined(THREADED_RTS) && !CC_SUPPORTS_TLS
setThreadLocalVar(¤tTaskKey,task);
#else
my_task = task;
=====================================
rts/include/Rts.h
=====================================
@@ -54,11 +54,7 @@ extern "C" {
#include "rts/Types.h"
#include "rts/Time.h"
-#if __GNUC__ >= 3
#define ATTRIBUTE_ALIGNED(n) __attribute__((aligned(n)))
-#else
-#define ATTRIBUTE_ALIGNED(n) /*nothing*/
-#endif
// Symbols that are extern, but private to the RTS, are declared
// with visibility "hidden" to hide them outside the RTS shared
@@ -69,24 +65,11 @@ extern "C" {
#define RTS_PRIVATE /* disabled: RTS_PRIVATE */
#endif
-#if __GNUC__ >= 4
#define RTS_UNLIKELY(p) __builtin_expect((p),0)
-#else
-#define RTS_UNLIKELY(p) (p)
-#endif
-#if __GNUC__ >= 4
#define RTS_LIKELY(p) __builtin_expect(!!(p), 1)
-#else
-#define RTS_LIKELY(p) (p)
-#endif
-/* __builtin_unreachable is supported since GNU C 4.5 */
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
#define RTS_UNREACHABLE __builtin_unreachable()
-#else
-#define RTS_UNREACHABLE abort()
-#endif
/* Prefetch primitives */
#define prefetchForRead(ptr) __builtin_prefetch(ptr, 0)
@@ -377,9 +360,7 @@ TICK_VAR(2)
Useful macros and inline functions
-------------------------------------------------------------------------- */
-#if defined(__GNUC__)
#define SUPPORTS_TYPEOF
-#endif
#if defined(SUPPORTS_TYPEOF)
#define stg_min(a,b) ({typeof(a) _a = (a), _b = (b); _a <= _b ? _a : _b; })
=====================================
rts/include/Stg.h
=====================================
@@ -114,72 +114,26 @@
* 'Portable' inlining:
* INLINE_HEADER is for inline functions in header files (macros)
* STATIC_INLINE is for inline functions in source files
- * EXTERN_INLINE is for functions that we want to inline sometimes
- * (we also compile a static version of the function; see Inlines.c)
+ * EXTERN_INLINE is for functions that may be called in Cmm
+ * (we also compile a static version of an EXTERN_INLINE function; see Inlines.c)
*/
-// We generally assume C99 semantics albeit these two definitions work fine even
-// when gnu90 semantics are active (i.e. when __GNUC_GNU_INLINE__ is defined or
-// when a GCC older than 4.2 is used)
-//
-// The problem, however, is with 'extern inline' whose semantics significantly
-// differs between gnu90 and C99
#define INLINE_HEADER static inline
#define STATIC_INLINE static inline
-// Figure out whether `__attributes__((gnu_inline))` is needed
-// to force gnu90-style 'external inline' semantics.
-#if defined(FORCE_GNU_INLINE)
-// disable auto-detection since HAVE_GNU_INLINE has been defined externally
-#elif defined(__GNUC_GNU_INLINE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2
-// GCC 4.2.x didn't properly support C99 inline semantics (GCC 4.3 was the first
-// release to properly support C99 inline semantics), and therefore warned when
-// using 'extern inline' while in C99 mode unless `__attributes__((gnu_inline))`
-// was explicitly set.
-# define FORCE_GNU_INLINE 1
-#endif
-
-#if defined(FORCE_GNU_INLINE)
-// Force compiler into gnu90 semantics
-# if defined(KEEP_INLINES)
-# define EXTERN_INLINE inline __attribute__((gnu_inline))
-# else
-# define EXTERN_INLINE extern inline __attribute__((gnu_inline))
-# endif
-#elif defined(__GNUC_GNU_INLINE__)
-// we're currently in gnu90 inline mode by default and
-// __attribute__((gnu_inline)) may not be supported, so better leave it off
-# if defined(KEEP_INLINES)
-# define EXTERN_INLINE inline
-# else
-# define EXTERN_INLINE extern inline
-# endif
-#else
-// Assume C99 semantics (yes, this curiously results in swapped definitions!)
-// This is the preferred branch, and at some point we may drop support for
-// compilers not supporting C99 semantics altogether.
+// See comment in rts/Inlines.c for explanation.
# if defined(KEEP_INLINES)
# define EXTERN_INLINE extern inline
# else
-# define EXTERN_INLINE inline
+# define EXTERN_INLINE static inline
# endif
-#endif
-
/*
* GCC attributes
*/
-#if defined(__GNUC__)
#define GNU_ATTRIBUTE(at) __attribute__((at))
-#else
-#define GNU_ATTRIBUTE(at)
-#endif
-#if __GNUC__ >= 3
#define GNUC3_ATTRIBUTE(at) __attribute__((at))
-#else
-#define GNUC3_ATTRIBUTE(at)
-#endif
/* Used to mark a switch case that falls-through */
#if (defined(__GNUC__) && __GNUC__ >= 7)
@@ -192,7 +146,7 @@
#define FALLTHROUGH ((void)0)
#endif /* __GNUC__ >= 7 */
-#if !defined(DEBUG) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+#if !defined(DEBUG)
#define GNUC_ATTR_HOT __attribute__((hot))
#else
#define GNUC_ATTR_HOT /* nothing */
@@ -206,21 +160,11 @@
See Note [Windows Stack allocations] */
#if defined(__clang__)
#define STG_NO_OPTIMIZE __attribute__((optnone))
-#elif defined(__GNUC__) || defined(__GNUG__)
-#define STG_NO_OPTIMIZE __attribute__((optimize("O0")))
#else
-#define STG_NO_OPTIMIZE /* nothing */
+#define STG_NO_OPTIMIZE __attribute__((optimize("O0")))
#endif
-// Mark a function as accepting a printf-like format string.
-#if !defined(__GNUC__) && defined(mingw32_HOST_OS)
-/* On Win64, if we say "printf" then gcc thinks we are going to use
- MS format specifiers like %I64d rather than %llu */
-#define STG_PRINTF_ATTR(fmt_arg, rest) GNUC3_ATTRIBUTE(format(gnu_printf, fmt_arg, rest))
-#else
-/* However, on OS X, "gnu_printf" isn't recognised */
#define STG_PRINTF_ATTR(fmt_arg, rest) GNUC3_ATTRIBUTE(format(printf, fmt_arg, rest))
-#endif
#define STG_RESTRICT __restrict__
@@ -242,13 +186,9 @@
# define stg__has_attribute(attr) (0)
#endif
-#ifdef __GNUC__
# define STG_GNUC_GUARD_VERSION(major, minor) \
((__GNUC__ > (major)) || \
((__GNUC__ == (major)) && (__GNUC_MINOR__ >= (minor))))
-#else
-# define STG_GNUC_GUARD_VERSION(major, minor) (0)
-#endif
/*
* The versions of the `__malloc__` attribute which take arguments are only
=====================================
rts/include/rts/Types.h
=====================================
@@ -19,12 +19,8 @@
// Deprecated, use uint32_t instead.
typedef unsigned int nat __attribute__((deprecated)); /* uint32_t */
-/* ullong (64|128-bit) type: only include if needed (not ANSI) */
-#if defined(__GNUC__)
+/* ullong (64|128-bit) type */
#define LL(x) (x##LL)
-#else
-#define LL(x) (x##L)
-#endif
typedef struct StgClosure_ StgClosure;
typedef struct StgInfoTable_ StgInfoTable;
=====================================
rts/include/stg/DLL.h
=====================================
@@ -21,7 +21,7 @@
# define DLL_IMPORT_DATA_REF(x) (_imp__##x)
# define DLL_IMPORT_DATA_VARNAME(x) *_imp__##x
# endif
-# if __GNUC__ && !defined(__declspec)
+# if !defined(__declspec)
# define DLLIMPORT
# else
# define DLLIMPORT __declspec(dllimport)
=====================================
rts/sm/BlockAlloc.c
=====================================
@@ -274,19 +274,9 @@ STATIC_INLINE uint32_t
log_2(W_ n)
{
ASSERT(n > 0 && n < (1<<NUM_FREE_LISTS));
-#if defined(__GNUC__)
return CLZW(n) ^ (sizeof(StgWord)*8 - 1);
// generates good code on x86. __builtin_clz() compiles to bsr+xor, but
// we want just bsr, so the xor here cancels out gcc's xor.
-#else
- W_ i, x;
- x = n;
- for (i=0; i < NUM_FREE_LISTS; i++) {
- x = x >> 1;
- if (x == 0) return i;
- }
- return NUM_FREE_LISTS;
-#endif
}
// log base 2 (ceiling), needs to support up to (2^NUM_FREE_LISTS)-1
@@ -294,18 +284,8 @@ STATIC_INLINE uint32_t
log_2_ceil(W_ n)
{
ASSERT(n > 0 && n < (1<<NUM_FREE_LISTS));
-#if defined(__GNUC__)
uint32_t r = log_2(n);
return (n & (n-1)) ? r+1 : r;
-#else
- W_ i, x;
- x = 1;
- for (i=0; i < MAX_FREE_LIST; i++) {
- if (x >= n) return i;
- x = x << 1;
- }
- return MAX_FREE_LIST;
-#endif
}
STATIC_INLINE void
=====================================
rts/sm/Evac.h
=====================================
@@ -6,7 +6,7 @@
*
* Documentation on the architecture of the Garbage Collector can be
* found in the online commentary:
- *
+ *
* https://gitlab.haskell.org/ghc/ghc/wikis/commentary/rts/storage/gc
*
* ---------------------------------------------------------------------------*/
@@ -25,7 +25,7 @@
// registers EAX, EDX, and ECX instead of on the stack. Functions that
// take a variable number of arguments will continue to be passed all of
// their arguments on the stack.
-#if __GNUC__ >= 2 && (defined(x86_64_HOST_ARCH) || defined(i386_HOST_ARCH))
+#if defined(x86_64_HOST_ARCH) || defined(i386_HOST_ARCH)
#define REGPARM1 __attribute__((regparm(1)))
#else
#define REGPARM1
=====================================
testsuite/tests/interface-stability/base-exports.stdout
=====================================
@@ -292,7 +292,7 @@ module Control.Exception where
mask_ :: forall a. GHC.Types.IO a -> GHC.Types.IO a
onException :: forall a b. GHC.Types.IO a -> GHC.Types.IO b -> GHC.Types.IO a
someExceptionContext :: SomeException -> GHC.Internal.Exception.Context.ExceptionContext
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -407,7 +407,7 @@ module Control.Exception.Base where
patError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recConError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recSelError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -5319,7 +5319,7 @@ module GHC.Exception where
prettySrcLoc :: SrcLoc -> GHC.Internal.Base.String
ratioZeroDenomException :: SomeException
showCCSStack :: [GHC.Internal.Base.String] -> [GHC.Internal.Base.String]
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
underflowException :: SomeException
module GHC.Exception.Type where
=====================================
testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
=====================================
@@ -292,7 +292,7 @@ module Control.Exception where
mask_ :: forall a. GHC.Types.IO a -> GHC.Types.IO a
onException :: forall a b. GHC.Types.IO a -> GHC.Types.IO b -> GHC.Types.IO a
someExceptionContext :: SomeException -> GHC.Internal.Exception.Context.ExceptionContext
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -407,7 +407,7 @@ module Control.Exception.Base where
patError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recConError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recSelError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -5288,7 +5288,7 @@ module GHC.Exception where
prettySrcLoc :: SrcLoc -> GHC.Internal.Base.String
ratioZeroDenomException :: SomeException
showCCSStack :: [GHC.Internal.Base.String] -> [GHC.Internal.Base.String]
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
underflowException :: SomeException
module GHC.Exception.Type where
=====================================
testsuite/tests/interface-stability/base-exports.stdout-mingw32
=====================================
@@ -292,7 +292,7 @@ module Control.Exception where
mask_ :: forall a. GHC.Types.IO a -> GHC.Types.IO a
onException :: forall a b. GHC.Types.IO a -> GHC.Types.IO b -> GHC.Types.IO a
someExceptionContext :: SomeException -> GHC.Internal.Exception.Context.ExceptionContext
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -407,7 +407,7 @@ module Control.Exception.Base where
patError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recConError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recSelError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -5465,7 +5465,7 @@ module GHC.Exception where
prettySrcLoc :: SrcLoc -> GHC.Internal.Base.String
ratioZeroDenomException :: SomeException
showCCSStack :: [GHC.Internal.Base.String] -> [GHC.Internal.Base.String]
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
underflowException :: SomeException
module GHC.Exception.Type where
=====================================
testsuite/tests/interface-stability/base-exports.stdout-ws-32
=====================================
@@ -292,7 +292,7 @@ module Control.Exception where
mask_ :: forall a. GHC.Types.IO a -> GHC.Types.IO a
onException :: forall a b. GHC.Types.IO a -> GHC.Types.IO b -> GHC.Types.IO a
someExceptionContext :: SomeException -> GHC.Internal.Exception.Context.ExceptionContext
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -407,7 +407,7 @@ module Control.Exception.Base where
patError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recConError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
recSelError :: forall (q :: GHC.Types.RuntimeRep) (a :: TYPE q). GHC.Prim.Addr# -> a
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::GHC.Internal.Stack.Types.CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
throwIO :: forall e a. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> GHC.Types.IO a
throwTo :: forall e. Exception e => GHC.Internal.Conc.Sync.ThreadId -> e -> GHC.Types.IO ()
try :: forall e a. Exception e => GHC.Types.IO a -> GHC.Types.IO (GHC.Internal.Data.Either.Either e a)
@@ -5319,7 +5319,7 @@ module GHC.Exception where
prettySrcLoc :: SrcLoc -> GHC.Internal.Base.String
ratioZeroDenomException :: SomeException
showCCSStack :: [GHC.Internal.Base.String] -> [GHC.Internal.Base.String]
- throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (?callStack::CallStack, Exception e) => e -> a
+ throw :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) e. (GHC.Internal.Stack.Types.HasCallStack, Exception e) => e -> a
underflowException :: SomeException
module GHC.Exception.Type where
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/30dba7952e4583608d3b55a94662ded683cf84b4...41919b3380b8fad4dca6dbe98afd9b1dce977365
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/30dba7952e4583608d3b55a94662ded683cf84b4...41919b3380b8fad4dca6dbe98afd9b1dce977365
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/20240609/fdab97c7/attachment-0001.html>
More information about the ghc-commits
mailing list