guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

18/60: gnu: Add zig-0.10.0-1638.


From: guix-commits
Subject: 18/60: gnu: Add zig-0.10.0-1638.
Date: Mon, 18 Nov 2024 07:16:50 -0500 (EST)

hako pushed a commit to branch wip-zig-bootstrap
in repository guix.

commit d2bf729cdf99923e785c48789db409ddf75fedd6
Author: Hilton Chain <hako@ultrarare.space>
AuthorDate: Mon Nov 11 11:05:15 2024 +0800

    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
---
 gnu/local.mk                                       |   1 +
 .../patches/zig-0.10.0-1638-re-add-qualCast.patch  | 174 +++++++++++++++++++++
 gnu/packages/zig.scm                               |  40 +++++
 3 files changed, 215 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index 2f560ff6de..f63aa391ed 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2377,6 +2377,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 c2e7f29fab..6f1a44d86b 100644
--- a/gnu/packages/zig.scm
+++ b/gnu/packages/zig.scm
@@ -621,4 +621,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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]