Commit Graph

26 Commits

Author SHA1 Message Date
e8aef2ca9f astgen: enable ptrfromint, pub_enum, reflection, ref_var_in_if, saturating_arithmetic, shuffle, slice_sentinel_comptime, struct_contains_null_ptr_itself, struct_contains_slice_of_itself, switch_prong_err_enum, switch_prong_implicit_cast, this, threadlocal, truncate, tuple_declarations, tuple, typename, undefined, union_with_members, void, widening, wrapping_arithmetic, x86_64 corpus tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:42:28 +00:00
333699a3ba astgen: enable int128, int_comparison_elision, ir_block_deps, lower_strlit_to_vector, member_func, memcpy, memmove, memset, merge_error_sets, namespace_depends_on_compile_var, nan, null, packed_struct_explicit_backing_int, packed-union, popcount, ptrcast corpus tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:40:51 +00:00
9dd6118259 astgen: enable empty_union, export_builtin, export_c_keywords, export_self_referential_type_info, extern_struct_zero_size_fields, fn_delegation, fn_in_struct_in_comptime, for, globals, hasdecl, hasfield, if, import, incomplete_struct_param_tld, inline_switch corpus tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:39:46 +00:00
b128dbb7c9 astgen: enable cast_int, comptime_memory, const_slice_child, decl_literals, decltest, duplicated_test_names corpus tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:38:46 +00:00
94b2fe8866 astgen: enable alignof, bitcast, bitreverse, bit_shifting, byteswap, byval_arg_var corpus tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:38:04 +00:00
f51acd25cc astgen: enable align.zig corpus test
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:37:02 +00:00
123cf18a8c astgen: fix OptionalIndex handling, enable addrspace_and_linksection.zig corpus test
Fix segfaults caused by reading AST OptionalIndex fields (none=UINT32_MAX)
without converting to the C convention (none=0):

- extractVarDecl: convert GlobalVarDecl extra_data OptionalIndex fields
  (type_node, align_node, addrspace_node, section_node) from UINT32_MAX
  to 0 when none. Also handle simple_var_decl's opt_node_and_opt_node.

- fnDecl: extract align_expr, addrspace_expr, section_expr from
  FnProtoOne/FnProto extra_data with proper OptionalIndex conversion.
  Also fix FN_PROTO_SIMPLE param check to use UINT32_MAX.

- fnDecl: add separate type_gz, align_gz, linksection_gz, addrspace_gz
  sub-blocks matching upstream AstGen.zig:4149-4192, and pass their
  bodies to setDeclaration. Update decl_id selection to account for
  has_type_body and has_special_body.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:35:39 +00:00
a595c2b11a astgen: enable abs.zig corpus test
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:11:28 +00:00
d7c0caad66 astgen: fix all corpus test failures, clean up debug output
Port multiple missing/incorrect code paths to match upstream AstGen.zig:
- Fix continue label matching for labeled loops
- Fix comptimeExpr labeled block optimization
- Fix numberLiteral big integer and octal/binary parsing
- Fix addNodeExtended/addExtendedPayload undefined small field
- Fix blockExprExpr force_comptime parameter
- Port various missing builtins and instruction handlers
- Add union_decl/opaque_decl to test hash skip mask
- Remove all debug fprintf statements
- Fix int base type for -Wsign-conversion

All 25 corpus test files now pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:02:13 +00:00
4e6de62697 add skill 2026-02-15 08:45:14 +00:00
35b92d72e4 astgen: add all remaining behavior test files to corpus
Adds 97 behavior test files to the corpus test suite. All pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:38:53 +00:00
b9069b4e89 astgen: port ret have_err path, comptimeDecl body, @Type name strategy, fix union_init field order, @TypeOf break src_node
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:25:24 +00:00
99af7d4623 astgen: add inline switch prong parsing and float literal support
- parser.c: Handle TOKEN_KEYWORD_INLINE in parseSwitchProng, producing
  AST_NODE_SWITCH_CASE_INLINE_ONE / AST_NODE_SWITCH_CASE_INLINE nodes.
  This fixes parsing of multi_array_list.zig which uses `inline else`.
