diff options
author | Hilton Chain <[email protected]> | 2024-11-11 11:05:15 +0800 |
---|---|---|
committer | Hilton Chain <[email protected]> | 2024-12-31 10:54:13 +0800 |
commit | a7cfce944ea8ec796875fa2533c44f1a85938b58 (patch) | |
tree | c9149e0e36134737a7da53055f35b5fd25b3e949 /gnu | |
parent | 83f034b64f45e4969e97f62cc723205c3aa770c6 (diff) |
gnu: Add zig-0.10.0-1638.
* gnu/packages/patches/zig-0.10.0-1638-re-add-qualCast.patch: New file.
* gnu/local.mk (dist_patch_DATA): Regisiter it.
* gnu/packages/zig.scm (zig-0.10.0-1637-source,zig-0.10.0-1638): New variables.
Change-Id: I66853da969d7cb2afc820a860757ef08b4577fbd
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/patches/zig-0.10.0-1638-re-add-qualCast.patch | 174 | ||||
-rw-r--r-- | gnu/packages/zig.scm | 40 |
3 files changed, 215 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index eed2bc766e..3f6d8325a9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2422,6 +2422,7 @@ dist_patch_DATA = \ %D%/packages/patches/zig-0.10.0-610-bootstrap-resolve-conflicts.patch \ %D%/packages/patches/zig-0.10.0-675-TypeOf-hack.patch \ %D%/packages/patches/zig-0.10.0-747-CallOptions.patch \ + %D%/packages/patches/zig-0.10.0-1638-re-add-qualCast.patch \ %D%/packages/patches/zsh-egrep-failing-test.patch \ %D%/packages/patches/zuo-bin-sh.patch diff --git a/gnu/packages/patches/zig-0.10.0-1638-re-add-qualCast.patch b/gnu/packages/patches/zig-0.10.0-1638-re-add-qualCast.patch new file mode 100644 index 0000000000..32745f468c --- /dev/null +++ b/gnu/packages/patches/zig-0.10.0-1638-re-add-qualCast.patch @@ -0,0 +1,174 @@ +From 6b5ac4fe191a277b3f6c129e75e62c25e70ed017 Mon Sep 17 00:00:00 2001 +From: motiejus <foo@bar> +Date: Fri, 8 Nov 2024 19:12:33 +0200 +Subject: [PATCH] 0.10.0-1638-g7199d7c777: re-add @qualCast + +--- + src/AstGen.zig | 2 ++ + src/BuiltinFn.zig | 8 ++++++++ + src/Sema.zig | 44 ++++++++++++++++++++++++++++++++++++++++++++ + src/Zir.zig | 6 ++++++ + src/print_zir.zig | 1 + + 5 files changed, 61 insertions(+) + +diff --git a/src/AstGen.zig b/src/AstGen.zig +index 40eef32d4e..f04713fab5 100644 +--- a/src/AstGen.zig ++++ b/src/AstGen.zig +@@ -2531,6 +2531,7 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As + .bit_size_of, + .typeof_log2_int_type, + .ptr_to_int, ++ .qual_cast, + .align_of, + .bool_to_int, + .embed_file, +@@ -8038,6 +8039,7 @@ fn builtinCall( + .float_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .float_cast), + .int_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .int_cast), + .ptr_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .ptr_cast), ++ .qual_cast => return typeCast(gz, scope, ri, node, params[0], params[1], .qual_cast), + .truncate => return typeCast(gz, scope, ri, node, params[0], params[1], .truncate), + // zig fmt: on + +diff --git a/src/BuiltinFn.zig b/src/BuiltinFn.zig +index 20edbabe47..78d492a99b 100644 +--- a/src/BuiltinFn.zig ++++ b/src/BuiltinFn.zig +@@ -76,6 +76,7 @@ pub const Tag = enum { + prefetch, + ptr_cast, + ptr_to_int, ++ qual_cast, + rem, + return_address, + select, +@@ -683,6 +684,13 @@ pub const list = list: { + .param_count = 1, + }, + }, ++ .{ ++ "@qualCast", ++ .{ ++ .tag = .qual_cast, ++ .param_count = 2, ++ }, ++ }, + .{ + "@rem", + .{ +diff --git a/src/Sema.zig b/src/Sema.zig +index cf6350e35f..f76c5bd3c4 100644 +--- a/src/Sema.zig ++++ b/src/Sema.zig +@@ -1015,6 +1015,7 @@ fn analyzeBodyInner( + .float_cast => try sema.zirFloatCast(block, inst), + .int_cast => try sema.zirIntCast(block, inst), + .ptr_cast => try sema.zirPtrCast(block, inst), ++ .qual_cast => try sema.zirQualCast(block, inst), + .truncate => try sema.zirTruncate(block, inst), + .align_cast => try sema.zirAlignCast(block, inst), + .has_decl => try sema.zirHasDecl(block, inst), +@@ -19661,6 +19662,49 @@ fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air + return block.addBitCast(aligned_dest_ty, ptr); + } + ++fn zirQualCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { ++ const inst_data = sema.code.instructions.items(.data)[inst].pl_node; ++ const src = inst_data.src(); ++ const dest_ty_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node }; ++ const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg1 = inst_data.src_node }; ++ const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; ++ const dest_ty = try sema.resolveType(block, dest_ty_src, extra.lhs); ++ const operand = try sema.resolveInst(extra.rhs); ++ const operand_ty = sema.typeOf(operand); ++ ++ try sema.checkPtrType(block, dest_ty_src, dest_ty); ++ try sema.checkPtrOperand(block, operand_src, operand_ty); ++ ++ var operand_payload = operand_ty.ptrInfo(); ++ var dest_info = dest_ty.ptrInfo(); ++ ++ operand_payload.data.mutable = dest_info.data.mutable; ++ operand_payload.data.@"volatile" = dest_info.data.@"volatile"; ++ ++ const altered_operand_ty = Type.initPayload(&operand_payload.base); ++ if (!altered_operand_ty.eql(dest_ty, sema.mod)) { ++ const msg = msg: { ++ const msg = try sema.errMsg(block, src, "'@qualCast' can only modify 'const' and 'volatile' qualifiers", .{}); ++ errdefer msg.destroy(sema.gpa); ++ ++ dest_info.data.mutable = !operand_ty.isConstPtr(); ++ dest_info.data.@"volatile" = operand_ty.isVolatilePtr(); ++ const altered_dest_ty = Type.initPayload(&dest_info.base); ++ try sema.errNote(block, src, msg, "expected type '{}'", .{altered_dest_ty.fmt(sema.mod)}); ++ try sema.errNote(block, src, msg, "got type '{}'", .{operand_ty.fmt(sema.mod)}); ++ break :msg msg; ++ }; ++ return sema.failWithOwnedErrorMsg(msg); ++ } ++ ++ if (try sema.resolveMaybeUndefVal(operand)) |operand_val| { ++ return sema.addConstant(dest_ty, operand_val); ++ } ++ ++ try sema.requireRuntimeBlock(block, src, null); ++ return block.addBitCast(dest_ty, operand); ++} ++ + fn zirConstCast(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { + const extra = sema.code.extraData(Zir.Inst.UnNode, extended.operand).data; + const src = LazySrcLoc.nodeOffset(extra.node); +diff --git a/src/Zir.zig b/src/Zir.zig +index 58f9fdff14..338712c0b7 100644 +--- a/src/Zir.zig ++++ b/src/Zir.zig +@@ -857,6 +857,9 @@ pub const Inst = struct { + /// Implements the `@ptrCast` builtin. + /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. + ptr_cast, ++ /// Implements the `@qualCast` builtin. ++ /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. ++ qual_cast, + /// Implements the `@truncate` builtin. + /// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand. + truncate, +@@ -1195,6 +1198,7 @@ pub const Inst = struct { + .float_cast, + .int_cast, + .ptr_cast, ++ .qual_cast, + .truncate, + .align_cast, + .has_field, +@@ -1484,6 +1488,7 @@ pub const Inst = struct { + .float_cast, + .int_cast, + .ptr_cast, ++ .qual_cast, + .truncate, + .align_cast, + .has_field, +@@ -1755,6 +1760,7 @@ pub const Inst = struct { + .float_cast = .pl_node, + .int_cast = .pl_node, + .ptr_cast = .pl_node, ++ .qual_cast = .pl_node, + .truncate = .pl_node, + .align_cast = .pl_node, + .typeof_builtin = .pl_node, +diff --git a/src/print_zir.zig b/src/print_zir.zig +index 8d97000582..c2485a8cb4 100644 +--- a/src/print_zir.zig ++++ b/src/print_zir.zig +@@ -332,6 +332,7 @@ const Writer = struct { + .float_cast, + .int_cast, + .ptr_cast, ++ .qual_cast, + .truncate, + .align_cast, + .div_exact, +-- +2.44.1 + diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm index 2d97a70d09..2ff864c5cb 100644 --- a/gnu/packages/zig.scm +++ b/gnu/packages/zig.scm @@ -677,4 +677,44 @@ toolchain. Among other features it provides (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) +(define zig-0.10.0-1637-source + (let ((commit "4e6f21e2cb2c557b5c019f4acf445665a26edcba") + (revision "1637")) + (zig-source + (git-version "0.10.0" revision commit) + commit "1nd55j2c0br7rqx9fj6bkjyymkf1k6ms2m9f7byrc1ahggdyxrpv"))) + +(define zig-0.10.0-1638 + (let ((commit "7199d7c77715fe06606c5c89595e6852b3fa8c20") + (revision "1638") + (base zig-0.10.0-1506)) + (package + (inherit base) + (name "zig") + (version (git-version "0.10.0" revision commit)) + (source + (origin + (inherit (zig-source + version commit + "15mvfgab9wglm1g5gakvqwb7l33v1vjwjwchb3pmhxmkxkrjkmgq")) + (patches (search-patches "zig-0.10.0-1638-re-add-qualCast.patch")))) + ;; zig2+zig1 + (arguments + (substitute-keyword-arguments (package-arguments zig-0.10.0-748) + ((#:phases phases '%standard-phases) + #~(modify-phases #$phases + (add-after 'prepare-source 'restore-lib + (lambda _ + (delete-file-recursively "lib") + (copy-recursively + (string-append #+zig-0.10.0-1637-source "/lib") + "lib"))) + (replace 'build-zig1 + (lambda _ + (invoke "./zig2" "build" "--zig-lib-dir" "lib" + "update-zig1" "--verbose"))))))) + (native-inputs + (modify-inputs (package-native-inputs base) + (replace "zig" `(,base "zig1"))))))) + (define-public zig zig-0.10) |