Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
-
99b233f4
by Alison at 2025-09-13T16:51:04-04:00
-
b26086b9
by Cheng Shao at 2025-09-14T16:49:22-04:00
-
47efd3d7
by Cheng Shao at 2025-09-14T16:49:26-04:00
-
5b767424
by Cheng Shao at 2025-09-14T16:49:26-04:00
3 changed files:
Changes:
| ... | ... | @@ -12,7 +12,6 @@ import Utilities |
| 12 | 12 | import Hadrian.BuildPath
|
| 13 | 13 | import Hadrian.Expression
|
| 14 | 14 | import Settings.Builders.Common (cArgs, getStagedCCFlags)
|
| 15 | -import GHC.Platform.ArchOS
|
|
| 16 | 15 | |
| 17 | 16 | -- | Build in-tree GMP library objects (if GmpInTree flag is set) and return
|
| 18 | 17 | -- their paths.
|
| ... | ... | @@ -128,7 +127,10 @@ gmpRules = do |
| 128 | 127 | mconcat
|
| 129 | 128 | [ cArgs
|
| 130 | 129 | , getStagedCCFlags
|
| 131 | - , anyTargetArch [ArchWasm32] ? arg "-fvisibility=default"
|
|
| 130 | + -- gmp symbols are only used by bignum logic in
|
|
| 131 | + -- ghc-internal and shouldn't be exported by the
|
|
| 132 | + -- ghc-internal shared library.
|
|
| 133 | + , arg "-fvisibility=hidden"
|
|
| 132 | 134 | ]
|
| 133 | 135 | env <- sequence
|
| 134 | 136 | [ builderEnvironment "CC" $ Cc CompileC (stage ctx)
|
| ... | ... | @@ -67,10 +67,26 @@ import GHC.Exts.Heap.ClosureTypes |
| 67 | 67 | import GHC.Exts.Heap.Constants
|
| 68 | 68 | import GHC.Exts.Heap.ProfInfo.Types
|
| 69 | 69 | #if defined(PROFILING)
|
| 70 | +import GHC.Exts.Heap.InfoTable () -- See Note [No way-dependent imports]
|
|
| 70 | 71 | import GHC.Exts.Heap.InfoTableProf
|
| 71 | 72 | #else
|
| 72 | 73 | import GHC.Exts.Heap.InfoTable
|
| 74 | +import GHC.Exts.Heap.InfoTableProf () -- See Note [No way-dependent imports]
|
|
| 75 | + |
|
| 76 | +{-
|
|
| 77 | +Note [No way-dependent imports]
|
|
| 78 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
| 79 | +`ghc -M` currently assumes that the imports for a module are the same
|
|
| 80 | +in every way. This is arguably a bug, but breaking this assumption by
|
|
| 81 | +importing different things in different ways can cause trouble. For
|
|
| 82 | +example, this module in the profiling way imports and uses
|
|
| 83 | +GHC.Exts.Heap.InfoTableProf. When it was not also imported in the
|
|
| 84 | +vanilla way, there were intermittent build failures due to this module
|
|
| 85 | +being compiled in the profiling way before GHC.Exts.Heap.InfoTableProf
|
|
| 86 | +in the profiling way. (#15197)
|
|
| 87 | +-}
|
|
| 73 | 88 | #endif
|
| 89 | + |
|
| 74 | 90 | import GHC.Exts.Heap.Utils
|
| 75 | 91 | import qualified GHC.Exts.Heap.FFIClosures as FFIClosures
|
| 76 | 92 | import qualified GHC.Exts.Heap.ProfInfo.PeekProfInfo as PPI
|
| ... | ... | @@ -291,7 +291,7 @@ const isNode = Boolean(globalThis?.process?.versions?.node); |
| 291 | 291 | // factor out browser-only/node-only logic into different modules. For
|
| 292 | 292 | // now, just make these global let bindings optionally initialized if
|
| 293 | 293 | // isNode and be careful to not use them in browser-only logic.
|
| 294 | -let fs, http, path, require, stream, util, wasi, ws, zlib;
|
|
| 294 | +let fs, http, path, require, stream, wasi, ws;
|
|
| 295 | 295 | |
| 296 | 296 | if (isNode) {
|
| 297 | 297 | require = (await import("node:module")).createRequire(import.meta.url);
|
| ... | ... | @@ -300,9 +300,7 @@ if (isNode) { |
| 300 | 300 | http = require("http");
|
| 301 | 301 | path = require("path");
|
| 302 | 302 | stream = require("stream");
|
| 303 | - util = require("util");
|
|
| 304 | 303 | wasi = require("wasi");
|
| 305 | - zlib = require("zlib");
|
|
| 306 | 304 | |
| 307 | 305 | // Optional npm dependencies loaded via NODE_PATH
|
| 308 | 306 | try {
|
| ... | ... | @@ -561,30 +559,8 @@ args.rpc.opened.then(() => main(args)); |
| 561 | 559 | }[path.extname(p)] || "application/octet-stream"
|
| 562 | 560 | );
|
| 563 | 561 | |
| 564 | - const buf = Buffer.from(await fs.promises.readFile(p));
|
|
| 565 | - const etag = `sha512-${Buffer.from(
|
|
| 566 | - await crypto.subtle.digest("SHA-512", buf)
|
|
| 567 | - ).toString("base64")}`;
|
|
| 568 | - |
|
| 569 | - res.setHeader("ETag", etag);
|
|
| 570 | - |
|
| 571 | - if (req.headers["if-none-match"] === etag) {
|
|
| 572 | - res.writeHead(304);
|
|
| 573 | - res.end();
|
|
| 574 | - return;
|
|
| 575 | - }
|
|
| 576 | - |
|
| 577 | - res.setHeader("Content-Encoding", "br");
|
|
| 578 | - |
|
| 579 | 562 | res.writeHead(200);
|
| 580 | - res.end(
|
|
| 581 | - await util.promisify(zlib.brotliCompress)(buf, {
|
|
| 582 | - params: {
|
|
| 583 | - [zlib.constants.BROTLI_PARAM_QUALITY]:
|
|
| 584 | - zlib.constants.BROTLI_MIN_QUALITY,
|
|
| 585 | - },
|
|
| 586 | - })
|
|
| 587 | - );
|
|
| 563 | + fs.createReadStream(p).pipe(res);
|
|
| 588 | 564 | return;
|
| 589 | 565 | }
|
| 590 | 566 |