- astgen.c: Implement float literal parsing in numberLiteral using
  strtold with f64 round-trip check. Add addFloat helper and addPlNodeQuad
  for float128 emission. Extend token scanning to include exponent markers.
- multi_array_list.zig still skipped: remaining diffs in bool_not,
  bool_br_and, ret_is_non_err.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:55:52 +00:00
2cc1bd4ddc astgen: add builtins, fn_proto exprs, extern fn, scope threading
Port multiple features from AstGen.zig:
- fnProtoExpr/fnProtoExprInner: function types as expressions
- arrayTypeSentinelExpr: [N:sentinel]T array types
- Extern fn_decl without body (implicit CCC)
- 12 builtins: ptrFromInt, Vector, setRuntimeSafety, intFromError,
  clz, branchHint, bitSizeOf, fieldParentPtr, splat, offsetOf,
  inComptime, errorFromInt, errorCast alias
- Fix namespace scope parent: use caller's scope instead of gz->base,
  allowing inner structs to reference outer locals (fixes S2, name, U)
- Fix addFunc/addFuncFancy: don't emit src_locs when body is empty

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:59:34 +00:00
e5f71beb02 astgen: fix OPT() sentinel crashes in rlExpr and exprRl
The C parser uses OPT() macro which stores UINT32_MAX as the "none"
sentinel for optional AST node indices in extra_data. The rlExpr
(AstRlAnnotate) and exprRl functions were checking `!= 0` for these
fields, treating UINT32_MAX as a valid node index and causing segfaults.

Fixed optional field checks for fn_proto_one, fn_proto extra data
(param, align, addrspace, section, callconv), while cont_expr,
global_var_decl type_node, and slice_sentinel end_node.

Also added behavior test corpus files and FAIL: diagnostic to
the corpus test runner.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:08:46 +00:00
23beb0aad2 astgen: enable array_list.zig corpus test
Fix multiple bugs found via the array_list.zig corpus test:

