commit a31ff38fd9e37194ba46f1c74aa2a9b761da4f13 (tree)
parent 130d6823d1ad9e28e45587a16c859b13d2eb1fa0
Author: Motiejus <motiejus@jakstys.lt>
Date: Sun, 1 Mar 2026 14:29:22 +0000
sema: skip inline fns, reorder corpus (sema tests first)
- Skip inline functions in zirFunc — they don't get standalone AIR;
they're inlined at call sites. Fixes type_identity_fn.zig.
- Reorder corpus: sema_tests/ files first (standalone, no imports),
then lib/ files (need module_root). Makes incremental progress
possible without solving cross-module calls first.
num_passing = 4 (empty, const_decl, empty_void_function,
type_identity_fn).
Next blocker: reify_int.zig — @Type(.{.int=...}) creates a fresh
int type instead of returning the pre-interned IP_INDEX_U32_TYPE.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat:
2 files changed, 103 insertions(+), 98 deletions(-)
diff --git a/stage0/corpus.zig b/stage0/corpus.zig
@@ -3,9 +3,106 @@
/// `num_passing` controls how many files are tested and pre-generated.
/// Both build.zig and stages_test.zig import this file.
/// To enable more tests: just increment `num_passing`.
-pub const num_passing: usize = 3;
+pub const num_passing: usize = 4;
pub const files = [_][]const u8{
+ "stage0/sema_tests/empty.zig",
+ "stage0/sema_tests/const_decl.zig",
+ "stage0/sema_tests/empty_void_function.zig",
+ "stage0/sema_tests/type_identity_fn.zig",
+ "stage0/sema_tests/reify_int.zig",
+ "stage0/sema_tests/return_integer.zig",
+ "stage0/sema_tests/identity_function.zig",
+ "stage0/sema_tests/add_two_args.zig",
+ "stage0/sema_tests/add_comptime_int.zig",
+ "stage0/sema_tests/sub_two_args.zig",
+ "stage0/sema_tests/xor_two_args.zig",
+ "stage0/sema_tests/xor_comptime_int.zig",
+ "stage0/sema_tests/bitcast_u32_to_f32.zig",
+ "stage0/sema_tests/bitcast_f32_to_u32.zig",
+ "stage0/sema_tests/as_node.zig",
+ "stage0/sema_tests/local_const_binding.zig",
+ "stage0/sema_tests/multiple_operations.zig",
+ "stage0/sema_tests/neghf2_inline_equivalent.zig",
+ "stage0/sema_tests/mul_two_args.zig",
+ "stage0/sema_tests/compare_lt.zig",
+ "stage0/sema_tests/compare_eq.zig",
+ "stage0/sema_tests/bit_shift_right.zig",
+ "stage0/sema_tests/mul_comptime_int.zig",
+ "stage0/sema_tests/chain_of_casts.zig",
+ "stage0/sema_tests/mixed_arithmetic_and_bitwise.zig",
+ "stage0/sema_tests/shift_and_mask.zig",
+ "stage0/sema_tests/f32_arithmetic.zig",
+ "stage0/sema_tests/multi_param_function.zig",
+ "stage0/sema_tests/nested_bitcast_xor.zig",
+ "stage0/sema_tests/pointer_param_identity.zig",
+ "stage0/sema_tests/store_to_pointer.zig",
+ "stage0/sema_tests/sub_comptime.zig",
+ "stage0/sema_tests/store_runtime_value.zig",
+ "stage0/sema_tests/load_from_pointer.zig",
+ "stage0/sema_tests/negate.zig",
+ "stage0/sema_tests/bit_not.zig",
+ "stage0/sema_tests/bit_shift_left.zig",
+ "stage0/sema_tests/intcast.zig",
+ "stage0/sema_tests/truncate.zig",
+ "stage0/sema_tests/two_local_bindings.zig",
+ "stage0/sema_tests/wrapping_add.zig",
+ "stage0/sema_tests/wrapping_sub.zig",
+ "stage0/sema_tests/wrapping_mul.zig",
+ "stage0/sema_tests/bool_not.zig",
+ "stage0/sema_tests/if_simple.zig",
+ "stage0/sema_tests/wrapping_negate.zig",
+ "stage0/sema_tests/clz.zig",
+ "stage0/sema_tests/ctz.zig",
+ "stage0/sema_tests/popcount.zig",
+ "stage0/sema_tests/byteswap.zig",
+ "stage0/sema_tests/float_cast_widen.zig",
+ "stage0/sema_tests/float_cast_narrow.zig",
+ "stage0/sema_tests/int_from_float.zig",
+ "stage0/sema_tests/float_from_int.zig",
+ "stage0/sema_tests/bitmask_shift_and.zig",
+ "stage0/sema_tests/double_negate.zig",
+ "stage0/sema_tests/return_ptr_type.zig",
+ "stage0/sema_tests/float_cast_f16_to_f32.zig",
+ "stage0/sema_tests/wrapping_add_comptime.zig",
+ "stage0/sema_tests/byteswap_and_xor.zig",
+ "stage0/sema_tests/same_file_inline_function_call.zig",
+ "stage0/sema_tests/same_file_inline_call_with_bitcast_and_xor.zig",
+ "stage0/sema_tests/same_file_inline_call_with_two_args.zig",
+ "stage0/sema_tests/intfrombool.zig",
+ "stage0/sema_tests/add_sat.zig",
+ "stage0/sema_tests/sub_sat.zig",
+ "stage0/sema_tests/mul_sat.zig",
+ "stage0/sema_tests/shl_sat.zig",
+ "stage0/sema_tests/bit_or.zig",
+ "stage0/sema_tests/bit_and.zig",
+ "stage0/sema_tests/f16_add.zig",
+ "stage0/sema_tests/f64_mul.zig",
+ "stage0/sema_tests/intcast_computed_dest_type.zig",
+ "stage0/sema_tests/multiple_return_paths.zig",
+ "stage0/sema_tests/if_with_early_return.zig",
+ "stage0/sema_tests/var_bitcast_and_if.zig",
+ "stage0/sema_tests/var_assignment_in_if.zig",
+ "stage0/sema_tests/nested_if.zig",
+ "stage0/sema_tests/wrapping_sub_in_expr.zig",
+ "stage0/sema_tests/if_else_block_result.zig",
+ "stage0/sema_tests/call_inside_runtime_conditional.zig",
+ "stage0/sema_tests/inline_fn_with_call_inside_conditional.zig",
+ "stage0/sema_tests/plus_eq_with_call_inside_conditional.zig",
+ "stage0/sema_tests/inline_fn_with_plus_eq_call_inside_conditional.zig",
+ "stage0/sema_tests/inline_fn_with_generic_call_inside_conditional.zig",
+ "stage0/sema_tests/inline_fn_with_two_generic_calls_in_conditionals.zig",
+ "stage0/sema_tests/inline_fn_with_plus_eq_call_inside_two_conditionals.zig",
+ "stage0/sema_tests/abs_float.zig",
+ "stage0/sema_tests/max_float.zig",
+ "stage0/sema_tests/min_float.zig",
+ "stage0/sema_tests/f64_div.zig",
+ "stage0/sema_tests/generic_fn_with_clz.zig",
+ "stage0/sema_tests/generic_fn_with_shl_assign.zig",
+ "stage0/sema_tests/inline_comptime_fn_call.zig",
+ "stage0/sema_tests/cross_fn_memoized_call.zig",
+ "stage0/sema_tests/nested_inline_dead_blocks.zig",
+ "stage0/sema_tests/comptime_arg_dbg.zig",
"lib/std/crypto/codecs.zig",
"lib/std/os/uefi/tables/table_header.zig",
"lib/std/zig/llvm.zig",
@@ -777,102 +874,5 @@ pub const files = [_][]const u8{
"lib/std/unicode/throughput_test.zig",
"lib/std/crypto/benchmark.zig",
"lib/std/math/float.zig",
- "stage0/sema_tests/empty.zig",
- "stage0/sema_tests/const_decl.zig",
- "stage0/sema_tests/empty_void_function.zig",
- "stage0/sema_tests/type_identity_fn.zig",
- "stage0/sema_tests/reify_int.zig",
- "stage0/sema_tests/return_integer.zig",
- "stage0/sema_tests/identity_function.zig",
- "stage0/sema_tests/add_two_args.zig",
- "stage0/sema_tests/add_comptime_int.zig",
- "stage0/sema_tests/sub_two_args.zig",
- "stage0/sema_tests/xor_two_args.zig",
- "stage0/sema_tests/xor_comptime_int.zig",
- "stage0/sema_tests/bitcast_u32_to_f32.zig",
- "stage0/sema_tests/bitcast_f32_to_u32.zig",
- "stage0/sema_tests/as_node.zig",
- "stage0/sema_tests/local_const_binding.zig",
- "stage0/sema_tests/multiple_operations.zig",
- "stage0/sema_tests/neghf2_inline_equivalent.zig",
- "stage0/sema_tests/mul_two_args.zig",
- "stage0/sema_tests/compare_lt.zig",
- "stage0/sema_tests/compare_eq.zig",
- "stage0/sema_tests/bit_shift_right.zig",
- "stage0/sema_tests/mul_comptime_int.zig",
- "stage0/sema_tests/chain_of_casts.zig",
- "stage0/sema_tests/mixed_arithmetic_and_bitwise.zig",
- "stage0/sema_tests/shift_and_mask.zig",
- "stage0/sema_tests/f32_arithmetic.zig",
- "stage0/sema_tests/multi_param_function.zig",
- "stage0/sema_tests/nested_bitcast_xor.zig",
- "stage0/sema_tests/pointer_param_identity.zig",
- "stage0/sema_tests/store_to_pointer.zig",
- "stage0/sema_tests/sub_comptime.zig",
- "stage0/sema_tests/store_runtime_value.zig",
- "stage0/sema_tests/load_from_pointer.zig",
- "stage0/sema_tests/negate.zig",
- "stage0/sema_tests/bit_not.zig",
- "stage0/sema_tests/bit_shift_left.zig",
- "stage0/sema_tests/intcast.zig",
- "stage0/sema_tests/truncate.zig",
- "stage0/sema_tests/two_local_bindings.zig",
- "stage0/sema_tests/wrapping_add.zig",
- "stage0/sema_tests/wrapping_sub.zig",
- "stage0/sema_tests/wrapping_mul.zig",
- "stage0/sema_tests/bool_not.zig",
- "stage0/sema_tests/if_simple.zig",
- "stage0/sema_tests/wrapping_negate.zig",
- "stage0/sema_tests/clz.zig",
- "stage0/sema_tests/ctz.zig",
- "stage0/sema_tests/popcount.zig",
- "stage0/sema_tests/byteswap.zig",
- "stage0/sema_tests/float_cast_widen.zig",
- "stage0/sema_tests/float_cast_narrow.zig",
- "stage0/sema_tests/int_from_float.zig",
- "stage0/sema_tests/float_from_int.zig",
- "stage0/sema_tests/bitmask_shift_and.zig",
- "stage0/sema_tests/double_negate.zig",
- "stage0/sema_tests/return_ptr_type.zig",
- "stage0/sema_tests/float_cast_f16_to_f32.zig",
- "stage0/sema_tests/wrapping_add_comptime.zig",
- "stage0/sema_tests/byteswap_and_xor.zig",
- "stage0/sema_tests/same_file_inline_function_call.zig",
- "stage0/sema_tests/same_file_inline_call_with_bitcast_and_xor.zig",
- "stage0/sema_tests/same_file_inline_call_with_two_args.zig",
- "stage0/sema_tests/intfrombool.zig",
- "stage0/sema_tests/add_sat.zig",
- "stage0/sema_tests/sub_sat.zig",
- "stage0/sema_tests/mul_sat.zig",
- "stage0/sema_tests/shl_sat.zig",
- "stage0/sema_tests/bit_or.zig",
- "stage0/sema_tests/bit_and.zig",
- "stage0/sema_tests/f16_add.zig",
- "stage0/sema_tests/f64_mul.zig",
- "stage0/sema_tests/intcast_computed_dest_type.zig",
- "stage0/sema_tests/multiple_return_paths.zig",
- "stage0/sema_tests/if_with_early_return.zig",
- "stage0/sema_tests/var_bitcast_and_if.zig",
- "stage0/sema_tests/var_assignment_in_if.zig",
- "stage0/sema_tests/nested_if.zig",
- "stage0/sema_tests/wrapping_sub_in_expr.zig",
- "stage0/sema_tests/if_else_block_result.zig",
- "stage0/sema_tests/call_inside_runtime_conditional.zig",
- "stage0/sema_tests/inline_fn_with_call_inside_conditional.zig",
- "stage0/sema_tests/plus_eq_with_call_inside_conditional.zig",
- "stage0/sema_tests/inline_fn_with_plus_eq_call_inside_conditional.zig",
- "stage0/sema_tests/inline_fn_with_generic_call_inside_conditional.zig",
- "stage0/sema_tests/inline_fn_with_two_generic_calls_in_conditionals.zig",
- "stage0/sema_tests/inline_fn_with_plus_eq_call_inside_two_conditionals.zig",
- "stage0/sema_tests/abs_float.zig",
- "stage0/sema_tests/max_float.zig",
- "stage0/sema_tests/min_float.zig",
- "stage0/sema_tests/f64_div.zig",
- "stage0/sema_tests/generic_fn_with_clz.zig",
- "stage0/sema_tests/generic_fn_with_shl_assign.zig",
- "stage0/sema_tests/inline_comptime_fn_call.zig",
- "stage0/sema_tests/cross_fn_memoized_call.zig",
- "stage0/sema_tests/nested_inline_dead_blocks.zig",
- "stage0/sema_tests/comptime_arg_dbg.zig",
};
diff --git a/stage0/sema.c b/stage0/sema.c
@@ -8296,6 +8296,11 @@ static void zirFunc(Sema* sema, SemaBlock* block, uint32_t inst) {
// Skip unnamed declarations (test blocks, comptime blocks).
if (sema->cur_decl_name == 0)
return;
+ // Skip inline functions — they're analyzed at the call site, not
+ // as standalone function bodies. Ported from upstream: inline
+ // functions don't get their own AIR; they're inlined into callers.
+ if (fi.is_inline)
+ return;
// Create function type and func_decl IP entries before analyzing
// the function body. This matches the Zig compiler's processing