[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 11 commits: Document loadFramework changes. (#18446)
Marge Bot
gitlab at gitlab.haskell.org
Sun Jul 26 17:56:38 UTC 2020
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
a7c4439a by Matthias Andreas Benkard at 2020-07-26T13:23:24-04:00
Document loadFramework changes. (#18446)
Adds commentary on the rationale for the changes made in merge request
!3689.
- - - - -
da7269a4 by Ben Gamari at 2020-07-26T13:23:59-04:00
rts/win32: Exit with EXIT_HEAPOVERFLOW if memory commit fails
Since switching to the two-step allocator, the `outofmem` test fails via
`osCommitMemory` failing to commit. However, this was previously exiting
with `EXIT_FAILURE`, rather than `EXIT_HEAPOVERFLOW`. I think the latter
is a more reasonable exit code for this case and matches the behavior on
POSIX platforms.
- - - - -
f153a1d0 by Ben Gamari at 2020-07-26T13:23:59-04:00
testsuite: Update win32 output for parseTree
- - - - -
e91672f0 by Ben Gamari at 2020-07-26T13:23:59-04:00
testsuite: Normalise WinIO error message differences
Previously the old Windows IO manager threw different errors than WinIO.
We now canonicalise these to the WinIO errors.
- - - - -
9cbfe086 by Ben Gamari at 2020-07-26T13:23:59-04:00
gitlab-ci: Kill ssh-agent after pushing test metrics
Otherwise the Windows builds hang forever waiting for the process to
terminate.
- - - - -
8236925f by Tamar Christina at 2020-07-26T13:24:35-04:00
winio: remove dead argument to stg_newIOPortzh
- - - - -
ce0a1d67 by Tamar Christina at 2020-07-26T13:25:11-04:00
winio: fix detection of tty terminals
- - - - -
52685cf7 by Tamar Christina at 2020-07-26T13:25:48-04:00
winio: update codeowners
- - - - -
ae0e0972 by Vladislav Zavialov at 2020-07-26T13:56:29-04:00
Improve NegativeLiterals (#18022, GHC Proposal #344)
Before this patch, NegativeLiterals used to parse x-1 as x (-1).
This may not be what the user expects, and now it is fixed:
x-1 is parsed as (-) x 1.
We achieve this by the following requirement:
* When lexing a negative literal,
it must not be preceded by a 'closing token'.
This also applies to unboxed literals, e.g. -1#.
See GHC Proposal #229 for the definition of a closing token.
A nice consequence of this change is that -XNegativeLiterals becomes a
subset of -XLexicalNegation. In other words, enabling both of those
extensions has the same effect as enabling -XLexicalNegation alone.
- - - - -
4c22f7a8 by leiftw at 2020-07-26T13:56:31-04:00
fix typo referring to non-existent `-ohidir` flag, should be `-hidir` I think
- - - - -
cb0bb4cb by Vladislav Zavialov at 2020-07-26T13:56:31-04:00
Refactor the parser a little
* Create a dedicated production for type operators
* Create a dedicated type for the UNPACK pragma
* Remove an outdated part of Note [Parsing data constructors is hard]
- - - - -
19 changed files:
- .gitlab/test-metrics.sh
- CODEOWNERS
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Lexer.x
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Runtime/Linker.hs
- docs/users_guide/8.12.1-notes.rst
- docs/users_guide/exts/negative_literals.rst
- docs/users_guide/separate_compilation.rst
- libraries/base/cbits/IOutils.c
- libraries/base/tests/IO/all.T
- rts/PrimOps.cmm
- rts/win32/OSMem.c
- testsuite/driver/testlib.py
- testsuite/tests/ghc-api/annotations/parseTree.stdout-mingw32
- − testsuite/tests/parser/should_compile/LexNegVsNegLit.hs
- + testsuite/tests/parser/should_compile/NegativeLiterals.hs
- + testsuite/tests/parser/should_compile/NegativeLiteralsNoExt.hs
- testsuite/tests/parser/should_compile/all.T
Changes:
=====================================
.gitlab/test-metrics.sh
=====================================
@@ -81,6 +81,10 @@ function push() {
echo ""
echo "Failed to push git notes. Fetching, appending, and retrying... $MAX_RETRY retries left."
done
+
+ # Be sure to kill agent before we terminate since otherwise the Windows CI
+ # job won't finish.
+ ssh-agent -k
}
case $1 in
@@ -88,3 +92,4 @@ case $1 in
pull) pull ;;
*) fail "Invalid mode $1" ;;
esac
+
=====================================
CODEOWNERS
=====================================
@@ -49,3 +49,18 @@
/utils/gen-dll/ @Phyx
/utils/fs/ @Phyx
+# WinIO related code
+/libraries/base/GHC/Event/Windows/ @Phyx
+/libraries/base/GHC/IO/Windows/ @Phyx
+/rts/win32/ @Phyx
+/libraries/base/GHC/IO/Handle/Lock/Windows.hsc @Phyx
+/libraries/base/GHC/Event/Windows.hsc @Phyx
+/libraries/base/GHC/Conc/WinIO.hs @Phyx
+/libraries/base/GHC/Conc/Windows.hs @Phyx
+/libraries/base/GHC/IO/Handle/Windows.hs @Phyx
+/libraries/base/GHC/IO/StdHandles.hs @Phyx
+/libraries/base/GHC/Windows.hs @Phyx
+/libraries/base/cbits/IOutils.c @Phyx
+/libraries/base/cbits/Win32Utils.c @Phyx
+/libraries/base/cbits/consUtils.c @Phyx
+/libraries/base/include/winio_structs.h @Phyx
=====================================
compiler/GHC/Parser.y
=====================================
@@ -1884,9 +1884,9 @@ sigtypes1 :: { (OrdList (LHsSigType GhcPs)) }
-----------------------------------------------------------------------------
-- Types
-unpackedness :: { Located ([AddAnn], SourceText, SrcUnpackedness) }
- : '{-# UNPACK' '#-}' { sLL $1 $> ([mo $1, mc $2], getUNPACK_PRAGs $1, SrcUnpack) }
- | '{-# NOUNPACK' '#-}' { sLL $1 $> ([mo $1, mc $2], getNOUNPACK_PRAGs $1, SrcNoUnpack) }
+unpackedness :: { Located UnpackednessPragma }
+ : '{-# UNPACK' '#-}' { sLL $1 $> (UnpackednessPragma [mo $1, mc $2] (getUNPACK_PRAGs $1) SrcUnpack) }
+ | '{-# NOUNPACK' '#-}' { sLL $1 $> (UnpackednessPragma [mo $1, mc $2] (getNOUNPACK_PRAGs $1) SrcNoUnpack) }
forall_telescope :: { Located ([AddAnn], HsForAllTelescope GhcPs) }
: 'forall' tv_bndrs '.' {% do { hintExplicitForall $1
@@ -1980,13 +1980,16 @@ tyapp :: { Located TyEl }
-- See Note [Whitespace-sensitive operator parsing] in GHC.Parser.Lexer
| PREFIX_AT atype { sLL $1 $> $ (TyElKindApp (comb2 $1 $2) $2) }
- | qtyconop { sL1 $1 $ TyElOpr (unLoc $1) }
- | tyvarop { sL1 $1 $ TyElOpr (unLoc $1) }
- | SIMPLEQUOTE qconop {% ams (sLL $1 $> $ TyElOpr (unLoc $2))
+ | tyop { mapLoc TyElOpr $1 }
+ | unpackedness { sL1 $1 $ TyElUnpackedness (unLoc $1) }
+
+tyop :: { Located RdrName }
+ : qtyconop { $1 }
+ | tyvarop { $1 }
+ | SIMPLEQUOTE qconop {% ams (sLL $1 $> (unLoc $2))
[mj AnnSimpleQuote $1,mj AnnVal $2] }
- | SIMPLEQUOTE varop {% ams (sLL $1 $> $ TyElOpr (unLoc $2))
+ | SIMPLEQUOTE varop {% ams (sLL $1 $> (unLoc $2))
[mj AnnSimpleQuote $1,mj AnnVal $2] }
- | unpackedness { sL1 $1 $ TyElUnpackedness (unLoc $1) }
atype :: { LHsType GhcPs }
: ntgtycon { sL1 $1 (HsTyVar noExtField NotPromoted $1) } -- Not including unit tuples
=====================================
compiler/GHC/Parser/Lexer.x
=====================================
@@ -199,7 +199,6 @@ $docsym = [\| \^ \* \$]
-- normal signed numerical literals can only be explicitly negative,
-- not explicitly positive (contrast @exponent)
@negative = \-
- at signed = @negative ?
-- -----------------------------------------------------------------------------
@@ -531,12 +530,12 @@ $tab { warnTab }
ifExtension BinaryLiteralsBit } { tok_primint positive 2 3 binary }
0[oO] @numspc @octal \# / { ifExtension MagicHashBit } { tok_primint positive 2 3 octal }
0[xX] @numspc @hexadecimal \# / { ifExtension MagicHashBit } { tok_primint positive 2 3 hexadecimal }
- @negative @decimal \# / { ifExtension MagicHashBit } { tok_primint negative 1 2 decimal }
- @negative 0[bB] @numspc @binary \# / { ifExtension MagicHashBit `alexAndPred`
+ @negative @decimal \# / { negHashLitPred } { tok_primint negative 1 2 decimal }
+ @negative 0[bB] @numspc @binary \# / { negHashLitPred `alexAndPred`
ifExtension BinaryLiteralsBit } { tok_primint negative 3 4 binary }
- @negative 0[oO] @numspc @octal \# / { ifExtension MagicHashBit } { tok_primint negative 3 4 octal }
+ @negative 0[oO] @numspc @octal \# / { negHashLitPred } { tok_primint negative 3 4 octal }
@negative 0[xX] @numspc @hexadecimal \#
- / { ifExtension MagicHashBit } { tok_primint negative 3 4 hexadecimal }
+ / { negHashLitPred } { tok_primint negative 3 4 hexadecimal }
@decimal \# \# / { ifExtension MagicHashBit } { tok_primword 0 2 decimal }
0[bB] @numspc @binary \# \# / { ifExtension MagicHashBit `alexAndPred`
@@ -546,8 +545,11 @@ $tab { warnTab }
-- Unboxed floats and doubles (:: Float#, :: Double#)
-- prim_{float,double} work with signed literals
- @signed @floating_point \# / { ifExtension MagicHashBit } { tok_frac 1 tok_primfloat }
- @signed @floating_point \# \# / { ifExtension MagicHashBit } { tok_frac 2 tok_primdouble }
+ @floating_point \# / { ifExtension MagicHashBit } { tok_frac 1 tok_primfloat }
+ @floating_point \# \# / { ifExtension MagicHashBit } { tok_frac 2 tok_primdouble }
+
+ @negative @floating_point \# / { negHashLitPred } { tok_frac 1 tok_primfloat }
+ @negative @floating_point \# \# / { negHashLitPred } { tok_frac 2 tok_primdouble }
}
-- Strings and chars are lexed by hand-written code. The reason is
@@ -1192,8 +1194,8 @@ atEOL _ _ _ (AI _ buf) = atEnd buf || currentChar buf == '\n'
-- Check if we should parse a negative literal (e.g. -123) as a single token.
negLitPred :: AlexAccPred ExtsBitmap
negLitPred =
- negative_literals `alexOrPred`
- (lexical_negation `alexAndPred` prefix_minus)
+ prefix_minus `alexAndPred`
+ (negative_literals `alexOrPred` lexical_negation)
where
negative_literals = ifExtension NegativeLiteralsBit
@@ -1202,14 +1204,33 @@ negLitPred =
alexNotPred (ifExtension NoLexicalNegationBit)
prefix_minus =
- -- The condition for a prefix occurrence of an operator is:
- --
- -- not precededByClosingToken && followedByOpeningToken
- --
- -- but we don't check followedByOpeningToken here as it holds
- -- simply because we immediately lex a literal after the minus.
+ -- Note [prefix_minus in negLitPred and negHashLitPred]
+ alexNotPred precededByClosingToken
+
+-- Check if we should parse an unboxed negative literal (e.g. -123#) as a single token.
+negHashLitPred :: AlexAccPred ExtsBitmap
+negHashLitPred = prefix_minus `alexAndPred` magic_hash
+ where
+ magic_hash = ifExtension MagicHashBit
+ prefix_minus =
+ -- Note [prefix_minus in negLitPred and negHashLitPred]
alexNotPred precededByClosingToken
+{- Note [prefix_minus in negLitPred and negHashLitPred]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+We want to parse -1 as a single token, but x-1 as three tokens.
+So in negLitPred (and negHashLitPred) we require that we have a prefix
+occurrence of the minus sign. See Note [Whitespace-sensitive operator parsing]
+for a detailed definition of a prefix occurrence.
+
+The condition for a prefix occurrence of an operator is:
+
+ not precededByClosingToken && followedByOpeningToken
+
+but we don't check followedByOpeningToken when parsing a negative literal.
+It holds simply because we immediately lex a literal after the minus.
+-}
+
ifExtension :: ExtBits -> AlexAccPred ExtsBitmap
ifExtension extBits bits _ _ _ = extBits `xtest` bits
=====================================
compiler/GHC/Parser/PostProcess.hs
=====================================
@@ -70,6 +70,7 @@ module GHC.Parser.PostProcess (
addFatalError, hintBangPat,
TyEl(..), mergeOps, mergeDataCon,
mkBangTy,
+ UnpackednessPragma(..),
-- Help with processing exports
ImpExpSubSpec(..),
@@ -559,25 +560,6 @@ As the result, in order to determine whether (C t1 t2) declares a data
constructor, a type, or a context, we would need unlimited lookahead which
'happy' is not so happy with.
-To further complicate matters, the interpretation of (!) and (~) is different
-in constructors and types:
-
- (b1) type T = C ! D
- (b2) data T = C ! D
- (b3) data T = C ! D => E
-
-In (b1) and (b3), (!) is a type operator with two arguments: 'C' and 'D'. At
-the same time, in (b2) it is a strictness annotation: 'C' is a data constructor
-with a single strict argument 'D'. For the programmer, these cases are usually
-easy to tell apart due to whitespace conventions:
-
- (b2) data T = C !D -- no space after the bang hints that
- -- it is a strictness annotation
-
-For the parser, on the other hand, this whitespace does not matter. We cannot
-tell apart (b2) from (b3) until we encounter (=>), so it requires unlimited
-lookahead.
-
The solution that accounts for all of these issues is to initially parse data
declarations and types as a reversed list of TyEl:
@@ -1324,7 +1306,7 @@ isFunLhs e = go e [] []
data TyEl = TyElOpr RdrName | TyElOpd (HsType GhcPs)
| TyElKindApp SrcSpan (LHsType GhcPs)
-- See Note [TyElKindApp SrcSpan interpretation]
- | TyElUnpackedness ([AddAnn], SourceText, SrcUnpackedness)
+ | TyElUnpackedness UnpackednessPragma
{- Note [TyElKindApp SrcSpan interpretation]
@@ -1345,20 +1327,15 @@ instance Outputable TyEl where
ppr (TyElOpr name) = ppr name
ppr (TyElOpd ty) = ppr ty
ppr (TyElKindApp _ ki) = text "@" <> ppr ki
- ppr (TyElUnpackedness (_, _, unpk)) = ppr unpk
+ ppr (TyElUnpackedness (UnpackednessPragma _ _ unpk)) = ppr unpk
-- | Extract a strictness/unpackedness annotation from the front of a reversed
-- 'TyEl' list.
pUnpackedness
:: [Located TyEl] -- reversed TyEl
- -> Maybe ( SrcSpan
- , [AddAnn]
- , SourceText
- , SrcUnpackedness
- , [Located TyEl] {- remaining TyEl -})
-pUnpackedness (L l x1 : xs)
- | TyElUnpackedness (anns, prag, unpk) <- x1
- = Just (l, anns, prag, unpk, xs)
+ -> Maybe (SrcSpan, UnpackednessPragma,
+ [Located TyEl] {- remaining TyEl -})
+pUnpackedness (L l x1 : xs) | TyElUnpackedness up <- x1 = Just (l, up, xs)
pUnpackedness _ = Nothing
pBangTy
@@ -1371,7 +1348,7 @@ pBangTy
pBangTy lt@(L l1 _) xs =
case pUnpackedness xs of
Nothing -> (False, lt, pure (), xs)
- Just (l2, anns, prag, unpk, xs') ->
+ Just (l2, UnpackednessPragma anns prag unpk, xs') ->
let bl = combineSrcSpans l1 l2
bt = addUnpackedness (prag, unpk) lt
in (True, L bl bt, addAnnsAt bl anns, xs')
@@ -1380,6 +1357,10 @@ mkBangTy :: SrcStrictness -> LHsType GhcPs -> HsType GhcPs
mkBangTy strictness =
HsBangTy noExtField (HsSrcBang NoSourceText NoSrcUnpack strictness)
+-- Result of parsing {-# UNPACK #-} or {-# NOUNPACK #-}
+data UnpackednessPragma =
+ UnpackednessPragma [AddAnn] SourceText SrcUnpackedness
+
addUnpackedness :: (SourceText, SrcUnpackedness) -> LHsType GhcPs -> HsType GhcPs
addUnpackedness (prag, unpk) (L _ (HsBangTy x bang t))
| HsSrcBang NoSourceText NoSrcUnpack strictness <- bang
@@ -1411,7 +1392,7 @@ mergeOps all_xs = go (0 :: Int) [] id all_xs
-- clause [unpk]:
-- handle (NO)UNPACK pragmas
- go k acc ops_acc ((L l (TyElUnpackedness (anns, unpkSrc, unpk))):xs) =
+ go k acc ops_acc ((L l (TyElUnpackedness (UnpackednessPragma anns unpkSrc unpk))):xs) =
if not (null acc) && null xs
then do { acc' <- eitherToP $ mergeOpsAcc acc
; let a = ops_acc acc'
=====================================
compiler/GHC/Runtime/Linker.hs
=====================================
@@ -1695,6 +1695,38 @@ addEnvPaths name list
-- ----------------------------------------------------------------------------
-- Loading a dynamic library (dlopen()-ish on Unix, LoadLibrary-ish on Win32)
+{-
+Note [macOS Big Sur dynamic libraries]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+macOS Big Sur makes the following change to how frameworks are shipped
+with the OS:
+
+> New in macOS Big Sur 11 beta, the system ships with a built-in
+> dynamic linker cache of all system-provided libraries. As part of
+> this change, copies of dynamic libraries are no longer present on
+> the filesystem. Code that attempts to check for dynamic library
+> presence by looking for a file at a path or enumerating a directory
+> will fail. Instead, check for library presence by attempting to
+> dlopen() the path, which will correctly check for the library in the
+> cache. (62986286)
+
+(https://developer.apple.com/documentation/macos-release-notes/macos-big-sur-11-beta-release-notes/)
+
+Therefore, the previous method of checking whether a library exists
+before attempting to load it makes GHC.Runtime.Linker.loadFramework
+fail to find frameworks installed at /System/Library/Frameworks.
+Instead, any attempt to load a framework at runtime, such as by
+passing -framework OpenGL to runghc or running code loading such a
+framework with GHCi, fails with a 'not found' message.
+
+GHC.Runtime.Linker.loadFramework now opportunistically loads the
+framework libraries without checking for their existence first,
+failing only if all attempts to load a given framework from any of the
+various possible locations fail. See also #18446, which this change
+addresses.
+-}
+
-- Darwin / MacOS X only: load a framework
-- a framework is a dynamic library packaged inside a directory of the same
-- name. They are searched for in different paths than normal libraries.
@@ -1714,6 +1746,9 @@ loadFramework hsc_env extraPaths rootname
-- sorry for the hardcoded paths, I hope they won't change anytime soon:
defaultFrameworkPaths = ["/Library/Frameworks", "/System/Library/Frameworks"]
+ -- Try to call loadDLL for each candidate path.
+ --
+ -- See Note [macOS Big Sur dynamic libraries]
findLoadDLL [] errs =
-- Tried all our known library paths, but dlopen()
-- has no built-in paths for frameworks: give up
=====================================
docs/users_guide/8.12.1-notes.rst
=====================================
@@ -224,6 +224,13 @@ Language
f = (- x) -- operator section
c = (-x) -- negation
+* The behavior of :extension:`NegativeLiterals` changed, and now we require
+ that a negative literal must not be preceded by a closing token (see
+ `GHC Proposal #229 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0229-whitespace-bang-patterns.rst>`__
+ for the definition of a closing token). In other words, we parse ``f -123``
+ as ``f (-123)``, but ``x-123`` as ``(-) x 123``. Before this amendment,
+ :extension:`NegativeLiterals` caused ``x-123`` to be parsed as ``x(-123)``.
+
Compiler
~~~~~~~~
=====================================
docs/users_guide/exts/negative_literals.rst
=====================================
@@ -24,9 +24,11 @@ will elicit an unexpected integer-literal-overflow message.
Whitespace can be inserted, as in ``- 123``, to force interpretation
as two tokens.
-One pitfall is that with :extension:`NegativeLiterals`, ``x-1`` will
-be parsed as ``x`` applied to the argument ``-1``, which is usually
-not what you want. ``x - 1`` or even ``x- 1`` can be used instead
-for subtraction. To avoid this, consider using :extension:`LexicalNegation`
-instead.
-
+In 8.12, the behavior of this extension changed, and now we require that a negative literal must not be preceded by a closing token (see
+`GHC Proposal #229 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0229-whitespace-bang-patterns.rst>`__
+for the definition of a closing token). In other words, we parse ``f -123`` as ``f (-123)``, but ``x-123`` as ``(-) x
+123``. Before this amendment, :extension:`NegativeLiterals` caused ``x-123`` to be parsed as ``x(-123)``.
+
+:extension:`NegativeLiterals` is a subset of :extension:`LexicalNegation`. That
+is, enabling both of those extensions has the same effect as enabling
+:extension:`LexicalNegation` alone.
=====================================
docs/users_guide/separate_compilation.rst
=====================================
@@ -758,7 +758,7 @@ There are several points to note here:
the same machine-generated binary format as any other
GHC-generated interface file (e.g. ``B.hi``). You can display its
contents with ``ghc --show-iface``. If you specify a directory for
- interface files, the ``-ohidir`` flag, then that affects ``hi-boot`` files
+ interface files, the ``-hidir`` flag, then that affects ``hi-boot`` files
too.
- If hs-boot files are considered distinct from their parent source
=====================================
libraries/base/cbits/IOutils.c
=====================================
@@ -209,8 +209,8 @@ __is_console(HANDLE hFile)
DWORD handleType = GetFileType (hFile);
/* TTY must be a character device */
- if (handleType == FILE_TYPE_CHAR)
- return true;
+ if (handleType != FILE_TYPE_CHAR)
+ return false;
DWORD st;
/* GetConsoleMode appears to fail when it's not a TTY. In
=====================================
libraries/base/tests/IO/all.T
=====================================
@@ -10,7 +10,7 @@ test('IOError001', [omit_ways(['ghci']), set_stdin('IOError001.hs')],
test('IOError002', normal, compile_and_run, [''])
test('finalization001', normal, compile_and_run, [''])
test('hClose001', [], compile_and_run, [''])
-test('hClose002', [], compile_and_run, [''])
+test('hClose002', [normalise_win32_io_errors], compile_and_run, [''])
test('hClose003', reqlib('unix'), compile_and_run, ['-package unix'])
test('hFileSize001', normal, compile_and_run, [''])
test('hFileSize002', [omit_ways(['ghci'])], compile_and_run, [''])
@@ -61,8 +61,8 @@ test('misc001', [extra_run_opts('misc001.hs misc001.out')], compile_and_run,
[''])
test('openFile001', normal, compile_and_run, [''])
-test('openFile002', exit_code(1), compile_and_run, [''])
-test('openFile003', [], compile_and_run, [''])
+test('openFile002', [exit_code(1), normalise_win32_io_errors], compile_and_run, [''])
+test('openFile003', [normalise_win32_io_errors], compile_and_run, [''])
test('openFile004', [], compile_and_run, [''])
test('openFile005', [], compile_and_run, [''])
test('openFile006', [], compile_and_run, [''])
=====================================
rts/PrimOps.cmm
=====================================
@@ -2221,7 +2221,7 @@ loop:
IOPort primitives
-------------------------------------------------------------------------- */
-stg_newIOPortzh ( gcptr init )
+stg_newIOPortzh ()
{
W_ ioport;
=====================================
rts/win32/OSMem.c
=====================================
@@ -472,7 +472,7 @@ void osCommitMemory (void *at, W_ size)
temp = VirtualAlloc(at, size, MEM_COMMIT, PAGE_READWRITE);
if (temp == NULL) {
sysErrorBelch("osCommitMemory: VirtualAlloc MEM_COMMIT failed");
- stg_exit(EXIT_FAILURE);
+ stg_exit(EXIT_HEAPOVERFLOW);
}
}
=====================================
testsuite/driver/testlib.py
=====================================
@@ -743,6 +743,30 @@ def normalise_whitespace_fun(f):
def _normalise_whitespace_fun(name, opts, f):
opts.whitespace_normaliser = f
+def normalise_win32_io_errors(name, opts):
+ """
+ On Windows we currently have two IO manager implementations: both WinIO IO
+ manager and the old POSIX-emulated implementation. These currently differ
+ slightly in the error messages that they provide. Normalise these
+ differences away, preferring the new WinIO errors.
+
+ This can be dropped when the old IO manager is removed.
+ """
+
+ SUBS = [
+ ('Bad file descriptor', 'The handle is invalid'),
+ ('Permission denied', 'Access is denied.'),
+ ('No such file or directory', 'The system cannot find the file specified.'),
+ ]
+
+ def f(s: str):
+ for old,new in SUBS:
+ s = s.replace(old, new)
+
+ return s
+
+ return when(opsys('mingw32'), normalise_fun(f))
+
def normalise_version_( *pkgs ):
def normalise_version__( str ):
return re.sub('(' + '|'.join(map(re.escape,pkgs)) + ')-[0-9.]+',
=====================================
testsuite/tests/ghc-api/annotations/parseTree.stdout-mingw32
=====================================
@@ -1,11 +1,11 @@
-[(AnnotationTuple.hs:14:20, [p], Unit 1),
- (AnnotationTuple.hs:14:23-29, [p], Unit "hello"),
- (AnnotationTuple.hs:14:35-37, [p], Unit 6.5),
+[(AnnotationTuple.hs:14:20, [p], Solo 1),
+ (AnnotationTuple.hs:14:23-29, [p], Solo "hello"),
+ (AnnotationTuple.hs:14:35-37, [p], Solo 6.5),
(AnnotationTuple.hs:14:39, [m], ()),
- (AnnotationTuple.hs:14:41-52, [p], Unit [5, 5, 6, 7]),
- (AnnotationTuple.hs:16:8, [p], Unit 1),
- (AnnotationTuple.hs:16:11-17, [p], Unit "hello"),
- (AnnotationTuple.hs:16:20-22, [p], Unit 6.5),
+ (AnnotationTuple.hs:14:41-52, [p], Solo [5, 5, 6, 7]),
+ (AnnotationTuple.hs:16:8, [p], Solo 1),
+ (AnnotationTuple.hs:16:11-17, [p], Solo "hello"),
+ (AnnotationTuple.hs:16:20-22, [p], Solo 6.5),
(AnnotationTuple.hs:16:24, [m], ()),
(AnnotationTuple.hs:16:25, [m], ()),
(AnnotationTuple.hs:16:26, [m], ()), (<no location info>, [m], ())]
=====================================
testsuite/tests/parser/should_compile/LexNegVsNegLit.hs deleted
=====================================
@@ -1,17 +0,0 @@
-{-# LANGUAGE NegativeLiterals, LexicalNegation #-}
-
-module LexNegVsNegLit where
-
--- NegativeLiterals specifies that we parse x-1 as x (-1), even though it's
--- considered a shortcoming.
---
--- LexicalNegation does not change that.
---
-b :: Bool
-b = even-1 -- parsed as: even (-1)
- -- so it is well-typed.
- --
- -- with LexicalNegation alone, we'd get (-) even 1,
- -- but NegativeLiterals takes precedence here.
-
--- See also: GHC Proposal #344
=====================================
testsuite/tests/parser/should_compile/NegativeLiterals.hs
=====================================
@@ -0,0 +1,57 @@
+{-# LANGUAGE NegativeLiterals, MagicHash, BinaryLiterals #-}
+
+module NegativeLiterals where
+
+import GHC.Exts
+
+------------------------------------
+-- Prefix occurrence of the minus --
+------------------------------------
+
+p1 :: Bool
+p1 = even -2 -- parsed as: even (-2)
+
+p2 :: Int
+p2 = I# -1# -- parsed as: I# (-1#)
+
+p3 :: Int
+p3 = floor -2.4 -- parsed as: floor (-2.4)
+
+p4 :: Float
+p4 = F# -0.01# -- parsed as: F# (-0.01#)
+
+p5 :: Double
+p5 = D# -0.01## -- parsed as: D# (-0.01##)
+
+p6 :: Bool
+p6 = even -0b10 -- parsed as: even (-2)
+ || even -0o10 -- parsed as: even (-8)
+ || even -0x10 -- parsed as: even (-16)
+
+-----------------------------------------
+-- Tight infix occurrence of the minus --
+-----------------------------------------
+
+ti1 :: Integer -> Integer
+ti1 x = x-2 -- parsed as: (-) x 1
+
+ti2 :: Int# -> Int#
+ti2 x = x-1# -- parsed as: (-) x 1#
+ where (-) = (-#)
+
+ti3 :: Double -> Double
+ti3 x = x-2.4 -- parsed as: (-) x 2.4
+
+ti4 :: Float# -> Float#
+ti4 x = x-0.1# -- parsed as: (-) x 0.1#
+ where (-) = minusFloat#
+
+ti5 :: Double# -> Double#
+ti5 x = x-0.1## -- parsed as: (-) x 0.1##
+ where (-) = (-##)
+
+ti6 :: Integer -> [Integer]
+ti6 x =
+ [ x-0b10, -- parsed as: (-) x 2
+ x-0o10, -- parsed as: (-) x 8
+ x-0x10 ] -- parsed as: (-) x 16
=====================================
testsuite/tests/parser/should_compile/NegativeLiteralsNoExt.hs
=====================================
@@ -0,0 +1,39 @@
+{-# LANGUAGE NoNegativeLiterals, MagicHash, BinaryLiterals #-}
+
+-- Even when NegativeLiterals are disabled,
+-- we parse unboxed literals appropriately.
+module NegativeLiteralsNoExt where
+
+import GHC.Exts
+
+------------------------------------
+-- Prefix occurrence of the minus --
+------------------------------------
+
+p2 :: Int
+p2 = I# -1# -- parsed as: I# (-1#)
+
+p4 :: Float
+p4 = F# -0.01# -- parsed as: F# (-0.01#)
+
+p5 :: Double
+p5 = D# -0.01## -- parsed as: D# (-0.01##)
+
+-----------------------------------------
+-- Tight infix occurrence of the minus --
+-----------------------------------------
+
+ti2 :: Int# -> Int#
+ti2 x = x-1# -- parsed as: (-) x 1#
+ where (-) = (-#)
+
+ti3 :: Double -> Double
+ti3 x = x-2.4 -- parsed as: (-) x 2.4
+
+ti4 :: Float# -> Float#
+ti4 x = x-0.1# -- parsed as: (-) x 0.1#
+ where (-) = minusFloat#
+
+ti5 :: Double# -> Double#
+ti5 x = x-0.1## -- parsed as: (-) x 0.1##
+ where (-) = (-##)
=====================================
testsuite/tests/parser/should_compile/all.T
=====================================
@@ -153,7 +153,8 @@ test('proposal-229b', normal, compile, [''])
test('proposal-229d', normal, compile, [''])
test('proposal-229e', normal, compile, [''])
test('LexicalNegation', normal, compile, [''])
-test('LexNegVsNegLit', normal, compile, [''])
+test('NegativeLiterals', normal, compile, [''])
+test('NegativeLiteralsNoExt', normal, compile, [''])
# We omit 'profasm' because it fails with:
# Cannot load -prof objects when GHC is built with -dynamic
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/fad5c724ae203b4ced4f7ad99c9325f9b6ba1f3e...cb0bb4cbbac3cb21ebb028ed13a383c8f963ca12
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/fad5c724ae203b4ced4f7ad99c9325f9b6ba1f3e...cb0bb4cbbac3cb21ebb028ed13a383c8f963ca12
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/20200726/1e0fe30c/attachment-0001.html>
More information about the ghc-commits
mailing list