- Fix anytype param ref/index double-conversion (addStrTok returns
  a ref, don't add ZIR_REF_START_INDEX again)
- Implement is_generic param tracking via is_used_or_discarded
  pointer in ScopeLocalVal
- Fix globalVarDecl declaration src_line: use type_gz.decl_line
  instead of ag->source_line (which was advanced by init expression)
- Fix cppcheck warning: remove redundant (0u << 2) in bitmask
- Implement fetchRemoveRefEntries and ret_param_refs in addFunc
- Add func_fancy case to buildHashSkipMask in test
- Fix valgrind: zero elem_val_imm padding, skip addNodeExtended
  undefined small field, handle more padding-sensitive tags

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:08:48 +00:00
9bc6ac6679 astgen: assign_destructure, u0 int type, slice_length optimization
- Implement assignDestructure() and assignDestructureMaybeDecls() with
  RL_DESTRUCTURE result location, DestructureComponent types, rvalue
  handling for validate_destructure/elem_val_imm/store_node, and array
  init optimization.
- Fix tryResolvePrimitiveIdent to allow bit_count==0 (u0/i0 types) and
  reject leading zeros (u01, i007).
- Add nodeIsTriviallyZero and slice_length optimization for
  arr[start..][0..len] patterns in AST_NODE_SLICE and
  AST_NODE_SLICE_SENTINEL cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:04:06 +00:00
a263259b1e astgen: implement namespace scopes, identifier resolution across scope boundaries
Add ScopeNamespace struct with per-namespace declaration tables and
capture storage, replacing the flat decl_table on AstGenCtx. Implement
tunnelThroughClosure for cross-namespace captures (closure_get ZIR
instruction). Modify identifierExpr to walk past namespace scopes,
checking namespace decls and tracking num_namespaces_out for proper
closure tunneling.

Key changes:
- ScopeNamespace with decl_names/decl_nodes, capture_keys/capture_vals
- scanContainer populates per-namespace decls instead of flat table
- structDeclInner/enumDeclInner create namespace scopes, write captures
- globalVarDecl/fnDecl/testDecl/comptimeDecl receive scope parameter
- localVarRef properly tunnels through namespace boundaries
- scopeParent helper for generic scope chain walking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:51:38 +00:00
285935bd41 astgen: implement 20+ builtins, multi-arg dispatch, extended helpers
Add builtins: @sizeOf, @alignOf, @typeInfo (simpleUnOpType pattern),
@compileError, @setEvalBranchQuota, @typeName (simpleUnOp pattern),
@This (addNodeExtended), @memmove, @FieldType, @reduce,
@addWithOverflow/@subWithOverflow/@mulWithOverflow/@shlWithOverflow
(overflowArithmetic), @alignCast/@constCast/@volatileCast (ptrCast
family), @errSetCast, @Type (reify), @TypeOf (typeof_builtin block),
@unionInit (3-arg via builtinCallMultiArg), @intFromPtr, @intFromBool,
@floatFromInt, @intFromFloat, @floatCast.

Add helper functions: addNodeExtended, addExtendedPayload,
addExtendedPayloadSmall. Add is_typeof field to GenZir.
Add AST_NODE_BUILTIN_CALL dispatch for 3+ arg builtins.
Add COMPTIME_REASON_COMPILE_ERROR_STRING and UNION_FIELD_NAME.

Add skipped corpus tests for array_list.zig, multi_array_list.zig,
Sema.zig (blocked on identifier resolution across namespace scopes).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:25:39 +00:00
b10557306d astgen: blockExpr rvalue, local_ptr rvalue, array_mult
- blockExpr: call rvalue on void result for unlabeled blocks, matching
  upstream AstGen.zig:2431. This was causing a missing STORE_NODE when
  empty blocks like {} were used as struct field values with pointer RL.
- identifierExpr: call rvalueNoCoercePreRef after LOAD in local_ptr case,
  matching upstream AstGen.zig:8453-8454.
- Implement AST_NODE_ARRAY_MULT (** operator) with ArrayMul payload,
  matching upstream AstGen.zig:774-785.
- Enable parser_test.zig and astgen_test.zig corpus tests.
- Enable combined corpus test (all 5 files pass).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:19:36 +00:00
28ee5d40b7 astgen: switchExprErrUnion, decl_val rvalue, identAsString ordering
Port switchExprErrUnion optimization for both catch and if patterns,
fix missing rvalue call in decl table lookup, fix identAsString
ordering for underscore error captures, and fill value_placeholder
with 0xaa to match upstream undefined pattern.

Enables corpus build.zig test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:54:28 +00:00
b2592f40be astgen: catch error capture, @panic, @errorName, @field, larger block scopes
- Add error capture scope to orelseCatchExpr (catch |err| now creates
  a ScopeLocalVal for the captured error variable)
- Add @panic, @errorName, @field builtins
- Increase blockExprStmts scope arrays from 64 to 128 entries
  (build.zig has 93 var decls in a single block)

corpus build.zig still skipped: needs switchExprErrUnion optimization
(catch |err| switch(err) pattern).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:15:14 +00:00
3aced7124e skip build.zig astgen test 2026-02-14 10:58:12 +02:00
bafa089ed5 move module up 2026-02-14 10:53:08 +02:00
7e6398a4e4 Merge commit '6204bb245b4a05e0f4f00bb48d83b76ebcd899e2' into zig0-0.15.2 2026-02-14 10:05:42 +02:00
b81f72bab3 Add 'stage0/' from commit 'b3d106ec971300a9c745f4681fab3df7518c4346'
git-subtree-dir: stage0
git-subtree-mainline: 3db960767d
git-subtree-split: b3d106ec97
2026-02-13 23:32:08 +02:00