From d456263f7e0a03fc45288639e8bf9df37d9789a1 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Fri, 7 Aug 2026 23:02:09 +0900 Subject: [PATCH] test/wcc/data: grow the declarative compiler corpus to 1,224 fixtures The r-prefixed waves absorb the runtime, reject, and byte-compare rows of the migrated native carriers; each fixture is one directory with one case.ww and a //ww:error, //ww:compile, //ww:run, or //ww:run-exit directive covering both frontends. --- test/wcc/data/alias_fsarg2_bound/case.ww | 18 ++ .../arrlit_slice_assign_named_accept/case.ww | 9 + .../data/arrlit_slice_reject_assign/case.ww | 8 + test/wcc/data/r56_cast_i16_high_bits/case.ww | 9 + .../data/r56_cast_i16_low_negative/case.ww | 9 + test/wcc/data/r56_cast_i32_high_bits/case.ww | 9 + .../data/r56_cast_i32_low_negative/case.ww | 9 + .../data/r56_cast_i32_wrap_positive/case.ww | 9 + test/wcc/data/r56_cast_i8_high_bits/case.ww | 9 + .../wcc/data/r56_cast_i8_low_negative/case.ww | 9 + .../wcc/data/r56_cast_i8_positive_max/case.ww | 9 + test/wcc/data/r56_cast_i8bang_signed/case.ww | 9 + .../wcc/data/r56_cast_u8bang_unsigned/case.ww | 9 + test/wcc/data/r56_def_negative_i32/case.ww | 8 + test/wcc/data/r56_def_negative_i64/case.ww | 8 + test/wcc/data/r56_def_positive_i32/case.ww | 8 + test/wcc/data/r56_def_tilde_i32/case.ww | 8 + test/wcc/data/r56_def_tilde_u32/case.ww | 8 + test/wcc/data/r56_def_unary_plus_i32/case.ww | 8 + test/wcc/data/r56_strarg_local_chain/case.ww | 10 + test/wcc/data/r56_strarg_ptr_chain/case.ww | 11 + test/wcc/data/r56_strarg_ptr_field/case.ww | 10 + test/wcc/data/r630_global_address/case.ww | 4 + test/wcc/data/r630_global_assign/case.ww | 4 + test/wcc/data/r630_global_compound/case.ww | 5 + test/wcc/data/r630_global_f32_literal/case.ww | 4 + test/wcc/data/r630_global_f64_arith/case.ww | 5 + test/wcc/data/r630_global_f64_literal/case.ww | 4 + .../wcc/data/r630_global_f64_reassign/case.ww | 4 + .../data/r630_global_f64_zero_init/case.ww | 4 + .../wcc/data/r630_global_narrow_field/case.ww | 5 + test/wcc/data/r630_global_read/case.ww | 4 + .../data/r630_global_slice_cap_raw/case.ww | 4 + .../data/r630_global_slice_reassign/case.ww | 10 + .../data/r630_global_slice_zero_init/case.ww | 4 + test/wcc/data/r630_global_str_literal/case.ww | 4 + .../r630_global_str_literal_bytes/case.ww | 4 + .../wcc/data/r630_global_str_reassign/case.ww | 5 + .../data/r630_global_str_zero_init/case.ww | 4 + .../data/r630_global_struct_compound/case.ww | 6 + .../data/r630_global_struct_fields/case.ww | 5 + test/wcc/data/r630_global_tagged_i64/case.ww | 15 ++ test/wcc/data/r630_global_tagged_str/case.ww | 15 ++ test/wcc/data/r630_global_tagged_void/case.ww | 15 ++ test/wcc/data/r630_global_u64_read/case.ww | 4 + test/wcc/data/r630_global_zero_init/case.ww | 4 + .../data/r630_local_slice_reassign/case.ww | 10 + test/wcc/data/r630_local_slice_return/case.ww | 4 + .../r650_alias_local_write_ptr_read/case.ww | 6 + .../r650_alias_ptr_write_local_read/case.ww | 5 + test/wcc/data/r650_global_root/case.ww | 6 + test/wcc/data/r650_i32_leaf/case.ww | 5 + test/wcc/data/r650_ptr_2deep_read/case.ww | 6 + test/wcc/data/r650_ptr_2deep_write/case.ww | 6 + test/wcc/data/r650_ptr_3deep/case.ww | 8 + test/wcc/data/r650_ptr_f64_leaf/case.ww | 6 + test/wcc/data/r650_ptr_i16_leaf/case.ww | 6 + test/wcc/data/r650_ptr_i16_negative/case.ww | 6 + test/wcc/data/r650_ptr_i32_leaf/case.ww | 6 + test/wcc/data/r650_ptr_i32_negative/case.ww | 6 + test/wcc/data/r650_ptr_i8_negative/case.ww | 6 + test/wcc/data/r650_ptr_local/case.ww | 5 + test/wcc/data/r650_ptr_single_read/case.ww | 5 + test/wcc/data/r650_ptr_single_write/case.ww | 5 + test/wcc/data/r650_ptr_slice_pseudo/case.ww | 5 + test/wcc/data/r650_ptr_str_leaf/case.ww | 6 + test/wcc/data/r650_ptr_u8_leaf/case.ww | 6 + test/wcc/data/r650_slice_field_pseudo/case.ww | 9 + test/wcc/data/r650_u32_leaf/case.ww | 5 + test/wcc/data/r650_u8_leaf/case.ww | 5 + .../data/r650_value_2deep_read_write/case.ww | 5 + test/wcc/data/r650_value_3deep/case.ww | 6 + .../data/r660_alias_i8_cast_narrow/case.ww | 4 + test/wcc/data/r660_alias_i8_field/case.ww | 5 + test/wcc/data/r660_alias_u8_field/case.ww | 5 + .../data/r660_bang_i32_deref_widen/case.ww | 5 + test/wcc/data/r660_bool_field_load/case.ww | 4 + test/wcc/data/r660_chained_i16_leaf/case.ww | 5 + test/wcc/data/r660_chained_i8_leaf/case.ww | 5 + test/wcc/data/r660_deref_compound_u32/case.ww | 3 + test/wcc/data/r660_i16_field_load/case.ww | 4 + .../data/r660_i16_out_param_negative/case.ww | 4 + .../r660_i32_compound_after_deref/case.ww | 4 + test/wcc/data/r660_i32_field_load/case.ww | 4 + .../r660_i32_global_negative_deref/case.ww | 5 + .../data/r660_i32_out_param_negative/case.ww | 4 + .../data/r660_i64_out_param_negative/case.ww | 4 + test/wcc/data/r660_i8_field_load/case.ww | 4 + .../data/r660_i8_out_param_negative/case.ww | 4 + test/wcc/data/r660_u16_field_load/case.ww | 4 + test/wcc/data/r660_u32_field_load/case.ww | 4 + test/wcc/data/r660_u8_field_load/case.ww | 4 + test/wcc/data/r670_f64_9args/case.ww | 4 + test/wcc/data/r670_i64_7args/case.ww | 4 + test/wcc/data/r670_i64_7args_signed/case.ww | 4 + test/wcc/data/r670_i64_8args/case.ww | 4 + test/wcc/data/r670_mixed_5i_3f_4i/case.ww | 6 + .../data/r670_slice_purestack_arg7/case.ww | 4 + .../wcc/data/r670_slice_straddle_arg5/case.ww | 4 + .../wcc/data/r670_slice_straddle_arg6/case.ww | 4 + .../r670_slice_straddle_then_scalar/case.ww | 4 + test/wcc/data/r670_str_inreg_arg5/case.ww | 4 + test/wcc/data/r670_str_purestack_arg7/case.ww | 4 + test/wcc/data/r670_str_straddle_arg6/case.ww | 4 + .../data/r670_variadic_full_in_reg/case.ww | 4 + test/wcc/data/r670_variadic_purestack/case.ww | 4 + test/wcc/data/r670_variadic_straddle/case.ww | 4 + .../wcc/data/r671_unknown_attr_reject/case.ww | 4 + test/wcc/data/r680_ptr_arr_dyn_idx/case.ww | 13 ++ test/wcc/data/r680_ptr_arr_i32_field/case.ww | 8 + test/wcc/data/r680_ptr_arr_i8_signed/case.ww | 10 + test/wcc/data/r680_ptr_arr_str_field/case.ww | 9 + test/wcc/data/r680_ptr_arr_u8_field/case.ww | 8 + test/wcc/data/r680_val_arr_i32_field/case.ww | 9 + test/wcc/data/r680_val_arr_str_field/case.ww | 10 + test/wcc/data/r680_val_arr_u8_field/case.ww | 9 + .../data/r681_ptr_arr_compound_plus/case.ww | 4 + .../data/r681_ptr_arr_dyn_idx_write/case.ww | 9 + test/wcc/data/r681_ptr_arr_i32_write/case.ww | 4 + .../data/r681_ptr_arr_i8_signed_write/case.ww | 8 + test/wcc/data/r681_ptr_arr_str_write/case.ww | 4 + test/wcc/data/r681_ptr_arr_u8_write/case.ww | 4 + .../r681_slice_field_distinct_bytes/case.ww | 12 ++ .../data/r681_slice_field_ptr_write/case.ww | 9 + .../data/r681_slice_field_value_write/case.ww | 9 + .../case.ww | 7 + .../r681_struct_field_value_write_16b/case.ww | 11 + .../r681_struct_field_value_write_24b/case.ww | 13 ++ .../r681_struct_field_value_write_32b/case.ww | 14 ++ .../case.ww | 14 ++ .../case.ww | 11 + .../case.ww | 16 ++ .../case.ww | 8 + .../case.ww | 8 + .../case.ww | 10 + .../data/r681_val_arr_compound_plus/case.ww | 4 + .../data/r681_val_arr_compound_xor/case.ww | 4 + test/wcc/data/r681_val_arr_f64_write/case.ww | 4 + test/wcc/data/r681_val_arr_i32_write/case.ww | 4 + .../data/r681_val_arr_i8_signed_write/case.ww | 7 + test/wcc/data/r681_val_arr_str_write/case.ww | 4 + test/wcc/data/r681_val_arr_u8_write/case.ww | 4 + .../data/r690_amp_dot_addr_eq_read/case.ww | 8 + .../wcc/data/r690_amp_dot_chain_2deep/case.ww | 5 + .../wcc/data/r690_amp_dot_chain_3deep/case.ww | 6 + test/wcc/data/r690_amp_dot_ptr_field/case.ww | 8 + .../data/r690_amp_dot_single_global/case.ww | 5 + .../data/r690_amp_dot_single_local/case.ww | 4 + .../case.ww | 9 + .../case.ww | 10 + .../data/r690_amp_dot_slice_field_ptr/case.ww | 8 + .../case.ww | 9 + .../case.ww | 8 + .../case.ww | 8 + .../r690_amp_dot_str_len_width_stress/case.ww | 7 + .../r691_direct_slice_arg_baseline/case.ww | 11 + .../r691_local_root_chained_slice_arg/case.ww | 12 ++ .../data/r691_local_root_slice_arg/case.ww | 12 ++ .../r691_ptr_field_chained_slice_arg/case.ww | 14 ++ .../r691_ptr_root_chained_slice_arg/case.ww | 13 ++ test/wcc/data/r691_ptr_root_slice_arg/case.ww | 12 ++ .../r691_ptr_root_slice_mutate_ptr/case.ww | 9 + .../data/r691_ptr_root_slice_return/case.ww | 11 + .../r691_ptr_root_slice_with_neighbor/case.ww | 9 + test/wcc/data/r693_dot_plain_i32/case.ww | 8 + .../wcc/data/r693_dot_plain_slice_ptr/case.ww | 11 + test/wcc/data/r693_dot_plain_str/case.ww | 8 + .../data/r693_dot_tagged_global_slice/case.ww | 20 ++ .../data/r693_dot_tagged_letcopy_i64/case.ww | 14 ++ .../r693_dot_tagged_letcopy_slice/case.ww | 19 ++ .../data/r693_dot_tagged_local_i64/case.ww | 13 ++ .../data/r693_dot_tagged_local_slice/case.ww | 18 ++ .../data/r693_dot_tagged_local_str/case.ww | 13 ++ test/wcc/data/r693_dot_tagged_ptr_i64/case.ww | 16 ++ .../data/r693_dot_tagged_ptr_slice/case.ww | 21 ++ test/wcc/data/r693_dot_tagged_ptr_str/case.ww | 16 ++ test/wcc/data/r694_tagged_intlit_i32/case.ww | 13 ++ test/wcc/data/r694_tagged_intlit_i64/case.ww | 13 ++ .../r694_tagged_intlit_i64_str_tail/case.ww | 14 ++ .../data/r694_tagged_intlit_i64_tail/case.ww | 14 ++ .../r694_tagged_intlit_letinit_i64/case.ww | 10 + .../r694_tagged_intlit_negative_i64/case.ww | 16 ++ .../case.ww | 13 ++ .../data/r694_tagged_intlit_plus_i64/case.ww | 13 ++ .../data/r694_tagged_intlit_tilde_i64/case.ww | 16 ++ .../data/r694_tagged_intlit_u8_head/case.ww | 14 ++ .../data/r695_match_bind_i32_control/case.ww | 14 ++ .../data/r695_match_bind_mixed_struct/case.ww | 21 ++ test/wcc/data/r695_match_bind_pair3/case.ww | 19 ++ .../data/r695_match_bind_pair_letinit/case.ww | 15 ++ .../r695_match_bind_slice_control/case.ww | 19 ++ .../data/r695_match_bind_str_control/case.ww | 14 ++ .../r695_match_bind_wide4_letinit/case.ww | 16 ++ test/wcc/data/r701_field_chain_call/case.ww | 13 ++ test/wcc/data/r701_field_chain_lit/case.ww | 12 ++ test/wcc/data/r701_field_global_call/case.ww | 11 + test/wcc/data/r701_field_local_call/case.ww | 10 + test/wcc/data/r701_field_local_lit/case.ww | 9 + test/wcc/data/r701_field_ptr_call/case.ww | 11 + test/wcc/data/r701_field_ptr_lit/case.ww | 10 + test/wcc/data/r701_five_i32_let_call/case.ww | 10 + .../data/r701_five_i32_reassign_lit/case.ww | 8 + test/wcc/data/r701_mix_let_call/case.ww | 8 + test/wcc/data/r701_one_i64_let_call/case.ww | 8 + test/wcc/data/r701_one_i64_let_lit/case.ww | 7 + .../data/r701_one_i64_reassign_call/case.ww | 9 + .../data/r701_one_i64_reassign_lit/case.ww | 8 + test/wcc/data/r701_pair_i64_let_call/case.ww | 8 + .../data/r701_pair_i64_reassign_lit/case.ww | 8 + test/wcc/data/r701_trip_i64_let_call/case.ww | 8 + .../data/r701_trip_i64_reassign_lit/case.ww | 8 + test/wcc/data/r702_deref_read_i32/case.ww | 4 + test/wcc/data/r702_deref_read_i64/case.ww | 4 + test/wcc/data/r702_deref_read_str/case.ww | 4 + test/wcc/data/r702_deref_roundtrip/case.ww | 4 + test/wcc/data/r702_deref_write_i32/case.ww | 4 + test/wcc/data/r702_deref_write_i64/case.ww | 4 + test/wcc/data/r702_deref_write_str/case.ww | 4 + test/wcc/data/r703_nested_assign/case.ww | 4 + test/wcc/data/r703_nested_let_i32/case.ww | 4 + test/wcc/data/r703_nested_let_i64/case.ww | 4 + test/wcc/data/r703_nested_middle/case.ww | 4 + test/wcc/data/r703_nested_return/case.ww | 5 + test/wcc/data/r703_nested_three_deep/case.ww | 4 + test/wcc/data/r704_dot_chain/case.ww | 4 + test/wcc/data/r704_dot_chain_global/case.ww | 4 + test/wcc/data/r704_dot_chain_ptr/case.ww | 4 + test/wcc/data/r704_dot_global/case.ww | 4 + test/wcc/data/r704_dot_local/case.ww | 4 + test/wcc/data/r704_dot_local_three/case.ww | 4 + test/wcc/data/r704_dot_ptr/case.ww | 4 + test/wcc/data/r704_dot_ptr_three/case.ww | 4 + test/wcc/data/r705_call_16/case.ww | 4 + test/wcc/data/r705_call_24/case.ww | 4 + test/wcc/data/r705_call_8/case.ww | 4 + test/wcc/data/r705_call_ptr/case.ww | 4 + test/wcc/data/r705_call_tail1/case.ww | 5 + test/wcc/data/r705_call_tail2/case.ww | 5 + test/wcc/data/r705_call_tail4/case.ww | 4 + test/wcc/data/r705_call_three_deep/case.ww | 4 + .../r707_aliased_tagged_askbool_idx2/case.ww | 11 + .../r707_aliased_tagged_aski64_idx0/case.ww | 11 + .../r707_aliased_tagged_askstr_idx1/case.ww | 11 + .../data/r707_bool_24b_after_arridx/case.ww | 15 ++ .../r707_f32_variant_return_payload/case.ww | 13 ++ .../case.ww | 12 ++ .../r707_f64_variant_return_payload/case.ww | 12 ++ .../data/r707_mixed_variants_in_loop/case.ww | 23 +++ .../data/r707_scalar_24b_after_arridx/case.ww | 14 ++ test/wcc/data/r707_scalar_24b_in_loop/case.ww | 19 ++ .../r707_scalar_24b_in_nested_loop/case.ww | 23 +++ .../data/r707_str_24b_after_arridx/case.ww | 14 ++ .../data/r709_localoff_defer_shadow/case.ww | 12 ++ .../data/r709_localoff_different_type/case.ww | 11 + .../r709_localoff_forrange_shadow/case.ww | 12 ++ test/wcc/data/r709_localoff_if_shadow/case.ww | 12 ++ .../data/r709_localoff_inner_outer/case.ww | 9 + .../data/r709_localoff_nested_three/case.ww | 17 ++ .../data/r709_localoff_outer_inner/case.ww | 11 + test/wcc/data/r710_bool_to_i8_clamp/case.ww | 7 + test/wcc/data/r710_enum_u32_to_u32/case.ww | 8 + test/wcc/data/r710_i16_i16_identity/case.ww | 7 + test/wcc/data/r710_i32_i32_identity/case.ww | 7 + test/wcc/data/r710_i64_to_enum_i32/case.ww | 8 + .../data/r710_i64_to_enum_i32_trnc/case.ww | 8 + test/wcc/data/r710_i8_i8_identity/case.ww | 7 + test/wcc/data/r710_pseudo_field_clamp/case.ww | 7 + test/wcc/data/r710_struct_field_rt/case.ww | 11 + test/wcc/data/r710_u16_u16_identity/case.ww | 7 + test/wcc/data/r710_u32_to_enum_u32/case.ww | 8 + test/wcc/data/r710_u32_to_enum_u8/case.ww | 8 + .../wcc/data/r710_u32_to_enum_u8_trnc/case.ww | 8 + test/wcc/data/r710_u32_to_i32_signchg/case.ww | 7 + test/wcc/data/r710_u32_u32_identity/case.ww | 7 + test/wcc/data/r710_u8_u8_identity/case.ww | 7 + .../data/r718_struct_return_single/case.ww | 14 ++ .../data/r718_struct_return_tagged/case.ww | 19 ++ .../wcc/data/r718_struct_return_three/case.ww | 22 ++ test/wcc/data/r718_struct_return_two/case.ww | 20 ++ test/wcc/data/r71_arrlit_bool/case.ww | 10 + test/wcc/data/r71_arrlit_i32/case.ww | 6 + test/wcc/data/r71_arrlit_i64/case.ww | 6 + .../data/r71_arrlit_index_call_arg/case.ww | 21 ++ .../wcc/data/r71_arrlit_index_len_arg/case.ww | 9 + .../data/r71_arrlit_nested_index_arg/case.ww | 20 ++ test/wcc/data/r71_arrlit_rune/case.ww | 7 + test/wcc/data/r71_arrlit_str_lens/case.ww | 9 + test/wcc/data/r71_arrlit_str_ptrs/case.ww | 8 + test/wcc/data/r71_arrlit_str_repeat/case.ww | 12 ++ .../data/r71_match_spill_alias_error/case.ww | 16 ++ .../data/r71_match_spill_alias_ptr/case.ww | 16 ++ test/wcc/data/r71_match_spill_raw_ptr/case.ww | 15 ++ .../data/r71_match_spill_str_payload/case.ww | 13 ++ .../r71_redecl_forrange_body_shadow/case.ww | 11 + .../data/r71_redecl_match_arm_shadow/case.ww | 10 + .../r71_redecl_nested_block_shadow/case.ww | 9 + .../r71_redecl_nested_typed_shadow/case.ww | 10 + test/wcc/data/r71_struct_byval_mixed/case.ww | 12 ++ .../data/r71_struct_byval_partial_fit/case.ww | 11 + test/wcc/data/r71_struct_byval_str/case.ww | 10 + test/wcc/data/r71_struct_byval_two16/case.ww | 17 ++ .../r71_struct_field_index_str_arg/case.ww | 23 +++ .../r71_struct_field_index_str_stride/case.ww | 15 ++ .../case.ww | 16 ++ test/wcc/data/r71_tagged_f64_binop/case.ww | 12 ++ test/wcc/data/r71_tagged_f64_call/case.ww | 13 ++ test/wcc/data/r71_tagged_f64_cast/case.ww | 12 ++ test/wcc/data/r71_tagged_f64_field/case.ww | 15 ++ test/wcc/data/r71_tagged_f64_ident/case.ww | 13 ++ test/wcc/data/r71_tagged_f64_integer/case.ww | 12 ++ test/wcc/data/r71_tagged_f64_literal/case.ww | 12 ++ .../data/r71_tagged_f64_unary_cast/case.ww | 12 ++ .../data/r71_tagged_f64_unary_literal/case.ww | 12 ++ .../data/r71_tagged_f64_unary_paren/case.ww | 12 ++ .../case.ww | 16 ++ .../r71_tagged_return_scratch_match/case.ww | 22 ++ .../r71_tagged_return_scratch_mixed/case.ww | 26 +++ .../r71_tagged_return_scratch_param/case.ww | 15 ++ .../r72_empty_alloc_annotated_i32/case.ww | 8 + .../data/r72_empty_alloc_annotated_u8/case.ww | 9 + test/wcc/data/r72_empty_alloc_assign/case.ww | 7 + .../wcc/data/r72_empty_alloc_bare_let/case.ww | 6 + .../wcc/data/r72_empty_alloc_call_arg/case.ww | 4 + test/wcc/data/r72_empty_alloc_return/case.ww | 4 + test/wcc/data/r732_def_chain/case.ww | 6 + test/wcc/data/r732_def_narrowing_cast/case.ww | 4 + .../data/r732_def_same_module_cycle/case.ww | 5 + test/wcc/data/r732_def_shift/case.ww | 4 + test/wcc/data/r732_def_sibling_add/case.ww | 5 + test/wcc/data/r732_def_sibling_ref/case.ww | 5 + test/wcc/data/r732_def_widening_cast/case.ww | 5 + test/wcc/data/r744_letcopy_slice/case.ww | 14 ++ test/wcc/data/r744_letcopy_str/case.ww | 13 ++ test/wcc/data/r744_letcopy_tagged/case.ww | 16 ++ test/wcc/data/r744_letcopy_tri_i32/case.ww | 13 ++ .../data/r749_sumtype_forward_ident/case.ww | 14 ++ .../data/r749_sumtype_forward_index/case.ww | 21 ++ .../data/r749_sumtype_forward_literal/case.ww | 13 ++ test/wcc/data/r74_parse_error/case.ww | 3 + test/wcc/data/r74_size_leaf_baseline/case.ww | 16 ++ .../r74_size_tag_variadic_runearm/case.ww | 19 ++ .../r74_size_trim_iter_match_prev/case.ww | 33 +++ .../r74_size_variadic_rune_stride/case.ww | 15 ++ test/wcc/data/r75_alloc_f64_str_i32/case.ww | 5 + test/wcc/data/r75_alloc_i32_then_str/case.ww | 5 + test/wcc/data/r75_alloc_str_readback/case.ww | 5 + test/wcc/data/r75_alloc_str_singleton/case.ww | 5 + test/wcc/data/r75_alloc_str_then_i32/case.ww | 5 + test/wcc/data/r75_alloc_two_str/case.ww | 5 + test/wcc/data/r75_enumfold_bin_amp/case.ww | 4 + test/wcc/data/r75_enumfold_bin_caret/case.ww | 4 + test/wcc/data/r75_enumfold_bin_lshift/case.ww | 4 + test/wcc/data/r75_enumfold_bin_minus/case.ww | 4 + .../wcc/data/r75_enumfold_bin_percent/case.ww | 4 + test/wcc/data/r75_enumfold_bin_pipe/case.ww | 4 + test/wcc/data/r75_enumfold_bin_plus/case.ww | 4 + test/wcc/data/r75_enumfold_bin_rshift/case.ww | 4 + test/wcc/data/r75_enumfold_bin_slash/case.ww | 4 + test/wcc/data/r75_enumfold_bin_star/case.ww | 4 + .../data/r75_enumfold_chained_backref/case.ww | 4 + test/wcc/data/r75_enumfold_intlit/case.ww | 4 + test/wcc/data/r75_enumfold_runelit/case.ww | 4 + .../data/r75_enumfold_sibling_backref/case.ww | 4 + .../wcc/data/r75_enumfold_unary_minus/case.ww | 4 + test/wcc/data/r75_enumfold_unary_plus/case.ww | 4 + .../r75_enumfold_unary_tilde_nested/case.ww | 4 + .../data/r75_fromutf8_natural_match/case.ww | 6 + test/wcc/data/r75_letbind_invalid_arm/case.ww | 5 + test/wcc/data/r75_letbind_void_arm/case.ww | 5 + .../case.ww | 20 ++ .../case.ww | 9 + .../case.ww | 9 + .../r75_vararg_seq_three_arity_drift/case.ww | 10 + .../r764_amp_fn_ident_alias_chain/case.ww | 8 + test/wcc/data/r764_amp_fn_ident_args/case.ww | 7 + .../data/r764_amp_fn_ident_branched/case.ww | 10 + .../data/r764_amp_fn_ident_minimal/case.ww | 7 + .../r764_amp_fn_ident_tuple_return/case.ww | 7 + .../r766_star_fn_deref_alias_chain/case.ww | 8 + test/wcc/data/r766_star_fn_deref_args/case.ww | 8 + .../data/r766_star_fn_deref_branched/case.ww | 10 + .../data/r766_star_fn_deref_minimal/case.ww | 7 + .../r766_star_fn_deref_tuple_return/case.ww | 8 + .../r767_match_variant_aliased_ptr/case.ww | 14 ++ .../r767_match_variant_fn_ptr_local/case.ww | 14 ++ .../r767_match_variant_nullable_fn/case.ww | 15 ++ .../r767_match_variant_ptr_past_zero/case.ww | 11 + .../case.ww | 14 ++ .../r769_dot_aliased_ptr_double_alias/case.ww | 10 + .../wcc/data/r769_dot_aliased_ptr_let/case.ww | 9 + .../data/r769_dot_aliased_ptr_param/case.ww | 9 + .../case.ww | 11 + .../data/r76_def_widen_i32_int_neg/case.ww | 5 + .../data/r76_def_widen_i32_int_small/case.ww | 5 + test/wcc/data/r76_def_widen_u64_size/case.ww | 5 + .../r76_infer_struct_big_sret_ptr/case.ww | 6 + test/wcc/data/r76_infer_struct_i32_x3/case.ww | 6 + .../r76_infer_struct_i64_i32_tail/case.ww | 6 + .../wcc/data/r76_infer_struct_i64_i64/case.ww | 6 + .../data/r76_infer_struct_ident_chain/case.ww | 6 + .../r76_infer_struct_u32_i64_decf/case.ww | 6 + .../r76_io_types_closer_alias_param/case.ww | 14 ++ .../data/r76_io_types_enum_mode_value/case.ww | 7 + .../r76_io_types_enum_whence_value/case.ww | 7 + .../r76_io_types_reader_alias_param/case.ww | 17 ++ .../r76_io_types_writer_alias_param/case.ww | 17 ++ test/wcc/data/r76_struct_size_i16_i64/case.ww | 4 + test/wcc/data/r76_struct_size_i16_x3/case.ww | 4 + .../data/r76_struct_size_i32_i32_i64/case.ww | 4 + test/wcc/data/r76_struct_size_i32_x3/case.ww | 4 + .../data/r76_struct_size_i64_i32_i32/case.ww | 4 + test/wcc/data/r76_struct_size_i64_x3/case.ww | 4 + .../wcc/data/r76_typeeq_fn_diff_arity/case.ww | 11 + .../r76_typeeq_fn_diff_param_type/case.ww | 11 + .../data/r76_typeeq_fn_diff_return/case.ww | 11 + test/wcc/data/r76_typeeq_fn_identical/case.ww | 11 + .../r76_typeeq_fn_io_vtable_shape/case.ww | 11 + .../r76_typeeq_fn_param_name_only/case.ww | 11 + .../r76_typeeq_fn_variadic_vs_fixed/case.ww | 11 + .../r770_return_tagged_cross_module/case.ww | 11 + .../mtag770/mtag770.ww | 3 + .../r770_return_tagged_deref_call/case.ww | 13 ++ .../wcc/data/r770_return_tagged_named/case.ww | 12 ++ .../data/r770_return_tagged_nested/case.ww | 13 ++ .../data/r770_return_tagged_scalar/case.ww | 5 + .../r770_return_tagged_widen_subset/case.ww | 12 ++ .../data/r771_branched_callee_widen/case.ww | 14 ++ .../wcc/data/r771_direct_flat_variant/case.ww | 11 + .../data/r771_reject_transitive_widen/case.ww | 11 + .../wcc/data/r771_wrapper_typed_widen/case.ww | 12 ++ test/wcc/data/r772_branched_call_as/case.ww | 12 ++ test/wcc/data/r772_call_as_fnptr/case.ww | 12 ++ test/wcc/data/r772_call_as_i16/case.ww | 12 ++ test/wcc/data/r772_call_as_namedvoid/case.ww | 12 ++ test/wcc/data/r772_call_as_size/case.ww | 11 + test/wcc/data/r772_call_as_str/case.ww | 11 + test/wcc/data/r772_call_as_u8/case.ww | 11 + .../data/r773_cross_mod_named_void/case.ww | 10 + .../data/r773_direct_cross_mod_tagged/case.ww | 11 + .../wcc/data/r773_same_module_variant/case.ww | 9 + .../r773_spread_as_inline_payload/case.ww | 14 ++ .../r773_spread_is_inline_variant/case.ww | 12 ++ .../data/r774_accept_nested_wrapper/case.ww | 13 ++ .../data/r774_accept_pure_leaf_subset/case.ww | 11 + .../data/r774_accept_wrapper_variant/case.ww | 14 ++ .../data/r774_branched_callee_widen/case.ww | 19 ++ .../r774_reject_concrete_unrelated/case.ww | 11 + test/wcc/data/r775_branched_readers/case.ww | 26 +++ test/wcc/data/r775_closer_set/case.ww | 15 ++ test/wcc/data/r775_closer_void_noop/case.ww | 11 + test/wcc/data/r775_reader_set_happy/case.ww | 21 ++ .../data/r775_reader_void_unsupported/case.ww | 12 ++ test/wcc/data/r775_writer_set_happy/case.ww | 21 ++ .../data/r775_writer_void_unsupported/case.ww | 12 ++ .../case.ww | 22 ++ .../data/r776_borrowedread_view_eof/case.ww | 22 ++ test/wcc/data/r776_branched_fixed/case.ww | 26 +++ test/wcc/data/r776_dynamic_write_grow/case.ww | 18 ++ test/wcc/data/r776_dynamicfrom_alt_rw/case.ww | 23 +++ test/wcc/data/r776_fixed_read_5/case.ww | 19 ++ test/wcc/data/r777_branched_fprintf/case.ww | 32 +++ test/wcc/data/r777_fprint_file_raw/case.ww | 27 +++ test/wcc/data/r777_fprintf_file_int/case.ww | 27 +++ test/wcc/data/r777_fprintf_stream/case.ww | 23 +++ .../wcc/data/r777_fprintln_file_multi/case.ww | 27 +++ .../wcc/data/r778_branched_bufio_wrap/case.ww | 29 +++ .../data/r778_isbuffered_v_boundary/case.ww | 19 ++ .../r778_isbuffered_v_discriminate/case.ww | 22 ++ test/wcc/data/r778_scanner_byte_bytes/case.ww | 37 ++++ test/wcc/data/r778_scanner_lines/case.ww | 39 ++++ test/wcc/data/r778_stream_read_unread/case.ww | 30 +++ test/wcc/data/r778_stream_setflush/case.ww | 26 +++ test/wcc/data/r778_stream_unread/case.ww | 31 +++ test/wcc/data/r778_stream_write_flush/case.ww | 29 +++ test/wcc/data/r780_fmt_mods/case.ww | 75 +++++++ test/wcc/data/r781_fmt_compositions/case.ww | 98 +++++++++ .../r783_amp_fn_assign_neg_launder/case.ww | 10 + .../r783_amp_fn_assign_neg_samesig/case.ww | 11 + test/wcc/data/r788_type_q_cast_accept/case.ww | 8 + .../data/r788_value_not_type_reject/case.ww | 7 + .../data/r78_alias_narrow_deref_store/case.ww | 6 + .../case.ww | 7 + .../data/r78_amp_fn_assign_let_call/case.ww | 5 + .../data/r78_amp_fn_assign_structlit/case.ww | 6 + .../case.ww | 18 ++ .../r78_named_ptr_alias_handle_widen/case.ww | 9 + .../r78_plain_i32_deref_store_ctrl/case.ww | 5 + .../case.ww | 2 + .../r78_strict_package_main_accept/case.ww | 3 + .../case.ww | 4 + .../case.ww | 4 + .../case.ww | 2 + .../case.ww | 5 + .../r78_structvariant_large_union/case.ww | 8 + .../r78_structvariant_namedvoid_ctrl/case.ww | 7 + test/wcc/data/r791_io_handle/case.ww | 116 +++++++++++ .../r79_single_field_struct_assign/case.ww | 6 + .../case.ww | 6 + .../r79_spread_variant_match_compile/case.ww | 6 + .../data/r79_tuple_sret_str_str_i32/case.ww | 3 + .../wcc/data/r79_tuple_sret_three_f64/case.ww | 3 + .../data/r79_tuple_sret_two_slices/case.ww | 3 + test/wcc/data/r79_tuple_sret_two_str/case.ww | 3 + test/wcc/data/r79_xmod_valglobal_def/case.ww | 8 + .../r79_xmod_valglobal_dot_addrof/case.ww | 7 + .../data/r79_xmod_valglobal_dot_read/case.ww | 7 + test/wcc/data/r79_xmod_valglobal_f64/case.ww | 8 + test/wcc/data/r79_xmod_valglobal_i32/case.ww | 8 + .../data/r800append_enum_alias_esz/case.ww | 8 + test/wcc/data/r800append_slice_elem/case.ww | 9 + .../r800append_spread_call_loudstop/case.ww | 13 ++ test/wcc/data/r800append_spread_str/case.ww | 12 ++ .../wcc/data/r800append_spread_tagged/case.ww | 20 ++ .../wcc/data/r800append_str_len_bytes/case.ww | 8 + .../data/r800append_str_two_append/case.ww | 10 + .../r800append_struct_call_loudstop/case.ww | 11 + .../r800append_struct_eight_appends/case.ww | 15 ++ .../wcc/data/r800append_struct_first8/case.ww | 9 + .../data/r800append_struct_lit_two/case.ww | 9 + .../data/r800append_struct_tail_word/case.ww | 9 + test/wcc/data/r800append_tagged_box/case.ww | 13 ++ .../data/r800append_tagged_ident_src/case.ww | 20 ++ .../data/r800append_tagged_two_append/case.ww | 18 ++ test/wcc/data/r800append_u8_baseline/case.ww | 8 + .../r804_delete_elem_reject_arity/case.ww | 3 + .../r804_delete_elem_reject_array/case.ww | 3 + .../r804_delete_elem_reject_nonindex/case.ww | 3 + .../wcc/data/r804_delete_elem_runtime/case.ww | 87 ++++++++ .../r806_tryprop_accept_nested_tagged/case.ww | 13 ++ .../r806_tryprop_accept_two_member/case.ww | 11 + .../case.ww | 10 + .../r806_tryprop_accept_void_success/case.ww | 12 ++ .../data/r806_tryprop_reject_callarg/case.ww | 6 + .../data/r806_tryprop_reject_success2/case.ww | 15 ++ .../data/r806_tryprop_reject_success3/case.ww | 5 + .../data/r806_tryprop_reject_try_is/case.ww | 11 + .../r806_tryprop_reject_try_match/case.ww | 13 ++ .../r806_tryprop_reject_tryunw_is/case.ww | 11 + .../r806_tryprop_reject_unw_success2/case.ww | 15 ++ .../r807_insert_elem_reject_arity1/case.ww | 3 + .../r807_insert_elem_reject_arity3/case.ww | 3 + .../r807_insert_elem_reject_array/case.ww | 3 + .../r807_insert_elem_reject_nonindex/case.ww | 3 + .../r807_insert_elem_reject_range/case.ww | 3 + .../r807_insert_elem_reject_spread/case.ww | 3 + .../wcc/data/r807_insert_elem_runtime/case.ww | 188 ++++++++++++++++++ .../r808_arrlit_alias_exact_module/case.ww | 9 + .../r808_arrlit_alias_nested_2lvl/case.ww | 8 + .../data/r808_arrlit_alias_nested_def/case.ww | 7 + .../r808_arrlit_alias_nested_field/case.ww | 10 + .../r808_arrlit_alias_nested_local/case.ww | 9 + .../r808_arrlit_alias_nested_module/case.ww | 7 + test/wcc/data/r808_arrlit_exact_def/case.ww | 4 + test/wcc/data/r808_arrlit_exact_field/case.ww | 4 + test/wcc/data/r808_arrlit_exact_local/case.ww | 3 + .../wcc/data/r808_arrlit_exact_module/case.ww | 4 + test/wcc/data/r808_arrlit_infer_len/case.ww | 3 + .../wcc/data/r808_arrlit_nested_field/case.ww | 9 + .../data/r808_arrlit_nested_module/case.ww | 6 + .../wcc/data/r808_arrlit_overlong_def/case.ww | 4 + .../data/r808_arrlit_overlong_field/case.ww | 4 + .../data/r808_arrlit_overlong_local/case.ww | 3 + .../data/r808_arrlit_overlong_module/case.ww | 4 + .../data/r808_arrlit_overlong_narrow/case.ww | 3 + .../data/r808_arrlit_overlong_repeat/case.ww | 3 + test/wcc/data/r808_arrlit_repeat_fill/case.ww | 3 + .../data/r808_arrlit_repeat_partial/case.ww | 3 + .../r809del_delete_range_reject_array/case.ww | 3 + .../r809del_delete_range_reject_str/case.ww | 3 + .../data/r809del_delete_range_runtime/case.ww | 112 +++++++++++ test/wcc/data/r809idx_alias_lit/case.ww | 5 + test/wcc/data/r809idx_all_default/case.ww | 4 + test/wcc/data/r809idx_arr_elem/case.ww | 4 + test/wcc/data/r809idx_arr_neighbor/case.ww | 4 + test/wcc/data/r809idx_arr_var_idx/case.ww | 5 + .../data/r809idx_arrlit_deref_loud/case.ww | 3 + test/wcc/data/r809idx_arrlit_idx_loud/case.ww | 3 + test/wcc/data/r809idx_callee_capture/case.ww | 19 ++ test/wcc/data/r809idx_deref_lit/case.ww | 4 + .../wcc/data/r809idx_derefspine_slice/case.ww | 13 ++ test/wcc/data/r809idx_dotidx_field/case.ww | 5 + .../wcc/data/r809idx_fieldplace_slice/case.ww | 13 ++ test/wcc/data/r809idx_global_arr/case.ww | 5 + test/wcc/data/r809idx_nested_lit/case.ww | 5 + .../wcc/data/r809idx_partial_ellipsis/case.ww | 4 + test/wcc/data/r809idx_slice_elem_str/case.ww | 11 + test/wcc/data/r809idx_small_elem/case.ww | 4 + test/wcc/data/r809idx_tuple_elem/case.ww | 3 + test/wcc/data/r811_annotated_pin/case.ww | 4 + test/wcc/data/r811_boxed_prebound/case.ww | 12 ++ test/wcc/data/r811_ellipsis_fill/case.ww | 4 + test/wcc/data/r811_nested_read/case.ww | 5 + test/wcc/data/r811_paren_form/case.ww | 4 + test/wcc/data/r811_plain_read/case.ww | 4 + test/wcc/data/r811_tagged_assign/case.ww | 4 + test/wcc/data/r811_tagged_read_is_as/case.ww | 4 + test/wcc/data/r811_tagged_str_field/case.ww | 4 + test/wcc/data/r811_tagged_void_read/case.ww | 4 + test/wcc/data/r812_alias_named_assign/case.ww | 5 + .../data/r812_alias_twolevel_assign/case.ww | 5 + test/wcc/data/r812_arrelem_roundtrip/case.ww | 4 + test/wcc/data/r812_assign_16b/case.ww | 4 + test/wcc/data/r812_assign_24b_plain/case.ww | 4 + test/wcc/data/r812_assign_48b/case.ww | 4 + test/wcc/data/r812_assign_deref/case.ww | 4 + test/wcc/data/r812_assign_dot_source/case.ww | 5 + test/wcc/data/r812_assign_global/case.ww | 5 + test/wcc/data/r812_assign_match_bind/case.ww | 5 + test/wcc/data/r812_assign_nested/case.ww | 5 + test/wcc/data/r812_assign_odd_12b/case.ww | 4 + test/wcc/data/r812_assign_str_field/case.ww | 4 + test/wcc/data/r812_assign_tuple/case.ww | 3 + test/wcc/data/r812_global_structlit/case.ww | 5 + .../data/r812_lit_field_from_ident/case.ww | 5 + test/wcc/data/r812_neighbor_guard/case.ww | 4 + test/wcc/data/r814_def_2d_first/case.ww | 4 + test/wcc/data/r814_def_2d_last/case.ww | 4 + test/wcc/data/r814_def_int_i1/case.ww | 4 + test/wcc/data/r814_def_int_last/case.ww | 4 + test/wcc/data/r814_def_one_elem/case.ww | 4 + test/wcc/data/r814_def_u8_first/case.ww | 4 + test/wcc/data/r814_def_u8_last/case.ww | 4 + test/wcc/data/r814_nonarray_reject/case.ww | 4 + test/wcc/data/r815_bare_int/case.ww | 7 + test/wcc/data/r815_bare_int_neg/case.ww | 7 + test/wcc/data/r815_bare_uint/case.ww | 7 + test/wcc/data/r815_int_printf/case.ww | 6 + test/wcc/data/r815_mixed/case.ww | 7 + test/wcc/data/r815_uint_highbit/case.ww | 7 + test/wcc/data/r815_unaffected_i64/case.ww | 7 + test/wcc/data/r815_unaffected_str/case.ww | 7 + test/wcc/data/r816_explicit_len/case.ww | 4 + test/wcc/data/r816_infer_len/case.ww | 4 + test/wcc/data/r816_one_elem/case.ww | 4 + test/wcc/data/r816_sum/case.ww | 5 + test/wcc/data/r816_u8_len/case.ww | 4 + test/wcc/data/r817_neg_def_cap/case.ww | 4 + test/wcc/data/r817_neg_infer_cap/case.ww | 4 + test/wcc/data/r817_neg_let_global_cap/case.ww | 4 + test/wcc/data/r817_neg_local_cap/case.ww | 3 + test/wcc/data/r817_pos_def_len/case.ww | 4 + test/wcc/data/r817_pos_local_len/case.ww | 3 + test/wcc/data/r817_pos_local_ptr/case.ww | 3 + test/wcc/data/r818_def_global_ptr/case.ww | 4 + test/wcc/data/r818_let_global_ptr/case.ww | 4 + test/wcc/data/r818_local_ptr/case.ww | 3 + test/wcc/data/r819_def_str_content/case.ww | 4 + test/wcc/data/r819_def_str_elem0/case.ww | 4 + test/wcc/data/r819_def_str_elem1/case.ww | 4 + test/wcc/data/r819_def_str_len/case.ww | 4 + test/wcc/data/r819_def_str_multi/case.ww | 4 + test/wcc/data/r819_def_str_varbind/case.ww | 4 + test/wcc/data/r819_let_str_elem1/case.ww | 4 + test/wcc/data/r81_deflen_explicit/case.ww | 4 + test/wcc/data/r81_deflen_infer/case.ww | 4 + test/wcc/data/r81_deflen_one/case.ww | 4 + test/wcc/data/r81_deflen_sum/case.ww | 4 + test/wcc/data/r81_deflen_u8/case.ww | 4 + test/wcc/data/r820_def_two_overfill/case.ww | 4 + test/wcc/data/r820_def_zero_overfill/case.ww | 4 + test/wcc/data/r820_empty_zero/case.ww | 4 + test/wcc/data/r820_empty_zero_local/case.ww | 6 + test/wcc/data/r820_infer_ctl/case.ww | 4 + test/wcc/data/r820_infer_len/case.ww | 4 + test/wcc/data/r820_let_zero_overfill/case.ww | 4 + .../wcc/data/r820_local_zero_overfill/case.ww | 6 + test/wcc/data/r820_str_zero_overfill/case.ww | 4 + test/wcc/data/r820_void_local/case.ww | 8 + test/wcc/data/r821_def_arr_index/case.ww | 4 + test/wcc/data/r821_def_scalar_field/case.ww | 8 + test/wcc/data/r821_def_scalar_index/case.ww | 4 + test/wcc/data/r821_def_scalar_varbind/case.ww | 7 + test/wcc/data/r821_def_strarray_elem/case.ww | 4 + test/wcc/data/r821_let_scalar_index/case.ww | 4 + test/wcc/data/r821_local_index/case.ww | 6 + test/wcc/data/r821_param_index/case.ww | 4 + test/wcc/data/r822_ctrl_local/case.ww | 8 + test/wcc/data/r822_narrow_mix/case.ww | 6 + test/wcc/data/r822_three_word/case.ww | 6 + test/wcc/data/r822_two_field/case.ww | 6 + test/wcc/data/r823_scalar/case.ww | 4 + test/wcc/data/r823_struct_arg/case.ww | 6 + test/wcc/data/r823_struct_field/case.ww | 5 + test/wcc/data/r824_ctrl_expl/case.ww | 4 + test/wcc/data/r824_ctrl_int/case.ww | 4 + test/wcc/data/r824_infer_f32/case.ww | 4 + test/wcc/data/r824_infer_mul/case.ww | 4 + test/wcc/data/r824_infer_neg/case.ww | 4 + test/wcc/data/r824_infer_read/case.ww | 4 + test/wcc/data/r825_errfirst_3var/case.ww | 10 + test/wcc/data/r825_errfirst_must/case.ww | 10 + test/wcc/data/r825_errfirst_prop/case.ww | 13 ++ test/wcc/data/r825_errfirst_tuple/case.ww | 11 + test/wcc/data/r825_succfirst_ctrl/case.ww | 9 + .../data/r826_alias_tuple_ctrl_direct/case.ww | 7 + .../data/r826_alias_tuple_ctrl_typed/case.ww | 8 + test/wcc/data/r826_alias_tuple_fnarg/case.ww | 10 + test/wcc/data/r826_alias_tuple_init/case.ww | 8 + test/wcc/data/r826_alias_tuple_mixed/case.ww | 8 + test/wcc/data/r826_alias_tuple_ret/case.ww | 11 + test/wcc/data/r827_byte_eq_global/case.ww | 9 + test/wcc/data/r827_byte_eq_local/case.ww | 9 + test/wcc/data/r827_byte_eq_strlit/case.ww | 7 + test/wcc/data/r827_byte_ne_local/case.ww | 9 + .../wcc/data/r827_str_eq_diff_content/case.ww | 7 + test/wcc/data/r827_str_eq_dup_true/case.ww | 10 + test/wcc/data/r827_str_eq_empty/case.ww | 10 + test/wcc/data/r827_str_eq_self/case.ww | 8 + test/wcc/data/r827_str_ne_dup_false/case.ww | 10 + test/wcc/data/r828_arrlit_alias_exact/case.ww | 8 + .../r828_arrlit_alias_global_overlong/case.ww | 8 + .../r828_arrlit_alias_ret_overlong/case.ww | 13 ++ test/wcc/data/r828_arrlit_arg_exact/case.ww | 10 + .../wcc/data/r828_arrlit_arg_overlong/case.ww | 10 + test/wcc/data/r828_arrlit_ret_exact/case.ww | 10 + .../wcc/data/r828_arrlit_ret_overlong/case.ww | 11 + test/wcc/data/r829_def_str_len/case.ww | 6 + test/wcc/data/r829_def_str_ptr/case.ww | 6 + test/wcc/data/r829_def_str_return/case.ww | 7 + test/wcc/data/r829_local_slice_ctrl/case.ww | 8 + test/wcc/data/r829_local_str_ctrl/case.ww | 8 + test/wcc/data/r829_slice_global_idx/case.ww | 6 + test/wcc/data/r829_slice_global_len/case.ww | 6 + test/wcc/data/r829_str_global_len/case.ww | 6 + test/wcc/data/r829_str_global_ptr/case.ww | 6 + test/wcc/data/r830_call_base_u32/case.ww | 9 + test/wcc/data/r830_cast_base_u16/case.ww | 8 + test/wcc/data/r830_cast_base_u32/case.ww | 8 + test/wcc/data/r830_cast_base_u64_ctrl/case.ww | 8 + test/wcc/data/r830_cast_base_u8/case.ww | 8 + test/wcc/data/r830_slice_base_u16/case.ww | 8 + .../wcc/data/r830_typeassert_base_u16/case.ww | 10 + test/wcc/data/r831_match_call_result/case.ww | 4 + .../data/r831_match_field_local_int/case.ww | 7 + test/wcc/data/r831_match_field_ptr/case.ww | 5 + test/wcc/data/r831_match_field_remap/case.ww | 7 + test/wcc/data/r831_match_field_str/case.ww | 7 + test/wcc/data/r831_match_plain_local/case.ww | 6 + .../r832_tuple_array_exact_reject/case.ww | 3 + .../data/r832_tuple_array_overlong/case.ww | 3 + .../r832_tuple_nested_array_overlong/case.ww | 6 + .../r832_tuple_nested_exact_reject/case.ww | 3 + .../data/r832_tuple_nested_overlong/case.ww | 6 + .../r832_tuple_return_nested_overlong/case.ww | 4 + .../data/r832_tuple_return_overlong/case.ww | 4 + test/wcc/data/r832_tuple_scalar/case.ww | 3 + test/wcc/data/r832_tuple_slice/case.ww | 6 + test/wcc/data/r832_tuple_str/case.ww | 3 + .../wcc/data/r832_tuple_struct_reject/case.ww | 4 + test/wcc/data/r832_tuple_tagged/case.ww | 3 + .../data/r833_explicit_array_control/case.ww | 4 + .../data/r833_inferred_array_index/case.ww | 4 + test/wcc/data/r833_inferred_array_len/case.ww | 4 + test/wcc/data/r833_inferred_array_u8/case.ww | 4 + test/wcc/data/r835_union_alias_int/case.ww | 5 + test/wcc/data/r835_union_direct_int/case.ww | 5 + test/wcc/data/r835_union_enum_int/case.ww | 5 + .../data/r835_union_nested_int_reject/case.ww | 5 + .../wcc/data/r835_union_nested_source/case.ww | 5 + .../wcc/data/r835_union_no_int_reject/case.ww | 5 + .../data/r835_union_struct_int_reject/case.ww | 5 + .../r835_union_subset_cast_reject/case.ww | 9 + .../wcc/data/r835_union_subset_source/case.ww | 5 + test/wcc/data/r83_assign_directstr/case.ww | 6 + test/wcc/data/r83_assign_f64/case.ww | 5 + test/wcc/data/r83_assign_float_reject/case.ww | 5 + test/wcc/data/r83_assign_intbool/case.ww | 5 + test/wcc/data/r83_assign_nil_nullable/case.ww | 5 + test/wcc/data/r83_assign_nil_reject/case.ww | 5 + test/wcc/data/r83_assign_subset/case.ww | 6 + test/wcc/data/r83_gtag_barebool/case.ww | 5 + test/wcc/data/r83_gtag_bareint/case.ww | 5 + test/wcc/data/r83_gtag_barestr/case.ww | 5 + .../wcc/data/r83_gtag_boolcast_reject/case.ww | 5 + test/wcc/data/r83_gtag_intcast_reject/case.ww | 5 + test/wcc/data/r83_gtag_strcast/case.ww | 5 + test/wcc/data/r83_idcast_bool/case.ww | 12 ++ test/wcc/data/r83_idcast_control/case.ww | 12 ++ test/wcc/data/r83_idcast_int/case.ww | 12 ++ test/wcc/data/r83_tagarr_lit_reject/case.ww | 4 + test/wcc/data/r83_tagarr_narrow/case.ww | 4 + .../wcc/data/r83_tagarr_return_reject/case.ww | 5 + test/wcc/data/r83_tagarr_scalar/case.ww | 4 + test/wcc/data/r83_tagarr_slice/case.ww | 4 + test/wcc/data/r83_tagarr_str/case.ww | 4 + test/wcc/data/r83_tagarr_struct/case.ww | 5 + test/wcc/data/r83_tagarr_var_reject/case.ww | 4 + test/wcc/data/r845_tuple_one_comma/case.ww | 7 + test/wcc/data/r84_const_reassign/case.ww | 3 + test/wcc/data/r84_dupentry_def/case.ww | 7 + test/wcc/data/r84_dupentry_fn/case.ww | 7 + test/wcc/data/r84_dupentry_let/case.ww | 7 + .../data/r84_dupentry_single_nonmain/case.ww | 3 + test/wcc/data/r84_dupentry_type/case.ww | 7 + test/wcc/data/r84_dupfield_adj/case.ww | 4 + test/wcc/data/r84_dupfield_difftype/case.ww | 4 + test/wcc/data/r84_dupfield_distinct/case.ww | 4 + test/wcc/data/r84_dupfield_nonadj/case.ww | 4 + test/wcc/data/r84_let_reassign/case.ww | 3 + test/wcc/data/r84_matchglob_int/case.ww | 11 + test/wcc/data/r84_matchglob_local/case.ww | 11 + test/wcc/data/r84_matchglob_remap/case.ww | 11 + test/wcc/data/r84_matchglob_str/case.ww | 11 + test/wcc/data/r84_qualstruct_fields/case.ww | 15 ++ test/wcc/data/r84_qualstruct_nested/case.ww | 15 ++ .../data/r84_qualstruct_ret_assign/case.ww | 18 ++ test/wcc/data/r84_size_arith/case.ww | 7 + test/wcc/data/r84_size_let_size/case.ww | 6 + test/wcc/data/r84_size_let_u64/case.ww | 6 + test/wcc/data/r84_size_unannotated/case.ww | 6 + .../wcc/data/r84_tagstatic_array_bool/case.ww | 10 + .../data/r84_tagstatic_array_nonzero/case.ww | 10 + test/wcc/data/r84_tagstatic_array_set/case.ww | 11 + .../data/r84_tagstatic_plain_struct/case.ww | 5 + .../data/r84_tagstatic_struct_nonzero/case.ww | 11 + .../wcc/data/r84_tagstatic_struct_set/case.ww | 12 ++ .../wcc/data/r84_tagstatic_wide_array/case.ww | 4 + .../data/r84_tagstatic_wide_struct/case.ww | 5 + test/wcc/data/r84_tuple_two_comma/case.ww | 4 + test/wcc/data/r84_tuple_two_elem/case.ww | 4 + test/wcc/data/r84_voidless_nonvoid/case.ww | 4 + test/wcc/data/r84_voidless_tagged/case.ww | 4 + test/wcc/data/r84_voidless_value/case.ww | 4 + test/wcc/data/r84_voidless_void/case.ww | 4 + test/wcc/data/r85_enum_dup_member/case.ww | 4 + test/wcc/data/r85_enum_fwd_ref/case.ww | 4 + test/wcc/data/r85_index_alias/case.ww | 8 + test/wcc/data/r85_index_bool/case.ww | 7 + test/wcc/data/r85_index_enum/case.ww | 7 + test/wcc/data/r85_index_float/case.ww | 7 + test/wcc/data/r85_index_int/case.ww | 7 + test/wcc/data/r85_index_ptr/case.ww | 7 + test/wcc/data/r85_index_str/case.ww | 7 + test/wcc/data/r85_index_uint/case.ww | 7 + test/wcc/data/r85_varbody_bare/case.ww | 4 + test/wcc/data/r85_varbody_cvar/case.ww | 4 + test/wcc/data/r85_varbody_extern/case.ww | 4 + test/wcc/data/r85_varbody_hare/case.ww | 4 + .../wcc/data/r913_def_mangle_exported/case.ww | 5 + test/wcc/data/r913_def_mangle_local/case.ww | 5 + test/wcc/data/r913_def_mangle_multi/case.ww | 7 + test/wcc/data/r913_def_mangle_u64/case.ww | 5 + test/wcc/data/r915_arr_local_control/case.ww | 7 + test/wcc/data/r915_arr_local_nonzero/case.ww | 8 + test/wcc/data/r920_arrfit_bare_u32/case.ww | 4 + test/wcc/data/r920_arrfit_bare_u64/case.ww | 4 + test/wcc/data/r920_arrfit_bare_u8/case.ww | 4 + test/wcc/data/r920_arrfit_i8_boundary/case.ww | 4 + test/wcc/data/r920_arrfit_i8_over/case.ww | 4 + test/wcc/data/r920_arrfit_negative_u8/case.ww | 4 + test/wcc/data/r920_arrfit_nonfold/case.ww | 7 + .../wcc/data/r920_arrfit_nonfold_wide/case.ww | 5 + test/wcc/data/r920_arrfit_over_256/case.ww | 4 + test/wcc/data/r920_arrfit_over_300/case.ww | 4 + test/wcc/data/r920_arrfit_signed/case.ww | 4 + test/wcc/data/r920_arrfit_str_u8/case.ww | 4 + test/wcc/data/r920_arrfit_typed/case.ww | 4 + test/wcc/data/r920_arrfit_u8_max/case.ww | 4 + test/wcc/data/r921_amp_arr_index/case.ww | 8 + test/wcc/data/r921_amp_def_array/case.ww | 5 + test/wcc/data/r921_amp_def_float/case.ww | 5 + test/wcc/data/r921_amp_def_int/case.ww | 5 + test/wcc/data/r921_amp_def_struct/case.ww | 6 + .../data/r921_amp_float_def_reject/case.ww | 5 + test/wcc/data/r921_amp_let_struct/case.ww | 6 + test/wcc/data/r921_amp_str_def_reject/case.ww | 5 + test/wcc/data/r921_amp_xmod_def/case.ww | 8 + test/wcc/data/r921_amp_xmod_fn/case.ww | 7 + test/wcc/data/r921_amp_xmod_let/case.ww | 8 + test/wcc/data/r921_amp_xmod_scalar/case.ww | 7 + .../data/r926_sret_reject_call_arg/case.ww | 19 ++ test/wcc/data/r926_sret_reject_global/case.ww | 17 ++ .../r926_sret_reject_struct_field/case.ww | 17 ++ .../wcc/data/r926_sret_reject_tryprop/case.ww | 16 ++ test/wcc/data/r926_sret_reject_tryunw/case.ww | 12 ++ .../data/r926_sret_reject_typetest/case.ww | 11 + .../r926_sret_reject_widen_forward/case.ww | 16 ++ test/wcc/data/r926_tagscr_idx_sret/case.ww | 24 +++ test/wcc/data/r926_tagscr_large_small/case.ww | 29 +++ test/wcc/data/r926_tagscr_same_twice/case.ww | 31 +++ test/wcc/data/r926_tagscr_single/case.ww | 17 ++ test/wcc/data/r926_tagscr_small_large/case.ww | 22 ++ .../r929_memarg_reject_call_overflow/case.ww | 19 ++ .../data/r929_memarg_reject_callsrc/case.ww | 16 ++ .../r929_memarg_reject_param_overflow/case.ww | 19 ++ .../data/r929_memarg_reject_variadic/case.ww | 12 ++ test/wcc/data/r930_free_alloc/case.ww | 10 + test/wcc/data/r930_free_call_effect/case.ww | 12 ++ test/wcc/data/r930_free_field/case.ww | 11 + test/wcc/data/r930_free_local/case.ww | 10 + test/wcc/data/r930_free_loop/case.ww | 15 ++ .../wcc/data/r930_struct_tuple_header/case.ww | 11 + .../wcc/data/r930_struct_tuple_single/case.ww | 10 + test/wcc/data/r940_global_sret_assign/case.ww | 16 ++ .../data/r940_global_sret_branched/case.ww | 16 ++ .../r940_global_sret_local_assign/case.ww | 16 ++ .../data/r940_global_sret_local_init/case.ww | 15 ++ .../wcc/data/r940_global_sret_pointer/case.ww | 18 ++ test/wcc/data/r940_str_forrange_arg/case.ww | 16 ++ test/wcc/data/r940_str_forrange_expr/case.ww | 13 ++ .../data/r944_alias_emit_slcstr_2lvl/case.ww | 9 + .../data/r944_alias_emit_slctag_2lvl/case.ww | 9 + .../case.ww | 9 + .../data/r946_structparam_f64f64_arg/case.ww | 9 + .../data/r946_structparam_f64i64_arg/case.ww | 9 + .../data/r946_structparam_i64f64_arg/case.ww | 9 + .../data/r946_structparam_i64i64_arg/case.ww | 9 + .../case.ww | 11 + .../case.ww | 9 + .../data/r946_structret_f64f64_ret/case.ww | 9 + .../data/r946_structret_f64i32_ret/case.ww | 9 + .../data/r946_structret_i64f64_ret/case.ww | 9 + .../data/r946_structret_i64i64_ret/case.ww | 9 + test/wcc/data/r948_selfimport/case.ww | 4 + .../data/r949_errtype_eq_invalid_i32/case.ww | 9 + .../data/r949_errtype_lt_invalid_i32/case.ww | 9 + .../wcc/data/r949_errtype_neq_int_int/case.ww | 8 + .../data/r949_errtype_neq_invalid_i32/case.ww | 9 + .../data/r949_errtype_neq_same_error/case.ww | 9 + .../data/r949_intbinop_alias_vs_base/case.ww | 9 + .../data/r949_intbinop_enum_flag_or/case.ww | 7 + .../wcc/data/r949_intbinop_i32_lt_i32/case.ww | 8 + .../wcc/data/r949_intbinop_i32_lt_len/case.ww | 8 + .../data/r949_intbinop_int_and_i32/case.ww | 9 + .../data/r949_intbinop_int_cast_len/case.ww | 8 + .../wcc/data/r949_intbinop_int_lt_i64/case.ww | 8 + .../wcc/data/r949_intbinop_int_lt_int/case.ww | 8 + .../data/r949_intbinop_int_lt_len_i32/case.ww | 8 + .../data/r949_intbinop_int_lt_uint/case.ww | 8 + .../data/r949_intbinop_rune_lit_arith/case.ww | 8 + test/wcc/data/r951_defdim_m4095_end/case.ww | 10 + test/wcc/data/r951_defdim_m4_belem/case.ww | 10 + test/wcc/data/r951_defdim_m4_end/case.ww | 10 + test/wcc/data/r951_defdim_twoafter/case.ww | 10 + .../wcc/data/r951_defdim_xmod_pathmax/case.ww | 11 + .../data/r953_f64crossmod_x101_neg/case.ww | 6 + .../r953_f64crossmod_x101_trunc_neg/case.ww | 6 + .../r953_f64crossmod_x101_trunc_pos/case.ww | 6 + .../r953_f64crossmod_x98_nested_arg/case.ww | 7 + .../r953_f64crossmod_x98_xmm_pressure/case.ww | 7 + .../r956_modqual_mq_f64_i64_destr/case.ww | 15 ++ .../r956_modqual_mq_f64_str_destr/case.ww | 15 ++ .../r956_modqual_mq_i64_bool_destr/case.ww | 14 ++ .../r956_modqual_mq_nondestr_shadow/case.ww | 12 ++ test/wcc/data/r957_abort_bare/case.ww | 6 + test/wcc/data/r957_abort_msg/case.ww | 6 + test/wcc/data/r957_assert_fail_msg/case.ww | 6 + test/wcc/data/r957_assert_fail_nomsg/case.ww | 6 + .../wcc/data/r957_assert_imported_mod/case.ww | 9 + test/wcc/data/r957_assert_pass/case.ww | 7 + .../r957_assert_reject_abort_arity/case.ww | 6 + .../r957_assert_reject_abort_nonstr/case.ww | 6 + .../r957_assert_reject_assert_arity/case.ww | 6 + .../data/r957_assert_reject_nonbool/case.ww | 6 + .../data/r957_assert_shadow_samemod/case.ww | 8 + test/wcc/data/r957_assert_shadow_xmod/case.ww | 9 + test/wcc/data/r961_neg_align_of/case.ww | 3 + .../data/r961_neg_size_nested_array/case.ww | 3 + .../data/r961_neg_size_nested_struct/case.ww | 3 + test/wcc/data/r961_neg_size_of/case.ww | 3 + test/wcc/data/r961_neg_size_tagged/case.ww | 3 + test/wcc/data/r961_neg_size_tuple/case.ww | 3 + test/wcc/data/r961_pos_ptr_opaque/case.ww | 11 + test/wcc/data/r961_pos_slice_opaque/case.ww | 8 + .../case.ww | 10 + .../r978_compound_deref_div_unsigned/case.ww | 10 + .../case.ww | 10 + .../case.ww | 8 + .../case.ww | 8 + .../case.ww | 8 + .../case.ww | 8 + .../r978_i16_div_int16_min_by_two/case.ww | 8 + .../data/r978_i16_div_neg_dividend/case.ww | 8 + .../data/r978_i16_mod_neg_dividend/case.ww | 8 + .../r978_i32_div_int32_min_by_two/case.ww | 8 + .../data/r978_i32_div_neg_dividend/case.ww | 8 + .../r978_i32_mod_int32_min_by_two/case.ww | 8 + .../data/r978_i32_mod_neg_dividend/case.ww | 8 + .../data/r978_i64_div_both_negative/case.ww | 8 + .../data/r978_i64_div_both_positive/case.ww | 8 + .../r978_i64_div_int64_min_by_two/case.ww | 8 + .../data/r978_i64_div_neg_dividend/case.ww | 8 + .../wcc/data/r978_i64_div_neg_divisor/case.ww | 8 + .../data/r978_i64_mod_both_negative/case.ww | 8 + .../data/r978_i64_mod_both_positive/case.ww | 8 + .../r978_i64_mod_int64_min_by_two/case.ww | 8 + .../data/r978_i64_mod_neg_dividend/case.ww | 8 + .../wcc/data/r978_i64_mod_neg_divisor/case.ww | 8 + .../data/r978_i8_div_int8_min_by_two/case.ww | 8 + .../wcc/data/r978_i8_div_neg_dividend/case.ww | 8 + .../wcc/data/r978_i8_mod_neg_dividend/case.ww | 8 + .../case.ww | 8 + .../data/r978_u16_div_high_bit_set/case.ww | 8 + .../data/r978_u32_div_high_bit_set/case.ww | 8 + .../data/r978_u32_mod_high_bit_set/case.ww | 8 + .../data/r978_u64_div_high_bit_set/case.ww | 8 + .../data/r978_u64_mod_high_bit_set/case.ww | 8 + .../wcc/data/r978_u8_div_high_bit_set/case.ww | 8 + test/wcc/data/r989_ampfncollide_loud/case.ww | 12 ++ .../wcc/data/r989_ampfncollide_silent/case.ww | 12 ++ .../data/r989_callarg_array_into_ptr/case.ww | 4 + .../data/r989_callarg_fn_addr_reject/case.ww | 6 + test/wcc/data/r989_callarg_fn_bare/case.ww | 6 + test/wcc/data/r989_callarg_fn_cast/case.ww | 6 + .../data/r989_callarg_fn_match_sig/case.ww | 4 + .../data/r989_callarg_fn_mismatch_sig/case.ww | 4 + .../r989_callarg_let_slice_scalar/case.ww | 3 + .../data/r989_callarg_scalar_control/case.ww | 4 + .../r989_callarg_scalar_for_slice/case.ww | 4 + .../data/r989_callarg_slice_borrow/case.ww | 8 + .../data/r989_callarg_spread_accept/case.ww | 5 + .../wcc/data/r989_callarg_str_for_int/case.ww | 4 + test/wcc/data/r989_cata_arrlen_const/case.ww | 3 + .../wcc/data/r989_cata_arrlen_runtime/case.ww | 3 + .../r989_cata_break_continue_control/case.ww | 11 + .../data/r989_cata_break_else_outside/case.ww | 6 + test/wcc/data/r989_cata_break_outside/case.ww | 3 + .../data/r989_cata_continue_outside/case.ww | 3 + test/wcc/data/r989_cata_int_ops/case.ww | 7 + test/wcc/data/r989_cata_massign_alias/case.ww | 5 + .../wcc/data/r989_cata_massign_scalar/case.ww | 4 + test/wcc/data/r989_cata_massign_tuple/case.ww | 4 + .../data/r989_cata_match_mixed_yield/case.ww | 8 + .../data/r989_cata_match_same_yield/case.ww | 8 + test/wcc/data/r989_cata_size_localvar/case.ww | 3 + test/wcc/data/r989_cata_size_type/case.ww | 3 + test/wcc/data/r989_cata_str_bitand/case.ww | 3 + test/wcc/data/r989_cata_str_lt/case.ww | 3 + test/wcc/data/r989_cata_str_plus/case.ww | 3 + test/wcc/data/r989_cata_tilde_str/case.ww | 3 + test/wcc/data/r989_cata_try_single/case.ww | 5 + .../r989_cata_try_spread_multisuccess/case.ww | 6 + test/wcc/data/r989_cata_tuple_match/case.ww | 3 + .../wcc/data/r989_cata_tuple_overlong/case.ww | 7 + test/wcc/data/r989_cata_tuple_short/case.ww | 7 + .../data/r989_declns_builtin_redecl/case.ww | 10 + test/wcc/data/r989_declns_dup_def/case.ww | 5 + test/wcc/data/r989_declns_dup_fn/case.ww | 5 + test/wcc/data/r989_declns_dup_let/case.ww | 5 + test/wcc/data/r989_defercap_17/case.ww | 11 + test/wcc/data/r989_defercap_at_32/case.ww | 15 ++ test/wcc/data/r989_defercap_over_33/case.ww | 16 ++ test/wcc/data/r989_fmt_idx_2147483648/case.ww | 12 ++ test/wcc/data/r989_fmt_idx_2147483649/case.ww | 12 ++ test/wcc/data/r989_fmt_idx_9999999999/case.ww | 12 ++ .../wcc/data/r989_fmt_prec_2147483647/case.ww | 12 ++ .../data/r989_fmt_width_2147483648/case.ww | 12 ++ .../data/r989_intoverflow_dec_huge/case.ww | 7 + .../r989_intoverflow_dec_overflow/case.ww | 7 + .../r989_intoverflow_hex_overflow/case.ww | 7 + .../r989_intoverflow_u64max_dec_ok/case.ww | 7 + .../r989_intoverflow_u64max_hex_ok/case.ww | 7 + .../case.ww | 8 + .../wcc/data/r989_libprecond_u32n_one/case.ww | 9 + .../data/r989_libprecond_u32n_valid/case.ww | 9 + .../wcc/data/r989_libprecond_u64n_one/case.ww | 9 + .../data/r989_libprecond_u64n_valid/case.ww | 9 + test/wcc/data/r989_loopcap_at_16/case.ww | 13 ++ test/wcc/data/r989_loopcap_over_17/case.ww | 13 ++ test/wcc/data/r989_m1union_all_arms/case.ww | 25 +++ test/wcc/data/r989_m1union_done/case.ww | 18 ++ test/wcc/data/r989_m1union_invalid/case.ww | 17 ++ test/wcc/data/r989_m1union_more/case.ww | 17 ++ test/wcc/data/r989_m1union_rune/case.ww | 17 ++ test/wcc/data/r989_nullableglobal_as/case.ww | 7 + .../data/r989_nullableglobal_inline/case.ww | 6 + test/wcc/data/r989_nullableglobal_is/case.ww | 7 + .../data/r989_nullableglobal_match/case.ww | 7 + .../data/r989_nullableglobal_nil_init/case.ww | 7 + .../case.ww | 5 + .../case.ww | 4 + .../r989_nullableglobal_void_init/case.ww | 7 + .../r989_tagderef_ampeq_tagged_deref/case.ww | 8 + .../case.ww | 8 + .../case.ww | 8 + .../case.ww | 8 + .../case.ww | 8 + .../r989_tagderef_pipeeq_tagged_deref/case.ww | 8 + .../r989_tagderef_plain_store_control/case.ww | 9 + .../r989_tagderef_pluseq_tagged_deref/case.ww | 8 + .../case.ww | 8 + .../r989_tagderef_scalar_int_control/case.ww | 3 + .../r989_tagderef_scalar_u8_control/case.ww | 3 + .../case.ww | 8 + .../r989_tagderef_stareq_tagged_deref/case.ww | 8 + .../data/r989_tagplace_gident_pluseq/case.ww | 4 + .../data/r989_tagplace_gidx_careteq/case.ww | 4 + .../data/r989_tagplace_gidx_pluseq/case.ww | 4 + .../data/r989_tagplace_gidx_stareq/case.ww | 4 + .../data/r989_tagplace_ident_careteq/case.ww | 3 + .../data/r989_tagplace_ident_lshifteq/case.ww | 3 + .../data/r989_tagplace_ident_minuseq/case.ww | 3 + .../data/r989_tagplace_ident_pipeeq/case.ww | 3 + .../data/r989_tagplace_ident_pluseq/case.ww | 3 + .../data/r989_tagplace_ident_slasheq/case.ww | 3 + .../data/r989_tagplace_ident_stareq/case.ww | 3 + .../data/r989_tagplace_lidx_lshifteq/case.ww | 7 + .../data/r989_tagplace_lidx_minuseq/case.ww | 7 + .../data/r989_tagplace_lidx_pipeeq/case.ww | 7 + .../data/r989_tagplace_lidx_pluseq/case.ww | 7 + .../r989_tagplace_plain_gidx_control/case.ww | 8 + .../r989_tagplace_plain_ident_control/case.ww | 8 + .../r989_tagplace_plain_lidx_control/case.ww | 8 + .../case.ww | 3 + .../case.ww | 3 + .../r989_tagsubset_concrete_spread/case.ww | 6 + .../r989_tagsubset_flatten_subset/case.ww | 6 + .../data/r989_tagsubset_nested_wrap/case.ww | 16 ++ .../data/r989_tagsubset_slice_subset/case.ww | 6 + .../r989_tagsubset_spread_named_case/case.ww | 11 + .../data/r989_tagsubset_spread_wider/case.ww | 7 + .../data/r989_tagsubset_wide_narrow/case.ww | 6 + .../wcc/data/r989_trycallcollide_call/case.ww | 13 ++ .../data/r989_trycallcollide_control/case.ww | 12 ++ .../data/r989_unknowndecl_clean_ok/case.ww | 4 + .../data/r989_unknowndecl_decls_ok/case.ww | 5 + .../r989_unknowndecl_misspelled_fn/case.ww | 4 + .../data/r989_unknowndecl_stray_block/case.ww | 4 + .../r989_unknowndecl_stray_idents/case.ww | 4 + 1119 files changed, 9847 insertions(+) create mode 100644 test/wcc/data/alias_fsarg2_bound/case.ww create mode 100644 test/wcc/data/arrlit_slice_assign_named_accept/case.ww create mode 100644 test/wcc/data/arrlit_slice_reject_assign/case.ww create mode 100644 test/wcc/data/r56_cast_i16_high_bits/case.ww create mode 100644 test/wcc/data/r56_cast_i16_low_negative/case.ww create mode 100644 test/wcc/data/r56_cast_i32_high_bits/case.ww create mode 100644 test/wcc/data/r56_cast_i32_low_negative/case.ww create mode 100644 test/wcc/data/r56_cast_i32_wrap_positive/case.ww create mode 100644 test/wcc/data/r56_cast_i8_high_bits/case.ww create mode 100644 test/wcc/data/r56_cast_i8_low_negative/case.ww create mode 100644 test/wcc/data/r56_cast_i8_positive_max/case.ww create mode 100644 test/wcc/data/r56_cast_i8bang_signed/case.ww create mode 100644 test/wcc/data/r56_cast_u8bang_unsigned/case.ww create mode 100644 test/wcc/data/r56_def_negative_i32/case.ww create mode 100644 test/wcc/data/r56_def_negative_i64/case.ww create mode 100644 test/wcc/data/r56_def_positive_i32/case.ww create mode 100644 test/wcc/data/r56_def_tilde_i32/case.ww create mode 100644 test/wcc/data/r56_def_tilde_u32/case.ww create mode 100644 test/wcc/data/r56_def_unary_plus_i32/case.ww create mode 100644 test/wcc/data/r56_strarg_local_chain/case.ww create mode 100644 test/wcc/data/r56_strarg_ptr_chain/case.ww create mode 100644 test/wcc/data/r56_strarg_ptr_field/case.ww create mode 100644 test/wcc/data/r630_global_address/case.ww create mode 100644 test/wcc/data/r630_global_assign/case.ww create mode 100644 test/wcc/data/r630_global_compound/case.ww create mode 100644 test/wcc/data/r630_global_f32_literal/case.ww create mode 100644 test/wcc/data/r630_global_f64_arith/case.ww create mode 100644 test/wcc/data/r630_global_f64_literal/case.ww create mode 100644 test/wcc/data/r630_global_f64_reassign/case.ww create mode 100644 test/wcc/data/r630_global_f64_zero_init/case.ww create mode 100644 test/wcc/data/r630_global_narrow_field/case.ww create mode 100644 test/wcc/data/r630_global_read/case.ww create mode 100644 test/wcc/data/r630_global_slice_cap_raw/case.ww create mode 100644 test/wcc/data/r630_global_slice_reassign/case.ww create mode 100644 test/wcc/data/r630_global_slice_zero_init/case.ww create mode 100644 test/wcc/data/r630_global_str_literal/case.ww create mode 100644 test/wcc/data/r630_global_str_literal_bytes/case.ww create mode 100644 test/wcc/data/r630_global_str_reassign/case.ww create mode 100644 test/wcc/data/r630_global_str_zero_init/case.ww create mode 100644 test/wcc/data/r630_global_struct_compound/case.ww create mode 100644 test/wcc/data/r630_global_struct_fields/case.ww create mode 100644 test/wcc/data/r630_global_tagged_i64/case.ww create mode 100644 test/wcc/data/r630_global_tagged_str/case.ww create mode 100644 test/wcc/data/r630_global_tagged_void/case.ww create mode 100644 test/wcc/data/r630_global_u64_read/case.ww create mode 100644 test/wcc/data/r630_global_zero_init/case.ww create mode 100644 test/wcc/data/r630_local_slice_reassign/case.ww create mode 100644 test/wcc/data/r630_local_slice_return/case.ww create mode 100644 test/wcc/data/r650_alias_local_write_ptr_read/case.ww create mode 100644 test/wcc/data/r650_alias_ptr_write_local_read/case.ww create mode 100644 test/wcc/data/r650_global_root/case.ww create mode 100644 test/wcc/data/r650_i32_leaf/case.ww create mode 100644 test/wcc/data/r650_ptr_2deep_read/case.ww create mode 100644 test/wcc/data/r650_ptr_2deep_write/case.ww create mode 100644 test/wcc/data/r650_ptr_3deep/case.ww create mode 100644 test/wcc/data/r650_ptr_f64_leaf/case.ww create mode 100644 test/wcc/data/r650_ptr_i16_leaf/case.ww create mode 100644 test/wcc/data/r650_ptr_i16_negative/case.ww create mode 100644 test/wcc/data/r650_ptr_i32_leaf/case.ww create mode 100644 test/wcc/data/r650_ptr_i32_negative/case.ww create mode 100644 test/wcc/data/r650_ptr_i8_negative/case.ww create mode 100644 test/wcc/data/r650_ptr_local/case.ww create mode 100644 test/wcc/data/r650_ptr_single_read/case.ww create mode 100644 test/wcc/data/r650_ptr_single_write/case.ww create mode 100644 test/wcc/data/r650_ptr_slice_pseudo/case.ww create mode 100644 test/wcc/data/r650_ptr_str_leaf/case.ww create mode 100644 test/wcc/data/r650_ptr_u8_leaf/case.ww create mode 100644 test/wcc/data/r650_slice_field_pseudo/case.ww create mode 100644 test/wcc/data/r650_u32_leaf/case.ww create mode 100644 test/wcc/data/r650_u8_leaf/case.ww create mode 100644 test/wcc/data/r650_value_2deep_read_write/case.ww create mode 100644 test/wcc/data/r650_value_3deep/case.ww create mode 100644 test/wcc/data/r660_alias_i8_cast_narrow/case.ww create mode 100644 test/wcc/data/r660_alias_i8_field/case.ww create mode 100644 test/wcc/data/r660_alias_u8_field/case.ww create mode 100644 test/wcc/data/r660_bang_i32_deref_widen/case.ww create mode 100644 test/wcc/data/r660_bool_field_load/case.ww create mode 100644 test/wcc/data/r660_chained_i16_leaf/case.ww create mode 100644 test/wcc/data/r660_chained_i8_leaf/case.ww create mode 100644 test/wcc/data/r660_deref_compound_u32/case.ww create mode 100644 test/wcc/data/r660_i16_field_load/case.ww create mode 100644 test/wcc/data/r660_i16_out_param_negative/case.ww create mode 100644 test/wcc/data/r660_i32_compound_after_deref/case.ww create mode 100644 test/wcc/data/r660_i32_field_load/case.ww create mode 100644 test/wcc/data/r660_i32_global_negative_deref/case.ww create mode 100644 test/wcc/data/r660_i32_out_param_negative/case.ww create mode 100644 test/wcc/data/r660_i64_out_param_negative/case.ww create mode 100644 test/wcc/data/r660_i8_field_load/case.ww create mode 100644 test/wcc/data/r660_i8_out_param_negative/case.ww create mode 100644 test/wcc/data/r660_u16_field_load/case.ww create mode 100644 test/wcc/data/r660_u32_field_load/case.ww create mode 100644 test/wcc/data/r660_u8_field_load/case.ww create mode 100644 test/wcc/data/r670_f64_9args/case.ww create mode 100644 test/wcc/data/r670_i64_7args/case.ww create mode 100644 test/wcc/data/r670_i64_7args_signed/case.ww create mode 100644 test/wcc/data/r670_i64_8args/case.ww create mode 100644 test/wcc/data/r670_mixed_5i_3f_4i/case.ww create mode 100644 test/wcc/data/r670_slice_purestack_arg7/case.ww create mode 100644 test/wcc/data/r670_slice_straddle_arg5/case.ww create mode 100644 test/wcc/data/r670_slice_straddle_arg6/case.ww create mode 100644 test/wcc/data/r670_slice_straddle_then_scalar/case.ww create mode 100644 test/wcc/data/r670_str_inreg_arg5/case.ww create mode 100644 test/wcc/data/r670_str_purestack_arg7/case.ww create mode 100644 test/wcc/data/r670_str_straddle_arg6/case.ww create mode 100644 test/wcc/data/r670_variadic_full_in_reg/case.ww create mode 100644 test/wcc/data/r670_variadic_purestack/case.ww create mode 100644 test/wcc/data/r670_variadic_straddle/case.ww create mode 100644 test/wcc/data/r671_unknown_attr_reject/case.ww create mode 100644 test/wcc/data/r680_ptr_arr_dyn_idx/case.ww create mode 100644 test/wcc/data/r680_ptr_arr_i32_field/case.ww create mode 100644 test/wcc/data/r680_ptr_arr_i8_signed/case.ww create mode 100644 test/wcc/data/r680_ptr_arr_str_field/case.ww create mode 100644 test/wcc/data/r680_ptr_arr_u8_field/case.ww create mode 100644 test/wcc/data/r680_val_arr_i32_field/case.ww create mode 100644 test/wcc/data/r680_val_arr_str_field/case.ww create mode 100644 test/wcc/data/r680_val_arr_u8_field/case.ww create mode 100644 test/wcc/data/r681_ptr_arr_compound_plus/case.ww create mode 100644 test/wcc/data/r681_ptr_arr_dyn_idx_write/case.ww create mode 100644 test/wcc/data/r681_ptr_arr_i32_write/case.ww create mode 100644 test/wcc/data/r681_ptr_arr_i8_signed_write/case.ww create mode 100644 test/wcc/data/r681_ptr_arr_str_write/case.ww create mode 100644 test/wcc/data/r681_ptr_arr_u8_write/case.ww create mode 100644 test/wcc/data/r681_slice_field_distinct_bytes/case.ww create mode 100644 test/wcc/data/r681_slice_field_ptr_write/case.ww create mode 100644 test/wcc/data/r681_slice_field_value_write/case.ww create mode 100644 test/wcc/data/r681_str_field_value_write_regression/case.ww create mode 100644 test/wcc/data/r681_struct_field_value_write_16b/case.ww create mode 100644 test/wcc/data/r681_struct_field_value_write_24b/case.ww create mode 100644 test/wcc/data/r681_struct_field_value_write_32b/case.ww create mode 100644 test/wcc/data/r681_struct_field_value_write_nested_chain/case.ww create mode 100644 test/wcc/data/r681_struct_field_value_write_ragged_tail_12b/case.ww create mode 100644 test/wcc/data/r681_struct_field_value_write_via_ptr/case.ww create mode 100644 test/wcc/data/r681_tagged_field_value_write_local_mark_canary/case.ww create mode 100644 test/wcc/data/r681_tagged_field_value_write_str_variant_mark_canary/case.ww create mode 100644 test/wcc/data/r681_tagged_field_value_write_via_ptr_mark_canary/case.ww create mode 100644 test/wcc/data/r681_val_arr_compound_plus/case.ww create mode 100644 test/wcc/data/r681_val_arr_compound_xor/case.ww create mode 100644 test/wcc/data/r681_val_arr_f64_write/case.ww create mode 100644 test/wcc/data/r681_val_arr_i32_write/case.ww create mode 100644 test/wcc/data/r681_val_arr_i8_signed_write/case.ww create mode 100644 test/wcc/data/r681_val_arr_str_write/case.ww create mode 100644 test/wcc/data/r681_val_arr_u8_write/case.ww create mode 100644 test/wcc/data/r690_amp_dot_addr_eq_read/case.ww create mode 100644 test/wcc/data/r690_amp_dot_chain_2deep/case.ww create mode 100644 test/wcc/data/r690_amp_dot_chain_3deep/case.ww create mode 100644 test/wcc/data/r690_amp_dot_ptr_field/case.ww create mode 100644 test/wcc/data/r690_amp_dot_single_global/case.ww create mode 100644 test/wcc/data/r690_amp_dot_single_local/case.ww create mode 100644 test/wcc/data/r690_amp_dot_slice_cap_width_stress/case.ww create mode 100644 test/wcc/data/r690_amp_dot_slice_field_len_width/case.ww create mode 100644 test/wcc/data/r690_amp_dot_slice_field_ptr/case.ww create mode 100644 test/wcc/data/r690_amp_dot_slice_len_width_stress/case.ww create mode 100644 test/wcc/data/r690_amp_dot_slice_len_writethrough/case.ww create mode 100644 test/wcc/data/r690_amp_dot_slice_ptr_writethrough/case.ww create mode 100644 test/wcc/data/r690_amp_dot_str_len_width_stress/case.ww create mode 100644 test/wcc/data/r691_direct_slice_arg_baseline/case.ww create mode 100644 test/wcc/data/r691_local_root_chained_slice_arg/case.ww create mode 100644 test/wcc/data/r691_local_root_slice_arg/case.ww create mode 100644 test/wcc/data/r691_ptr_field_chained_slice_arg/case.ww create mode 100644 test/wcc/data/r691_ptr_root_chained_slice_arg/case.ww create mode 100644 test/wcc/data/r691_ptr_root_slice_arg/case.ww create mode 100644 test/wcc/data/r691_ptr_root_slice_mutate_ptr/case.ww create mode 100644 test/wcc/data/r691_ptr_root_slice_return/case.ww create mode 100644 test/wcc/data/r691_ptr_root_slice_with_neighbor/case.ww create mode 100644 test/wcc/data/r693_dot_plain_i32/case.ww create mode 100644 test/wcc/data/r693_dot_plain_slice_ptr/case.ww create mode 100644 test/wcc/data/r693_dot_plain_str/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_global_slice/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_letcopy_i64/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_letcopy_slice/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_local_i64/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_local_slice/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_local_str/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_ptr_i64/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_ptr_slice/case.ww create mode 100644 test/wcc/data/r693_dot_tagged_ptr_str/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_i32/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_i64/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_i64_str_tail/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_i64_tail/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_letinit_i64/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_negative_i64/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_nested_unary_i64/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_plus_i64/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_tilde_i64/case.ww create mode 100644 test/wcc/data/r694_tagged_intlit_u8_head/case.ww create mode 100644 test/wcc/data/r695_match_bind_i32_control/case.ww create mode 100644 test/wcc/data/r695_match_bind_mixed_struct/case.ww create mode 100644 test/wcc/data/r695_match_bind_pair3/case.ww create mode 100644 test/wcc/data/r695_match_bind_pair_letinit/case.ww create mode 100644 test/wcc/data/r695_match_bind_slice_control/case.ww create mode 100644 test/wcc/data/r695_match_bind_str_control/case.ww create mode 100644 test/wcc/data/r695_match_bind_wide4_letinit/case.ww create mode 100644 test/wcc/data/r701_field_chain_call/case.ww create mode 100644 test/wcc/data/r701_field_chain_lit/case.ww create mode 100644 test/wcc/data/r701_field_global_call/case.ww create mode 100644 test/wcc/data/r701_field_local_call/case.ww create mode 100644 test/wcc/data/r701_field_local_lit/case.ww create mode 100644 test/wcc/data/r701_field_ptr_call/case.ww create mode 100644 test/wcc/data/r701_field_ptr_lit/case.ww create mode 100644 test/wcc/data/r701_five_i32_let_call/case.ww create mode 100644 test/wcc/data/r701_five_i32_reassign_lit/case.ww create mode 100644 test/wcc/data/r701_mix_let_call/case.ww create mode 100644 test/wcc/data/r701_one_i64_let_call/case.ww create mode 100644 test/wcc/data/r701_one_i64_let_lit/case.ww create mode 100644 test/wcc/data/r701_one_i64_reassign_call/case.ww create mode 100644 test/wcc/data/r701_one_i64_reassign_lit/case.ww create mode 100644 test/wcc/data/r701_pair_i64_let_call/case.ww create mode 100644 test/wcc/data/r701_pair_i64_reassign_lit/case.ww create mode 100644 test/wcc/data/r701_trip_i64_let_call/case.ww create mode 100644 test/wcc/data/r701_trip_i64_reassign_lit/case.ww create mode 100644 test/wcc/data/r702_deref_read_i32/case.ww create mode 100644 test/wcc/data/r702_deref_read_i64/case.ww create mode 100644 test/wcc/data/r702_deref_read_str/case.ww create mode 100644 test/wcc/data/r702_deref_roundtrip/case.ww create mode 100644 test/wcc/data/r702_deref_write_i32/case.ww create mode 100644 test/wcc/data/r702_deref_write_i64/case.ww create mode 100644 test/wcc/data/r702_deref_write_str/case.ww create mode 100644 test/wcc/data/r703_nested_assign/case.ww create mode 100644 test/wcc/data/r703_nested_let_i32/case.ww create mode 100644 test/wcc/data/r703_nested_let_i64/case.ww create mode 100644 test/wcc/data/r703_nested_middle/case.ww create mode 100644 test/wcc/data/r703_nested_return/case.ww create mode 100644 test/wcc/data/r703_nested_three_deep/case.ww create mode 100644 test/wcc/data/r704_dot_chain/case.ww create mode 100644 test/wcc/data/r704_dot_chain_global/case.ww create mode 100644 test/wcc/data/r704_dot_chain_ptr/case.ww create mode 100644 test/wcc/data/r704_dot_global/case.ww create mode 100644 test/wcc/data/r704_dot_local/case.ww create mode 100644 test/wcc/data/r704_dot_local_three/case.ww create mode 100644 test/wcc/data/r704_dot_ptr/case.ww create mode 100644 test/wcc/data/r704_dot_ptr_three/case.ww create mode 100644 test/wcc/data/r705_call_16/case.ww create mode 100644 test/wcc/data/r705_call_24/case.ww create mode 100644 test/wcc/data/r705_call_8/case.ww create mode 100644 test/wcc/data/r705_call_ptr/case.ww create mode 100644 test/wcc/data/r705_call_tail1/case.ww create mode 100644 test/wcc/data/r705_call_tail2/case.ww create mode 100644 test/wcc/data/r705_call_tail4/case.ww create mode 100644 test/wcc/data/r705_call_three_deep/case.ww create mode 100644 test/wcc/data/r707_aliased_tagged_askbool_idx2/case.ww create mode 100644 test/wcc/data/r707_aliased_tagged_aski64_idx0/case.ww create mode 100644 test/wcc/data/r707_aliased_tagged_askstr_idx1/case.ww create mode 100644 test/wcc/data/r707_bool_24b_after_arridx/case.ww create mode 100644 test/wcc/data/r707_f32_variant_return_payload/case.ww create mode 100644 test/wcc/data/r707_f64_variant_return_multivariant/case.ww create mode 100644 test/wcc/data/r707_f64_variant_return_payload/case.ww create mode 100644 test/wcc/data/r707_mixed_variants_in_loop/case.ww create mode 100644 test/wcc/data/r707_scalar_24b_after_arridx/case.ww create mode 100644 test/wcc/data/r707_scalar_24b_in_loop/case.ww create mode 100644 test/wcc/data/r707_scalar_24b_in_nested_loop/case.ww create mode 100644 test/wcc/data/r707_str_24b_after_arridx/case.ww create mode 100644 test/wcc/data/r709_localoff_defer_shadow/case.ww create mode 100644 test/wcc/data/r709_localoff_different_type/case.ww create mode 100644 test/wcc/data/r709_localoff_forrange_shadow/case.ww create mode 100644 test/wcc/data/r709_localoff_if_shadow/case.ww create mode 100644 test/wcc/data/r709_localoff_inner_outer/case.ww create mode 100644 test/wcc/data/r709_localoff_nested_three/case.ww create mode 100644 test/wcc/data/r709_localoff_outer_inner/case.ww create mode 100644 test/wcc/data/r710_bool_to_i8_clamp/case.ww create mode 100644 test/wcc/data/r710_enum_u32_to_u32/case.ww create mode 100644 test/wcc/data/r710_i16_i16_identity/case.ww create mode 100644 test/wcc/data/r710_i32_i32_identity/case.ww create mode 100644 test/wcc/data/r710_i64_to_enum_i32/case.ww create mode 100644 test/wcc/data/r710_i64_to_enum_i32_trnc/case.ww create mode 100644 test/wcc/data/r710_i8_i8_identity/case.ww create mode 100644 test/wcc/data/r710_pseudo_field_clamp/case.ww create mode 100644 test/wcc/data/r710_struct_field_rt/case.ww create mode 100644 test/wcc/data/r710_u16_u16_identity/case.ww create mode 100644 test/wcc/data/r710_u32_to_enum_u32/case.ww create mode 100644 test/wcc/data/r710_u32_to_enum_u8/case.ww create mode 100644 test/wcc/data/r710_u32_to_enum_u8_trnc/case.ww create mode 100644 test/wcc/data/r710_u32_to_i32_signchg/case.ww create mode 100644 test/wcc/data/r710_u32_u32_identity/case.ww create mode 100644 test/wcc/data/r710_u8_u8_identity/case.ww create mode 100644 test/wcc/data/r718_struct_return_single/case.ww create mode 100644 test/wcc/data/r718_struct_return_tagged/case.ww create mode 100644 test/wcc/data/r718_struct_return_three/case.ww create mode 100644 test/wcc/data/r718_struct_return_two/case.ww create mode 100644 test/wcc/data/r71_arrlit_bool/case.ww create mode 100644 test/wcc/data/r71_arrlit_i32/case.ww create mode 100644 test/wcc/data/r71_arrlit_i64/case.ww create mode 100644 test/wcc/data/r71_arrlit_index_call_arg/case.ww create mode 100644 test/wcc/data/r71_arrlit_index_len_arg/case.ww create mode 100644 test/wcc/data/r71_arrlit_nested_index_arg/case.ww create mode 100644 test/wcc/data/r71_arrlit_rune/case.ww create mode 100644 test/wcc/data/r71_arrlit_str_lens/case.ww create mode 100644 test/wcc/data/r71_arrlit_str_ptrs/case.ww create mode 100644 test/wcc/data/r71_arrlit_str_repeat/case.ww create mode 100644 test/wcc/data/r71_match_spill_alias_error/case.ww create mode 100644 test/wcc/data/r71_match_spill_alias_ptr/case.ww create mode 100644 test/wcc/data/r71_match_spill_raw_ptr/case.ww create mode 100644 test/wcc/data/r71_match_spill_str_payload/case.ww create mode 100644 test/wcc/data/r71_redecl_forrange_body_shadow/case.ww create mode 100644 test/wcc/data/r71_redecl_match_arm_shadow/case.ww create mode 100644 test/wcc/data/r71_redecl_nested_block_shadow/case.ww create mode 100644 test/wcc/data/r71_redecl_nested_typed_shadow/case.ww create mode 100644 test/wcc/data/r71_struct_byval_mixed/case.ww create mode 100644 test/wcc/data/r71_struct_byval_partial_fit/case.ww create mode 100644 test/wcc/data/r71_struct_byval_str/case.ww create mode 100644 test/wcc/data/r71_struct_byval_two16/case.ww create mode 100644 test/wcc/data/r71_struct_field_index_str_arg/case.ww create mode 100644 test/wcc/data/r71_struct_field_index_str_stride/case.ww create mode 100644 test/wcc/data/r71_struct_field_index_struct_stride/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_binop/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_call/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_cast/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_field/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_ident/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_integer/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_literal/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_unary_cast/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_unary_literal/case.ww create mode 100644 test/wcc/data/r71_tagged_f64_unary_paren/case.ww create mode 100644 test/wcc/data/r71_tagged_return_scratch_adjacent/case.ww create mode 100644 test/wcc/data/r71_tagged_return_scratch_match/case.ww create mode 100644 test/wcc/data/r71_tagged_return_scratch_mixed/case.ww create mode 100644 test/wcc/data/r71_tagged_return_scratch_param/case.ww create mode 100644 test/wcc/data/r72_empty_alloc_annotated_i32/case.ww create mode 100644 test/wcc/data/r72_empty_alloc_annotated_u8/case.ww create mode 100644 test/wcc/data/r72_empty_alloc_assign/case.ww create mode 100644 test/wcc/data/r72_empty_alloc_bare_let/case.ww create mode 100644 test/wcc/data/r72_empty_alloc_call_arg/case.ww create mode 100644 test/wcc/data/r72_empty_alloc_return/case.ww create mode 100644 test/wcc/data/r732_def_chain/case.ww create mode 100644 test/wcc/data/r732_def_narrowing_cast/case.ww create mode 100644 test/wcc/data/r732_def_same_module_cycle/case.ww create mode 100644 test/wcc/data/r732_def_shift/case.ww create mode 100644 test/wcc/data/r732_def_sibling_add/case.ww create mode 100644 test/wcc/data/r732_def_sibling_ref/case.ww create mode 100644 test/wcc/data/r732_def_widening_cast/case.ww create mode 100644 test/wcc/data/r744_letcopy_slice/case.ww create mode 100644 test/wcc/data/r744_letcopy_str/case.ww create mode 100644 test/wcc/data/r744_letcopy_tagged/case.ww create mode 100644 test/wcc/data/r744_letcopy_tri_i32/case.ww create mode 100644 test/wcc/data/r749_sumtype_forward_ident/case.ww create mode 100644 test/wcc/data/r749_sumtype_forward_index/case.ww create mode 100644 test/wcc/data/r749_sumtype_forward_literal/case.ww create mode 100644 test/wcc/data/r74_parse_error/case.ww create mode 100644 test/wcc/data/r74_size_leaf_baseline/case.ww create mode 100644 test/wcc/data/r74_size_tag_variadic_runearm/case.ww create mode 100644 test/wcc/data/r74_size_trim_iter_match_prev/case.ww create mode 100644 test/wcc/data/r74_size_variadic_rune_stride/case.ww create mode 100644 test/wcc/data/r75_alloc_f64_str_i32/case.ww create mode 100644 test/wcc/data/r75_alloc_i32_then_str/case.ww create mode 100644 test/wcc/data/r75_alloc_str_readback/case.ww create mode 100644 test/wcc/data/r75_alloc_str_singleton/case.ww create mode 100644 test/wcc/data/r75_alloc_str_then_i32/case.ww create mode 100644 test/wcc/data/r75_alloc_two_str/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_amp/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_caret/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_lshift/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_minus/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_percent/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_pipe/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_plus/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_rshift/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_slash/case.ww create mode 100644 test/wcc/data/r75_enumfold_bin_star/case.ww create mode 100644 test/wcc/data/r75_enumfold_chained_backref/case.ww create mode 100644 test/wcc/data/r75_enumfold_intlit/case.ww create mode 100644 test/wcc/data/r75_enumfold_runelit/case.ww create mode 100644 test/wcc/data/r75_enumfold_sibling_backref/case.ww create mode 100644 test/wcc/data/r75_enumfold_unary_minus/case.ww create mode 100644 test/wcc/data/r75_enumfold_unary_plus/case.ww create mode 100644 test/wcc/data/r75_enumfold_unary_tilde_nested/case.ww create mode 100644 test/wcc/data/r75_fromutf8_natural_match/case.ww create mode 100644 test/wcc/data/r75_letbind_invalid_arm/case.ww create mode 100644 test/wcc/data/r75_letbind_void_arm/case.ww create mode 100644 test/wcc/data/r75_modparam_same_module_same_leaf/case.ww create mode 100644 test/wcc/data/r75_vararg_seq_mixed_arity_two_calls/case.ww create mode 100644 test/wcc/data/r75_vararg_seq_same_arity_two_calls/case.ww create mode 100644 test/wcc/data/r75_vararg_seq_three_arity_drift/case.ww create mode 100644 test/wcc/data/r764_amp_fn_ident_alias_chain/case.ww create mode 100644 test/wcc/data/r764_amp_fn_ident_args/case.ww create mode 100644 test/wcc/data/r764_amp_fn_ident_branched/case.ww create mode 100644 test/wcc/data/r764_amp_fn_ident_minimal/case.ww create mode 100644 test/wcc/data/r764_amp_fn_ident_tuple_return/case.ww create mode 100644 test/wcc/data/r766_star_fn_deref_alias_chain/case.ww create mode 100644 test/wcc/data/r766_star_fn_deref_args/case.ww create mode 100644 test/wcc/data/r766_star_fn_deref_branched/case.ww create mode 100644 test/wcc/data/r766_star_fn_deref_minimal/case.ww create mode 100644 test/wcc/data/r766_star_fn_deref_tuple_return/case.ww create mode 100644 test/wcc/data/r767_match_variant_aliased_ptr/case.ww create mode 100644 test/wcc/data/r767_match_variant_fn_ptr_local/case.ww create mode 100644 test/wcc/data/r767_match_variant_nullable_fn/case.ww create mode 100644 test/wcc/data/r767_match_variant_ptr_past_zero/case.ww create mode 100644 test/wcc/data/r767_match_variant_stored_roundtrip/case.ww create mode 100644 test/wcc/data/r769_dot_aliased_ptr_double_alias/case.ww create mode 100644 test/wcc/data/r769_dot_aliased_ptr_let/case.ww create mode 100644 test/wcc/data/r769_dot_aliased_ptr_param/case.ww create mode 100644 test/wcc/data/r769_dot_aliased_ptr_pointee_chain/case.ww create mode 100644 test/wcc/data/r76_def_widen_i32_int_neg/case.ww create mode 100644 test/wcc/data/r76_def_widen_i32_int_small/case.ww create mode 100644 test/wcc/data/r76_def_widen_u64_size/case.ww create mode 100644 test/wcc/data/r76_infer_struct_big_sret_ptr/case.ww create mode 100644 test/wcc/data/r76_infer_struct_i32_x3/case.ww create mode 100644 test/wcc/data/r76_infer_struct_i64_i32_tail/case.ww create mode 100644 test/wcc/data/r76_infer_struct_i64_i64/case.ww create mode 100644 test/wcc/data/r76_infer_struct_ident_chain/case.ww create mode 100644 test/wcc/data/r76_infer_struct_u32_i64_decf/case.ww create mode 100644 test/wcc/data/r76_io_types_closer_alias_param/case.ww create mode 100644 test/wcc/data/r76_io_types_enum_mode_value/case.ww create mode 100644 test/wcc/data/r76_io_types_enum_whence_value/case.ww create mode 100644 test/wcc/data/r76_io_types_reader_alias_param/case.ww create mode 100644 test/wcc/data/r76_io_types_writer_alias_param/case.ww create mode 100644 test/wcc/data/r76_struct_size_i16_i64/case.ww create mode 100644 test/wcc/data/r76_struct_size_i16_x3/case.ww create mode 100644 test/wcc/data/r76_struct_size_i32_i32_i64/case.ww create mode 100644 test/wcc/data/r76_struct_size_i32_x3/case.ww create mode 100644 test/wcc/data/r76_struct_size_i64_i32_i32/case.ww create mode 100644 test/wcc/data/r76_struct_size_i64_x3/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_diff_arity/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_diff_param_type/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_diff_return/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_identical/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_io_vtable_shape/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_param_name_only/case.ww create mode 100644 test/wcc/data/r76_typeeq_fn_variadic_vs_fixed/case.ww create mode 100644 test/wcc/data/r770_return_tagged_cross_module/case.ww create mode 100644 test/wcc/data/r770_return_tagged_cross_module/mtag770/mtag770.ww create mode 100644 test/wcc/data/r770_return_tagged_deref_call/case.ww create mode 100644 test/wcc/data/r770_return_tagged_named/case.ww create mode 100644 test/wcc/data/r770_return_tagged_nested/case.ww create mode 100644 test/wcc/data/r770_return_tagged_scalar/case.ww create mode 100644 test/wcc/data/r770_return_tagged_widen_subset/case.ww create mode 100644 test/wcc/data/r771_branched_callee_widen/case.ww create mode 100644 test/wcc/data/r771_direct_flat_variant/case.ww create mode 100644 test/wcc/data/r771_reject_transitive_widen/case.ww create mode 100644 test/wcc/data/r771_wrapper_typed_widen/case.ww create mode 100644 test/wcc/data/r772_branched_call_as/case.ww create mode 100644 test/wcc/data/r772_call_as_fnptr/case.ww create mode 100644 test/wcc/data/r772_call_as_i16/case.ww create mode 100644 test/wcc/data/r772_call_as_namedvoid/case.ww create mode 100644 test/wcc/data/r772_call_as_size/case.ww create mode 100644 test/wcc/data/r772_call_as_str/case.ww create mode 100644 test/wcc/data/r772_call_as_u8/case.ww create mode 100644 test/wcc/data/r773_cross_mod_named_void/case.ww create mode 100644 test/wcc/data/r773_direct_cross_mod_tagged/case.ww create mode 100644 test/wcc/data/r773_same_module_variant/case.ww create mode 100644 test/wcc/data/r773_spread_as_inline_payload/case.ww create mode 100644 test/wcc/data/r773_spread_is_inline_variant/case.ww create mode 100644 test/wcc/data/r774_accept_nested_wrapper/case.ww create mode 100644 test/wcc/data/r774_accept_pure_leaf_subset/case.ww create mode 100644 test/wcc/data/r774_accept_wrapper_variant/case.ww create mode 100644 test/wcc/data/r774_branched_callee_widen/case.ww create mode 100644 test/wcc/data/r774_reject_concrete_unrelated/case.ww create mode 100644 test/wcc/data/r775_branched_readers/case.ww create mode 100644 test/wcc/data/r775_closer_set/case.ww create mode 100644 test/wcc/data/r775_closer_void_noop/case.ww create mode 100644 test/wcc/data/r775_reader_set_happy/case.ww create mode 100644 test/wcc/data/r775_reader_void_unsupported/case.ww create mode 100644 test/wcc/data/r775_writer_set_happy/case.ww create mode 100644 test/wcc/data/r775_writer_void_unsupported/case.ww create mode 100644 test/wcc/data/r776_accessors_string_buffer_reset/case.ww create mode 100644 test/wcc/data/r776_borrowedread_view_eof/case.ww create mode 100644 test/wcc/data/r776_branched_fixed/case.ww create mode 100644 test/wcc/data/r776_dynamic_write_grow/case.ww create mode 100644 test/wcc/data/r776_dynamicfrom_alt_rw/case.ww create mode 100644 test/wcc/data/r776_fixed_read_5/case.ww create mode 100644 test/wcc/data/r777_branched_fprintf/case.ww create mode 100644 test/wcc/data/r777_fprint_file_raw/case.ww create mode 100644 test/wcc/data/r777_fprintf_file_int/case.ww create mode 100644 test/wcc/data/r777_fprintf_stream/case.ww create mode 100644 test/wcc/data/r777_fprintln_file_multi/case.ww create mode 100644 test/wcc/data/r778_branched_bufio_wrap/case.ww create mode 100644 test/wcc/data/r778_isbuffered_v_boundary/case.ww create mode 100644 test/wcc/data/r778_isbuffered_v_discriminate/case.ww create mode 100644 test/wcc/data/r778_scanner_byte_bytes/case.ww create mode 100644 test/wcc/data/r778_scanner_lines/case.ww create mode 100644 test/wcc/data/r778_stream_read_unread/case.ww create mode 100644 test/wcc/data/r778_stream_setflush/case.ww create mode 100644 test/wcc/data/r778_stream_unread/case.ww create mode 100644 test/wcc/data/r778_stream_write_flush/case.ww create mode 100644 test/wcc/data/r780_fmt_mods/case.ww create mode 100644 test/wcc/data/r781_fmt_compositions/case.ww create mode 100644 test/wcc/data/r783_amp_fn_assign_neg_launder/case.ww create mode 100644 test/wcc/data/r783_amp_fn_assign_neg_samesig/case.ww create mode 100644 test/wcc/data/r788_type_q_cast_accept/case.ww create mode 100644 test/wcc/data/r788_value_not_type_reject/case.ww create mode 100644 test/wcc/data/r78_alias_narrow_deref_store/case.ww create mode 100644 test/wcc/data/r78_amp_fn_assign_fieldstore_dispatch/case.ww create mode 100644 test/wcc/data/r78_amp_fn_assign_let_call/case.ww create mode 100644 test/wcc/data/r78_amp_fn_assign_structlit/case.ww create mode 100644 test/wcc/data/r78_named_ptr_alias_degenerate_ambig/case.ww create mode 100644 test/wcc/data/r78_named_ptr_alias_handle_widen/case.ww create mode 100644 test/wcc/data/r78_plain_i32_deref_store_ctrl/case.ww create mode 100644 test/wcc/data/r78_strict_package_comment_only_accept/case.ww create mode 100644 test/wcc/data/r78_strict_package_main_accept/case.ww create mode 100644 test/wcc/data/r78_strict_package_module_leaf_match_accept/case.ww create mode 100644 test/wcc/data/r78_strict_package_module_leaf_mismatch_reject/case.ww create mode 100644 test/wcc/data/r78_strict_package_no_clause_reject/case.ww create mode 100644 test/wcc/data/r78_strict_package_reset_second_section_reject/case.ww create mode 100644 test/wcc/data/r78_structvariant_large_union/case.ww create mode 100644 test/wcc/data/r78_structvariant_namedvoid_ctrl/case.ww create mode 100644 test/wcc/data/r791_io_handle/case.ww create mode 100644 test/wcc/data/r79_single_field_struct_assign/case.ww create mode 100644 test/wcc/data/r79_single_field_struct_read_before_init/case.ww create mode 100644 test/wcc/data/r79_spread_variant_match_compile/case.ww create mode 100644 test/wcc/data/r79_tuple_sret_str_str_i32/case.ww create mode 100644 test/wcc/data/r79_tuple_sret_three_f64/case.ww create mode 100644 test/wcc/data/r79_tuple_sret_two_slices/case.ww create mode 100644 test/wcc/data/r79_tuple_sret_two_str/case.ww create mode 100644 test/wcc/data/r79_xmod_valglobal_def/case.ww create mode 100644 test/wcc/data/r79_xmod_valglobal_dot_addrof/case.ww create mode 100644 test/wcc/data/r79_xmod_valglobal_dot_read/case.ww create mode 100644 test/wcc/data/r79_xmod_valglobal_f64/case.ww create mode 100644 test/wcc/data/r79_xmod_valglobal_i32/case.ww create mode 100644 test/wcc/data/r800append_enum_alias_esz/case.ww create mode 100644 test/wcc/data/r800append_slice_elem/case.ww create mode 100644 test/wcc/data/r800append_spread_call_loudstop/case.ww create mode 100644 test/wcc/data/r800append_spread_str/case.ww create mode 100644 test/wcc/data/r800append_spread_tagged/case.ww create mode 100644 test/wcc/data/r800append_str_len_bytes/case.ww create mode 100644 test/wcc/data/r800append_str_two_append/case.ww create mode 100644 test/wcc/data/r800append_struct_call_loudstop/case.ww create mode 100644 test/wcc/data/r800append_struct_eight_appends/case.ww create mode 100644 test/wcc/data/r800append_struct_first8/case.ww create mode 100644 test/wcc/data/r800append_struct_lit_two/case.ww create mode 100644 test/wcc/data/r800append_struct_tail_word/case.ww create mode 100644 test/wcc/data/r800append_tagged_box/case.ww create mode 100644 test/wcc/data/r800append_tagged_ident_src/case.ww create mode 100644 test/wcc/data/r800append_tagged_two_append/case.ww create mode 100644 test/wcc/data/r800append_u8_baseline/case.ww create mode 100644 test/wcc/data/r804_delete_elem_reject_arity/case.ww create mode 100644 test/wcc/data/r804_delete_elem_reject_array/case.ww create mode 100644 test/wcc/data/r804_delete_elem_reject_nonindex/case.ww create mode 100644 test/wcc/data/r804_delete_elem_runtime/case.ww create mode 100644 test/wcc/data/r806_tryprop_accept_nested_tagged/case.ww create mode 100644 test/wcc/data/r806_tryprop_accept_two_member/case.ww create mode 100644 test/wcc/data/r806_tryprop_accept_unw_multi_error/case.ww create mode 100644 test/wcc/data/r806_tryprop_accept_void_success/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_callarg/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_success2/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_success3/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_try_is/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_try_match/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_tryunw_is/case.ww create mode 100644 test/wcc/data/r806_tryprop_reject_unw_success2/case.ww create mode 100644 test/wcc/data/r807_insert_elem_reject_arity1/case.ww create mode 100644 test/wcc/data/r807_insert_elem_reject_arity3/case.ww create mode 100644 test/wcc/data/r807_insert_elem_reject_array/case.ww create mode 100644 test/wcc/data/r807_insert_elem_reject_nonindex/case.ww create mode 100644 test/wcc/data/r807_insert_elem_reject_range/case.ww create mode 100644 test/wcc/data/r807_insert_elem_reject_spread/case.ww create mode 100644 test/wcc/data/r807_insert_elem_runtime/case.ww create mode 100644 test/wcc/data/r808_arrlit_alias_exact_module/case.ww create mode 100644 test/wcc/data/r808_arrlit_alias_nested_2lvl/case.ww create mode 100644 test/wcc/data/r808_arrlit_alias_nested_def/case.ww create mode 100644 test/wcc/data/r808_arrlit_alias_nested_field/case.ww create mode 100644 test/wcc/data/r808_arrlit_alias_nested_local/case.ww create mode 100644 test/wcc/data/r808_arrlit_alias_nested_module/case.ww create mode 100644 test/wcc/data/r808_arrlit_exact_def/case.ww create mode 100644 test/wcc/data/r808_arrlit_exact_field/case.ww create mode 100644 test/wcc/data/r808_arrlit_exact_local/case.ww create mode 100644 test/wcc/data/r808_arrlit_exact_module/case.ww create mode 100644 test/wcc/data/r808_arrlit_infer_len/case.ww create mode 100644 test/wcc/data/r808_arrlit_nested_field/case.ww create mode 100644 test/wcc/data/r808_arrlit_nested_module/case.ww create mode 100644 test/wcc/data/r808_arrlit_overlong_def/case.ww create mode 100644 test/wcc/data/r808_arrlit_overlong_field/case.ww create mode 100644 test/wcc/data/r808_arrlit_overlong_local/case.ww create mode 100644 test/wcc/data/r808_arrlit_overlong_module/case.ww create mode 100644 test/wcc/data/r808_arrlit_overlong_narrow/case.ww create mode 100644 test/wcc/data/r808_arrlit_overlong_repeat/case.ww create mode 100644 test/wcc/data/r808_arrlit_repeat_fill/case.ww create mode 100644 test/wcc/data/r808_arrlit_repeat_partial/case.ww create mode 100644 test/wcc/data/r809del_delete_range_reject_array/case.ww create mode 100644 test/wcc/data/r809del_delete_range_reject_str/case.ww create mode 100644 test/wcc/data/r809del_delete_range_runtime/case.ww create mode 100644 test/wcc/data/r809idx_alias_lit/case.ww create mode 100644 test/wcc/data/r809idx_all_default/case.ww create mode 100644 test/wcc/data/r809idx_arr_elem/case.ww create mode 100644 test/wcc/data/r809idx_arr_neighbor/case.ww create mode 100644 test/wcc/data/r809idx_arr_var_idx/case.ww create mode 100644 test/wcc/data/r809idx_arrlit_deref_loud/case.ww create mode 100644 test/wcc/data/r809idx_arrlit_idx_loud/case.ww create mode 100644 test/wcc/data/r809idx_callee_capture/case.ww create mode 100644 test/wcc/data/r809idx_deref_lit/case.ww create mode 100644 test/wcc/data/r809idx_derefspine_slice/case.ww create mode 100644 test/wcc/data/r809idx_dotidx_field/case.ww create mode 100644 test/wcc/data/r809idx_fieldplace_slice/case.ww create mode 100644 test/wcc/data/r809idx_global_arr/case.ww create mode 100644 test/wcc/data/r809idx_nested_lit/case.ww create mode 100644 test/wcc/data/r809idx_partial_ellipsis/case.ww create mode 100644 test/wcc/data/r809idx_slice_elem_str/case.ww create mode 100644 test/wcc/data/r809idx_small_elem/case.ww create mode 100644 test/wcc/data/r809idx_tuple_elem/case.ww create mode 100644 test/wcc/data/r811_annotated_pin/case.ww create mode 100644 test/wcc/data/r811_boxed_prebound/case.ww create mode 100644 test/wcc/data/r811_ellipsis_fill/case.ww create mode 100644 test/wcc/data/r811_nested_read/case.ww create mode 100644 test/wcc/data/r811_paren_form/case.ww create mode 100644 test/wcc/data/r811_plain_read/case.ww create mode 100644 test/wcc/data/r811_tagged_assign/case.ww create mode 100644 test/wcc/data/r811_tagged_read_is_as/case.ww create mode 100644 test/wcc/data/r811_tagged_str_field/case.ww create mode 100644 test/wcc/data/r811_tagged_void_read/case.ww create mode 100644 test/wcc/data/r812_alias_named_assign/case.ww create mode 100644 test/wcc/data/r812_alias_twolevel_assign/case.ww create mode 100644 test/wcc/data/r812_arrelem_roundtrip/case.ww create mode 100644 test/wcc/data/r812_assign_16b/case.ww create mode 100644 test/wcc/data/r812_assign_24b_plain/case.ww create mode 100644 test/wcc/data/r812_assign_48b/case.ww create mode 100644 test/wcc/data/r812_assign_deref/case.ww create mode 100644 test/wcc/data/r812_assign_dot_source/case.ww create mode 100644 test/wcc/data/r812_assign_global/case.ww create mode 100644 test/wcc/data/r812_assign_match_bind/case.ww create mode 100644 test/wcc/data/r812_assign_nested/case.ww create mode 100644 test/wcc/data/r812_assign_odd_12b/case.ww create mode 100644 test/wcc/data/r812_assign_str_field/case.ww create mode 100644 test/wcc/data/r812_assign_tuple/case.ww create mode 100644 test/wcc/data/r812_global_structlit/case.ww create mode 100644 test/wcc/data/r812_lit_field_from_ident/case.ww create mode 100644 test/wcc/data/r812_neighbor_guard/case.ww create mode 100644 test/wcc/data/r814_def_2d_first/case.ww create mode 100644 test/wcc/data/r814_def_2d_last/case.ww create mode 100644 test/wcc/data/r814_def_int_i1/case.ww create mode 100644 test/wcc/data/r814_def_int_last/case.ww create mode 100644 test/wcc/data/r814_def_one_elem/case.ww create mode 100644 test/wcc/data/r814_def_u8_first/case.ww create mode 100644 test/wcc/data/r814_def_u8_last/case.ww create mode 100644 test/wcc/data/r814_nonarray_reject/case.ww create mode 100644 test/wcc/data/r815_bare_int/case.ww create mode 100644 test/wcc/data/r815_bare_int_neg/case.ww create mode 100644 test/wcc/data/r815_bare_uint/case.ww create mode 100644 test/wcc/data/r815_int_printf/case.ww create mode 100644 test/wcc/data/r815_mixed/case.ww create mode 100644 test/wcc/data/r815_uint_highbit/case.ww create mode 100644 test/wcc/data/r815_unaffected_i64/case.ww create mode 100644 test/wcc/data/r815_unaffected_str/case.ww create mode 100644 test/wcc/data/r816_explicit_len/case.ww create mode 100644 test/wcc/data/r816_infer_len/case.ww create mode 100644 test/wcc/data/r816_one_elem/case.ww create mode 100644 test/wcc/data/r816_sum/case.ww create mode 100644 test/wcc/data/r816_u8_len/case.ww create mode 100644 test/wcc/data/r817_neg_def_cap/case.ww create mode 100644 test/wcc/data/r817_neg_infer_cap/case.ww create mode 100644 test/wcc/data/r817_neg_let_global_cap/case.ww create mode 100644 test/wcc/data/r817_neg_local_cap/case.ww create mode 100644 test/wcc/data/r817_pos_def_len/case.ww create mode 100644 test/wcc/data/r817_pos_local_len/case.ww create mode 100644 test/wcc/data/r817_pos_local_ptr/case.ww create mode 100644 test/wcc/data/r818_def_global_ptr/case.ww create mode 100644 test/wcc/data/r818_let_global_ptr/case.ww create mode 100644 test/wcc/data/r818_local_ptr/case.ww create mode 100644 test/wcc/data/r819_def_str_content/case.ww create mode 100644 test/wcc/data/r819_def_str_elem0/case.ww create mode 100644 test/wcc/data/r819_def_str_elem1/case.ww create mode 100644 test/wcc/data/r819_def_str_len/case.ww create mode 100644 test/wcc/data/r819_def_str_multi/case.ww create mode 100644 test/wcc/data/r819_def_str_varbind/case.ww create mode 100644 test/wcc/data/r819_let_str_elem1/case.ww create mode 100644 test/wcc/data/r81_deflen_explicit/case.ww create mode 100644 test/wcc/data/r81_deflen_infer/case.ww create mode 100644 test/wcc/data/r81_deflen_one/case.ww create mode 100644 test/wcc/data/r81_deflen_sum/case.ww create mode 100644 test/wcc/data/r81_deflen_u8/case.ww create mode 100644 test/wcc/data/r820_def_two_overfill/case.ww create mode 100644 test/wcc/data/r820_def_zero_overfill/case.ww create mode 100644 test/wcc/data/r820_empty_zero/case.ww create mode 100644 test/wcc/data/r820_empty_zero_local/case.ww create mode 100644 test/wcc/data/r820_infer_ctl/case.ww create mode 100644 test/wcc/data/r820_infer_len/case.ww create mode 100644 test/wcc/data/r820_let_zero_overfill/case.ww create mode 100644 test/wcc/data/r820_local_zero_overfill/case.ww create mode 100644 test/wcc/data/r820_str_zero_overfill/case.ww create mode 100644 test/wcc/data/r820_void_local/case.ww create mode 100644 test/wcc/data/r821_def_arr_index/case.ww create mode 100644 test/wcc/data/r821_def_scalar_field/case.ww create mode 100644 test/wcc/data/r821_def_scalar_index/case.ww create mode 100644 test/wcc/data/r821_def_scalar_varbind/case.ww create mode 100644 test/wcc/data/r821_def_strarray_elem/case.ww create mode 100644 test/wcc/data/r821_let_scalar_index/case.ww create mode 100644 test/wcc/data/r821_local_index/case.ww create mode 100644 test/wcc/data/r821_param_index/case.ww create mode 100644 test/wcc/data/r822_ctrl_local/case.ww create mode 100644 test/wcc/data/r822_narrow_mix/case.ww create mode 100644 test/wcc/data/r822_three_word/case.ww create mode 100644 test/wcc/data/r822_two_field/case.ww create mode 100644 test/wcc/data/r823_scalar/case.ww create mode 100644 test/wcc/data/r823_struct_arg/case.ww create mode 100644 test/wcc/data/r823_struct_field/case.ww create mode 100644 test/wcc/data/r824_ctrl_expl/case.ww create mode 100644 test/wcc/data/r824_ctrl_int/case.ww create mode 100644 test/wcc/data/r824_infer_f32/case.ww create mode 100644 test/wcc/data/r824_infer_mul/case.ww create mode 100644 test/wcc/data/r824_infer_neg/case.ww create mode 100644 test/wcc/data/r824_infer_read/case.ww create mode 100644 test/wcc/data/r825_errfirst_3var/case.ww create mode 100644 test/wcc/data/r825_errfirst_must/case.ww create mode 100644 test/wcc/data/r825_errfirst_prop/case.ww create mode 100644 test/wcc/data/r825_errfirst_tuple/case.ww create mode 100644 test/wcc/data/r825_succfirst_ctrl/case.ww create mode 100644 test/wcc/data/r826_alias_tuple_ctrl_direct/case.ww create mode 100644 test/wcc/data/r826_alias_tuple_ctrl_typed/case.ww create mode 100644 test/wcc/data/r826_alias_tuple_fnarg/case.ww create mode 100644 test/wcc/data/r826_alias_tuple_init/case.ww create mode 100644 test/wcc/data/r826_alias_tuple_mixed/case.ww create mode 100644 test/wcc/data/r826_alias_tuple_ret/case.ww create mode 100644 test/wcc/data/r827_byte_eq_global/case.ww create mode 100644 test/wcc/data/r827_byte_eq_local/case.ww create mode 100644 test/wcc/data/r827_byte_eq_strlit/case.ww create mode 100644 test/wcc/data/r827_byte_ne_local/case.ww create mode 100644 test/wcc/data/r827_str_eq_diff_content/case.ww create mode 100644 test/wcc/data/r827_str_eq_dup_true/case.ww create mode 100644 test/wcc/data/r827_str_eq_empty/case.ww create mode 100644 test/wcc/data/r827_str_eq_self/case.ww create mode 100644 test/wcc/data/r827_str_ne_dup_false/case.ww create mode 100644 test/wcc/data/r828_arrlit_alias_exact/case.ww create mode 100644 test/wcc/data/r828_arrlit_alias_global_overlong/case.ww create mode 100644 test/wcc/data/r828_arrlit_alias_ret_overlong/case.ww create mode 100644 test/wcc/data/r828_arrlit_arg_exact/case.ww create mode 100644 test/wcc/data/r828_arrlit_arg_overlong/case.ww create mode 100644 test/wcc/data/r828_arrlit_ret_exact/case.ww create mode 100644 test/wcc/data/r828_arrlit_ret_overlong/case.ww create mode 100644 test/wcc/data/r829_def_str_len/case.ww create mode 100644 test/wcc/data/r829_def_str_ptr/case.ww create mode 100644 test/wcc/data/r829_def_str_return/case.ww create mode 100644 test/wcc/data/r829_local_slice_ctrl/case.ww create mode 100644 test/wcc/data/r829_local_str_ctrl/case.ww create mode 100644 test/wcc/data/r829_slice_global_idx/case.ww create mode 100644 test/wcc/data/r829_slice_global_len/case.ww create mode 100644 test/wcc/data/r829_str_global_len/case.ww create mode 100644 test/wcc/data/r829_str_global_ptr/case.ww create mode 100644 test/wcc/data/r830_call_base_u32/case.ww create mode 100644 test/wcc/data/r830_cast_base_u16/case.ww create mode 100644 test/wcc/data/r830_cast_base_u32/case.ww create mode 100644 test/wcc/data/r830_cast_base_u64_ctrl/case.ww create mode 100644 test/wcc/data/r830_cast_base_u8/case.ww create mode 100644 test/wcc/data/r830_slice_base_u16/case.ww create mode 100644 test/wcc/data/r830_typeassert_base_u16/case.ww create mode 100644 test/wcc/data/r831_match_call_result/case.ww create mode 100644 test/wcc/data/r831_match_field_local_int/case.ww create mode 100644 test/wcc/data/r831_match_field_ptr/case.ww create mode 100644 test/wcc/data/r831_match_field_remap/case.ww create mode 100644 test/wcc/data/r831_match_field_str/case.ww create mode 100644 test/wcc/data/r831_match_plain_local/case.ww create mode 100644 test/wcc/data/r832_tuple_array_exact_reject/case.ww create mode 100644 test/wcc/data/r832_tuple_array_overlong/case.ww create mode 100644 test/wcc/data/r832_tuple_nested_array_overlong/case.ww create mode 100644 test/wcc/data/r832_tuple_nested_exact_reject/case.ww create mode 100644 test/wcc/data/r832_tuple_nested_overlong/case.ww create mode 100644 test/wcc/data/r832_tuple_return_nested_overlong/case.ww create mode 100644 test/wcc/data/r832_tuple_return_overlong/case.ww create mode 100644 test/wcc/data/r832_tuple_scalar/case.ww create mode 100644 test/wcc/data/r832_tuple_slice/case.ww create mode 100644 test/wcc/data/r832_tuple_str/case.ww create mode 100644 test/wcc/data/r832_tuple_struct_reject/case.ww create mode 100644 test/wcc/data/r832_tuple_tagged/case.ww create mode 100644 test/wcc/data/r833_explicit_array_control/case.ww create mode 100644 test/wcc/data/r833_inferred_array_index/case.ww create mode 100644 test/wcc/data/r833_inferred_array_len/case.ww create mode 100644 test/wcc/data/r833_inferred_array_u8/case.ww create mode 100644 test/wcc/data/r835_union_alias_int/case.ww create mode 100644 test/wcc/data/r835_union_direct_int/case.ww create mode 100644 test/wcc/data/r835_union_enum_int/case.ww create mode 100644 test/wcc/data/r835_union_nested_int_reject/case.ww create mode 100644 test/wcc/data/r835_union_nested_source/case.ww create mode 100644 test/wcc/data/r835_union_no_int_reject/case.ww create mode 100644 test/wcc/data/r835_union_struct_int_reject/case.ww create mode 100644 test/wcc/data/r835_union_subset_cast_reject/case.ww create mode 100644 test/wcc/data/r835_union_subset_source/case.ww create mode 100644 test/wcc/data/r83_assign_directstr/case.ww create mode 100644 test/wcc/data/r83_assign_f64/case.ww create mode 100644 test/wcc/data/r83_assign_float_reject/case.ww create mode 100644 test/wcc/data/r83_assign_intbool/case.ww create mode 100644 test/wcc/data/r83_assign_nil_nullable/case.ww create mode 100644 test/wcc/data/r83_assign_nil_reject/case.ww create mode 100644 test/wcc/data/r83_assign_subset/case.ww create mode 100644 test/wcc/data/r83_gtag_barebool/case.ww create mode 100644 test/wcc/data/r83_gtag_bareint/case.ww create mode 100644 test/wcc/data/r83_gtag_barestr/case.ww create mode 100644 test/wcc/data/r83_gtag_boolcast_reject/case.ww create mode 100644 test/wcc/data/r83_gtag_intcast_reject/case.ww create mode 100644 test/wcc/data/r83_gtag_strcast/case.ww create mode 100644 test/wcc/data/r83_idcast_bool/case.ww create mode 100644 test/wcc/data/r83_idcast_control/case.ww create mode 100644 test/wcc/data/r83_idcast_int/case.ww create mode 100644 test/wcc/data/r83_tagarr_lit_reject/case.ww create mode 100644 test/wcc/data/r83_tagarr_narrow/case.ww create mode 100644 test/wcc/data/r83_tagarr_return_reject/case.ww create mode 100644 test/wcc/data/r83_tagarr_scalar/case.ww create mode 100644 test/wcc/data/r83_tagarr_slice/case.ww create mode 100644 test/wcc/data/r83_tagarr_str/case.ww create mode 100644 test/wcc/data/r83_tagarr_struct/case.ww create mode 100644 test/wcc/data/r83_tagarr_var_reject/case.ww create mode 100644 test/wcc/data/r845_tuple_one_comma/case.ww create mode 100644 test/wcc/data/r84_const_reassign/case.ww create mode 100644 test/wcc/data/r84_dupentry_def/case.ww create mode 100644 test/wcc/data/r84_dupentry_fn/case.ww create mode 100644 test/wcc/data/r84_dupentry_let/case.ww create mode 100644 test/wcc/data/r84_dupentry_single_nonmain/case.ww create mode 100644 test/wcc/data/r84_dupentry_type/case.ww create mode 100644 test/wcc/data/r84_dupfield_adj/case.ww create mode 100644 test/wcc/data/r84_dupfield_difftype/case.ww create mode 100644 test/wcc/data/r84_dupfield_distinct/case.ww create mode 100644 test/wcc/data/r84_dupfield_nonadj/case.ww create mode 100644 test/wcc/data/r84_let_reassign/case.ww create mode 100644 test/wcc/data/r84_matchglob_int/case.ww create mode 100644 test/wcc/data/r84_matchglob_local/case.ww create mode 100644 test/wcc/data/r84_matchglob_remap/case.ww create mode 100644 test/wcc/data/r84_matchglob_str/case.ww create mode 100644 test/wcc/data/r84_qualstruct_fields/case.ww create mode 100644 test/wcc/data/r84_qualstruct_nested/case.ww create mode 100644 test/wcc/data/r84_qualstruct_ret_assign/case.ww create mode 100644 test/wcc/data/r84_size_arith/case.ww create mode 100644 test/wcc/data/r84_size_let_size/case.ww create mode 100644 test/wcc/data/r84_size_let_u64/case.ww create mode 100644 test/wcc/data/r84_size_unannotated/case.ww create mode 100644 test/wcc/data/r84_tagstatic_array_bool/case.ww create mode 100644 test/wcc/data/r84_tagstatic_array_nonzero/case.ww create mode 100644 test/wcc/data/r84_tagstatic_array_set/case.ww create mode 100644 test/wcc/data/r84_tagstatic_plain_struct/case.ww create mode 100644 test/wcc/data/r84_tagstatic_struct_nonzero/case.ww create mode 100644 test/wcc/data/r84_tagstatic_struct_set/case.ww create mode 100644 test/wcc/data/r84_tagstatic_wide_array/case.ww create mode 100644 test/wcc/data/r84_tagstatic_wide_struct/case.ww create mode 100644 test/wcc/data/r84_tuple_two_comma/case.ww create mode 100644 test/wcc/data/r84_tuple_two_elem/case.ww create mode 100644 test/wcc/data/r84_voidless_nonvoid/case.ww create mode 100644 test/wcc/data/r84_voidless_tagged/case.ww create mode 100644 test/wcc/data/r84_voidless_value/case.ww create mode 100644 test/wcc/data/r84_voidless_void/case.ww create mode 100644 test/wcc/data/r85_enum_dup_member/case.ww create mode 100644 test/wcc/data/r85_enum_fwd_ref/case.ww create mode 100644 test/wcc/data/r85_index_alias/case.ww create mode 100644 test/wcc/data/r85_index_bool/case.ww create mode 100644 test/wcc/data/r85_index_enum/case.ww create mode 100644 test/wcc/data/r85_index_float/case.ww create mode 100644 test/wcc/data/r85_index_int/case.ww create mode 100644 test/wcc/data/r85_index_ptr/case.ww create mode 100644 test/wcc/data/r85_index_str/case.ww create mode 100644 test/wcc/data/r85_index_uint/case.ww create mode 100644 test/wcc/data/r85_varbody_bare/case.ww create mode 100644 test/wcc/data/r85_varbody_cvar/case.ww create mode 100644 test/wcc/data/r85_varbody_extern/case.ww create mode 100644 test/wcc/data/r85_varbody_hare/case.ww create mode 100644 test/wcc/data/r913_def_mangle_exported/case.ww create mode 100644 test/wcc/data/r913_def_mangle_local/case.ww create mode 100644 test/wcc/data/r913_def_mangle_multi/case.ww create mode 100644 test/wcc/data/r913_def_mangle_u64/case.ww create mode 100644 test/wcc/data/r915_arr_local_control/case.ww create mode 100644 test/wcc/data/r915_arr_local_nonzero/case.ww create mode 100644 test/wcc/data/r920_arrfit_bare_u32/case.ww create mode 100644 test/wcc/data/r920_arrfit_bare_u64/case.ww create mode 100644 test/wcc/data/r920_arrfit_bare_u8/case.ww create mode 100644 test/wcc/data/r920_arrfit_i8_boundary/case.ww create mode 100644 test/wcc/data/r920_arrfit_i8_over/case.ww create mode 100644 test/wcc/data/r920_arrfit_negative_u8/case.ww create mode 100644 test/wcc/data/r920_arrfit_nonfold/case.ww create mode 100644 test/wcc/data/r920_arrfit_nonfold_wide/case.ww create mode 100644 test/wcc/data/r920_arrfit_over_256/case.ww create mode 100644 test/wcc/data/r920_arrfit_over_300/case.ww create mode 100644 test/wcc/data/r920_arrfit_signed/case.ww create mode 100644 test/wcc/data/r920_arrfit_str_u8/case.ww create mode 100644 test/wcc/data/r920_arrfit_typed/case.ww create mode 100644 test/wcc/data/r920_arrfit_u8_max/case.ww create mode 100644 test/wcc/data/r921_amp_arr_index/case.ww create mode 100644 test/wcc/data/r921_amp_def_array/case.ww create mode 100644 test/wcc/data/r921_amp_def_float/case.ww create mode 100644 test/wcc/data/r921_amp_def_int/case.ww create mode 100644 test/wcc/data/r921_amp_def_struct/case.ww create mode 100644 test/wcc/data/r921_amp_float_def_reject/case.ww create mode 100644 test/wcc/data/r921_amp_let_struct/case.ww create mode 100644 test/wcc/data/r921_amp_str_def_reject/case.ww create mode 100644 test/wcc/data/r921_amp_xmod_def/case.ww create mode 100644 test/wcc/data/r921_amp_xmod_fn/case.ww create mode 100644 test/wcc/data/r921_amp_xmod_let/case.ww create mode 100644 test/wcc/data/r921_amp_xmod_scalar/case.ww create mode 100644 test/wcc/data/r926_sret_reject_call_arg/case.ww create mode 100644 test/wcc/data/r926_sret_reject_global/case.ww create mode 100644 test/wcc/data/r926_sret_reject_struct_field/case.ww create mode 100644 test/wcc/data/r926_sret_reject_tryprop/case.ww create mode 100644 test/wcc/data/r926_sret_reject_tryunw/case.ww create mode 100644 test/wcc/data/r926_sret_reject_typetest/case.ww create mode 100644 test/wcc/data/r926_sret_reject_widen_forward/case.ww create mode 100644 test/wcc/data/r926_tagscr_idx_sret/case.ww create mode 100644 test/wcc/data/r926_tagscr_large_small/case.ww create mode 100644 test/wcc/data/r926_tagscr_same_twice/case.ww create mode 100644 test/wcc/data/r926_tagscr_single/case.ww create mode 100644 test/wcc/data/r926_tagscr_small_large/case.ww create mode 100644 test/wcc/data/r929_memarg_reject_call_overflow/case.ww create mode 100644 test/wcc/data/r929_memarg_reject_callsrc/case.ww create mode 100644 test/wcc/data/r929_memarg_reject_param_overflow/case.ww create mode 100644 test/wcc/data/r929_memarg_reject_variadic/case.ww create mode 100644 test/wcc/data/r930_free_alloc/case.ww create mode 100644 test/wcc/data/r930_free_call_effect/case.ww create mode 100644 test/wcc/data/r930_free_field/case.ww create mode 100644 test/wcc/data/r930_free_local/case.ww create mode 100644 test/wcc/data/r930_free_loop/case.ww create mode 100644 test/wcc/data/r930_struct_tuple_header/case.ww create mode 100644 test/wcc/data/r930_struct_tuple_single/case.ww create mode 100644 test/wcc/data/r940_global_sret_assign/case.ww create mode 100644 test/wcc/data/r940_global_sret_branched/case.ww create mode 100644 test/wcc/data/r940_global_sret_local_assign/case.ww create mode 100644 test/wcc/data/r940_global_sret_local_init/case.ww create mode 100644 test/wcc/data/r940_global_sret_pointer/case.ww create mode 100644 test/wcc/data/r940_str_forrange_arg/case.ww create mode 100644 test/wcc/data/r940_str_forrange_expr/case.ww create mode 100644 test/wcc/data/r944_alias_emit_slcstr_2lvl/case.ww create mode 100644 test/wcc/data/r944_alias_emit_slctag_2lvl/case.ww create mode 100644 test/wcc/data/r946_structparam_f32f32_arg_fallback/case.ww create mode 100644 test/wcc/data/r946_structparam_f64f64_arg/case.ww create mode 100644 test/wcc/data/r946_structparam_f64i64_arg/case.ww create mode 100644 test/wcc/data/r946_structparam_i64f64_arg/case.ww create mode 100644 test/wcc/data/r946_structparam_i64i64_arg/case.ww create mode 100644 test/wcc/data/r946_structparam_scalar_plus_f64f64/case.ww create mode 100644 test/wcc/data/r946_structret_f32f32_ret_fallback/case.ww create mode 100644 test/wcc/data/r946_structret_f64f64_ret/case.ww create mode 100644 test/wcc/data/r946_structret_f64i32_ret/case.ww create mode 100644 test/wcc/data/r946_structret_i64f64_ret/case.ww create mode 100644 test/wcc/data/r946_structret_i64i64_ret/case.ww create mode 100644 test/wcc/data/r948_selfimport/case.ww create mode 100644 test/wcc/data/r949_errtype_eq_invalid_i32/case.ww create mode 100644 test/wcc/data/r949_errtype_lt_invalid_i32/case.ww create mode 100644 test/wcc/data/r949_errtype_neq_int_int/case.ww create mode 100644 test/wcc/data/r949_errtype_neq_invalid_i32/case.ww create mode 100644 test/wcc/data/r949_errtype_neq_same_error/case.ww create mode 100644 test/wcc/data/r949_intbinop_alias_vs_base/case.ww create mode 100644 test/wcc/data/r949_intbinop_enum_flag_or/case.ww create mode 100644 test/wcc/data/r949_intbinop_i32_lt_i32/case.ww create mode 100644 test/wcc/data/r949_intbinop_i32_lt_len/case.ww create mode 100644 test/wcc/data/r949_intbinop_int_and_i32/case.ww create mode 100644 test/wcc/data/r949_intbinop_int_cast_len/case.ww create mode 100644 test/wcc/data/r949_intbinop_int_lt_i64/case.ww create mode 100644 test/wcc/data/r949_intbinop_int_lt_int/case.ww create mode 100644 test/wcc/data/r949_intbinop_int_lt_len_i32/case.ww create mode 100644 test/wcc/data/r949_intbinop_int_lt_uint/case.ww create mode 100644 test/wcc/data/r949_intbinop_rune_lit_arith/case.ww create mode 100644 test/wcc/data/r951_defdim_m4095_end/case.ww create mode 100644 test/wcc/data/r951_defdim_m4_belem/case.ww create mode 100644 test/wcc/data/r951_defdim_m4_end/case.ww create mode 100644 test/wcc/data/r951_defdim_twoafter/case.ww create mode 100644 test/wcc/data/r951_defdim_xmod_pathmax/case.ww create mode 100644 test/wcc/data/r953_f64crossmod_x101_neg/case.ww create mode 100644 test/wcc/data/r953_f64crossmod_x101_trunc_neg/case.ww create mode 100644 test/wcc/data/r953_f64crossmod_x101_trunc_pos/case.ww create mode 100644 test/wcc/data/r953_f64crossmod_x98_nested_arg/case.ww create mode 100644 test/wcc/data/r953_f64crossmod_x98_xmm_pressure/case.ww create mode 100644 test/wcc/data/r956_modqual_mq_f64_i64_destr/case.ww create mode 100644 test/wcc/data/r956_modqual_mq_f64_str_destr/case.ww create mode 100644 test/wcc/data/r956_modqual_mq_i64_bool_destr/case.ww create mode 100644 test/wcc/data/r956_modqual_mq_nondestr_shadow/case.ww create mode 100644 test/wcc/data/r957_abort_bare/case.ww create mode 100644 test/wcc/data/r957_abort_msg/case.ww create mode 100644 test/wcc/data/r957_assert_fail_msg/case.ww create mode 100644 test/wcc/data/r957_assert_fail_nomsg/case.ww create mode 100644 test/wcc/data/r957_assert_imported_mod/case.ww create mode 100644 test/wcc/data/r957_assert_pass/case.ww create mode 100644 test/wcc/data/r957_assert_reject_abort_arity/case.ww create mode 100644 test/wcc/data/r957_assert_reject_abort_nonstr/case.ww create mode 100644 test/wcc/data/r957_assert_reject_assert_arity/case.ww create mode 100644 test/wcc/data/r957_assert_reject_nonbool/case.ww create mode 100644 test/wcc/data/r957_assert_shadow_samemod/case.ww create mode 100644 test/wcc/data/r957_assert_shadow_xmod/case.ww create mode 100644 test/wcc/data/r961_neg_align_of/case.ww create mode 100644 test/wcc/data/r961_neg_size_nested_array/case.ww create mode 100644 test/wcc/data/r961_neg_size_nested_struct/case.ww create mode 100644 test/wcc/data/r961_neg_size_of/case.ww create mode 100644 test/wcc/data/r961_neg_size_tagged/case.ww create mode 100644 test/wcc/data/r961_neg_size_tuple/case.ww create mode 100644 test/wcc/data/r961_pos_ptr_opaque/case.ww create mode 100644 test/wcc/data/r961_pos_slice_opaque/case.ww create mode 100644 test/wcc/data/r978_compound_deref_div_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_compound_deref_div_unsigned/case.ww create mode 100644 test/wcc/data/r978_compound_deref_mod_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_compound_ident_local_div_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_compound_ident_local_div_neg_divisor/case.ww create mode 100644 test/wcc/data/r978_compound_ident_local_div_unsigned/case.ww create mode 100644 test/wcc/data/r978_compound_ident_local_mod_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i16_div_int16_min_by_two/case.ww create mode 100644 test/wcc/data/r978_i16_div_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i16_mod_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i32_div_int32_min_by_two/case.ww create mode 100644 test/wcc/data/r978_i32_div_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i32_mod_int32_min_by_two/case.ww create mode 100644 test/wcc/data/r978_i32_mod_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i64_div_both_negative/case.ww create mode 100644 test/wcc/data/r978_i64_div_both_positive/case.ww create mode 100644 test/wcc/data/r978_i64_div_int64_min_by_two/case.ww create mode 100644 test/wcc/data/r978_i64_div_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i64_div_neg_divisor/case.ww create mode 100644 test/wcc/data/r978_i64_mod_both_negative/case.ww create mode 100644 test/wcc/data/r978_i64_mod_both_positive/case.ww create mode 100644 test/wcc/data/r978_i64_mod_int64_min_by_two/case.ww create mode 100644 test/wcc/data/r978_i64_mod_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i64_mod_neg_divisor/case.ww create mode 100644 test/wcc/data/r978_i8_div_int8_min_by_two/case.ww create mode 100644 test/wcc/data/r978_i8_div_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_i8_mod_neg_dividend/case.ww create mode 100644 test/wcc/data/r978_mixed_unsigned_rhs_picks_unsigned/case.ww create mode 100644 test/wcc/data/r978_u16_div_high_bit_set/case.ww create mode 100644 test/wcc/data/r978_u32_div_high_bit_set/case.ww create mode 100644 test/wcc/data/r978_u32_mod_high_bit_set/case.ww create mode 100644 test/wcc/data/r978_u64_div_high_bit_set/case.ww create mode 100644 test/wcc/data/r978_u64_mod_high_bit_set/case.ww create mode 100644 test/wcc/data/r978_u8_div_high_bit_set/case.ww create mode 100644 test/wcc/data/r989_ampfncollide_loud/case.ww create mode 100644 test/wcc/data/r989_ampfncollide_silent/case.ww create mode 100644 test/wcc/data/r989_callarg_array_into_ptr/case.ww create mode 100644 test/wcc/data/r989_callarg_fn_addr_reject/case.ww create mode 100644 test/wcc/data/r989_callarg_fn_bare/case.ww create mode 100644 test/wcc/data/r989_callarg_fn_cast/case.ww create mode 100644 test/wcc/data/r989_callarg_fn_match_sig/case.ww create mode 100644 test/wcc/data/r989_callarg_fn_mismatch_sig/case.ww create mode 100644 test/wcc/data/r989_callarg_let_slice_scalar/case.ww create mode 100644 test/wcc/data/r989_callarg_scalar_control/case.ww create mode 100644 test/wcc/data/r989_callarg_scalar_for_slice/case.ww create mode 100644 test/wcc/data/r989_callarg_slice_borrow/case.ww create mode 100644 test/wcc/data/r989_callarg_spread_accept/case.ww create mode 100644 test/wcc/data/r989_callarg_str_for_int/case.ww create mode 100644 test/wcc/data/r989_cata_arrlen_const/case.ww create mode 100644 test/wcc/data/r989_cata_arrlen_runtime/case.ww create mode 100644 test/wcc/data/r989_cata_break_continue_control/case.ww create mode 100644 test/wcc/data/r989_cata_break_else_outside/case.ww create mode 100644 test/wcc/data/r989_cata_break_outside/case.ww create mode 100644 test/wcc/data/r989_cata_continue_outside/case.ww create mode 100644 test/wcc/data/r989_cata_int_ops/case.ww create mode 100644 test/wcc/data/r989_cata_massign_alias/case.ww create mode 100644 test/wcc/data/r989_cata_massign_scalar/case.ww create mode 100644 test/wcc/data/r989_cata_massign_tuple/case.ww create mode 100644 test/wcc/data/r989_cata_match_mixed_yield/case.ww create mode 100644 test/wcc/data/r989_cata_match_same_yield/case.ww create mode 100644 test/wcc/data/r989_cata_size_localvar/case.ww create mode 100644 test/wcc/data/r989_cata_size_type/case.ww create mode 100644 test/wcc/data/r989_cata_str_bitand/case.ww create mode 100644 test/wcc/data/r989_cata_str_lt/case.ww create mode 100644 test/wcc/data/r989_cata_str_plus/case.ww create mode 100644 test/wcc/data/r989_cata_tilde_str/case.ww create mode 100644 test/wcc/data/r989_cata_try_single/case.ww create mode 100644 test/wcc/data/r989_cata_try_spread_multisuccess/case.ww create mode 100644 test/wcc/data/r989_cata_tuple_match/case.ww create mode 100644 test/wcc/data/r989_cata_tuple_overlong/case.ww create mode 100644 test/wcc/data/r989_cata_tuple_short/case.ww create mode 100644 test/wcc/data/r989_declns_builtin_redecl/case.ww create mode 100644 test/wcc/data/r989_declns_dup_def/case.ww create mode 100644 test/wcc/data/r989_declns_dup_fn/case.ww create mode 100644 test/wcc/data/r989_declns_dup_let/case.ww create mode 100644 test/wcc/data/r989_defercap_17/case.ww create mode 100644 test/wcc/data/r989_defercap_at_32/case.ww create mode 100644 test/wcc/data/r989_defercap_over_33/case.ww create mode 100644 test/wcc/data/r989_fmt_idx_2147483648/case.ww create mode 100644 test/wcc/data/r989_fmt_idx_2147483649/case.ww create mode 100644 test/wcc/data/r989_fmt_idx_9999999999/case.ww create mode 100644 test/wcc/data/r989_fmt_prec_2147483647/case.ww create mode 100644 test/wcc/data/r989_fmt_width_2147483648/case.ww create mode 100644 test/wcc/data/r989_intoverflow_dec_huge/case.ww create mode 100644 test/wcc/data/r989_intoverflow_dec_overflow/case.ww create mode 100644 test/wcc/data/r989_intoverflow_hex_overflow/case.ww create mode 100644 test/wcc/data/r989_intoverflow_u64max_dec_ok/case.ww create mode 100644 test/wcc/data/r989_intoverflow_u64max_hex_ok/case.ww create mode 100644 test/wcc/data/r989_libprecond_decodedsize_aligned/case.ww create mode 100644 test/wcc/data/r989_libprecond_u32n_one/case.ww create mode 100644 test/wcc/data/r989_libprecond_u32n_valid/case.ww create mode 100644 test/wcc/data/r989_libprecond_u64n_one/case.ww create mode 100644 test/wcc/data/r989_libprecond_u64n_valid/case.ww create mode 100644 test/wcc/data/r989_loopcap_at_16/case.ww create mode 100644 test/wcc/data/r989_loopcap_over_17/case.ww create mode 100644 test/wcc/data/r989_m1union_all_arms/case.ww create mode 100644 test/wcc/data/r989_m1union_done/case.ww create mode 100644 test/wcc/data/r989_m1union_invalid/case.ww create mode 100644 test/wcc/data/r989_m1union_more/case.ww create mode 100644 test/wcc/data/r989_m1union_rune/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_as/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_inline/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_is/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_match/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_nil_init/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_nonnull_control/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_plain_ptr_control/case.ww create mode 100644 test/wcc/data/r989_nullableglobal_void_init/case.ww create mode 100644 test/wcc/data/r989_tagderef_ampeq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_careteq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_lshifteq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_minuseq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_percenteq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_pipeeq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_plain_store_control/case.ww create mode 100644 test/wcc/data/r989_tagderef_pluseq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_rshifteq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_scalar_int_control/case.ww create mode 100644 test/wcc/data/r989_tagderef_scalar_u8_control/case.ww create mode 100644 test/wcc/data/r989_tagderef_slasheq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagderef_stareq_tagged_deref/case.ww create mode 100644 test/wcc/data/r989_tagplace_gident_pluseq/case.ww create mode 100644 test/wcc/data/r989_tagplace_gidx_careteq/case.ww create mode 100644 test/wcc/data/r989_tagplace_gidx_pluseq/case.ww create mode 100644 test/wcc/data/r989_tagplace_gidx_stareq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_careteq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_lshifteq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_minuseq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_pipeeq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_pluseq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_slasheq/case.ww create mode 100644 test/wcc/data/r989_tagplace_ident_stareq/case.ww create mode 100644 test/wcc/data/r989_tagplace_lidx_lshifteq/case.ww create mode 100644 test/wcc/data/r989_tagplace_lidx_minuseq/case.ww create mode 100644 test/wcc/data/r989_tagplace_lidx_pipeeq/case.ww create mode 100644 test/wcc/data/r989_tagplace_lidx_pluseq/case.ww create mode 100644 test/wcc/data/r989_tagplace_plain_gidx_control/case.ww create mode 100644 test/wcc/data/r989_tagplace_plain_ident_control/case.ww create mode 100644 test/wcc/data/r989_tagplace_plain_lidx_control/case.ww create mode 100644 test/wcc/data/r989_tagplace_scalar_ident_control/case.ww create mode 100644 test/wcc/data/r989_tagplace_scalar_index_control/case.ww create mode 100644 test/wcc/data/r989_tagsubset_concrete_spread/case.ww create mode 100644 test/wcc/data/r989_tagsubset_flatten_subset/case.ww create mode 100644 test/wcc/data/r989_tagsubset_nested_wrap/case.ww create mode 100644 test/wcc/data/r989_tagsubset_slice_subset/case.ww create mode 100644 test/wcc/data/r989_tagsubset_spread_named_case/case.ww create mode 100644 test/wcc/data/r989_tagsubset_spread_wider/case.ww create mode 100644 test/wcc/data/r989_tagsubset_wide_narrow/case.ww create mode 100644 test/wcc/data/r989_trycallcollide_call/case.ww create mode 100644 test/wcc/data/r989_trycallcollide_control/case.ww create mode 100644 test/wcc/data/r989_unknowndecl_clean_ok/case.ww create mode 100644 test/wcc/data/r989_unknowndecl_decls_ok/case.ww create mode 100644 test/wcc/data/r989_unknowndecl_misspelled_fn/case.ww create mode 100644 test/wcc/data/r989_unknowndecl_stray_block/case.ww create mode 100644 test/wcc/data/r989_unknowndecl_stray_idents/case.ww diff --git a/test/wcc/data/alias_fsarg2_bound/case.ww b/test/wcc/data/alias_fsarg2_bound/case.ww new file mode 100644 index 00000000..47f2f036 --- /dev/null +++ b/test/wcc/data/alias_fsarg2_bound/case.ww @@ -0,0 +1,18 @@ +//ww:error c "#271/#165: float-bearing struct arg from a non-ident source" ww "#272/#276/#277: aggregate return reaches scalar default" +package main; + +type fs0 = struct { x: f64 }; +type fs = fs0; + +fn mk() fs = { + let s: fs; + s.x = 2.5; + return s; +}; + +fn g(p: fs) f64 = { return p.x; }; + +export fn main() i32 = { + if (g(mk()) != 2.5) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/arrlit_slice_assign_named_accept/case.ww b/test/wcc/data/arrlit_slice_assign_named_accept/case.ww new file mode 100644 index 00000000..4da72fd3 --- /dev/null +++ b/test/wcc/data/arrlit_slice_assign_named_accept/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 1 +package main; + +export fn main() i32 = { + let a: [3]i32 = [1, 2, 3]; + let s: []i32 = a[0:1]; + s = a; + return s[0]; +}; diff --git a/test/wcc/data/arrlit_slice_reject_assign/case.ww b/test/wcc/data/arrlit_slice_reject_assign/case.ww new file mode 100644 index 00000000..c36d2214 --- /dev/null +++ b/test/wcc/data/arrlit_slice_reject_assign/case.ww @@ -0,0 +1,8 @@ +//ww:error c "cannot assign [3]int to []i32" ww "array literal cannot borrow as a slice here; bind it to a `let` first" +package main; + +export fn main() i32 = { + let s: []i32 = [0, 0]; + s = [1, 2, 3]; + return s[0]; +}; diff --git a/test/wcc/data/r56_cast_i16_high_bits/case.ww b/test/wcc/data/r56_cast_i16_high_bits/case.ww new file mode 100644 index 00000000..2a081a97 --- /dev/null +++ b/test/wcc/data/r56_cast_i16_high_bits/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0xFFFF8000i64; + let y: i16 = x: i16; + let z: i64 = y: i64; + if (z == -32768i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i16_low_negative/case.ww b/test/wcc/data/r56_cast_i16_low_negative/case.ww new file mode 100644 index 00000000..08154fc7 --- /dev/null +++ b/test/wcc/data/r56_cast_i16_low_negative/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0x8000i64; + let y: i16 = x: i16; + let z: i64 = y: i64; + if (z == -32768i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i32_high_bits/case.ww b/test/wcc/data/r56_cast_i32_high_bits/case.ww new file mode 100644 index 00000000..9d90076e --- /dev/null +++ b/test/wcc/data/r56_cast_i32_high_bits/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = -2147483648i64; + let y: i32 = x: i32; + let z: i64 = y: i64; + if (z == -2147483648i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i32_low_negative/case.ww b/test/wcc/data/r56_cast_i32_low_negative/case.ww new file mode 100644 index 00000000..10ebf2d5 --- /dev/null +++ b/test/wcc/data/r56_cast_i32_low_negative/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0x80000000i64; + let y: i32 = x: i32; + let z: i64 = y: i64; + if (z == -2147483648i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i32_wrap_positive/case.ww b/test/wcc/data/r56_cast_i32_wrap_positive/case.ww new file mode 100644 index 00000000..94507302 --- /dev/null +++ b/test/wcc/data/r56_cast_i32_wrap_positive/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0x80000000i64; + let y: i32 = (x - 1i64): i32; + let z: i64 = y: i64; + if (z == 2147483647i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i8_high_bits/case.ww b/test/wcc/data/r56_cast_i8_high_bits/case.ww new file mode 100644 index 00000000..71120b62 --- /dev/null +++ b/test/wcc/data/r56_cast_i8_high_bits/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0xFFFFFF80i64; + let y: i8 = x: i8; + let z: i64 = y: i64; + if (z == -128i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i8_low_negative/case.ww b/test/wcc/data/r56_cast_i8_low_negative/case.ww new file mode 100644 index 00000000..91773a67 --- /dev/null +++ b/test/wcc/data/r56_cast_i8_low_negative/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0x80i64; + let y: i8 = x: i8; + let z: i64 = y: i64; + if (z == -128i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i8_positive_max/case.ww b/test/wcc/data/r56_cast_i8_positive_max/case.ww new file mode 100644 index 00000000..a82d42a1 --- /dev/null +++ b/test/wcc/data/r56_cast_i8_positive_max/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i64 = 0x7Fi64; + let y: i8 = x: i8; + let z: i64 = y: i64; + if (z == 127i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_i8bang_signed/case.ww b/test/wcc/data/r56_cast_i8bang_signed/case.ww new file mode 100644 index 00000000..9967b224 --- /dev/null +++ b/test/wcc/data/r56_cast_i8bang_signed/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type i8x = !i8; +fn main() i32 = { + let y: i8x = 0xFF80i64: i8x; + let z: i64 = y: i64; + if (z == -128i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_cast_u8bang_unsigned/case.ww b/test/wcc/data/r56_cast_u8bang_unsigned/case.ww new file mode 100644 index 00000000..d5550a61 --- /dev/null +++ b/test/wcc/data/r56_cast_u8bang_unsigned/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type u8x = !u8; +fn main() i32 = { + let y: u8x = 0x1FFu64: u8x; + let z: u64 = y: u64; + if (z == 0xFFu64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r56_def_negative_i32/case.ww b/test/wcc/data/r56_def_negative_i32/case.ww new file mode 100644 index 00000000..05f1727e --- /dev/null +++ b/test/wcc/data/r56_def_negative_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +def NEG: i32 = -100; +fn main() i32 = { + let x: i32 = NEG; + if (x == -100) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r56_def_negative_i64/case.ww b/test/wcc/data/r56_def_negative_i64/case.ww new file mode 100644 index 00000000..16dc5c9f --- /dev/null +++ b/test/wcc/data/r56_def_negative_i64/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +def NEG: i64 = -1234567890i64; +fn main() i32 = { + let x: i64 = NEG; + if (x == -1234567890i64) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r56_def_positive_i32/case.ww b/test/wcc/data/r56_def_positive_i32/case.ww new file mode 100644 index 00000000..bf554f75 --- /dev/null +++ b/test/wcc/data/r56_def_positive_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +def POS: i32 = 100; +fn main() i32 = { + let x: i32 = POS; + if (x == 100) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r56_def_tilde_i32/case.ww b/test/wcc/data/r56_def_tilde_i32/case.ww new file mode 100644 index 00000000..8069cb47 --- /dev/null +++ b/test/wcc/data/r56_def_tilde_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +def NTIL: i32 = ~0; +fn main() i32 = { + let x: i32 = NTIL; + if (x == -1) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r56_def_tilde_u32/case.ww b/test/wcc/data/r56_def_tilde_u32/case.ww new file mode 100644 index 00000000..bede0d35 --- /dev/null +++ b/test/wcc/data/r56_def_tilde_u32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +def UMAX: u32 = ~0u32; +fn main() i32 = { + let x: u32 = UMAX; + if (x == 4294967295u32) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r56_def_unary_plus_i32/case.ww b/test/wcc/data/r56_def_unary_plus_i32/case.ww new file mode 100644 index 00000000..2c3fd865 --- /dev/null +++ b/test/wcc/data/r56_def_unary_plus_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +def P: i32 = +5; +fn main() i32 = { + let x: i32 = P; + if (x == 5) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r56_strarg_local_chain/case.ww b/test/wcc/data/r56_strarg_local_chain/case.ww new file mode 100644 index 00000000..6837fa12 --- /dev/null +++ b/test/wcc/data/r56_strarg_local_chain/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +type inner = struct { s: str, pad: i32 }; +type outer = struct { i: inner, tag: i32 }; +fn slen(s: str) i32 = { return s.len: i32; }; +fn main() i32 = { + let o: outer; o.i.s = "qrstuvw"; + if (slen(o.i.s) != 7) { return 1; }; + return 42; +}; diff --git a/test/wcc/data/r56_strarg_ptr_chain/case.ww b/test/wcc/data/r56_strarg_ptr_chain/case.ww new file mode 100644 index 00000000..eaddf4ec --- /dev/null +++ b/test/wcc/data/r56_strarg_ptr_chain/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type inner = struct { s: str, pad: i32 }; +type outer = struct { i: inner, tag: i32 }; +fn slen(s: str) i32 = { return s.len: i32; }; +fn main() i32 = { + let o: outer; o.i.s = "abcdef"; + let p: *outer = &o; + if (slen(p.i.s) != 6) { return 1; }; + return 42; +}; diff --git a/test/wcc/data/r56_strarg_ptr_field/case.ww b/test/wcc/data/r56_strarg_ptr_field/case.ww new file mode 100644 index 00000000..87acd587 --- /dev/null +++ b/test/wcc/data/r56_strarg_ptr_field/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +type outer = struct { s: str, x: i32 }; +fn slen(s: str) i32 = { return s.len: i32; }; +fn main() i32 = { + let o: outer; o.s = "hello"; + let p: *outer = &o; + if (slen(p.s) != 5) { return 1; }; + return 42; +}; diff --git a/test/wcc/data/r630_global_address/case.ww b/test/wcc/data/r630_global_address/case.ww new file mode 100644 index 00000000..cb12274b --- /dev/null +++ b/test/wcc/data/r630_global_address/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 55 +package main; +let counter: i32 = 11; +fn main() i32 = { let p: *i32 = &counter; *p = 55; return counter; }; diff --git a/test/wcc/data/r630_global_assign/case.ww b/test/wcc/data/r630_global_assign/case.ww new file mode 100644 index 00000000..ae00fbb6 --- /dev/null +++ b/test/wcc/data/r630_global_assign/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 99 +package main; +let counter: i32 = 0; +fn main() i32 = { counter = 99; return counter; }; diff --git a/test/wcc/data/r630_global_compound/case.ww b/test/wcc/data/r630_global_compound/case.ww new file mode 100644 index 00000000..f7187d0a --- /dev/null +++ b/test/wcc/data/r630_global_compound/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 4 +package main; +let counter: i32 = 1; +fn inc() void = { counter += 1; }; +fn main() i32 = { inc(); inc(); inc(); return counter; }; diff --git a/test/wcc/data/r630_global_f32_literal/case.ww b/test/wcc/data/r630_global_f32_literal/case.ww new file mode 100644 index 00000000..7c08c1ae --- /dev/null +++ b/test/wcc/data/r630_global_f32_literal/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 4 +package main; +let half: f32 = 4.25; +fn main() i32 = { return half: i32; }; diff --git a/test/wcc/data/r630_global_f64_arith/case.ww b/test/wcc/data/r630_global_f64_arith/case.ww new file mode 100644 index 00000000..7bebf683 --- /dev/null +++ b/test/wcc/data/r630_global_f64_arith/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 11 +package main; +let a: f64 = 7.5; +let b: f64 = 4.25; +fn main() i32 = { let s: f64 = a + b; return s: i32; }; diff --git a/test/wcc/data/r630_global_f64_literal/case.ww b/test/wcc/data/r630_global_f64_literal/case.ww new file mode 100644 index 00000000..ca02367e --- /dev/null +++ b/test/wcc/data/r630_global_f64_literal/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +let pi: f64 = 7.5; +fn main() i32 = { return pi: i32; }; diff --git a/test/wcc/data/r630_global_f64_reassign/case.ww b/test/wcc/data/r630_global_f64_reassign/case.ww new file mode 100644 index 00000000..469dde3f --- /dev/null +++ b/test/wcc/data/r630_global_f64_reassign/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +let pi: f64 = 1.0; +fn main() i32 = { pi = 7.5; return pi: i32; }; diff --git a/test/wcc/data/r630_global_f64_zero_init/case.ww b/test/wcc/data/r630_global_f64_zero_init/case.ww new file mode 100644 index 00000000..ea74ad6d --- /dev/null +++ b/test/wcc/data/r630_global_f64_zero_init/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 0 +package main; +let z: f64; +fn main() i32 = { return z: i32; }; diff --git a/test/wcc/data/r630_global_narrow_field/case.ww b/test/wcc/data/r630_global_narrow_field/case.ww new file mode 100644 index 00000000..833945c6 --- /dev/null +++ b/test/wcc/data/r630_global_narrow_field/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type packet = struct { hdr: u8, body: u32 }; +let pkt: packet; +fn main() i32 = { pkt.hdr = 42u8; pkt.body = 999u32; return pkt.hdr: i32; }; diff --git a/test/wcc/data/r630_global_read/case.ww b/test/wcc/data/r630_global_read/case.ww new file mode 100644 index 00000000..59f065aa --- /dev/null +++ b/test/wcc/data/r630_global_read/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +let counter: i32 = 42; +fn main() i32 = { return counter; }; diff --git a/test/wcc/data/r630_global_slice_cap_raw/case.ww b/test/wcc/data/r630_global_slice_cap_raw/case.ww new file mode 100644 index 00000000..2414233f --- /dev/null +++ b/test/wcc/data/r630_global_slice_cap_raw/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 99 +package main; +let buf: []u8; +fn main() i32 = { let p: *u64 = (&buf): *u64; p[2] = 99u64; return buf.cap: i32; }; diff --git a/test/wcc/data/r630_global_slice_reassign/case.ww b/test/wcc/data/r630_global_slice_reassign/case.ww new file mode 100644 index 00000000..40ad9a2c --- /dev/null +++ b/test/wcc/data/r630_global_slice_reassign/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 106 +package main; +let dst: []u8; +let src: []u8; +fn main() i32 = { + let p: *u64 = (&src): *u64; + p[0] = 0x1000u64; p[1] = 7u64; p[2] = 99u64; + dst = src; + return dst.len: i32 + dst.cap: i32; +}; diff --git a/test/wcc/data/r630_global_slice_zero_init/case.ww b/test/wcc/data/r630_global_slice_zero_init/case.ww new file mode 100644 index 00000000..ac4c9f88 --- /dev/null +++ b/test/wcc/data/r630_global_slice_zero_init/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 0 +package main; +let buf: []u8; +fn main() i32 = { return (buf.len + buf.cap): i32; }; diff --git a/test/wcc/data/r630_global_str_literal/case.ww b/test/wcc/data/r630_global_str_literal/case.ww new file mode 100644 index 00000000..9580c2c5 --- /dev/null +++ b/test/wcc/data/r630_global_str_literal/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 11 +package main; +let g: str = "hello world"; +fn main() i32 = { return g.len: i32; }; diff --git a/test/wcc/data/r630_global_str_literal_bytes/case.ww b/test/wcc/data/r630_global_str_literal_bytes/case.ww new file mode 100644 index 00000000..61ef6a03 --- /dev/null +++ b/test/wcc/data/r630_global_str_literal_bytes/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 104 +package main; +let g: str = "hello"; +fn main() i32 = { let p: *u8 = g.ptr; return p[0]: i32; }; diff --git a/test/wcc/data/r630_global_str_reassign/case.ww b/test/wcc/data/r630_global_str_reassign/case.ww new file mode 100644 index 00000000..dd303067 --- /dev/null +++ b/test/wcc/data/r630_global_str_reassign/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 7 +package main; +let msg: str; +fn set(s: str) void = { msg = s; }; +fn main() i32 = { set("abcdefg"); return msg.len: i32; }; diff --git a/test/wcc/data/r630_global_str_zero_init/case.ww b/test/wcc/data/r630_global_str_zero_init/case.ww new file mode 100644 index 00000000..06a45982 --- /dev/null +++ b/test/wcc/data/r630_global_str_zero_init/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +let msg: str; +fn main() i32 = { msg = "hello"; return msg.len: i32; }; diff --git a/test/wcc/data/r630_global_struct_compound/case.ww b/test/wcc/data/r630_global_struct_compound/case.ww new file mode 100644 index 00000000..20a4d398 --- /dev/null +++ b/test/wcc/data/r630_global_struct_compound/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type counter = struct { n: i64 }; +let c: counter; +fn bump(d: i64) void = { c.n += d; }; +fn main() i32 = { bump(10i64); bump(15i64); bump(17i64); return c.n: i32; }; diff --git a/test/wcc/data/r630_global_struct_fields/case.ww b/test/wcc/data/r630_global_struct_fields/case.ww new file mode 100644 index 00000000..0da120c6 --- /dev/null +++ b/test/wcc/data/r630_global_struct_fields/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type point = struct { x: i32, y: i32 }; +let p: point; +fn main() i32 = { p.x = 7; p.y = 35; return p.x + p.y; }; diff --git a/test/wcc/data/r630_global_tagged_i64/case.ww b/test/wcc/data/r630_global_tagged_i64/case.ww new file mode 100644 index 00000000..3d1f7a82 --- /dev/null +++ b/test/wcc/data/r630_global_tagged_i64/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 42 +package main; +type tok = (i64 | str | void); +type ent = struct { id: i32, t: tok }; +let e: ent; +fn main() i32 = { + e.t = 42i64: tok; + let v: tok = e.t; + match (v) { + case let n: i64 => return n: i32; + case let s: str => return 1; + case void => return 2; + }; + return 0; +}; diff --git a/test/wcc/data/r630_global_tagged_str/case.ww b/test/wcc/data/r630_global_tagged_str/case.ww new file mode 100644 index 00000000..2b5b7415 --- /dev/null +++ b/test/wcc/data/r630_global_tagged_str/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 5 +package main; +type tok = (i64 | str | void); +type ent = struct { id: i32, t: tok }; +let e: ent; +fn main() i32 = { + e.t = "hello"; + let v: tok = e.t; + match (v) { + case let n: i64 => return 1; + case let s: str => return s.len: i32; + case void => return 2; + }; + return 0; +}; diff --git a/test/wcc/data/r630_global_tagged_void/case.ww b/test/wcc/data/r630_global_tagged_void/case.ww new file mode 100644 index 00000000..d26d478a --- /dev/null +++ b/test/wcc/data/r630_global_tagged_void/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 7 +package main; +type tok = (i64 | str | void); +type ent = struct { id: i32, t: tok }; +let e: ent; +fn main() i32 = { + e.t = void; + let v: tok = e.t; + match (v) { + case let n: i64 => return 1; + case let s: str => return 2; + case void => return 7; + }; + return 0; +}; diff --git a/test/wcc/data/r630_global_u64_read/case.ww b/test/wcc/data/r630_global_u64_read/case.ww new file mode 100644 index 00000000..378ca261 --- /dev/null +++ b/test/wcc/data/r630_global_u64_read/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 123 +package main; +let val: u64 = 123u64; +fn main() i32 = { return val: i32; }; diff --git a/test/wcc/data/r630_global_zero_init/case.ww b/test/wcc/data/r630_global_zero_init/case.ww new file mode 100644 index 00000000..b2760b93 --- /dev/null +++ b/test/wcc/data/r630_global_zero_init/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +let counter: i32; +fn main() i32 = { counter = 7; return counter; }; diff --git a/test/wcc/data/r630_local_slice_reassign/case.ww b/test/wcc/data/r630_local_slice_reassign/case.ww new file mode 100644 index 00000000..dfee0115 --- /dev/null +++ b/test/wcc/data/r630_local_slice_reassign/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 4 +package main; +fn main() i32 = { + let arr: [16]u8; + let i: i32 = 0; + for (i < 16) { arr[i] = i: u8; i += 1; }; + let s: []u8 = arr[3:10]; + s = arr[1:5]; + return s.len: i32; +}; diff --git a/test/wcc/data/r630_local_slice_return/case.ww b/test/wcc/data/r630_local_slice_return/case.ww new file mode 100644 index 00000000..3da1b058 --- /dev/null +++ b/test/wcc/data/r630_local_slice_return/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +fn mkslice() []u8 = { let arr: [16]u8; return arr[3:9]; }; +fn main() i32 = { let s: []u8 = mkslice(); return s.len: i32; }; diff --git a/test/wcc/data/r650_alias_local_write_ptr_read/case.ww b/test/wcc/data/r650_alias_local_write_ptr_read/case.ww new file mode 100644 index 00000000..98258d9f --- /dev/null +++ b/test/wcc/data/r650_alias_local_write_ptr_read/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn get(o: *outer) i32 = { return o.i.a; }; +fn main() i32 = { let o: outer; o.i.a = 0; o.i.b = 0; o.x = 0; let p: *outer = &o; o.i.a = 42; return get(p); }; diff --git a/test/wcc/data/r650_alias_ptr_write_local_read/case.ww b/test/wcc/data/r650_alias_ptr_write_local_read/case.ww new file mode 100644 index 00000000..d9fbb94e --- /dev/null +++ b/test/wcc/data/r650_alias_ptr_write_local_read/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn main() i32 = { let o: outer; o.i.a = 0; o.i.b = 0; o.x = 0; let p: *outer = &o; p.i.a = 42; return o.i.a; }; diff --git a/test/wcc/data/r650_global_root/case.ww b/test/wcc/data/r650_global_root/case.ww new file mode 100644 index 00000000..36c2d7be --- /dev/null +++ b/test/wcc/data/r650_global_root/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 14 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +let g: outer; +fn main() i32 = { g.i.a = 11; g.x = 3; return g.i.a + g.x; }; diff --git a/test/wcc/data/r650_i32_leaf/case.ww b/test/wcc/data/r650_i32_leaf/case.ww new file mode 100644 index 00000000..9ddcb379 --- /dev/null +++ b/test/wcc/data/r650_i32_leaf/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type holder = struct { val: i32, pad: i32 }; +type box = struct { h: holder, tag: i32 }; +fn main() i32 = { let b: box; b.h.val = 0x12345; b.h.pad = 0; b.tag = 0; if (b.h.val == 0x12345) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_2deep_read/case.ww b/test/wcc/data/r650_ptr_2deep_read/case.ww new file mode 100644 index 00000000..3b2ba8da --- /dev/null +++ b/test/wcc/data/r650_ptr_2deep_read/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 7 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn get(o: *outer) i32 = { return o.i.a; }; +fn main() i32 = { let v: outer; v.i.a = 7; v.i.b = 0; v.x = 0; return get(&v); }; diff --git a/test/wcc/data/r650_ptr_2deep_write/case.ww b/test/wcc/data/r650_ptr_2deep_write/case.ww new file mode 100644 index 00000000..ba3d4d61 --- /dev/null +++ b/test/wcc/data/r650_ptr_2deep_write/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 5 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn set(o: *outer) void = { o.i.a = 5; }; +fn main() i32 = { let v: outer; v.i.a = 0; v.i.b = 0; v.x = 0; set(&v); return v.i.a; }; diff --git a/test/wcc/data/r650_ptr_3deep/case.ww b/test/wcc/data/r650_ptr_3deep/case.ww new file mode 100644 index 00000000..3b2f98de --- /dev/null +++ b/test/wcc/data/r650_ptr_3deep/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 9 +package main; +type a3 = struct { x: i32 }; +type a2 = struct { a: a3 }; +type a1 = struct { a: a2 }; +fn put(p: *a1) void = { p.a.a.x = 9; }; +fn get(p: *a1) i32 = { return p.a.a.x; }; +fn main() i32 = { let v: a1; v.a.a.x = 0; put(&v); return get(&v); }; diff --git a/test/wcc/data/r650_ptr_f64_leaf/case.ww b/test/wcc/data/r650_ptr_f64_leaf/case.ww new file mode 100644 index 00000000..7bbe3f85 --- /dev/null +++ b/test/wcc/data/r650_ptr_f64_leaf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { v: f64, pad: i32 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = 0.5f64; }; +fn main() i32 = { let b: box; b.h.v = 0.0f64; b.h.pad = 0; b.tag = 0; put(&b); if (b.h.v == 0.5f64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_i16_leaf/case.ww b/test/wcc/data/r650_ptr_i16_leaf/case.ww new file mode 100644 index 00000000..6059bc22 --- /dev/null +++ b/test/wcc/data/r650_ptr_i16_leaf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { v: i16, pad: i16 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = 4321i16; }; +fn main() i32 = { let b: box; b.h.v = 0i16; b.h.pad = 0i16; b.tag = 0; put(&b); if (b.h.v == 4321i16) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_i16_negative/case.ww b/test/wcc/data/r650_ptr_i16_negative/case.ww new file mode 100644 index 00000000..7ae5e98f --- /dev/null +++ b/test/wcc/data/r650_ptr_i16_negative/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { v: i16, pad: i16 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = -7i16; }; +fn main() i32 = { let b: box; b.h.v = 0i16; b.h.pad = 0i16; b.tag = 0; put(&b); let r: i32 = b.h.v: i32; if (r == -7) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_i32_leaf/case.ww b/test/wcc/data/r650_ptr_i32_leaf/case.ww new file mode 100644 index 00000000..b5f90a85 --- /dev/null +++ b/test/wcc/data/r650_ptr_i32_leaf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { v: i32, pad: i32 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = 0x12345; }; +fn main() i32 = { let b: box; b.h.v = 0; b.h.pad = 0; b.tag = 0; put(&b); if (b.h.v == 0x12345) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_i32_negative/case.ww b/test/wcc/data/r650_ptr_i32_negative/case.ww new file mode 100644 index 00000000..f9aac600 --- /dev/null +++ b/test/wcc/data/r650_ptr_i32_negative/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { v: i32, pad: i32 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = -7; }; +fn main() i32 = { let b: box; b.h.v = 0; b.h.pad = 0; b.tag = 0; put(&b); if (b.h.v < 0) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_i8_negative/case.ww b/test/wcc/data/r650_ptr_i8_negative/case.ww new file mode 100644 index 00000000..50e3f942 --- /dev/null +++ b/test/wcc/data/r650_ptr_i8_negative/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { v: i8, pad: i8 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = -7i8; }; +fn main() i32 = { let b: box; b.h.v = 0i8; b.h.pad = 0i8; b.tag = 0; put(&b); let r: i32 = b.h.v: i32; if (r == -7) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_local/case.ww b/test/wcc/data/r650_ptr_local/case.ww new file mode 100644 index 00000000..89f59a11 --- /dev/null +++ b/test/wcc/data/r650_ptr_local/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 13 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn main() i32 = { let v: outer; v.i.a = 0; v.i.b = 0; v.x = 0; let p: *outer = &v; p.i.a = 13; return p.i.a; }; diff --git a/test/wcc/data/r650_ptr_single_read/case.ww b/test/wcc/data/r650_ptr_single_read/case.ww new file mode 100644 index 00000000..ad8489d9 --- /dev/null +++ b/test/wcc/data/r650_ptr_single_read/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type outer = struct { f: i32, g: i32 }; +fn get(o: *outer) i32 = { return o.f; }; +fn main() i32 = { let x: outer; x.f = 42; x.g = 0; return get(&x); }; diff --git a/test/wcc/data/r650_ptr_single_write/case.ww b/test/wcc/data/r650_ptr_single_write/case.ww new file mode 100644 index 00000000..c9f74f53 --- /dev/null +++ b/test/wcc/data/r650_ptr_single_write/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type outer = struct { f: i32, g: i32 }; +fn set(o: *outer) void = { o.f = 42; }; +fn main() i32 = { let x: outer; x.f = 0; x.g = 0; set(&x); return x.f; }; diff --git a/test/wcc/data/r650_ptr_slice_pseudo/case.ww b/test/wcc/data/r650_ptr_slice_pseudo/case.ww new file mode 100644 index 00000000..5f20d52f --- /dev/null +++ b/test/wcc/data/r650_ptr_slice_pseudo/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 5 +package main; +type bag = struct { buf: []u8, x: i32 }; +fn setlen(b: *bag, n: i32) void = { b.buf.len = n; }; +fn main() i32 = { let b: bag; let nope: []u8; b.buf = nope; b.x = 0; setlen(&b, 5); return b.buf.len: i32; }; diff --git a/test/wcc/data/r650_ptr_str_leaf/case.ww b/test/wcc/data/r650_ptr_str_leaf/case.ww new file mode 100644 index 00000000..95800416 --- /dev/null +++ b/test/wcc/data/r650_ptr_str_leaf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type holder = struct { s: str, pad: i32 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.s = "abc"; }; +fn main() i32 = { let b: box; let empty: str; b.h.s = empty; b.h.pad = 0; b.tag = 0; put(&b); if (b.h.s.len == 3) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_ptr_u8_leaf/case.ww b/test/wcc/data/r650_ptr_u8_leaf/case.ww new file mode 100644 index 00000000..ce302eff --- /dev/null +++ b/test/wcc/data/r650_ptr_u8_leaf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 99 +package main; +type holder = struct { v: u8, pad: u8 }; +type box = struct { h: holder, tag: i32 }; +fn put(b: *box) void = { b.h.v = 99u8; }; +fn main() i32 = { let b: box; b.h.v = 0u8; b.h.pad = 0u8; b.tag = 0; put(&b); return b.h.v: i32; }; diff --git a/test/wcc/data/r650_slice_field_pseudo/case.ww b/test/wcc/data/r650_slice_field_pseudo/case.ww new file mode 100644 index 00000000..43fc54d5 --- /dev/null +++ b/test/wcc/data/r650_slice_field_pseudo/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 5 +package main; +type bag = struct { buf: []u8, x: i32 }; +fn main() i32 = { + let arr: [8]u8; let i: i32 = 0; + for (i < 8) { arr[i] = i: u8; i = i + 1; }; + let b: bag; b.buf.ptr = &arr[0]; b.buf.len = 5; b.buf.cap = 8; b.x = 0; + return b.buf.len; +}; diff --git a/test/wcc/data/r650_u32_leaf/case.ww b/test/wcc/data/r650_u32_leaf/case.ww new file mode 100644 index 00000000..51f52b66 --- /dev/null +++ b/test/wcc/data/r650_u32_leaf/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type holder = struct { val: u32, pad: u32 }; +type box = struct { h: holder, tag: i32 }; +fn main() i32 = { let b: box; b.h.val = 4321u32; b.h.pad = 0u32; b.tag = 0; if (b.h.val == 4321u32) { return 42; }; return 0; }; diff --git a/test/wcc/data/r650_u8_leaf/case.ww b/test/wcc/data/r650_u8_leaf/case.ww new file mode 100644 index 00000000..c0ae34dc --- /dev/null +++ b/test/wcc/data/r650_u8_leaf/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 99 +package main; +type holder = struct { val: u8, pad: u8 }; +type box = struct { h: holder, tag: i32 }; +fn main() i32 = { let b: box; b.h.val = 99u8; b.h.pad = 0u8; b.tag = 0; return b.h.val: i32; }; diff --git a/test/wcc/data/r650_value_2deep_read_write/case.ww b/test/wcc/data/r650_value_2deep_read_write/case.ww new file mode 100644 index 00000000..4d27a92a --- /dev/null +++ b/test/wcc/data/r650_value_2deep_read_write/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 15 +package main; +type inner = struct { a: i32, b: i32, c: i32 }; +type outer = struct { i: inner, x: i32 }; +fn main() i32 = { let o: outer; o.i.a = 10; o.x = 5; return o.i.a + o.x; }; diff --git a/test/wcc/data/r650_value_3deep/case.ww b/test/wcc/data/r650_value_3deep/case.ww new file mode 100644 index 00000000..6588f4c0 --- /dev/null +++ b/test/wcc/data/r650_value_3deep/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 7 +package main; +type a3 = struct { a: i32 }; +type a2 = struct { a: a3 }; +type a1 = struct { a: a2 }; +fn main() i32 = { let v: a1; v.a.a.a = 7; return v.a.a.a; }; diff --git a/test/wcc/data/r660_alias_i8_cast_narrow/case.ww b/test/wcc/data/r660_alias_i8_cast_narrow/case.ww new file mode 100644 index 00000000..5bbb947b --- /dev/null +++ b/test/wcc/data/r660_alias_i8_cast_narrow/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type myflag = i8; +fn main() i32 = { let x: i64 = 0xFF80i64; let y: myflag = x: myflag; let z: i64 = y: i64; if (z == -128i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_alias_i8_field/case.ww b/test/wcc/data/r660_alias_i8_field/case.ww new file mode 100644 index 00000000..251ccb0e --- /dev/null +++ b/test/wcc/data/r660_alias_i8_field/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type myflag = i8; +type box = struct { v: myflag, pad: i8 }; +fn main() i32 = { let b: box; b.v = -1i64: myflag; b.pad = 0i8; let z: i64 = b.v: i64; if (z == -1i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_alias_u8_field/case.ww b/test/wcc/data/r660_alias_u8_field/case.ww new file mode 100644 index 00000000..522b8b01 --- /dev/null +++ b/test/wcc/data/r660_alias_u8_field/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type byteflag = u8; +type box = struct { v: byteflag, pad: u8 }; +fn main() i32 = { let b: box; b.v = 0xFFu64: byteflag; b.pad = 0u8; let z: u64 = b.v: u64; if (z == 0xFFu64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_bang_i32_deref_widen/case.ww b/test/wcc/data/r660_bang_i32_deref_widen/case.ww new file mode 100644 index 00000000..163a0905 --- /dev/null +++ b/test/wcc/data/r660_bang_i32_deref_widen/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type myinv = !i32; +fn setneg(p: *myinv) void = { *p = -16i64: myinv; }; +fn main() i32 = { let x: myinv = 0i64: myinv; setneg(&x); let z: i64 = x: i64; if (z == -16i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_bool_field_load/case.ww b/test/wcc/data/r660_bool_field_load/case.ww new file mode 100644 index 00000000..2a12144e --- /dev/null +++ b/test/wcc/data/r660_bool_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: bool, pad: bool }; +fn main() i32 = { let b: box; b.v = true; b.pad = false; if (b.v) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_chained_i16_leaf/case.ww b/test/wcc/data/r660_chained_i16_leaf/case.ww new file mode 100644 index 00000000..8dc56e5b --- /dev/null +++ b/test/wcc/data/r660_chained_i16_leaf/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type inner = struct { v: i16, pad: i16 }; +type outer = struct { i: inner, tag: i32 }; +fn main() i32 = { let o: outer; o.i.v = -32768i64: i16; o.i.pad = 0i16; o.tag = 0; let z: i64 = o.i.v: i64; if (z == -32768i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_chained_i8_leaf/case.ww b/test/wcc/data/r660_chained_i8_leaf/case.ww new file mode 100644 index 00000000..8f137e49 --- /dev/null +++ b/test/wcc/data/r660_chained_i8_leaf/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type inner = struct { v: i8, pad: i8 }; +type outer = struct { i: inner, tag: i32 }; +fn main() i32 = { let o: outer; o.i.v = -1i64: i8; o.i.pad = 0i8; o.tag = 0; let z: i64 = o.i.v: i64; if (z == -1i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_deref_compound_u32/case.ww b/test/wcc/data/r660_deref_compound_u32/case.ww new file mode 100644 index 00000000..2d98eb74 --- /dev/null +++ b/test/wcc/data/r660_deref_compound_u32/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { let x: u32 = 0x80000001u32; let p: *u32 = &x; *p >>= 1u32; if (x == 0x40000000u32) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i16_field_load/case.ww b/test/wcc/data/r660_i16_field_load/case.ww new file mode 100644 index 00000000..3ea72c4f --- /dev/null +++ b/test/wcc/data/r660_i16_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: i16, pad: i16 }; +fn main() i32 = { let b: box; b.v = -32768i64: i16; b.pad = 0i64: i16; let z: i64 = b.v: i64; if (z == -32768i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i16_out_param_negative/case.ww b/test/wcc/data/r660_i16_out_param_negative/case.ww new file mode 100644 index 00000000..b73bbb55 --- /dev/null +++ b/test/wcc/data/r660_i16_out_param_negative/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn setneg(p: *i16) void = { *p = -16i64: i16; }; +fn main() i32 = { let x: i16 = 0i16; setneg(&x); let z: i64 = x: i64; if (z == -16i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i32_compound_after_deref/case.ww b/test/wcc/data/r660_i32_compound_after_deref/case.ww new file mode 100644 index 00000000..2d1ce39d --- /dev/null +++ b/test/wcc/data/r660_i32_compound_after_deref/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn setv(p: *i32, v: i32) void = { *p = v; }; +fn main() i32 = { let x: i32 = 0i32; setv(&x, 0x7FFFFFFEi32); x += 1i32; if (x == 0x7FFFFFFFi32) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i32_field_load/case.ww b/test/wcc/data/r660_i32_field_load/case.ww new file mode 100644 index 00000000..74d8073f --- /dev/null +++ b/test/wcc/data/r660_i32_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: i32, pad: i32 }; +fn main() i32 = { let b: box; b.v = -2147483648i64: i32; b.pad = 0i32; let z: i64 = b.v: i64; if (z == -2147483648i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i32_global_negative_deref/case.ww b/test/wcc/data/r660_i32_global_negative_deref/case.ww new file mode 100644 index 00000000..5eb9bf74 --- /dev/null +++ b/test/wcc/data/r660_i32_global_negative_deref/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +let g: i32 = 0i32; +fn setneg(p: *i32) void = { *p = -16i32; }; +fn main() i32 = { setneg(&g); let z: i64 = g: i64; if (z == -16i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i32_out_param_negative/case.ww b/test/wcc/data/r660_i32_out_param_negative/case.ww new file mode 100644 index 00000000..a61119bb --- /dev/null +++ b/test/wcc/data/r660_i32_out_param_negative/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn setneg(p: *i32) void = { *p = -16i32; }; +fn main() i32 = { let x: i32 = 0i32; setneg(&x); let z: i64 = x: i64; if (z == -16i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i64_out_param_negative/case.ww b/test/wcc/data/r660_i64_out_param_negative/case.ww new file mode 100644 index 00000000..26b096d9 --- /dev/null +++ b/test/wcc/data/r660_i64_out_param_negative/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn setneg(p: *i64) void = { *p = -16i64; }; +fn main() i32 = { let x: i64 = 0i64; setneg(&x); if (x == -16i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i8_field_load/case.ww b/test/wcc/data/r660_i8_field_load/case.ww new file mode 100644 index 00000000..0ff1e8dc --- /dev/null +++ b/test/wcc/data/r660_i8_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: i8, pad: i8 }; +fn main() i32 = { let b: box; b.v = -1i64: i8; b.pad = 0i64: i8; let z: i64 = b.v: i64; if (z == -1i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_i8_out_param_negative/case.ww b/test/wcc/data/r660_i8_out_param_negative/case.ww new file mode 100644 index 00000000..d74b6b1d --- /dev/null +++ b/test/wcc/data/r660_i8_out_param_negative/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn setneg(p: *i8) void = { *p = -16i64: i8; }; +fn main() i32 = { let x: i8 = 0i8; setneg(&x); let z: i64 = x: i64; if (z == -16i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_u16_field_load/case.ww b/test/wcc/data/r660_u16_field_load/case.ww new file mode 100644 index 00000000..e6af8fc3 --- /dev/null +++ b/test/wcc/data/r660_u16_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: u16, pad: u16 }; +fn main() i32 = { let b: box; b.v = 0xFFFFu64: u16; b.pad = 0u16; let z: u64 = b.v: u64; if (z == 0xFFFFu64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_u32_field_load/case.ww b/test/wcc/data/r660_u32_field_load/case.ww new file mode 100644 index 00000000..d8e070d2 --- /dev/null +++ b/test/wcc/data/r660_u32_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: u32, pad: u32 }; +fn main() i32 = { let b: box; b.v = 0xFFFFFFFFu64: u32; b.pad = 0u32; let z: u64 = b.v: u64; if (z == 0xFFFFFFFFu64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r660_u8_field_load/case.ww b/test/wcc/data/r660_u8_field_load/case.ww new file mode 100644 index 00000000..05af3a71 --- /dev/null +++ b/test/wcc/data/r660_u8_field_load/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { v: u8, pad: u8 }; +fn main() i32 = { let b: box; b.v = 0xFFu64: u8; b.pad = 0u8; let z: u64 = b.v: u64; if (z == 0xFFu64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_f64_9args/case.ww b/test/wcc/data/r670_f64_9args/case.ww new file mode 100644 index 00000000..2400e37b --- /dev/null +++ b/test/wcc/data/r670_f64_9args/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn s9f(a: f64, b: f64, c: f64, d: f64, e: f64, f: f64, g: f64, h: f64, i: f64) f64 = { return a + b + c + d + e + f + g + h + i; }; +fn main() i32 = { let r: f64 = s9f(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); if ((r: i64) == 45i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_i64_7args/case.ww b/test/wcc/data/r670_i64_7args/case.ww new file mode 100644 index 00000000..d6c14517 --- /dev/null +++ b/test/wcc/data/r670_i64_7args/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn s7(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64) i64 = { return a + b + c + d + e + f + g; }; +fn main() i32 = { let r: i64 = s7(1i64, 2i64, 3i64, 4i64, 5i64, 6i64, 7i64); if (r == 28i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_i64_7args_signed/case.ww b/test/wcc/data/r670_i64_7args_signed/case.ww new file mode 100644 index 00000000..e451932d --- /dev/null +++ b/test/wcc/data/r670_i64_7args_signed/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn s7(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64) i64 = { return a + b + c + d + e + f + g; }; +fn main() i32 = { let r: i64 = s7(-1i64, -2i64, -3i64, -4i64, -5i64, -6i64, 49i64); if (r == 28i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_i64_8args/case.ww b/test/wcc/data/r670_i64_8args/case.ww new file mode 100644 index 00000000..4e383819 --- /dev/null +++ b/test/wcc/data/r670_i64_8args/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn s8(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64, h: i64) i64 = { return a + b + c + d + e + f + g + h; }; +fn main() i32 = { let r: i64 = s8(1i64, 2i64, 3i64, 4i64, 5i64, 6i64, 7i64, 8i64); if (r == 36i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_mixed_5i_3f_4i/case.ww b/test/wcc/data/r670_mixed_5i_3f_4i/case.ww new file mode 100644 index 00000000..79bbf055 --- /dev/null +++ b/test/wcc/data/r670_mixed_5i_3f_4i/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +fn mx(a: i64, b: i64, c: i64, d: i64, e: i64, f1: f64, f2: f64, f3: f64, g: i64, h: i64, i: i64, j: i64) i64 = { + return a + b + c + d + e + (f1: i64) + (f2: i64) + (f3: i64) + g + h + i + j; +}; +fn main() i32 = { let r: i64 = mx(1i64, 2i64, 3i64, 4i64, 5i64, 6.0, 7.0, 8.0, 9i64, 10i64, 11i64, 12i64); if (r == 78i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_slice_purestack_arg7/case.ww b/test/wcc/data/r670_slice_purestack_arg7/case.ww new file mode 100644 index 00000000..118fd62f --- /dev/null +++ b/test/wcc/data/r670_slice_purestack_arg7/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ss(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, xs: []i64) i64 = { let i: i32 = 0; let acc: i64 = a + b + c + d + e + f; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc; }; +fn main() i32 = { let buf: [3]i64; buf[0] = 100i64; buf[1] = 200i64; buf[2] = 300i64; let s: []i64 = buf[0:3]; let r: i64 = ss(1i64, 2i64, 3i64, 4i64, 5i64, 6i64, s); if (r == 621i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_slice_straddle_arg5/case.ww b/test/wcc/data/r670_slice_straddle_arg5/case.ww new file mode 100644 index 00000000..9523d5ea --- /dev/null +++ b/test/wcc/data/r670_slice_straddle_arg5/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ss(a: i64, b: i64, c: i64, d: i64, xs: []i64) i64 = { let i: i32 = 0; let acc: i64 = a + b + c + d; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc + (xs.cap: i64); }; +fn main() i32 = { let buf: [3]i64; buf[0] = 100i64; buf[1] = 200i64; buf[2] = 300i64; let s: []i64 = buf[0:3]; let r: i64 = ss(1i64, 2i64, 3i64, 4i64, s); if (r == 613i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_slice_straddle_arg6/case.ww b/test/wcc/data/r670_slice_straddle_arg6/case.ww new file mode 100644 index 00000000..6062584e --- /dev/null +++ b/test/wcc/data/r670_slice_straddle_arg6/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ss(a: i64, b: i64, c: i64, d: i64, e: i64, xs: []i64) i64 = { let i: i32 = 0; let acc: i64 = a + b + c + d + e; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc + (xs.cap: i64); }; +fn main() i32 = { let buf: [3]i64; buf[0] = 100i64; buf[1] = 200i64; buf[2] = 300i64; let s: []i64 = buf[0:3]; let r: i64 = ss(1i64, 2i64, 3i64, 4i64, 5i64, s); if (r == 618i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_slice_straddle_then_scalar/case.ww b/test/wcc/data/r670_slice_straddle_then_scalar/case.ww new file mode 100644 index 00000000..71ceb6ff --- /dev/null +++ b/test/wcc/data/r670_slice_straddle_then_scalar/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ssx(a: i64, b: i64, c: i64, d: i64, xs: []i64, tail: i64) i64 = { let i: i32 = 0; let acc: i64 = a + b + c + d + tail; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc; }; +fn main() i32 = { let buf: [3]i64; buf[0] = 100i64; buf[1] = 200i64; buf[2] = 300i64; let s: []i64 = buf[0:3]; let r: i64 = ssx(1i64, 2i64, 3i64, 4i64, s, 99i64); if (r == 709i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_str_inreg_arg5/case.ww b/test/wcc/data/r670_str_inreg_arg5/case.ww new file mode 100644 index 00000000..b4f571a0 --- /dev/null +++ b/test/wcc/data/r670_str_inreg_arg5/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ts(a: i64, b: i64, c: i64, d: i64, s: str) i64 = { return a + b + c + d + s.len: i64; }; +fn main() i32 = { let r: i64 = ts(1i64, 2i64, 3i64, 4i64, "hello"); if (r == 15i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_str_purestack_arg7/case.ww b/test/wcc/data/r670_str_purestack_arg7/case.ww new file mode 100644 index 00000000..1165212e --- /dev/null +++ b/test/wcc/data/r670_str_purestack_arg7/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ts(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, s: str) i64 = { return a + b + c + d + e + f + s.len: i64; }; +fn main() i32 = { let r: i64 = ts(1i64, 2i64, 3i64, 4i64, 5i64, 6i64, "hello"); if (r == 26i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_str_straddle_arg6/case.ww b/test/wcc/data/r670_str_straddle_arg6/case.ww new file mode 100644 index 00000000..9aba0eb4 --- /dev/null +++ b/test/wcc/data/r670_str_straddle_arg6/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn ts(a: i64, b: i64, c: i64, d: i64, e: i64, s: str) i64 = { return a + b + c + d + e + s.len: i64; }; +fn main() i32 = { let r: i64 = ts(1i64, 2i64, 3i64, 4i64, 5i64, "hello"); if (r == 20i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_variadic_full_in_reg/case.ww b/test/wcc/data/r670_variadic_full_in_reg/case.ww new file mode 100644 index 00000000..1cdd0658 --- /dev/null +++ b/test/wcc/data/r670_variadic_full_in_reg/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn vs(a: i64, b: i64, c: i64, xs: i64...) i64 = { let i: i32 = 0; let acc: i64 = a + b + c; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc + (xs.cap: i64); }; +fn main() i32 = { let r: i64 = vs(1i64, 2i64, 3i64, 10i64, 20i64, 30i64); if (r == 69i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_variadic_purestack/case.ww b/test/wcc/data/r670_variadic_purestack/case.ww new file mode 100644 index 00000000..ef715445 --- /dev/null +++ b/test/wcc/data/r670_variadic_purestack/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn vs(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, xs: i64...) i64 = { let i: i32 = 0; let acc: i64 = a + b + c + d + e + f; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc + (xs.cap: i64); }; +fn main() i32 = { let r: i64 = vs(1i64, 2i64, 3i64, 4i64, 5i64, 6i64, 10i64, 20i64, 30i64); if (r == 84i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r670_variadic_straddle/case.ww b/test/wcc/data/r670_variadic_straddle/case.ww new file mode 100644 index 00000000..0cf3bccf --- /dev/null +++ b/test/wcc/data/r670_variadic_straddle/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +fn vs(a: i64, b: i64, c: i64, d: i64, e: i64, xs: i64...) i64 = { let i: i32 = 0; let acc: i64 = a + b + c + d + e; for (i < xs.len: i32) { acc = acc + xs[i]; i = i + 1; }; return acc + (xs.cap: i64); }; +fn main() i32 = { let r: i64 = vs(1i64, 2i64, 3i64, 4i64, 5i64, 10i64, 20i64, 30i64); if (r == 78i64) { return 42; }; return 0; }; diff --git a/test/wcc/data/r671_unknown_attr_reject/case.ww b/test/wcc/data/r671_unknown_attr_reject/case.ww new file mode 100644 index 00000000..875f7165 --- /dev/null +++ b/test/wcc/data/r671_unknown_attr_reject/case.ww @@ -0,0 +1,4 @@ +//ww:error c "unknown struct attribute '@foo'" ww "unknown struct attribute" +package main; +type P = struct @foo { a: u8 }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r680_ptr_arr_dyn_idx/case.ww b/test/wcc/data/r680_ptr_arr_dyn_idx/case.ww new file mode 100644 index 00000000..d5fea79e --- /dev/null +++ b/test/wcc/data/r680_ptr_arr_dyn_idx/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 5 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { + let a: nd; a.name = "first"; a.x = 1; + let b: nd; b.name = "two"; b.x = 2; + let c: nd; c.name = "third"; c.x = 3; + let stk: [4]*nd; + stk[0] = &a; stk[1] = &b; stk[2] = &c; + let i: i32 = 2; + let s: str = stk[i].name; + return s.len: i32; +}; diff --git a/test/wcc/data/r680_ptr_arr_i32_field/case.ww b/test/wcc/data/r680_ptr_arr_i32_field/case.ww new file mode 100644 index 00000000..b58c9881 --- /dev/null +++ b/test/wcc/data/r680_ptr_arr_i32_field/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { + let v: nd; v.name = "hi"; v.x = 42; + let stk: [16]*nd; stk[0] = &v; + return stk[0].x; +}; diff --git a/test/wcc/data/r680_ptr_arr_i8_signed/case.ww b/test/wcc/data/r680_ptr_arr_i8_signed/case.ww new file mode 100644 index 00000000..f59c1c13 --- /dev/null +++ b/test/wcc/data/r680_ptr_arr_i8_signed/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +type nd = struct { tag: i8, pad: u8, x: i32 }; +fn main() i32 = { + let v: nd; v.tag = -3i8; v.pad = 0u8; v.x = 0; + let stk: [4]*nd; stk[0] = &v; + let t: i32 = stk[0].tag: i32; + if (t == -3) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r680_ptr_arr_str_field/case.ww b/test/wcc/data/r680_ptr_arr_str_field/case.ww new file mode 100644 index 00000000..49dc8fe8 --- /dev/null +++ b/test/wcc/data/r680_ptr_arr_str_field/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 5 +package main; +type nd = struct { a: i32, b: i32, name: str }; +fn main() i32 = { + let v: nd; v.a = 1; v.b = 2; v.name = "hello"; + let stk: [16]*nd; stk[0] = &v; + let s: str = stk[0].name; + return s.len: i32; +}; diff --git a/test/wcc/data/r680_ptr_arr_u8_field/case.ww b/test/wcc/data/r680_ptr_arr_u8_field/case.ww new file mode 100644 index 00000000..e33f343d --- /dev/null +++ b/test/wcc/data/r680_ptr_arr_u8_field/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type nd = struct { tag: u8, pad: u8, x: i32 }; +fn main() i32 = { + let v: nd; v.tag = 7u8; v.pad = 0u8; v.x = 99; + let stk: [8]*nd; stk[0] = &v; + return stk[0].tag: i32; +}; diff --git a/test/wcc/data/r680_val_arr_i32_field/case.ww b/test/wcc/data/r680_val_arr_i32_field/case.ww new file mode 100644 index 00000000..a77a485e --- /dev/null +++ b/test/wcc/data/r680_val_arr_i32_field/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 100 +package main; +type nd = struct { name: str, x: i32 }; +fn setit(p: *nd, s: str, vv: i32) void = { p.name = s; p.x = vv; }; +fn main() i32 = { + let arr: [4]nd; + setit(&arr[2], "q", 100); + return arr[2].x; +}; diff --git a/test/wcc/data/r680_val_arr_str_field/case.ww b/test/wcc/data/r680_val_arr_str_field/case.ww new file mode 100644 index 00000000..3453debb --- /dev/null +++ b/test/wcc/data/r680_val_arr_str_field/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 5 +package main; +type nd = struct { name: str, x: i32 }; +fn setit(p: *nd, s: str, vv: i32) void = { p.name = s; p.x = vv; }; +fn main() i32 = { + let arr: [4]nd; + setit(&arr[1], "world", 100); + let s: str = arr[1].name; + return s.len: i32; +}; diff --git a/test/wcc/data/r680_val_arr_u8_field/case.ww b/test/wcc/data/r680_val_arr_u8_field/case.ww new file mode 100644 index 00000000..0c099475 --- /dev/null +++ b/test/wcc/data/r680_val_arr_u8_field/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 9 +package main; +type nd = struct { tag: u8, pad: u8, x: i32 }; +fn setit(p: *nd, t: u8, vv: i32) void = { p.tag = t; p.x = vv; }; +fn main() i32 = { + let arr: [4]nd; + setit(&arr[2], 9u8, 50); + return arr[2].tag: i32; +}; diff --git a/test/wcc/data/r681_ptr_arr_compound_plus/case.ww b/test/wcc/data/r681_ptr_arr_compound_plus/case.ww new file mode 100644 index 00000000..bae8db9d --- /dev/null +++ b/test/wcc/data/r681_ptr_arr_compound_plus/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 32 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { let v: nd; v.name = "a"; v.x = 10; let stk: [4]*nd; stk[0] = &v; stk[0].x += 22; return stk[0].x; }; diff --git a/test/wcc/data/r681_ptr_arr_dyn_idx_write/case.ww b/test/wcc/data/r681_ptr_arr_dyn_idx_write/case.ww new file mode 100644 index 00000000..138a80bb --- /dev/null +++ b/test/wcc/data/r681_ptr_arr_dyn_idx_write/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 99 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { + let a: nd; a.name = "a"; a.x = 0; let b: nd; b.name = "b"; b.x = 0; + let c: nd; c.name = "c"; c.x = 0; let stk: [4]*nd; + stk[0] = &a; stk[1] = &b; stk[2] = &c; let i: i32 = 2; + stk[i].x = 99; return stk[2].x; +}; diff --git a/test/wcc/data/r681_ptr_arr_i32_write/case.ww b/test/wcc/data/r681_ptr_arr_i32_write/case.ww new file mode 100644 index 00000000..00d82952 --- /dev/null +++ b/test/wcc/data/r681_ptr_arr_i32_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { let v: nd; v.name = "hi"; v.x = 0; let stk: [16]*nd; stk[0] = &v; stk[0].x = 42; return stk[0].x; }; diff --git a/test/wcc/data/r681_ptr_arr_i8_signed_write/case.ww b/test/wcc/data/r681_ptr_arr_i8_signed_write/case.ww new file mode 100644 index 00000000..1132ea44 --- /dev/null +++ b/test/wcc/data/r681_ptr_arr_i8_signed_write/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type nd = struct { tag: i8, pad: u8, x: i32 }; +fn main() i32 = { + let v: nd; v.tag = 0i8; v.pad = 0u8; v.x = 0; + let stk: [4]*nd; stk[0] = &v; stk[0].tag = -3i8; + let t: i32 = stk[0].tag: i32; if (t == -3) { return 42; }; return 0; +}; diff --git a/test/wcc/data/r681_ptr_arr_str_write/case.ww b/test/wcc/data/r681_ptr_arr_str_write/case.ww new file mode 100644 index 00000000..070139c9 --- /dev/null +++ b/test/wcc/data/r681_ptr_arr_str_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +type nd = struct { a: i32, b: i32, name: str }; +fn main() i32 = { let v: nd; v.a = 0; v.b = 0; v.name = "old"; let stk: [16]*nd; stk[0] = &v; stk[0].name = "hello"; return stk[0].name.len: i32; }; diff --git a/test/wcc/data/r681_ptr_arr_u8_write/case.ww b/test/wcc/data/r681_ptr_arr_u8_write/case.ww new file mode 100644 index 00000000..08be20e0 --- /dev/null +++ b/test/wcc/data/r681_ptr_arr_u8_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 9 +package main; +type nd = struct { tag: u8, pad: u8, x: i32 }; +fn main() i32 = { let v: nd; v.tag = 0u8; v.pad = 0u8; v.x = 0; let stk: [4]*nd; stk[0] = &v; stk[0].tag = 9u8; return stk[0].tag: i32; }; diff --git a/test/wcc/data/r681_slice_field_distinct_bytes/case.ww b/test/wcc/data/r681_slice_field_distinct_bytes/case.ww new file mode 100644 index 00000000..24766c0b --- /dev/null +++ b/test/wcc/data/r681_slice_field_distinct_bytes/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package main; +type bs = struct { rbuf: []u8, mark: i32 }; +fn main() i32 = { + let raw: [16]u8; + raw[0] = 0xAAu8; raw[1] = 0xBBu8; raw[2] = 0xCCu8; + raw[3] = 0xDDu8; raw[4] = 0xEEu8; raw[5] = 0xFFu8; + let b: bs; b.mark = 0x33; b.rbuf = raw[0:6]; + if (b.rbuf.len != 6) { return 1; }; if (b.rbuf.cap != 16) { return 2; }; + if (b.mark != 0x33) { return 3; }; if (b.rbuf[0] != 0xAAu8) { return 4; }; + if (b.rbuf[5] != 0xFFu8) { return 5; }; return 42; +}; diff --git a/test/wcc/data/r681_slice_field_ptr_write/case.ww b/test/wcc/data/r681_slice_field_ptr_write/case.ww new file mode 100644 index 00000000..699d7cc4 --- /dev/null +++ b/test/wcc/data/r681_slice_field_ptr_write/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type bs = struct { rbuf: []u8, mark: i32 }; +fn init(b: *bs, rbuf: []u8) void = { b.rbuf = rbuf; b.mark = 9; }; +fn main() i32 = { + let raw: [8]u8; raw[0] = 0u8; let b: bs; init(&b, raw[0:5]); + if (b.rbuf.len != 5) { return 1; }; if (b.rbuf.cap != 8) { return 2; }; + if (b.mark != 9) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r681_slice_field_value_write/case.ww b/test/wcc/data/r681_slice_field_value_write/case.ww new file mode 100644 index 00000000..b1cc9c13 --- /dev/null +++ b/test/wcc/data/r681_slice_field_value_write/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type bs = struct { rbuf: []u8, mark: i32 }; +fn main() i32 = { + let raw: [8]u8; raw[0] = 0u8; let rbuf: []u8 = raw[0:5]; let b: bs; + b.mark = 7; b.rbuf = rbuf; + if (b.rbuf.len != 5) { return 1; }; if (b.rbuf.cap != 8) { return 2; }; + if (b.mark != 7) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r681_str_field_value_write_regression/case.ww b/test/wcc/data/r681_str_field_value_write_regression/case.ww new file mode 100644 index 00000000..2657f713 --- /dev/null +++ b/test/wcc/data/r681_str_field_value_write_regression/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 42 +package main; +type bs = struct { s: str, mark: i32 }; +fn main() i32 = { + let b: bs; b.mark = 11; b.s = "hello"; + if (b.s.len != 5) { return 1; }; if (b.mark != 11) { return 2; }; return 42; +}; diff --git a/test/wcc/data/r681_struct_field_value_write_16b/case.ww b/test/wcc/data/r681_struct_field_value_write_16b/case.ww new file mode 100644 index 00000000..3e6de8c5 --- /dev/null +++ b/test/wcc/data/r681_struct_field_value_write_16b/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i64, b: i64 }; +type outer = struct { i: inner, mark: i32 }; +fn main() i32 = { + let o: inner; o.a = 0x1122334455667788i64; o.b = 0x99aabbccddeeff00i64; + let x: outer; x.mark = 0x55; x.i = o; + if (x.i.a != 0x1122334455667788i64) { return 1; }; + if (x.i.b != 0x99aabbccddeeff00i64) { return 2; }; + if (x.mark != 0x55) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r681_struct_field_value_write_24b/case.ww b/test/wcc/data/r681_struct_field_value_write_24b/case.ww new file mode 100644 index 00000000..22b1df3b --- /dev/null +++ b/test/wcc/data/r681_struct_field_value_write_24b/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i64, b: i64, c: i64 }; +type outer = struct { i: inner, mark: i32 }; +fn main() i32 = { + let o: inner; o.a = 0x0a0a0a0a0a0a0a0ai64; + o.b = 0x1b1b1b1b1b1b1b1bi64; o.c = 0x2c2c2c2c2c2c2c2ci64; + let x: outer; x.mark = 7; x.i = o; + if (x.i.a != 0x0a0a0a0a0a0a0a0ai64) { return 1; }; + if (x.i.b != 0x1b1b1b1b1b1b1b1bi64) { return 2; }; + if (x.i.c != 0x2c2c2c2c2c2c2c2ci64) { return 3; }; + if (x.mark != 7) { return 4; }; return 42; +}; diff --git a/test/wcc/data/r681_struct_field_value_write_32b/case.ww b/test/wcc/data/r681_struct_field_value_write_32b/case.ww new file mode 100644 index 00000000..142c4dd5 --- /dev/null +++ b/test/wcc/data/r681_struct_field_value_write_32b/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i64, b: i64, c: i64, d: i64 }; +type outer = struct { i: inner, mark: i32 }; +fn main() i32 = { + let o: inner; o.a = 0x0a0a0a0a0a0a0a0ai64; + o.b = 0x1b1b1b1b1b1b1b1bi64; o.c = 0x2c2c2c2c2c2c2c2ci64; + o.d = 0x3d3d3d3d3d3d3d3di64; let x: outer; x.mark = 0x33; x.i = o; + if (x.i.a != 0x0a0a0a0a0a0a0a0ai64) { return 1; }; + if (x.i.b != 0x1b1b1b1b1b1b1b1bi64) { return 2; }; + if (x.i.c != 0x2c2c2c2c2c2c2c2ci64) { return 3; }; + if (x.i.d != 0x3d3d3d3d3d3d3d3di64) { return 4; }; + if (x.mark != 0x33) { return 5; }; return 42; +}; diff --git a/test/wcc/data/r681_struct_field_value_write_nested_chain/case.ww b/test/wcc/data/r681_struct_field_value_write_nested_chain/case.ww new file mode 100644 index 00000000..e34a5465 --- /dev/null +++ b/test/wcc/data/r681_struct_field_value_write_nested_chain/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 42 +package main; +type deep = struct { a: i64, b: i64, c: i64 }; +type mid = struct { d: deep, mark: i32 }; +type outer = struct { m: mid, tag: i32 }; +fn main() i32 = { + let other: deep; other.a = 0x0a0a0a0a0a0a0a0ai64; + other.b = 0x1b1b1b1b1b1b1b1bi64; other.c = 0x2c2c2c2c2c2c2c2ci64; + let v: outer; v.m.mark = 5; v.tag = 9; v.m.d = other; + if (v.m.d.a != 0x0a0a0a0a0a0a0a0ai64) { return 1; }; + if (v.m.d.b != 0x1b1b1b1b1b1b1b1bi64) { return 2; }; + if (v.m.d.c != 0x2c2c2c2c2c2c2c2ci64) { return 3; }; + if (v.m.mark != 5) { return 4; }; if (v.tag != 9) { return 5; }; return 42; +}; diff --git a/test/wcc/data/r681_struct_field_value_write_ragged_tail_12b/case.ww b/test/wcc/data/r681_struct_field_value_write_ragged_tail_12b/case.ww new file mode 100644 index 00000000..82471322 --- /dev/null +++ b/test/wcc/data/r681_struct_field_value_write_ragged_tail_12b/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i32, b: i32, c: i32 }; +type outer = struct { i: inner, mark: i32 }; +fn main() i32 = { + let o: inner; o.a = 0x11223344; o.b = 0x55667788; o.c = 0x29aabbcc; + let x: outer; x.mark = 0x33; x.i = o; + if (x.i.a != 0x11223344) { return 1; }; if (x.i.b != 0x55667788) { return 2; }; + if (x.i.c != 0x29aabbcc) { return 3; }; if (x.mark != 0x33) { return 4; }; + return 42; +}; diff --git a/test/wcc/data/r681_struct_field_value_write_via_ptr/case.ww b/test/wcc/data/r681_struct_field_value_write_via_ptr/case.ww new file mode 100644 index 00000000..6771a577 --- /dev/null +++ b/test/wcc/data/r681_struct_field_value_write_via_ptr/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i64, b: i64, c: i64 }; +type outer = struct { i: inner, mark: i32 }; +fn fill(x: *outer) void = { + let o: inner; o.a = 0x0a0a0a0a0a0a0a0ai64; + o.b = 0x1b1b1b1b1b1b1b1bi64; o.c = 0x2c2c2c2c2c2c2c2ci64; + x.mark = 7; x.i = o; +}; +fn main() i32 = { + let x: outer; fill(&x); + if (x.i.a != 0x0a0a0a0a0a0a0a0ai64) { return 1; }; + if (x.i.b != 0x1b1b1b1b1b1b1b1bi64) { return 2; }; + if (x.i.c != 0x2c2c2c2c2c2c2c2ci64) { return 3; }; + if (x.mark != 7) { return 4; }; return 42; +}; diff --git a/test/wcc/data/r681_tagged_field_value_write_local_mark_canary/case.ww b/test/wcc/data/r681_tagged_field_value_write_local_mark_canary/case.ww new file mode 100644 index 00000000..8a1b4271 --- /dev/null +++ b/test/wcc/data/r681_tagged_field_value_write_local_mark_canary/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type ev = (i64 | i32); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let v: ev = 33: i32; let x: holder; x.mark = 0x3a3a3a3a; x.e = v; + if (x.mark != 0x3a3a3a3a) { return 1; }; return 42; +}; diff --git a/test/wcc/data/r681_tagged_field_value_write_str_variant_mark_canary/case.ww b/test/wcc/data/r681_tagged_field_value_write_str_variant_mark_canary/case.ww new file mode 100644 index 00000000..f8949ee1 --- /dev/null +++ b/test/wcc/data/r681_tagged_field_value_write_str_variant_mark_canary/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | str); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let x: holder; x.mark = 0x5e5e5e5e; x.e = ("hello": ev); + if (x.mark != 0x5e5e5e5e) { return 1; }; return 42; +}; diff --git a/test/wcc/data/r681_tagged_field_value_write_via_ptr_mark_canary/case.ww b/test/wcc/data/r681_tagged_field_value_write_via_ptr_mark_canary/case.ww new file mode 100644 index 00000000..95d31b78 --- /dev/null +++ b/test/wcc/data/r681_tagged_field_value_write_via_ptr_mark_canary/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +type ev = (i64 | i32); +type holder = struct { e: ev, mark: i32 }; +fn fill(h: *holder) void = { + let v: ev = 33: i32; h.mark = 0x77777777; h.e = v; +}; +fn main() i32 = { + let x: holder; fill(&x); if (x.mark != 0x77777777) { return 1; }; return 42; +}; diff --git a/test/wcc/data/r681_val_arr_compound_plus/case.ww b/test/wcc/data/r681_val_arr_compound_plus/case.ww new file mode 100644 index 00000000..4b648124 --- /dev/null +++ b/test/wcc/data/r681_val_arr_compound_plus/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { let arr: [4]nd; arr[1].x = 37; arr[1].x += 5; return arr[1].x; }; diff --git a/test/wcc/data/r681_val_arr_compound_xor/case.ww b/test/wcc/data/r681_val_arr_compound_xor/case.ww new file mode 100644 index 00000000..3d3d6309 --- /dev/null +++ b/test/wcc/data/r681_val_arr_compound_xor/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { let arr: [4]nd; arr[2].x = 42; arr[2].x ^= 20; return arr[2].x - 20; }; diff --git a/test/wcc/data/r681_val_arr_f64_write/case.ww b/test/wcc/data/r681_val_arr_f64_write/case.ww new file mode 100644 index 00000000..fd95556c --- /dev/null +++ b/test/wcc/data/r681_val_arr_f64_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 23 +package main; +type nd = struct { x: i32, d: f64 }; +fn main() i32 = { let arr: [4]nd; arr[1].d = 23.0f64; let v: f64 = arr[1].d; return v: i32; }; diff --git a/test/wcc/data/r681_val_arr_i32_write/case.ww b/test/wcc/data/r681_val_arr_i32_write/case.ww new file mode 100644 index 00000000..a21aa81b --- /dev/null +++ b/test/wcc/data/r681_val_arr_i32_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 50 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { let arr: [4]nd; arr[2].x = 50; return arr[2].x; }; diff --git a/test/wcc/data/r681_val_arr_i8_signed_write/case.ww b/test/wcc/data/r681_val_arr_i8_signed_write/case.ww new file mode 100644 index 00000000..cf1a48fd --- /dev/null +++ b/test/wcc/data/r681_val_arr_i8_signed_write/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 42 +package main; +type nd = struct { tag: i8, pad: u8, x: i32 }; +fn main() i32 = { + let arr: [4]nd; arr[1].tag = -3i8; + let t: i32 = arr[1].tag: i32; if (t == -3) { return 42; }; return 0; +}; diff --git a/test/wcc/data/r681_val_arr_str_write/case.ww b/test/wcc/data/r681_val_arr_str_write/case.ww new file mode 100644 index 00000000..eba9febc --- /dev/null +++ b/test/wcc/data/r681_val_arr_str_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +type nd = struct { name: str, x: i32 }; +fn main() i32 = { let arr: [4]nd; arr[1].name = "world"; return arr[1].name.len: i32; }; diff --git a/test/wcc/data/r681_val_arr_u8_write/case.ww b/test/wcc/data/r681_val_arr_u8_write/case.ww new file mode 100644 index 00000000..bbffb227 --- /dev/null +++ b/test/wcc/data/r681_val_arr_u8_write/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type nd = struct { tag: u8, pad: u8, x: i32 }; +fn main() i32 = { let arr: [4]nd; arr[1].tag = 7u8; return arr[1].tag: i32; }; diff --git a/test/wcc/data/r690_amp_dot_addr_eq_read/case.ww b/test/wcc/data/r690_amp_dot_addr_eq_read/case.ww new file mode 100644 index 00000000..fb31360d --- /dev/null +++ b/test/wcc/data/r690_amp_dot_addr_eq_read/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn main() i32 = { + let o: outer; o.i.a = 41; let p: *i32 = &o.i.a; + if (*p == o.i.a) { return 42; }; return 0; +}; diff --git a/test/wcc/data/r690_amp_dot_chain_2deep/case.ww b/test/wcc/data/r690_amp_dot_chain_2deep/case.ww new file mode 100644 index 00000000..1a058f67 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_chain_2deep/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 17 +package main; +type inner = struct { a: i32, b: i32 }; +type outer = struct { i: inner, x: i32 }; +fn main() i32 = { let o: outer; let p: *i32 = &o.i.a; *p = 17; return o.i.a; }; diff --git a/test/wcc/data/r690_amp_dot_chain_3deep/case.ww b/test/wcc/data/r690_amp_dot_chain_3deep/case.ww new file mode 100644 index 00000000..8dd63265 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_chain_3deep/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 9 +package main; +type a3 = struct { a: i32 }; +type a2 = struct { a: a3 }; +type a1 = struct { a: a2 }; +fn main() i32 = { let v: a1; let p: *i32 = &v.a.a.a; *p = 9; return v.a.a.a; }; diff --git a/test/wcc/data/r690_amp_dot_ptr_field/case.ww b/test/wcc/data/r690_amp_dot_ptr_field/case.ww new file mode 100644 index 00000000..730a6efd --- /dev/null +++ b/test/wcc/data/r690_amp_dot_ptr_field/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 55 +package main; +type pt = struct { x: i32, y: i32 }; +fn main() i32 = { + let o: pt; o.x = 0; o.y = 0; + let p: *pt = &o; let q: *i32 = &p.y; *q = 55; + return o.y; +}; diff --git a/test/wcc/data/r690_amp_dot_single_global/case.ww b/test/wcc/data/r690_amp_dot_single_global/case.ww new file mode 100644 index 00000000..773bb366 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_single_global/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 33 +package main; +type pt = struct { x: i32, y: i32 }; +let g: pt; +fn main() i32 = { let p: *i32 = &g.x; *p = 33; return g.x; }; diff --git a/test/wcc/data/r690_amp_dot_single_local/case.ww b/test/wcc/data/r690_amp_dot_single_local/case.ww new file mode 100644 index 00000000..b5fbd3c9 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_single_local/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 21 +package main; +type pt = struct { x: i32, y: i32 }; +fn main() i32 = { let o: pt; let p: *i32 = &o.x; *p = 21; return o.x; }; diff --git a/test/wcc/data/r690_amp_dot_slice_cap_width_stress/case.ww b/test/wcc/data/r690_amp_dot_slice_cap_width_stress/case.ww new file mode 100644 index 00000000..d6bcc58e --- /dev/null +++ b/test/wcc/data/r690_amp_dot_slice_cap_width_stress/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 1 +package main; +fn main() i32 = { + let arr: [4]u8; let s: []u8; + s.ptr = &arr[0]; s.len = 4; s.cap = 4; + let q: *i64 = &s.cap; *q = -1i64; + let v: i64 = s.cap: i64; + if (v == -1i64) { return 1; }; return 0; +}; diff --git a/test/wcc/data/r690_amp_dot_slice_field_len_width/case.ww b/test/wcc/data/r690_amp_dot_slice_field_len_width/case.ww new file mode 100644 index 00000000..e59ee77f --- /dev/null +++ b/test/wcc/data/r690_amp_dot_slice_field_len_width/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 1 +package main; +type wrap = struct { s: []u8, x: i32 }; +fn main() i32 = { + let arr: [4]u8; let w: wrap; + w.s.ptr = &arr[0]; w.s.len = 4; w.s.cap = 4; + let q: *i64 = &w.s.len; *q = -1i64; + let v: i64 = w.s.len: i64; + if (v == -1i64) { return 1; }; return 0; +}; diff --git a/test/wcc/data/r690_amp_dot_slice_field_ptr/case.ww b/test/wcc/data/r690_amp_dot_slice_field_ptr/case.ww new file mode 100644 index 00000000..0edfa820 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_slice_field_ptr/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 71 +package main; +type wrap = struct { s: []u8, x: i32 }; +fn main() i32 = { + let arr: [4]u8; let w: wrap; w.s.len = 4; w.s.cap = 4; + let pp: **u8 = &w.s.ptr; *pp = &arr[0]; arr[0] = 71; + return w.s.ptr[0]: i32; +}; diff --git a/test/wcc/data/r690_amp_dot_slice_len_width_stress/case.ww b/test/wcc/data/r690_amp_dot_slice_len_width_stress/case.ww new file mode 100644 index 00000000..cd765930 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_slice_len_width_stress/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 1 +package main; +fn main() i32 = { + let arr: [4]u8; let s: []u8; + s.ptr = &arr[0]; s.len = 4; s.cap = 4; + let q: *i64 = &s.len; *q = -1i64; + let v: i64 = s.len: i64; + if (v == -1i64) { return 1; }; return 0; +}; diff --git a/test/wcc/data/r690_amp_dot_slice_len_writethrough/case.ww b/test/wcc/data/r690_amp_dot_slice_len_writethrough/case.ww new file mode 100644 index 00000000..ef966ea2 --- /dev/null +++ b/test/wcc/data/r690_amp_dot_slice_len_writethrough/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 0 +package main; +fn main() i32 = { + let arr: [4]u8; let s: []u8; + s.ptr = &arr[0]; s.len = 4; s.cap = 4; + let q: *i64 = &s.len; *q = 0i64; + return s.len: i32; +}; diff --git a/test/wcc/data/r690_amp_dot_slice_ptr_writethrough/case.ww b/test/wcc/data/r690_amp_dot_slice_ptr_writethrough/case.ww new file mode 100644 index 00000000..a4e50fba --- /dev/null +++ b/test/wcc/data/r690_amp_dot_slice_ptr_writethrough/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 13 +package main; +fn main() i32 = { + let arr: [2]u8; arr[0] = 13; arr[1] = 0; + let s: []u8; s.len = 2; s.cap = 2; + let pp: **u8 = &s.ptr; *pp = &arr[0]; + return s.ptr[0]: i32; +}; diff --git a/test/wcc/data/r690_amp_dot_str_len_width_stress/case.ww b/test/wcc/data/r690_amp_dot_str_len_width_stress/case.ww new file mode 100644 index 00000000..76d3234b --- /dev/null +++ b/test/wcc/data/r690_amp_dot_str_len_width_stress/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 1 +package main; +fn main() i32 = { + let s: str = "abcd"; let q: *i64 = &s.len; *q = -1i64; + let v: i64 = s.len: i64; + if (v == -1i64) { return 1; }; return 0; +}; diff --git a/test/wcc/data/r691_direct_slice_arg_baseline/case.ww b/test/wcc/data/r691_direct_slice_arg_baseline/case.ww new file mode 100644 index 00000000..a3494bd5 --- /dev/null +++ b/test/wcc/data/r691_direct_slice_arg_baseline/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +fn slen(s: []u8) i32 = { return s.len: i32; }; +fn scap(s: []u8) i32 = { return s.cap: i32; }; +fn sfirst(s: []u8) i32 = { return s[0]: i32; }; +fn main() i32 = { + let arr: [8]u8; arr[0] = 9u8; let s: []u8; + s.ptr = &arr[0]; s.len = 5; s.cap = 8; + if (slen(s) != 5) { return 1; }; if (scap(s) != 8) { return 2; }; + if (sfirst(s) != 9) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r691_local_root_chained_slice_arg/case.ww b/test/wcc/data/r691_local_root_chained_slice_arg/case.ww new file mode 100644 index 00000000..4f899c68 --- /dev/null +++ b/test/wcc/data/r691_local_root_chained_slice_arg/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package main; +type inner = struct { sl: []u8, pad: i32 }; +type outer = struct { i: inner, tag: i32 }; +fn slen(s: []u8) i32 = { return s.len: i32; }; +fn scap(s: []u8) i32 = { return s.cap: i32; }; +fn main() i32 = { + let arr: [16]u8; let o: outer; + o.i.sl.ptr = &arr[0]; o.i.sl.len = 6; o.i.sl.cap = 16; + if (slen(o.i.sl) != 6) { return 1; }; if (scap(o.i.sl) != 16) { return 2; }; + return 42; +}; diff --git a/test/wcc/data/r691_local_root_slice_arg/case.ww b/test/wcc/data/r691_local_root_slice_arg/case.ww new file mode 100644 index 00000000..516a2de1 --- /dev/null +++ b/test/wcc/data/r691_local_root_slice_arg/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package main; +type outer = struct { sl: []u8, x: i32 }; +fn slen(s: []u8) i32 = { return s.len: i32; }; +fn scap(s: []u8) i32 = { return s.cap: i32; }; +fn sfirst(s: []u8) i32 = { return s[0]: i32; }; +fn main() i32 = { + let arr: [8]u8; arr[0] = 3u8; let o: outer; + o.sl.ptr = &arr[0]; o.sl.len = 4; o.sl.cap = 8; + if (slen(o.sl) != 4) { return 1; }; if (scap(o.sl) != 8) { return 2; }; + if (sfirst(o.sl) != 3) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r691_ptr_field_chained_slice_arg/case.ww b/test/wcc/data/r691_ptr_field_chained_slice_arg/case.ww new file mode 100644 index 00000000..36343187 --- /dev/null +++ b/test/wcc/data/r691_ptr_field_chained_slice_arg/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 42 +package main; +type inner = struct { sl: []u8, pad: i32 }; +type outer = struct { i: *inner, tag: i32 }; +fn slen(s: []u8) i32 = { return s.len: i32; }; +fn scap(s: []u8) i32 = { return s.cap: i32; }; +fn sfirst(s: []u8) i32 = { return s[0]: i32; }; +fn main() i32 = { + let arr: [8]u8; arr[0] = 17u8; let inn: inner; + inn.sl.ptr = &arr[0]; inn.sl.len = 3; inn.sl.cap = 8; + let o: outer; o.i = &inn; o.tag = 0; + if (slen(o.i.sl) != 3) { return 1; }; if (scap(o.i.sl) != 8) { return 2; }; + if (sfirst(o.i.sl) != 17) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r691_ptr_root_chained_slice_arg/case.ww b/test/wcc/data/r691_ptr_root_chained_slice_arg/case.ww new file mode 100644 index 00000000..0a43695d --- /dev/null +++ b/test/wcc/data/r691_ptr_root_chained_slice_arg/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type inner = struct { sl: []u8, pad: i32 }; +type outer = struct { i: inner, tag: i32 }; +fn slen(s: []u8) i32 = { return s.len: i32; }; +fn scap(s: []u8) i32 = { return s.cap: i32; }; +fn sfirst(s: []u8) i32 = { return s[0]: i32; }; +fn main() i32 = { + let arr: [16]u8; arr[0] = 11u8; let o: outer; + o.i.sl.ptr = &arr[0]; o.i.sl.len = 9; o.i.sl.cap = 16; let p: *outer = &o; + if (slen(p.i.sl) != 9) { return 1; }; if (scap(p.i.sl) != 16) { return 2; }; + if (sfirst(p.i.sl) != 11) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r691_ptr_root_slice_arg/case.ww b/test/wcc/data/r691_ptr_root_slice_arg/case.ww new file mode 100644 index 00000000..a14dbb9b --- /dev/null +++ b/test/wcc/data/r691_ptr_root_slice_arg/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package main; +type outer = struct { sl: []u8, x: i32 }; +fn slen(s: []u8) i32 = { return s.len: i32; }; +fn scap(s: []u8) i32 = { return s.cap: i32; }; +fn sfirst(s: []u8) i32 = { return s[0]: i32; }; +fn main() i32 = { + let arr: [8]u8; arr[0] = 7u8; let o: outer; + o.sl.ptr = &arr[0]; o.sl.len = 5; o.sl.cap = 8; let p: *outer = &o; + if (slen(p.sl) != 5) { return 1; }; if (scap(p.sl) != 8) { return 2; }; + if (sfirst(p.sl) != 7) { return 3; }; return 42; +}; diff --git a/test/wcc/data/r691_ptr_root_slice_mutate_ptr/case.ww b/test/wcc/data/r691_ptr_root_slice_mutate_ptr/case.ww new file mode 100644 index 00000000..c2ed6c5d --- /dev/null +++ b/test/wcc/data/r691_ptr_root_slice_mutate_ptr/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type outer = struct { sl: []u8, x: i32 }; +fn poke(s: []u8) void = { s[0] = 0x42u8; }; +fn main() i32 = { + let arr: [8]u8; arr[0] = 0u8; let o: outer; + o.sl.ptr = &arr[0]; o.sl.len = 1; o.sl.cap = 8; let p: *outer = &o; + poke(p.sl); if (arr[0]: i32 != 0x42) { return 1; }; return 42; +}; diff --git a/test/wcc/data/r691_ptr_root_slice_return/case.ww b/test/wcc/data/r691_ptr_root_slice_return/case.ww new file mode 100644 index 00000000..c94f619a --- /dev/null +++ b/test/wcc/data/r691_ptr_root_slice_return/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type outer = struct { sl: []u8, x: i32 }; +fn fetch(p: *outer) []u8 = { return p.sl; }; +fn main() i32 = { + let arr: [8]u8; arr[0] = 19u8; let o: outer; + o.sl.ptr = &arr[0]; o.sl.len = 6; o.sl.cap = 8; let p: *outer = &o; + let s: []u8 = fetch(p); if (s.len: i32 != 6) { return 1; }; + if (s.cap: i32 != 8) { return 2; }; if (s[0]: i32 != 19) { return 3; }; + return 42; +}; diff --git a/test/wcc/data/r691_ptr_root_slice_with_neighbor/case.ww b/test/wcc/data/r691_ptr_root_slice_with_neighbor/case.ww new file mode 100644 index 00000000..82eecd9c --- /dev/null +++ b/test/wcc/data/r691_ptr_root_slice_with_neighbor/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type outer = struct { sl: []u8, x: i32 }; +fn slen_tag(s: []u8, t: i32) i32 = { return s.len: i32 + t; }; +fn main() i32 = { + let arr: [8]u8; let o: outer; + o.sl.ptr = &arr[0]; o.sl.len = 5; o.sl.cap = 8; let p: *outer = &o; + let v: i32 = slen_tag(p.sl, 37); if (v != 42) { return 1; }; return 42; +}; diff --git a/test/wcc/data/r693_dot_plain_i32/case.ww b/test/wcc/data/r693_dot_plain_i32/case.ww new file mode 100644 index 00000000..771b4821 --- /dev/null +++ b/test/wcc/data/r693_dot_plain_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type holder = struct { a: i32, b: i32, c: i32 }; +fn main() i32 = { + let h: holder; + h.a = 10; h.b = 20; h.c = 12; + return h.a + h.b + h.c; +}; diff --git a/test/wcc/data/r693_dot_plain_slice_ptr/case.ww b/test/wcc/data/r693_dot_plain_slice_ptr/case.ww new file mode 100644 index 00000000..7539eb08 --- /dev/null +++ b/test/wcc/data/r693_dot_plain_slice_ptr/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 5 +package main; +type holder = struct { rbuf: []u8, mark: i32 }; +fn f(h: *holder) i32 = { return h.rbuf.len: i32; }; +fn main() i32 = { + let raw: [8]u8; + raw[0] = 0u8; + let h: holder; + h.rbuf = raw[0:5]; + return f(&h); +}; diff --git a/test/wcc/data/r693_dot_plain_str/case.ww b/test/wcc/data/r693_dot_plain_str/case.ww new file mode 100644 index 00000000..e28f132d --- /dev/null +++ b/test/wcc/data/r693_dot_plain_str/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 5 +package main; +type holder = struct { s: str, mark: i32 }; +fn main() i32 = { + let h: holder; + h.s = "hello"; + return h.s.len: i32; +}; diff --git a/test/wcc/data/r693_dot_tagged_global_slice/case.ww b/test/wcc/data/r693_dot_tagged_global_slice/case.ww new file mode 100644 index 00000000..594c932d --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_global_slice/case.ww @@ -0,0 +1,20 @@ +//ww:run-exit 3 +package main; +type ev = (i32 | []u8); +type holder = struct { e: ev, mark: i32 }; +let g: holder; +fn main() i32 = { + let raw: [8]u8; + raw[0] = 1u8; raw[1] = 2u8; raw[2] = 3u8; + let p: *holder = &g; + p.mark = 99; + p.e = (raw[0:3]: ev); + let copy: ev = g.e; + match (copy) { + case let v: []u8 => { + if (v.cap != 8) { return 1; }; + return v.len: i32; + }; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r693_dot_tagged_letcopy_i64/case.ww b/test/wcc/data/r693_dot_tagged_letcopy_i64/case.ww new file mode 100644 index 00000000..daf98bb5 --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_letcopy_i64/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 42 +package main; +type ev = (i64 | i32); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 42i64; + let copy: ev = h.e; + match (copy) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r693_dot_tagged_letcopy_slice/case.ww b/test/wcc/data/r693_dot_tagged_letcopy_slice/case.ww new file mode 100644 index 00000000..3d6ff943 --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_letcopy_slice/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 3 +package main; +type ev = (i32 | []u8); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let raw: [8]u8; + raw[0] = 1u8; raw[1] = 2u8; raw[2] = 3u8; + let h: holder; + h.mark = 99; + h.e = (raw[0:3]: ev); + let copy: ev = h.e; + match (copy) { + case let v: []u8 => { + if (v.cap != 8) { return 1; }; + return v.len: i32; + }; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r693_dot_tagged_local_i64/case.ww b/test/wcc/data/r693_dot_tagged_local_i64/case.ww new file mode 100644 index 00000000..d48da620 --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_local_i64/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type ev = (i64 | i32); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 42i64; + match (h.e) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r693_dot_tagged_local_slice/case.ww b/test/wcc/data/r693_dot_tagged_local_slice/case.ww new file mode 100644 index 00000000..4b08a426 --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_local_slice/case.ww @@ -0,0 +1,18 @@ +//ww:run-exit 3 +package main; +type ev = (i32 | []u8); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let raw: [8]u8; + raw[0] = 1u8; raw[1] = 2u8; raw[2] = 3u8; + let h: holder; + h.mark = 99; + h.e = (raw[0:3]: ev); + match (h.e) { + case let v: []u8 => { + if (v.cap != 8) { return 1; }; + return v.len: i32; + }; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r693_dot_tagged_local_str/case.ww b/test/wcc/data/r693_dot_tagged_local_str/case.ww new file mode 100644 index 00000000..fc14b04b --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_local_str/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 5 +package main; +type ev = (i32 | str); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = ("hello": ev); + match (h.e) { + case let s: str => return s.len: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r693_dot_tagged_ptr_i64/case.ww b/test/wcc/data/r693_dot_tagged_ptr_i64/case.ww new file mode 100644 index 00000000..6927ab57 --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_ptr_i64/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 42 +package main; +type ev = (i64 | i32); +type holder = struct { e: ev, mark: i32 }; +fn f(h: *holder) i32 = { + match (h.e) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 42i64; + return f(&h); +}; diff --git a/test/wcc/data/r693_dot_tagged_ptr_slice/case.ww b/test/wcc/data/r693_dot_tagged_ptr_slice/case.ww new file mode 100644 index 00000000..2fd9428e --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_ptr_slice/case.ww @@ -0,0 +1,21 @@ +//ww:run-exit 3 +package main; +type ev = (i32 | []u8); +type holder = struct { e: ev, mark: i32 }; +fn f(h: *holder) i32 = { + match (h.e) { + case let v: []u8 => { + if (v.cap != 8) { return 1; }; + return v.len: i32; + }; + case let z: i32 => return -1; + }; +}; +fn main() i32 = { + let raw: [8]u8; + raw[0] = 1u8; raw[1] = 2u8; raw[2] = 3u8; + let h: holder; + h.mark = 99; + h.e = (raw[0:3]: ev); + return f(&h); +}; diff --git a/test/wcc/data/r693_dot_tagged_ptr_str/case.ww b/test/wcc/data/r693_dot_tagged_ptr_str/case.ww new file mode 100644 index 00000000..8d79930c --- /dev/null +++ b/test/wcc/data/r693_dot_tagged_ptr_str/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 5 +package main; +type ev = (i32 | str); +type holder = struct { e: ev, mark: i32 }; +fn f(h: *holder) i32 = { + match (h.e) { + case let s: str => return s.len: i32; + case let z: i32 => return -1; + }; +}; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = ("hello": ev); + return f(&h); +}; diff --git a/test/wcc/data/r694_tagged_intlit_i32/case.ww b/test/wcc/data/r694_tagged_intlit_i32/case.ww new file mode 100644 index 00000000..1fcdd557 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_i32/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 42i32; + match (h.e) { + case let v: i64 => return -1; + case let z: i32 => return z; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_i64/case.ww b/test/wcc/data/r694_tagged_intlit_i64/case.ww new file mode 100644 index 00000000..3a738917 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_i64/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 42i64; + match (h.e) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_i64_str_tail/case.ww b/test/wcc/data/r694_tagged_intlit_i64_str_tail/case.ww new file mode 100644 index 00000000..b7860f91 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_i64_str_tail/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64 | str); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 1234567890i64; + match (h.e) { + case let v: i64 => return (v - 1234567848i64): i32; + case let z: i32 => return -1; + case let s: str => return -2; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_i64_tail/case.ww b/test/wcc/data/r694_tagged_intlit_i64_tail/case.ww new file mode 100644 index 00000000..45c970ec --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_i64_tail/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 142 +package main; +type ev = (u8 | i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 42i64; + match (h.e) { + case let b: u8 => return -1; + case let z: i32 => return -2; + case let v: i64 => return (v + 100i64): i32; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_letinit_i64/case.ww b/test/wcc/data/r694_tagged_intlit_letinit_i64/case.ww new file mode 100644 index 00000000..2dd0ca71 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_letinit_i64/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +fn main() i32 = { + let x: ev = 42i64; + match (x) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_negative_i64/case.ww b/test/wcc/data/r694_tagged_intlit_negative_i64/case.ww new file mode 100644 index 00000000..f2f1daa4 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_negative_i64/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = -42i64; + match (h.e) { + case let v: i64 => { + if (v != -42i64) { return 50; }; + return (0i64 - v): i32; + }; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_nested_unary_i64/case.ww b/test/wcc/data/r694_tagged_intlit_nested_unary_i64/case.ww new file mode 100644 index 00000000..62a2b442 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_nested_unary_i64/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = - -42i64; + match (h.e) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_plus_i64/case.ww b/test/wcc/data/r694_tagged_intlit_plus_i64/case.ww new file mode 100644 index 00000000..16f57691 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_plus_i64/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = +42i64; + match (h.e) { + case let v: i64 => return v: i32; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_tilde_i64/case.ww b/test/wcc/data/r694_tagged_intlit_tilde_i64/case.ww new file mode 100644 index 00000000..796b0668 --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_tilde_i64/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 42 +package main; +type ev = (i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = ~0i64; + match (h.e) { + case let v: i64 => { + if (v != -1i64) { return 50; }; + return 42; + }; + case let z: i32 => return -1; + }; +}; diff --git a/test/wcc/data/r694_tagged_intlit_u8_head/case.ww b/test/wcc/data/r694_tagged_intlit_u8_head/case.ww new file mode 100644 index 00000000..5cf1c79c --- /dev/null +++ b/test/wcc/data/r694_tagged_intlit_u8_head/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 7 +package main; +type ev = (u8 | i32 | i64); +type holder = struct { e: ev, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = 7u8; + match (h.e) { + case let b: u8 => return b: i32; + case let z: i32 => return -1; + case let v: i64 => return -2; + }; +}; diff --git a/test/wcc/data/r695_match_bind_i32_control/case.ww b/test/wcc/data/r695_match_bind_i32_control/case.ww new file mode 100644 index 00000000..f3496758 --- /dev/null +++ b/test/wcc/data/r695_match_bind_i32_control/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 42 +package main; +type pair = struct { x: i64, y: i64, z: i64 }; +type tag = (pair | i32); +type holder = struct { e: tag, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = (42i32: tag); + match (h.e) { + case let v: pair => return -1; + case let z: i32 => return z; + }; +}; diff --git a/test/wcc/data/r695_match_bind_mixed_struct/case.ww b/test/wcc/data/r695_match_bind_mixed_struct/case.ww new file mode 100644 index 00000000..896ad540 --- /dev/null +++ b/test/wcc/data/r695_match_bind_mixed_struct/case.ww @@ -0,0 +1,21 @@ +//ww:run +package main; +type mix = struct { x: i32, y: i32, z: i64, w: i64 }; +type tag = (mix | i32); +type holder = struct { t: tag, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + let m: mix = mix { x = 3, y = 5, z = 11i64, w = 12i64 }; + h.t = (m: tag); + match (h.t) { + case let v: mix => { + if (v.x != 3) { return 10; }; + if (v.y != 5) { return 11; }; + if (v.z != 11i64) { return 12; }; + if (v.w != 12i64) { return 13; }; + return 0; + }; + case let z: i32 => return 2; + }; +}; diff --git a/test/wcc/data/r695_match_bind_pair3/case.ww b/test/wcc/data/r695_match_bind_pair3/case.ww new file mode 100644 index 00000000..7fee44af --- /dev/null +++ b/test/wcc/data/r695_match_bind_pair3/case.ww @@ -0,0 +1,19 @@ +//ww:run +package main; +type pair = struct { x: i64, y: i64, z: i64 }; +type tag = (pair | i32); +type holder = struct { e: tag, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + let p: pair = pair { x = 7i64, y = 11i64, z = 13i64 }; + h.e = (p: tag); + match (h.e) { + case let v: pair => { + let s: i64 = v.x + v.y + v.z; + if (s != 31i64) { return 1; }; + return 0; + }; + case let z: i32 => { return 2; }; + }; +}; diff --git a/test/wcc/data/r695_match_bind_pair_letinit/case.ww b/test/wcc/data/r695_match_bind_pair_letinit/case.ww new file mode 100644 index 00000000..1fd23ce7 --- /dev/null +++ b/test/wcc/data/r695_match_bind_pair_letinit/case.ww @@ -0,0 +1,15 @@ +//ww:run +package main; +type pair = struct { x: i64, y: i64, z: i64 }; +type tag = (pair | i32); +fn main() i32 = { + let x: tag = (pair { x = 7i64, y = 11i64, z = 13i64 }: tag); + match (x) { + case let v: pair => { + let s: i64 = v.x + v.y + v.z; + if (s != 31i64) { return 1; }; + return 0; + }; + case let z: i32 => return 2; + }; +}; diff --git a/test/wcc/data/r695_match_bind_slice_control/case.ww b/test/wcc/data/r695_match_bind_slice_control/case.ww new file mode 100644 index 00000000..771e8638 --- /dev/null +++ b/test/wcc/data/r695_match_bind_slice_control/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 3 +package main; +type pair = struct { x: i64, y: i64, z: i64 }; +type tag = ([]u8 | pair); +type holder = struct { e: tag, mark: i32 }; +fn main() i32 = { + let raw: [8]u8; + raw[0] = 1u8; raw[1] = 2u8; raw[2] = 3u8; + let h: holder; + h.mark = 99; + h.e = (raw[0:3]: tag); + match (h.e) { + case let v: []u8 => { + if (v.cap != 8) { return 20; }; + return v.len: i32; + }; + case let p: pair => return -1; + }; +}; diff --git a/test/wcc/data/r695_match_bind_str_control/case.ww b/test/wcc/data/r695_match_bind_str_control/case.ww new file mode 100644 index 00000000..d41daa6c --- /dev/null +++ b/test/wcc/data/r695_match_bind_str_control/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 5 +package main; +type pair = struct { x: i64, y: i64, z: i64 }; +type tag = (str | pair); +type holder = struct { e: tag, mark: i32 }; +fn main() i32 = { + let h: holder; + h.mark = 99; + h.e = ("hello": tag); + match (h.e) { + case let s: str => return s.len: i32; + case let v: pair => return -1; + }; +}; diff --git a/test/wcc/data/r695_match_bind_wide4_letinit/case.ww b/test/wcc/data/r695_match_bind_wide4_letinit/case.ww new file mode 100644 index 00000000..0f7f5245 --- /dev/null +++ b/test/wcc/data/r695_match_bind_wide4_letinit/case.ww @@ -0,0 +1,16 @@ +//ww:run +package main; +type wide = struct { a: i64, b: i64, c: i64, d: i64 }; +type tag = (wide | i32); +fn main() i32 = { + let x: tag = (wide { a = 1i64, b = 2i64, c = 4i64, + d = 24i64 }: tag); + match (x) { + case let v: wide => { + let s: i64 = v.a + v.b + v.c + v.d; + if (s != 31i64) { return 1; }; + return 0; + }; + case let z: i32 => return 2; + }; +}; diff --git a/test/wcc/data/r701_field_chain_call/case.ww b/test/wcc/data/r701_field_chain_call/case.ww new file mode 100644 index 00000000..260b559b --- /dev/null +++ b/test/wcc/data/r701_field_chain_call/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 41 +package main; +type inner = struct { a: i64, b: i64 }; +type middle = struct { in: inner, t: i64 }; +type outer = struct { m: middle, x: i64 }; +fn mki() inner = { return inner { a = 5i64, b = 6i64 }; }; +fn main() i32 = { + let o: outer; + o.m.t = 10i64; + o.x = 20i64; + o.m.in = mki(); + return (o.m.in.a + o.m.in.b + o.m.t + o.x): i32; +}; diff --git a/test/wcc/data/r701_field_chain_lit/case.ww b/test/wcc/data/r701_field_chain_lit/case.ww new file mode 100644 index 00000000..fa2ff442 --- /dev/null +++ b/test/wcc/data/r701_field_chain_lit/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 63 +package main; +type inner = struct { a: i64, b: i64 }; +type middle = struct { in: inner, t: i64 }; +type outer = struct { m: middle, x: i64 }; +fn main() i32 = { + let o: outer; + o.m.t = 10i64; + o.x = 20i64; + o.m.in = inner { a = 11i64, b = 22i64 }; + return (o.m.in.a + o.m.in.b + o.m.t + o.x): i32; +}; diff --git a/test/wcc/data/r701_field_global_call/case.ww b/test/wcc/data/r701_field_global_call/case.ww new file mode 100644 index 00000000..f8c2dd40 --- /dev/null +++ b/test/wcc/data/r701_field_global_call/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 250 +package main; +type inner = struct { a: i64, b: i64 }; +type outer = struct { i: inner, t: i64 }; +let g: outer; +fn mki() inner = { return inner { a = 70i64, b = 80i64 }; }; +fn main() i32 = { + g.t = 100i64; + g.i = mki(); + return (g.i.a + g.i.b + g.t): i32; +}; diff --git a/test/wcc/data/r701_field_local_call/case.ww b/test/wcc/data/r701_field_local_call/case.ww new file mode 100644 index 00000000..ffb2780a --- /dev/null +++ b/test/wcc/data/r701_field_local_call/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 7 +package main; +type inner = struct { a: i64, b: i64 }; +type outer = struct { i: inner, t: i64 }; +fn mki() inner = { return inner { a = 3i64, b = 4i64 }; }; +fn main() i32 = { + let o: outer = outer { i = inner { a = 0i64, b = 0i64 }, t = 0i64 }; + o.i = mki(); + return (o.i.a + o.i.b + o.t): i32; +}; diff --git a/test/wcc/data/r701_field_local_lit/case.ww b/test/wcc/data/r701_field_local_lit/case.ww new file mode 100644 index 00000000..52a52a26 --- /dev/null +++ b/test/wcc/data/r701_field_local_lit/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 38 +package main; +type inner = struct { a: i64, b: i64 }; +type outer = struct { i: inner, t: i64 }; +fn main() i32 = { + let o: outer = outer { i = inner { a = 0i64, b = 0i64 }, t = 5i64 }; + o.i = inner { a = 11i64, b = 22i64 }; + return (o.i.a + o.i.b + o.t): i32; +}; diff --git a/test/wcc/data/r701_field_ptr_call/case.ww b/test/wcc/data/r701_field_ptr_call/case.ww new file mode 100644 index 00000000..cc2aebbd --- /dev/null +++ b/test/wcc/data/r701_field_ptr_call/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 170 +package main; +type inner = struct { a: i64, b: i64 }; +type outer = struct { i: inner, t: i64 }; +fn mki() inner = { return inner { a = 30i64, b = 40i64 }; }; +fn main() i32 = { + let o: outer = outer { i = inner { a = 0i64, b = 0i64 }, t = 100i64 }; + let p: *outer = &o; + p.i = mki(); + return (o.i.a + o.i.b + o.t): i32; +}; diff --git a/test/wcc/data/r701_field_ptr_lit/case.ww b/test/wcc/data/r701_field_ptr_lit/case.ww new file mode 100644 index 00000000..fefa30ec --- /dev/null +++ b/test/wcc/data/r701_field_ptr_lit/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 65 +package main; +type inner = struct { a: i64, b: i64 }; +type outer = struct { i: inner, t: i64 }; +fn main() i32 = { + let o: outer = outer { i = inner { a = 0i64, b = 0i64 }, t = 50i64 }; + let p: *outer = &o; + p.i = inner { a = 7i64, b = 8i64 }; + return (o.i.a + o.i.b + o.t): i32; +}; diff --git a/test/wcc/data/r701_five_i32_let_call/case.ww b/test/wcc/data/r701_five_i32_let_call/case.ww new file mode 100644 index 00000000..6b01c572 --- /dev/null +++ b/test/wcc/data/r701_five_i32_let_call/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 15 +package main; +type five = struct { a: i32, b: i32, c: i32, d: i32, e: i32 }; +fn mk() five = { + return five { a = 1, b = 2, c = 3, d = 4, e = 5 }; +}; +fn main() i32 = { + let s: five = mk(); + return s.a + s.b + s.c + s.d + s.e; +}; diff --git a/test/wcc/data/r701_five_i32_reassign_lit/case.ww b/test/wcc/data/r701_five_i32_reassign_lit/case.ww new file mode 100644 index 00000000..98084d27 --- /dev/null +++ b/test/wcc/data/r701_five_i32_reassign_lit/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 30 +package main; +type five = struct { a: i32, b: i32, c: i32, d: i32, e: i32 }; +fn main() i32 = { + let s: five = five { a = 0, b = 0, c = 0, d = 0, e = 0 }; + s = five { a = 2, b = 4, c = 6, d = 8, e = 10 }; + return s.a + s.b + s.c + s.d + s.e; +}; diff --git a/test/wcc/data/r701_mix_let_call/case.ww b/test/wcc/data/r701_mix_let_call/case.ww new file mode 100644 index 00000000..f4518184 --- /dev/null +++ b/test/wcc/data/r701_mix_let_call/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 10 +package main; +type mix = struct { a: i32, b: i32, c: i64, d: i64 }; +fn mk() mix = { return mix { a = 1, b = 2, c = 3i64, d = 4i64 }; }; +fn main() i32 = { + let s: mix = mk(); + return (s.a + s.b) + (s.c + s.d): i32; +}; diff --git a/test/wcc/data/r701_one_i64_let_call/case.ww b/test/wcc/data/r701_one_i64_let_call/case.ww new file mode 100644 index 00000000..de3029bd --- /dev/null +++ b/test/wcc/data/r701_one_i64_let_call/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type one = struct { v: i64 }; +fn mk() one = { return one { v = 7i64 }; }; +fn main() i32 = { + let s: one = mk(); + return s.v: i32; +}; diff --git a/test/wcc/data/r701_one_i64_let_lit/case.ww b/test/wcc/data/r701_one_i64_let_lit/case.ww new file mode 100644 index 00000000..ca9d1248 --- /dev/null +++ b/test/wcc/data/r701_one_i64_let_lit/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 11 +package main; +type one = struct { v: i64 }; +fn main() i32 = { + let s: one = one { v = 11i64 }; + return s.v: i32; +}; diff --git a/test/wcc/data/r701_one_i64_reassign_call/case.ww b/test/wcc/data/r701_one_i64_reassign_call/case.ww new file mode 100644 index 00000000..f96a800e --- /dev/null +++ b/test/wcc/data/r701_one_i64_reassign_call/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 13 +package main; +type one = struct { v: i64 }; +fn mk() one = { return one { v = 13i64 }; }; +fn main() i32 = { + let s: one = one { v = 0i64 }; + s = mk(); + return s.v: i32; +}; diff --git a/test/wcc/data/r701_one_i64_reassign_lit/case.ww b/test/wcc/data/r701_one_i64_reassign_lit/case.ww new file mode 100644 index 00000000..2a76e9b1 --- /dev/null +++ b/test/wcc/data/r701_one_i64_reassign_lit/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 17 +package main; +type one = struct { v: i64 }; +fn main() i32 = { + let s: one = one { v = 0i64 }; + s = one { v = 17i64 }; + return s.v: i32; +}; diff --git a/test/wcc/data/r701_pair_i64_let_call/case.ww b/test/wcc/data/r701_pair_i64_let_call/case.ww new file mode 100644 index 00000000..e625c2fc --- /dev/null +++ b/test/wcc/data/r701_pair_i64_let_call/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 8 +package main; +type pair = struct { a: i64, b: i64 }; +fn mk() pair = { return pair { a = 3i64, b = 5i64 }; }; +fn main() i32 = { + let s: pair = mk(); + return (s.a + s.b): i32; +}; diff --git a/test/wcc/data/r701_pair_i64_reassign_lit/case.ww b/test/wcc/data/r701_pair_i64_reassign_lit/case.ww new file mode 100644 index 00000000..e41e53ed --- /dev/null +++ b/test/wcc/data/r701_pair_i64_reassign_lit/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 10 +package main; +type pair = struct { a: i64, b: i64 }; +fn main() i32 = { + let s: pair = pair { a = 0i64, b = 0i64 }; + s = pair { a = 4i64, b = 6i64 }; + return (s.a + s.b): i32; +}; diff --git a/test/wcc/data/r701_trip_i64_let_call/case.ww b/test/wcc/data/r701_trip_i64_let_call/case.ww new file mode 100644 index 00000000..ec8f95c4 --- /dev/null +++ b/test/wcc/data/r701_trip_i64_let_call/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 66 +package main; +type trip = struct { x: i64, y: i64, z: i64 }; +fn mk() trip = { return trip { x = 11i64, y = 22i64, z = 33i64 }; }; +fn main() i32 = { + let s: trip = mk(); + return (s.x + s.y + s.z): i32; +}; diff --git a/test/wcc/data/r701_trip_i64_reassign_lit/case.ww b/test/wcc/data/r701_trip_i64_reassign_lit/case.ww new file mode 100644 index 00000000..6940e44f --- /dev/null +++ b/test/wcc/data/r701_trip_i64_reassign_lit/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 84 +package main; +type trip = struct { x: i64, y: i64, z: i64 }; +fn main() i32 = { + let s: trip = trip { x = 0i64, y = 0i64, z = 0i64 }; + s = trip { x = 14i64, y = 28i64, z = 42i64 }; + return (s.x + s.y + s.z): i32; +}; diff --git a/test/wcc/data/r702_deref_read_i32/case.ww b/test/wcc/data/r702_deref_read_i32/case.ww new file mode 100644 index 00000000..1c0f9b9a --- /dev/null +++ b/test/wcc/data/r702_deref_read_i32/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +type box = struct { a: i32, b: i32, c: i32 }; +fn main() i32 = { let s: box = box { a = 1, b = 2, c = 3 }; let p: *box = &s; return (*p).a + (*p).b + (*p).c; }; diff --git a/test/wcc/data/r702_deref_read_i64/case.ww b/test/wcc/data/r702_deref_read_i64/case.ww new file mode 100644 index 00000000..292f07cc --- /dev/null +++ b/test/wcc/data/r702_deref_read_i64/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 80 +package main; +type pt = struct { x: i64, y: i64 }; +fn main() i32 = { let s: pt = pt { x = 50i64, y = 80i64 }; let p: *pt = &s; return (*p).y: i32; }; diff --git a/test/wcc/data/r702_deref_read_str/case.ww b/test/wcc/data/r702_deref_read_str/case.ww new file mode 100644 index 00000000..09a4d06a --- /dev/null +++ b/test/wcc/data/r702_deref_read_str/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +type box = struct { s: str }; +fn main() i32 = { let v: box; v.s = "hello"; let p: *box = &v; return (*p).s.len: i32; }; diff --git a/test/wcc/data/r702_deref_roundtrip/case.ww b/test/wcc/data/r702_deref_roundtrip/case.ww new file mode 100644 index 00000000..7525ce5f --- /dev/null +++ b/test/wcc/data/r702_deref_roundtrip/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 24 +package main; +type pt = struct { x: i32, y: i32, z: i32 }; +fn main() i32 = { let s: pt = pt { x = 0, y = 0, z = 0 }; let p: *pt = &s; (*p).x = 4; (*p).y = 7; (*p).z = 13; return (*p).x + (*p).y + (*p).z; }; diff --git a/test/wcc/data/r702_deref_write_i32/case.ww b/test/wcc/data/r702_deref_write_i32/case.ww new file mode 100644 index 00000000..b62ac2f9 --- /dev/null +++ b/test/wcc/data/r702_deref_write_i32/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 35 +package main; +type box = struct { a: i32, b: i32, c: i32 }; +fn main() i32 = { let s: box = box { a = 0, b = 0, c = 0 }; let p: *box = &s; (*p).a = 5; (*p).b = 11; (*p).c = 19; return s.a + s.b + s.c; }; diff --git a/test/wcc/data/r702_deref_write_i64/case.ww b/test/wcc/data/r702_deref_write_i64/case.ww new file mode 100644 index 00000000..1a0c28ba --- /dev/null +++ b/test/wcc/data/r702_deref_write_i64/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type pt = struct { x: i64, y: i64 }; +fn main() i32 = { let s: pt = pt { x = 0i64, y = 0i64 }; let p: *pt = &s; (*p).x = 7i64; (*p).y = 35i64; return (s.x + s.y): i32; }; diff --git a/test/wcc/data/r702_deref_write_str/case.ww b/test/wcc/data/r702_deref_write_str/case.ww new file mode 100644 index 00000000..1746d8d2 --- /dev/null +++ b/test/wcc/data/r702_deref_write_str/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type box = struct { s: str, n: i64 }; +fn main() i32 = { let v: box; let p: *box = &v; (*p).s = "hi"; (*p).n = 40i64; return (v.s.len: i64 + v.n): i32; }; diff --git a/test/wcc/data/r703_nested_assign/case.ww b/test/wcc/data/r703_nested_assign/case.ww new file mode 100644 index 00000000..eb869aa5 --- /dev/null +++ b/test/wcc/data/r703_nested_assign/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 50 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; +fn main() i32 = { let o: outer; o = outer { i = inner { a = 9i64, b = 11i64 }, t = 30i64 }; return (o.i.a + o.i.b + o.t): i32; }; diff --git a/test/wcc/data/r703_nested_let_i32/case.ww b/test/wcc/data/r703_nested_let_i32/case.ww new file mode 100644 index 00000000..b3860721 --- /dev/null +++ b/test/wcc/data/r703_nested_let_i32/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 22 +package main; +type inner = struct { a: i32, b: i32 }; type outer = struct { i: inner, x: i32, y: i32 }; +fn main() i32 = { let o: outer = outer { i = inner { a = 4, b = 5 }, x = 6, y = 7 }; return o.i.a + o.i.b + o.x + o.y; }; diff --git a/test/wcc/data/r703_nested_let_i64/case.ww b/test/wcc/data/r703_nested_let_i64/case.ww new file mode 100644 index 00000000..1c422b58 --- /dev/null +++ b/test/wcc/data/r703_nested_let_i64/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 27 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; +fn main() i32 = { let o: outer = outer { i = inner { a = 7i64, b = 8i64 }, t = 12i64 }; return (o.i.a + o.i.b + o.t): i32; }; diff --git a/test/wcc/data/r703_nested_middle/case.ww b/test/wcc/data/r703_nested_middle/case.ww new file mode 100644 index 00000000..816aaedb --- /dev/null +++ b/test/wcc/data/r703_nested_middle/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 153 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { pre: i64, i: inner, post: i64 }; +fn main() i32 = { let o: outer = outer { pre = 100i64, i = inner { a = 1i64, b = 2i64 }, post = 50i64 }; return (o.pre + o.i.a + o.i.b + o.post): i32; }; diff --git a/test/wcc/data/r703_nested_return/case.ww b/test/wcc/data/r703_nested_return/case.ww new file mode 100644 index 00000000..dbb018dc --- /dev/null +++ b/test/wcc/data/r703_nested_return/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 55 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; +fn mko() outer = { return outer { i = inner { a = 13i64, b = 17i64 }, t = 25i64 }; }; +fn main() i32 = { let r: outer = mko(); return (r.i.a + r.i.b + r.t): i32; }; diff --git a/test/wcc/data/r703_nested_three_deep/case.ww b/test/wcc/data/r703_nested_three_deep/case.ww new file mode 100644 index 00000000..9e9f8431 --- /dev/null +++ b/test/wcc/data/r703_nested_three_deep/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 10 +package main; +type leaf = struct { a: i64, b: i64 }; type middle = struct { in: leaf, t: i64 }; type outer = struct { m: middle, x: i64 }; +fn main() i32 = { let o: outer = outer { m = middle { in = leaf { a = 1i64, b = 2i64 }, t = 3i64 }, x = 4i64 }; return (o.m.in.a + o.m.in.b + o.m.t + o.x): i32; }; diff --git a/test/wcc/data/r704_dot_chain/case.ww b/test/wcc/data/r704_dot_chain/case.ww new file mode 100644 index 00000000..15275a60 --- /dev/null +++ b/test/wcc/data/r704_dot_chain/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 22 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; type holder = struct { f: outer }; type h2 = struct { mid: holder, pad: i64 }; +fn main() i32 = { let h: h2; h.mid.f = outer { i = inner { a = 4i64, b = 5i64 }, t = 13i64 }; return (h.mid.f.i.a + h.mid.f.i.b + h.mid.f.t): i32; }; diff --git a/test/wcc/data/r704_dot_chain_global/case.ww b/test/wcc/data/r704_dot_chain_global/case.ww new file mode 100644 index 00000000..fae73c15 --- /dev/null +++ b/test/wcc/data/r704_dot_chain_global/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 61 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; type holder = struct { f: outer }; type h2 = struct { mid: holder, pad: i64 }; let gg: h2; +fn main() i32 = { gg.mid.f = outer { i = inner { a = 10i64, b = 20i64 }, t = 31i64 }; return (gg.mid.f.i.a + gg.mid.f.i.b + gg.mid.f.t): i32; }; diff --git a/test/wcc/data/r704_dot_chain_ptr/case.ww b/test/wcc/data/r704_dot_chain_ptr/case.ww new file mode 100644 index 00000000..0c196ecd --- /dev/null +++ b/test/wcc/data/r704_dot_chain_ptr/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 27 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; type holder = struct { f: outer }; type h2 = struct { mid: holder, pad: i64 }; +fn main() i32 = { let h: h2; let p: *h2 = &h; p.mid.f = outer { i = inner { a = 6i64, b = 7i64 }, t = 14i64 }; return (p.mid.f.i.a + p.mid.f.i.b + p.mid.f.t): i32; }; diff --git a/test/wcc/data/r704_dot_global/case.ww b/test/wcc/data/r704_dot_global/case.ww new file mode 100644 index 00000000..f36b3c96 --- /dev/null +++ b/test/wcc/data/r704_dot_global/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 55 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; type holder = struct { f: outer }; let g: holder; +fn main() i32 = { g.f = outer { i = inner { a = 13i64, b = 17i64 }, t = 25i64 }; return (g.f.i.a + g.f.i.b + g.f.t): i32; }; diff --git a/test/wcc/data/r704_dot_local/case.ww b/test/wcc/data/r704_dot_local/case.ww new file mode 100644 index 00000000..5010f4dd --- /dev/null +++ b/test/wcc/data/r704_dot_local/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 27 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; type holder = struct { f: outer }; +fn main() i32 = { let h: holder; h.f = outer { i = inner { a = 7i64, b = 8i64 }, t = 12i64 }; return (h.f.i.a + h.f.i.b + h.f.t): i32; }; diff --git a/test/wcc/data/r704_dot_local_three/case.ww b/test/wcc/data/r704_dot_local_three/case.ww new file mode 100644 index 00000000..d2ff4bae --- /dev/null +++ b/test/wcc/data/r704_dot_local_three/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 19 +package main; +type leaf = struct { a: i64, b: i64 }; type middle = struct { in: leaf, t: i64 }; type outer = struct { m: middle, x: i64 }; type holder = struct { f: outer, pad: i64 }; +fn main() i32 = { let h: holder; h.f = outer { m = middle { in = leaf { a = 1i64, b = 2i64 }, t = 3i64 }, x = 4i64 }; h.pad = 9i64; return (h.f.m.in.a + h.f.m.in.b + h.f.m.t + h.f.x + h.pad): i32; }; diff --git a/test/wcc/data/r704_dot_ptr/case.ww b/test/wcc/data/r704_dot_ptr/case.ww new file mode 100644 index 00000000..3a4ba289 --- /dev/null +++ b/test/wcc/data/r704_dot_ptr/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 50 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { i: inner, t: i64 }; type holder = struct { f: outer }; +fn main() i32 = { let h: holder; let p: *holder = &h; p.f = outer { i = inner { a = 9i64, b = 11i64 }, t = 30i64 }; return (p.f.i.a + p.f.i.b + p.f.t): i32; }; diff --git a/test/wcc/data/r704_dot_ptr_three/case.ww b/test/wcc/data/r704_dot_ptr_three/case.ww new file mode 100644 index 00000000..8838ac2e --- /dev/null +++ b/test/wcc/data/r704_dot_ptr_three/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 10 +package main; +type leaf = struct { a: i64, b: i64 }; type middle = struct { in: leaf, t: i64 }; type outer = struct { m: middle, x: i64 }; type holder = struct { f: outer }; +fn main() i32 = { let h: holder; let p: *holder = &h; p.f = outer { m = middle { in = leaf { a = 1i64, b = 2i64 }, t = 3i64 }, x = 4i64 }; return (p.f.m.in.a + p.f.m.in.b + p.f.m.t + p.f.x): i32; }; diff --git a/test/wcc/data/r705_call_16/case.ww b/test/wcc/data/r705_call_16/case.ww new file mode 100644 index 00000000..02c27b79 --- /dev/null +++ b/test/wcc/data/r705_call_16/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 35 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { m: inner, x: i64 }; fn mki() inner = { return inner { a = 7i64, b = 8i64 }; }; +fn main() i32 = { let o: outer = outer { m = mki(), x = 20i64 }; return (o.m.a + o.m.b + o.x): i32; }; diff --git a/test/wcc/data/r705_call_24/case.ww b/test/wcc/data/r705_call_24/case.ww new file mode 100644 index 00000000..a5fac166 --- /dev/null +++ b/test/wcc/data/r705_call_24/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 26 +package main; +type inner = struct { a: i64, b: i64, c: i64 }; type outer = struct { m: inner, x: i64 }; fn mki() inner = { return inner { a = 1i64, b = 2i64, c = 3i64 }; }; +fn main() i32 = { let o: outer = outer { m = mki(), x = 20i64 }; return (o.m.a + o.m.b + o.m.c + o.x): i32; }; diff --git a/test/wcc/data/r705_call_8/case.ww b/test/wcc/data/r705_call_8/case.ww new file mode 100644 index 00000000..f21cfb7b --- /dev/null +++ b/test/wcc/data/r705_call_8/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 27 +package main; +type inner = struct { a: i64 }; type outer = struct { m: inner, x: i64 }; fn mki() inner = { return inner { a = 7i64 }; }; +fn main() i32 = { let o: outer = outer { m = mki(), x = 20i64 }; return (o.m.a + o.x): i32; }; diff --git a/test/wcc/data/r705_call_ptr/case.ww b/test/wcc/data/r705_call_ptr/case.ww new file mode 100644 index 00000000..3d3f5a15 --- /dev/null +++ b/test/wcc/data/r705_call_ptr/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 80 +package main; +type inner = struct { a: i64, b: i64 }; type outer = struct { m: inner, x: i64 }; type holder = struct { f: outer }; fn mki() inner = { return inner { a = 13i64, b = 17i64 }; }; +fn main() i32 = { let h: holder; let p: *holder = &h; p.f = outer { m = mki(), x = 50i64 }; return (p.f.m.a + p.f.m.b + p.f.x): i32; }; diff --git a/test/wcc/data/r705_call_tail1/case.ww b/test/wcc/data/r705_call_tail1/case.ww new file mode 100644 index 00000000..68f4fbdc --- /dev/null +++ b/test/wcc/data/r705_call_tail1/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 85 +package main; +type inner = struct { a: i8, b: i8, c: i8, d: i8, e: i8, f: i8, g: i8, h: i8, i: i8 }; type outer = struct { m: inner, x: i64 }; +fn mki() inner = { return inner { a = 1i8, b = 2i8, c = 3i8, d = 4i8, e = 5i8, f = 6i8, g = 7i8, h = 8i8, i = 9i8 }; }; +fn main() i32 = { let o: outer = outer { m = mki(), x = 40i64 }; return (o.m.a: i64 + o.m.b: i64 + o.m.c: i64 + o.m.d: i64 + o.m.e: i64 + o.m.f: i64 + o.m.g: i64 + o.m.h: i64 + o.m.i: i64 + o.x): i32; }; diff --git a/test/wcc/data/r705_call_tail2/case.ww b/test/wcc/data/r705_call_tail2/case.ww new file mode 100644 index 00000000..7167f820 --- /dev/null +++ b/test/wcc/data/r705_call_tail2/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 58 +package main; +type inner = struct { a: i16, b: i16, c: i16, d: i16, e: i16 }; type outer = struct { m: inner, x: i64 }; +fn mki() inner = { return inner { a = 2i16, b = 3i16, c = 5i16, d = 7i16, e = 11i16 }; }; +fn main() i32 = { let o: outer = outer { m = mki(), x = 30i64 }; return (o.m.a: i64 + o.m.b: i64 + o.m.c: i64 + o.m.d: i64 + o.m.e: i64 + o.x): i32; }; diff --git a/test/wcc/data/r705_call_tail4/case.ww b/test/wcc/data/r705_call_tail4/case.ww new file mode 100644 index 00000000..40cd7432 --- /dev/null +++ b/test/wcc/data/r705_call_tail4/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 35 +package main; +type inner = struct { a: i32, b: i32, c: i32 }; type outer = struct { m: inner, x: i64 }; fn mki() inner = { return inner { a = 4, b = 5, c = 6 }; }; +fn main() i32 = { let o: outer = outer { m = mki(), x = 20i64 }; return (o.m.a: i64 + o.m.b: i64 + o.m.c: i64 + o.x): i32; }; diff --git a/test/wcc/data/r705_call_three_deep/case.ww b/test/wcc/data/r705_call_three_deep/case.ww new file mode 100644 index 00000000..f0ee5dc1 --- /dev/null +++ b/test/wcc/data/r705_call_three_deep/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 100 +package main; +type leaf = struct { a: i64, b: i64 }; type middle = struct { in: leaf, t: i64 }; type outer = struct { m: middle, x: i64 }; fn mki() leaf = { return leaf { a = 9i64, b = 11i64 }; }; +fn main() i32 = { let o: outer = outer { m = middle { in = mki(), t = 30i64 }, x = 50i64 }; return (o.m.in.a + o.m.in.b + o.m.t + o.x): i32; }; diff --git a/test/wcc/data/r707_aliased_tagged_askbool_idx2/case.ww b/test/wcc/data/r707_aliased_tagged_askbool_idx2/case.ww new file mode 100644 index 00000000..81f0d571 --- /dev/null +++ b/test/wcc/data/r707_aliased_tagged_askbool_idx2/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 2 +package main; +type ft = (i64 | str | bool); +fn askbool(b: bool) ft = { return b; }; +fn main() i32 = { + let b: bool = true; + let a: ft = askbool(b); + let p: u64 = (&a): u64; + let pt: *i64 = p: *i64; + return (*pt): i32; +}; diff --git a/test/wcc/data/r707_aliased_tagged_aski64_idx0/case.ww b/test/wcc/data/r707_aliased_tagged_aski64_idx0/case.ww new file mode 100644 index 00000000..27e3ad5a --- /dev/null +++ b/test/wcc/data/r707_aliased_tagged_aski64_idx0/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 0 +package main; +type ft = (i64 | str | bool); +fn aski64(v: i64) ft = { return v; }; +fn main() i32 = { + let v: i64 = 7i64; + let a: ft = aski64(v); + let p: u64 = (&a): u64; + let pt: *i64 = p: *i64; + return (*pt): i32; +}; diff --git a/test/wcc/data/r707_aliased_tagged_askstr_idx1/case.ww b/test/wcc/data/r707_aliased_tagged_askstr_idx1/case.ww new file mode 100644 index 00000000..7f1fbdd7 --- /dev/null +++ b/test/wcc/data/r707_aliased_tagged_askstr_idx1/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 1 +package main; +type ft = (i64 | str | bool); +fn askstr(s: str) ft = { return s; }; +fn main() i32 = { + let s: str = "world"; + let a: ft = askstr(s); + let p: u64 = (&a): u64; + let pt: *i64 = p: *i64; + return (*pt): i32; +}; diff --git a/test/wcc/data/r707_bool_24b_after_arridx/case.ww b/test/wcc/data/r707_bool_24b_after_arridx/case.ww new file mode 100644 index 00000000..40b41a76 --- /dev/null +++ b/test/wcc/data/r707_bool_24b_after_arridx/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 0 +package main; +type ft = (i64 | str | bool); +fn askbool(b: bool) ft = { return b; }; +fn main() i32 = { + let arr: [3]i64 = [1i64, 0i64, 1i64]; + let i: i32 = 0; + let v: i64 = arr[i]; + let b: bool = v != 0i64; + let a: ft = askbool(b); + let p: u64 = (&a): u64; + let p2: *i64 = (p + 16u64): *i64; + let w: i64 = *p2; + return w: i32; +}; diff --git a/test/wcc/data/r707_f32_variant_return_payload/case.ww b/test/wcc/data/r707_f32_variant_return_payload/case.ww new file mode 100644 index 00000000..0a40d234 --- /dev/null +++ b/test/wcc/data/r707_f32_variant_return_payload/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 1 +package main; +let g: f32 = 1.5f32; +type ft = (f32 | i32); +fn mkf(k: i32) ft = { if (k > 0) { return g + 2.0f32; }; return k; }; +fn main() i32 = { + let a: ft = mkf(1); + let p: u64 = (&a): u64; + let pf: *f32 = (p + 8u64): *f32; + let fv: f32 = *pf; + if (fv == 3.5f32) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r707_f64_variant_return_multivariant/case.ww b/test/wcc/data/r707_f64_variant_return_multivariant/case.ww new file mode 100644 index 00000000..9cdf74e5 --- /dev/null +++ b/test/wcc/data/r707_f64_variant_return_multivariant/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 1 +package main; +type ft = (f64 | i32 | bool); +fn mulf(a: f64, b: f64) ft = { return a * b; }; +fn main() i32 = { + let a: ft = mulf(2.5, 4.0); + let p: u64 = (&a): u64; + let pf: *f64 = (p + 8u64): *f64; + let fv: f64 = *pf; + if (fv == 10.0) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r707_f64_variant_return_payload/case.ww b/test/wcc/data/r707_f64_variant_return_payload/case.ww new file mode 100644 index 00000000..825771ac --- /dev/null +++ b/test/wcc/data/r707_f64_variant_return_payload/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 1 +package main; +type ft = (f64 | i32); +fn addf(a: f64, b: f64) ft = { return a + b; }; +fn main() i32 = { + let a: ft = addf(1.5, 2.0); + let p: u64 = (&a): u64; + let pf: *f64 = (p + 8u64): *f64; + let fv: f64 = *pf; + if (fv == 3.5) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r707_mixed_variants_in_loop/case.ww b/test/wcc/data/r707_mixed_variants_in_loop/case.ww new file mode 100644 index 00000000..8f689b1a --- /dev/null +++ b/test/wcc/data/r707_mixed_variants_in_loop/case.ww @@ -0,0 +1,23 @@ +//ww:run-exit 0 +package main; +type ft = (i64 | str | bool); +fn askstr(s: str) ft = { return s; }; +fn aski64(v: i64) ft = { return v; }; +fn main() i32 = { + let arr: [2]i64 = [10i64, 20i64]; + let i: i32 = 0; + let bad: i32 = 0; + for (i < 2) { + let _v: i64 = arr[i]; + let a: ft; + let expect: i64 = 0i64; + if (i == 0) { a = askstr("world"); expect = 5i64; }; + if (i == 1) { a = aski64(99i64); expect = 0i64; }; + let p: u64 = (&a): u64; + let p2: *i64 = (p + 16u64): *i64; + let w: i64 = *p2; + if (w != expect) { bad += 1; }; + i += 1; + }; + return bad; +}; diff --git a/test/wcc/data/r707_scalar_24b_after_arridx/case.ww b/test/wcc/data/r707_scalar_24b_after_arridx/case.ww new file mode 100644 index 00000000..fbd7cf45 --- /dev/null +++ b/test/wcc/data/r707_scalar_24b_after_arridx/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 0 +package main; +type ft = (i64 | str | bool); +fn aski64(v: i64) ft = { return v; }; +fn main() i32 = { + let arr: [3]i64 = [10i64, 20i64, 30i64]; + let i: i32 = 1; + let v: i64 = arr[i]; + let a: ft = aski64(v); + let p: u64 = (&a): u64; + let p2: *i64 = (p + 16u64): *i64; + let w: i64 = *p2; + return w: i32; +}; diff --git a/test/wcc/data/r707_scalar_24b_in_loop/case.ww b/test/wcc/data/r707_scalar_24b_in_loop/case.ww new file mode 100644 index 00000000..95de61d4 --- /dev/null +++ b/test/wcc/data/r707_scalar_24b_in_loop/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 0 +package main; +type ft = (i64 | str | bool); +fn aski64(v: i64) ft = { return v; }; +fn main() i32 = { + let arr: [3]i64 = [10i64, 20i64, 30i64]; + let i: i32 = 0; + let bad: i32 = 0; + for (i < 3) { + let v: i64 = arr[i]; + let a: ft = aski64(v); + let p: u64 = (&a): u64; + let p2: *i64 = (p + 16u64): *i64; + let w: i64 = *p2; + if (w != 0i64) { bad += 1; }; + i += 1; + }; + return bad; +}; diff --git a/test/wcc/data/r707_scalar_24b_in_nested_loop/case.ww b/test/wcc/data/r707_scalar_24b_in_nested_loop/case.ww new file mode 100644 index 00000000..0e321a44 --- /dev/null +++ b/test/wcc/data/r707_scalar_24b_in_nested_loop/case.ww @@ -0,0 +1,23 @@ +//ww:run-exit 0 +package main; +type ft = (i64 | str | bool); +fn aski64(v: i64) ft = { return v; }; +fn main() i32 = { + let arr: [2]i64 = [10i64, 20i64]; + let i: i32 = 0; + let bad: i32 = 0; + for (i < 2) { + let j: i32 = 0; + for (j < 2) { + let v: i64 = arr[j]; + let a: ft = aski64(v); + let p: u64 = (&a): u64; + let p2: *i64 = (p + 16u64): *i64; + let w: i64 = *p2; + if (w != 0i64) { bad += 1; }; + j += 1; + }; + i += 1; + }; + return bad; +}; diff --git a/test/wcc/data/r707_str_24b_after_arridx/case.ww b/test/wcc/data/r707_str_24b_after_arridx/case.ww new file mode 100644 index 00000000..19261485 --- /dev/null +++ b/test/wcc/data/r707_str_24b_after_arridx/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 5 +package main; +type ft = (i64 | str | bool); +fn askstr(s: str) ft = { return s; }; +fn main() i32 = { + let arr: [3]i64 = [10i64, 20i64, 30i64]; + let i: i32 = 1; + let _v: i64 = arr[i]; + let a: ft = askstr("world"); + let p: u64 = (&a): u64; + let p2: *i64 = (p + 16u64): *i64; + let w: i64 = *p2; + return w: i32; +}; diff --git a/test/wcc/data/r709_localoff_defer_shadow/case.ww b/test/wcc/data/r709_localoff_defer_shadow/case.ww new file mode 100644 index 00000000..c195503b --- /dev/null +++ b/test/wcc/data/r709_localoff_defer_shadow/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package main; +fn touch(p: *i32) i32 = { *p = 42i32; return 0i32; }; +fn main() i32 = { + let a: i32 = 7; + defer touch(&a); + { + let a: i32 = 99; + if (a == 0i32) { return 1i32; }; + }; + return a; +}; diff --git a/test/wcc/data/r709_localoff_different_type/case.ww b/test/wcc/data/r709_localoff_different_type/case.ww new file mode 100644 index 00000000..9023fa10 --- /dev/null +++ b/test/wcc/data/r709_localoff_different_type/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 2 +package main; +fn main() i32 = { + let a: i32 = 5; + let r: i32 = 0; + { + let a: str = "hi"; + r = a.len: i32; + }; + return r; +}; diff --git a/test/wcc/data/r709_localoff_forrange_shadow/case.ww b/test/wcc/data/r709_localoff_forrange_shadow/case.ww new file mode 100644 index 00000000..be14c643 --- /dev/null +++ b/test/wcc/data/r709_localoff_forrange_shadow/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 81 +package main; +fn main() i32 = { + let arr: [3]i32 = [10i32, 20i32, 30i32]; + let sum: i32 = 0; + for (let x .. arr) { + sum += x; + let x: i32 = 7; + sum += x; + }; + return sum; +}; diff --git a/test/wcc/data/r709_localoff_if_shadow/case.ww b/test/wcc/data/r709_localoff_if_shadow/case.ww new file mode 100644 index 00000000..ea184f38 --- /dev/null +++ b/test/wcc/data/r709_localoff_if_shadow/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let a: i32 = 7; + let touched: i32 = 0; + if (a > 0i32) { + let a: i32 = 99; + touched = a; + }; + if (touched != 99i32) { return 1i32; }; + return a; +}; diff --git a/test/wcc/data/r709_localoff_inner_outer/case.ww b/test/wcc/data/r709_localoff_inner_outer/case.ww new file mode 100644 index 00000000..0c46bb8b --- /dev/null +++ b/test/wcc/data/r709_localoff_inner_outer/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 99 +package main; +fn main() i32 = { + let i: i32 = 0; + for (i < 3) { let a: i64 = 5i64; i += 1; }; + let a: [128]u8 = [0u8...]; + a[127] = 99u8; + return a[127]: i32; +}; diff --git a/test/wcc/data/r709_localoff_nested_three/case.ww b/test/wcc/data/r709_localoff_nested_three/case.ww new file mode 100644 index 00000000..866a0408 --- /dev/null +++ b/test/wcc/data/r709_localoff_nested_three/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 6 +package main; +fn main() i32 = { + let x: i32 = 1; + let s1: i32 = x; + let s2: i32 = 0; + let s3: i32 = 0; + { + let x: i32 = 2; + s2 = x; + { + let x: i32 = 3; + s3 = x; + }; + }; + return s1 + s2 + s3; +}; diff --git a/test/wcc/data/r709_localoff_outer_inner/case.ww b/test/wcc/data/r709_localoff_outer_inner/case.ww new file mode 100644 index 00000000..364196cf --- /dev/null +++ b/test/wcc/data/r709_localoff_outer_inner/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let a: [64]u8 = [0u8...]; + a[0] = 7u8; + { + let a: i64 = 0i64 - 1i64; + if (a == 0i64) { return 99i32; }; + }; + return a[0]: i32; +}; diff --git a/test/wcc/data/r710_bool_to_i8_clamp/case.ww b/test/wcc/data/r710_bool_to_i8_clamp/case.ww new file mode 100644 index 00000000..e7ce5e5c --- /dev/null +++ b/test/wcc/data/r710_bool_to_i8_clamp/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 1 +package main; +fn main() i32 = { + let b: bool = true; + let y: i8 = b: i8; + return (y: i32); +}; diff --git a/test/wcc/data/r710_enum_u32_to_u32/case.ww b/test/wcc/data/r710_enum_u32_to_u32/case.ww new file mode 100644 index 00000000..bec2574d --- /dev/null +++ b/test/wcc/data/r710_enum_u32_to_u32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type mymode = enum u32 { A = 1u32 }; +fn main() i32 = { + let y: mymode = 7u32: mymode; + let z: u32 = y: u32; + return z: i32; +}; diff --git a/test/wcc/data/r710_i16_i16_identity/case.ww b/test/wcc/data/r710_i16_i16_identity/case.ww new file mode 100644 index 00000000..935c175b --- /dev/null +++ b/test/wcc/data/r710_i16_i16_identity/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: i16 = 7i16; + let y: i16 = x: i16; + return (y: i32); +}; diff --git a/test/wcc/data/r710_i32_i32_identity/case.ww b/test/wcc/data/r710_i32_i32_identity/case.ww new file mode 100644 index 00000000..3ec6b259 --- /dev/null +++ b/test/wcc/data/r710_i32_i32_identity/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: i32 = 7i32; + let y: i32 = x: i32; + return y; +}; diff --git a/test/wcc/data/r710_i64_to_enum_i32/case.ww b/test/wcc/data/r710_i64_to_enum_i32/case.ww new file mode 100644 index 00000000..7fb81329 --- /dev/null +++ b/test/wcc/data/r710_i64_to_enum_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type sflag = enum i32 { A = 1i32 }; +fn main() i32 = { + let x: i64 = 7i64; + let y: sflag = x: sflag; + return (y: i32); +}; diff --git a/test/wcc/data/r710_i64_to_enum_i32_trnc/case.ww b/test/wcc/data/r710_i64_to_enum_i32_trnc/case.ww new file mode 100644 index 00000000..4abdf19c --- /dev/null +++ b/test/wcc/data/r710_i64_to_enum_i32_trnc/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 0 +package main; +type sflag = enum i32 { A = 1i32 }; +fn main() i32 = { + let x: i64 = 0x100000000i64; + let r: i64 = ((x: sflag): i64) / 0x100000000i64; + return r: i32; +}; diff --git a/test/wcc/data/r710_i8_i8_identity/case.ww b/test/wcc/data/r710_i8_i8_identity/case.ww new file mode 100644 index 00000000..8d291410 --- /dev/null +++ b/test/wcc/data/r710_i8_i8_identity/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: i8 = 7i8; + let y: i8 = x: i8; + return (y: i32); +}; diff --git a/test/wcc/data/r710_pseudo_field_clamp/case.ww b/test/wcc/data/r710_pseudo_field_clamp/case.ww new file mode 100644 index 00000000..1ef39489 --- /dev/null +++ b/test/wcc/data/r710_pseudo_field_clamp/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let s: str = "abcdefg"; + let n: i32 = s.len: i32; + return n; +}; diff --git a/test/wcc/data/r710_struct_field_rt/case.ww b/test/wcc/data/r710_struct_field_rt/case.ww new file mode 100644 index 00000000..e3f93aa9 --- /dev/null +++ b/test/wcc/data/r710_struct_field_rt/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type mymode = enum u32 { A = 1u32 }; +type src = struct { mode: u32 }; +type dst = struct { mode: mymode }; +fn main() i32 = { + let a: src = src { mode = 7u32 }; + let b: dst; + b.mode = a.mode: mymode; + return (b.mode: u32): i32; +}; diff --git a/test/wcc/data/r710_u16_u16_identity/case.ww b/test/wcc/data/r710_u16_u16_identity/case.ww new file mode 100644 index 00000000..61344791 --- /dev/null +++ b/test/wcc/data/r710_u16_u16_identity/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: u16 = 7u16; + let y: u16 = x: u16; + return (y: u32): i32; +}; diff --git a/test/wcc/data/r710_u32_to_enum_u32/case.ww b/test/wcc/data/r710_u32_to_enum_u32/case.ww new file mode 100644 index 00000000..7f0075a5 --- /dev/null +++ b/test/wcc/data/r710_u32_to_enum_u32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type mymode = enum u32 { A = 1u32, B = 2u32 }; +fn main() i32 = { + let x: u32 = 7u32; + let y: mymode = x: mymode; + return (y: u32): i32; +}; diff --git a/test/wcc/data/r710_u32_to_enum_u8/case.ww b/test/wcc/data/r710_u32_to_enum_u8/case.ww new file mode 100644 index 00000000..daeffac8 --- /dev/null +++ b/test/wcc/data/r710_u32_to_enum_u8/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type small = enum u8 { A = 1u8 }; +fn main() i32 = { + let x: u32 = 7u32; + let y: small = x: small; + return (y: u32): i32; +}; diff --git a/test/wcc/data/r710_u32_to_enum_u8_trnc/case.ww b/test/wcc/data/r710_u32_to_enum_u8_trnc/case.ww new file mode 100644 index 00000000..a8c1db0a --- /dev/null +++ b/test/wcc/data/r710_u32_to_enum_u8_trnc/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 0 +package main; +type small = enum u8 { A = 1u8 }; +fn main() i32 = { + let x: u32 = 0xFFFFu32; + let r: u32 = ((x: small): u32) / 0x100u32; + return r: i32; +}; diff --git a/test/wcc/data/r710_u32_to_i32_signchg/case.ww b/test/wcc/data/r710_u32_to_i32_signchg/case.ww new file mode 100644 index 00000000..1dff3ae3 --- /dev/null +++ b/test/wcc/data/r710_u32_to_i32_signchg/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: u32 = 7u32; + let y: i32 = x: i32; + return y; +}; diff --git a/test/wcc/data/r710_u32_u32_identity/case.ww b/test/wcc/data/r710_u32_u32_identity/case.ww new file mode 100644 index 00000000..d348c0bd --- /dev/null +++ b/test/wcc/data/r710_u32_u32_identity/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: u32 = 7u32; + let y: u32 = x: u32; + return y: i32; +}; diff --git a/test/wcc/data/r710_u8_u8_identity/case.ww b/test/wcc/data/r710_u8_u8_identity/case.ww new file mode 100644 index 00000000..f4b54f5b --- /dev/null +++ b/test/wcc/data/r710_u8_u8_identity/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +fn main() i32 = { + let x: u8 = 7u8; + let y: u8 = x: u8; + return (y: u32): i32; +}; diff --git a/test/wcc/data/r718_struct_return_single/case.ww b/test/wcc/data/r718_struct_return_single/case.ww new file mode 100644 index 00000000..eb6625da --- /dev/null +++ b/test/wcc/data/r718_struct_return_single/case.ww @@ -0,0 +1,14 @@ +//ww:run +package main; +type inst = struct { sec: i64, nsec: i64 }; +fn f(i: inst) inst = { + let r: inst; + r.sec = i.sec + 1i64; r.nsec = i.nsec + 1i64; return r; +}; +fn main() i32 = { + let i: inst = inst { sec = 100i64, nsec = 200i64 }; + let r: inst = f(i); + if (r.sec != 101i64) { return 1; }; + if (r.nsec != 201i64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r718_struct_return_tagged/case.ww b/test/wcc/data/r718_struct_return_tagged/case.ww new file mode 100644 index 00000000..6e4b2bd2 --- /dev/null +++ b/test/wcc/data/r718_struct_return_tagged/case.ww @@ -0,0 +1,19 @@ +//ww:run +package main; +fn f(k: i32) (i64 | i32) = { + if (k > 0i32) { return 1i64; }; + return 2i32; +}; +fn main() i32 = { + let r: (i64 | i32) = f(5i32); + match (r) { + case let v: i64 => if (v != 1i64) { return 1; }; + case let v: i32 => return 2; + }; + let s: (i64 | i32) = f(-1i32); + match (s) { + case let v: i64 => return 3; + case let v: i32 => if (v != 2i32) { return 4; }; + }; + return 0; +}; diff --git a/test/wcc/data/r718_struct_return_three/case.ww b/test/wcc/data/r718_struct_return_three/case.ww new file mode 100644 index 00000000..59860e33 --- /dev/null +++ b/test/wcc/data/r718_struct_return_three/case.ww @@ -0,0 +1,22 @@ +//ww:run +package main; +type inst = struct { sec: i64, nsec: i64 }; +fn f(i: inst, k: i32) inst = { + let r: inst; + if (k == 1i32) { r.sec = i.sec + 1i64; r.nsec = i.nsec + 1i64; return r; }; + if (k == 2i32) { r.sec = i.sec * 2i64; r.nsec = i.nsec * 2i64; return r; }; + r.sec = i.sec; r.nsec = i.nsec; return r; +}; +fn main() i32 = { + let i: inst = inst { sec = 10i64, nsec = 20i64 }; + let a: inst = f(i, 1i32); + if (a.sec != 11i64) { return 1; }; + if (a.nsec != 21i64) { return 2; }; + let b: inst = f(i, 2i32); + if (b.sec != 20i64) { return 3; }; + if (b.nsec != 40i64) { return 4; }; + let c: inst = f(i, 9i32); + if (c.sec != 10i64) { return 5; }; + if (c.nsec != 20i64) { return 6; }; + return 0; +}; diff --git a/test/wcc/data/r718_struct_return_two/case.ww b/test/wcc/data/r718_struct_return_two/case.ww new file mode 100644 index 00000000..36a50fec --- /dev/null +++ b/test/wcc/data/r718_struct_return_two/case.ww @@ -0,0 +1,20 @@ +//ww:run +package main; +type inst = struct { sec: i64, nsec: i64 }; +fn f(i: inst, x: i64) inst = { + let r: inst; + if (x > 0i64) { + r.sec = i.sec + x; r.nsec = i.nsec + x; return r; + }; + r.sec = i.sec - x; r.nsec = i.nsec - x; return r; +}; +fn main() i32 = { + let i: inst = inst { sec = 10i64, nsec = 20i64 }; + let p: inst = f(i, 5i64); + if (p.sec != 15i64) { return 1; }; + if (p.nsec != 25i64) { return 2; }; + let q: inst = f(i, -3i64); + if (q.sec != 13i64) { return 3; }; + if (q.nsec != 23i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r71_arrlit_bool/case.ww b/test/wcc/data/r71_arrlit_bool/case.ww new file mode 100644 index 00000000..3a185bfe --- /dev/null +++ b/test/wcc/data/r71_arrlit_bool/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 5 +package main; +fn main() i32 = { + let b: [3]bool = [true, false, true]; + let s: i32 = 0i32; + if (b[0]) { s += 4i32; }; + if (b[1]) { s += 2i32; }; + if (b[2]) { s += 1i32; }; + return s; +}; diff --git a/test/wcc/data/r71_arrlit_i32/case.ww b/test/wcc/data/r71_arrlit_i32/case.ww new file mode 100644 index 00000000..2a070631 --- /dev/null +++ b/test/wcc/data/r71_arrlit_i32/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + return a[0] + a[1] - a[2]; +}; diff --git a/test/wcc/data/r71_arrlit_i64/case.ww b/test/wcc/data/r71_arrlit_i64/case.ww new file mode 100644 index 00000000..fe9c6812 --- /dev/null +++ b/test/wcc/data/r71_arrlit_i64/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 6 +package main; +fn main() i32 = { + let a: [3]i64 = [1i64, 2i64, 3i64]; + return (a[0] + a[1] + a[2]): i32; +}; diff --git a/test/wcc/data/r71_arrlit_index_call_arg/case.ww b/test/wcc/data/r71_arrlit_index_call_arg/case.ww new file mode 100644 index 00000000..d611550a --- /dev/null +++ b/test/wcc/data/r71_arrlit_index_call_arg/case.ww @@ -0,0 +1,21 @@ +//ww:run +package main; +fn streq(a: str, b: str) bool = { + if (a.len != b.len) { return false; }; + let i: i32 = 0; + for (i < a.len) { + if (a[i] != b[i]) { return false; }; + i += 1; + }; + return true; +}; +fn main() i32 = { + let argv: [3]str; + argv[0] = "ls"; + argv[1] = "-Fahs"; + argv[2] = "files.txt"; + if (!streq(argv[2], "files.txt")) { return 11; }; + if (!streq(argv[1], "-Fahs")) { return 12; }; + if (!streq(argv[0], "ls")) { return 13; }; + return 0; +}; diff --git a/test/wcc/data/r71_arrlit_index_len_arg/case.ww b/test/wcc/data/r71_arrlit_index_len_arg/case.ww new file mode 100644 index 00000000..33845b5b --- /dev/null +++ b/test/wcc/data/r71_arrlit_index_len_arg/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 5 +package main; +fn ident(n: i32) i32 = { return n; }; +fn main() i32 = { + let xs: [2]str; + xs[0] = "hi"; + xs[1] = "hello"; + return ident(xs[1].len: i32); +}; diff --git a/test/wcc/data/r71_arrlit_nested_index_arg/case.ww b/test/wcc/data/r71_arrlit_nested_index_arg/case.ww new file mode 100644 index 00000000..f466c06f --- /dev/null +++ b/test/wcc/data/r71_arrlit_nested_index_arg/case.ww @@ -0,0 +1,20 @@ +//ww:run +package main; +fn dup1(s: str) str = { return s; }; +fn streq(a: str, b: str) bool = { + if (a.len != b.len) { return false; }; + let i: i32 = 0; + for (i < a.len) { + if (a[i] != b[i]) { return false; }; + i += 1; + }; + return true; +}; +fn main() i32 = { + let argv: [3]str; + argv[0] = "a"; + argv[1] = "bb"; + argv[2] = "files.txt"; + if (!streq(dup1(argv[2]), "files.txt")) { return 11; }; + return 0; +}; diff --git a/test/wcc/data/r71_arrlit_rune/case.ww b/test/wcc/data/r71_arrlit_rune/case.ww new file mode 100644 index 00000000..2526fca5 --- /dev/null +++ b/test/wcc/data/r71_arrlit_rune/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 1 +package main; +fn main() i32 = { + let r: [3]rune = ['a', 'b', 'c']; + let v: rune = r[1]; + return (v: i32) - 97i32; +}; diff --git a/test/wcc/data/r71_arrlit_str_lens/case.ww b/test/wcc/data/r71_arrlit_str_lens/case.ww new file mode 100644 index 00000000..55f7fd32 --- /dev/null +++ b/test/wcc/data/r71_arrlit_str_lens/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 5 +package main; +fn main() i32 = { + let a: [3]str = ["hi", "byebye", "x"]; + let p: i32 = a[0].len: i32; + let q: i32 = a[1].len: i32; + let r: i32 = a[2].len: i32; + return p * 100i32 + q * 10i32 + r; +}; diff --git a/test/wcc/data/r71_arrlit_str_ptrs/case.ww b/test/wcc/data/r71_arrlit_str_ptrs/case.ww new file mode 100644 index 00000000..29f929d6 --- /dev/null +++ b/test/wcc/data/r71_arrlit_str_ptrs/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 4 +package main; +fn main() i32 = { + let a: [3]str = ["hi", "by", "x"]; + let p: *u8 = a[0].ptr; + let c: u8 = *p; + return (c: i32) - 100i32; +}; diff --git a/test/wcc/data/r71_arrlit_str_repeat/case.ww b/test/wcc/data/r71_arrlit_str_repeat/case.ww new file mode 100644 index 00000000..a361ecd8 --- /dev/null +++ b/test/wcc/data/r71_arrlit_str_repeat/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 5 +package main; +fn main() i32 = { + let a: [5]str = ["x"...]; + let s: i32 = 0i32; + let i: i32 = 0; + for (i < 5) { + s += a[i].len: i32; + i += 1; + }; + return s; +}; diff --git a/test/wcc/data/r71_match_spill_alias_error/case.ww b/test/wcc/data/r71_match_spill_alias_error/case.ww new file mode 100644 index 00000000..e780e718 --- /dev/null +++ b/test/wcc/data/r71_match_spill_alias_error/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 64 +package main; +type oserror = !i64; +fn kpath(p: str) (*u8 | oserror) = { + if (p.len >= 0) { return -36i64: oserror; }; + let s: str = "A"; + return s.ptr; +}; +fn main() i32 = { + let q: str = "x"; + match (kpath(q)) { + case let e: oserror => return ((e: i64): i32) + 100; + case let p: *u8 => return p[0]: i32; + }; + return 0; +}; diff --git a/test/wcc/data/r71_match_spill_alias_ptr/case.ww b/test/wcc/data/r71_match_spill_alias_ptr/case.ww new file mode 100644 index 00000000..da082286 --- /dev/null +++ b/test/wcc/data/r71_match_spill_alias_ptr/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 65 +package main; +type oserror = !i64; +fn kpath(p: str) (*u8 | oserror) = { + if (p.len < 0) { return -36i64: oserror; }; + let s: str = "A"; + return s.ptr; +}; +fn main() i32 = { + let q: str = "x"; + match (kpath(q)) { + case let e: oserror => return (e: i64): i32; + case let p: *u8 => return p[0]: i32; + }; + return 0; +}; diff --git a/test/wcc/data/r71_match_spill_raw_ptr/case.ww b/test/wcc/data/r71_match_spill_raw_ptr/case.ww new file mode 100644 index 00000000..24c7ab7b --- /dev/null +++ b/test/wcc/data/r71_match_spill_raw_ptr/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 90 +package main; +fn kpath(p: str) (*u8 | i64) = { + if (p.len < 0) { return -36i64; }; + let s: str = "Z"; + return s.ptr; +}; +fn main() i32 = { + let q: str = "x"; + match (kpath(q)) { + case let e: i64 => return e: i32; + case let p: *u8 => return p[0]: i32; + }; + return 0; +}; diff --git a/test/wcc/data/r71_match_spill_str_payload/case.ww b/test/wcc/data/r71_match_spill_str_payload/case.ww new file mode 100644 index 00000000..08f04361 --- /dev/null +++ b/test/wcc/data/r71_match_spill_str_payload/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 5 +package main; +fn pick(b: bool) (str | i64) = { + if (b) { return "hello"; }; + return 7i64; +}; +fn main() i32 = { + match (pick(true)) { + case let e: i64 => return (e: i32) + 200; + case let s: str => return s.len: i32; + }; + return 0; +}; diff --git a/test/wcc/data/r71_redecl_forrange_body_shadow/case.ww b/test/wcc/data/r71_redecl_forrange_body_shadow/case.ww new file mode 100644 index 00000000..d3553331 --- /dev/null +++ b/test/wcc/data/r71_redecl_forrange_body_shadow/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 99 +package main; +fn main() i32 = { + let arr: [1]i32 = [42i32]; + let r: i32 = 0; + for (let x .. arr) { + let x: i32 = 99; + r = x; + }; + return r; +}; diff --git a/test/wcc/data/r71_redecl_match_arm_shadow/case.ww b/test/wcc/data/r71_redecl_match_arm_shadow/case.ww new file mode 100644 index 00000000..c5d6fc4f --- /dev/null +++ b/test/wcc/data/r71_redecl_match_arm_shadow/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 7 +package main; +type T = (i32 | f64); +fn main() i32 = { + let t: T = 7i32; + match (t) { + case let v: i32 => { return v; }; + case let v: f64 => { return -1; }; + }; +}; diff --git a/test/wcc/data/r71_redecl_nested_block_shadow/case.ww b/test/wcc/data/r71_redecl_nested_block_shadow/case.ww new file mode 100644 index 00000000..30390977 --- /dev/null +++ b/test/wcc/data/r71_redecl_nested_block_shadow/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 1 +package main; +fn main() i32 = { + let a: i32 = 1; + { + let a: i32 = 99; + }; + return a; +}; diff --git a/test/wcc/data/r71_redecl_nested_typed_shadow/case.ww b/test/wcc/data/r71_redecl_nested_typed_shadow/case.ww new file mode 100644 index 00000000..707b0216 --- /dev/null +++ b/test/wcc/data/r71_redecl_nested_typed_shadow/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 2 +package main; +fn main() i32 = { + let s: i32 = 2; + { + let s: str = "hi"; + let _ = s; + }; + return s; +}; diff --git a/test/wcc/data/r71_struct_byval_mixed/case.ww b/test/wcc/data/r71_struct_byval_mixed/case.ww new file mode 100644 index 00000000..8545cb38 --- /dev/null +++ b/test/wcc/data/r71_struct_byval_mixed/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 60 +package main; +type two = struct { sec: i64, nsec: i64 }; +type one = struct { v: i64 }; +fn sum(a: two, b: one) i32 = { + return (a.sec + a.nsec + b.v): i32; +}; +fn main() i32 = { + let x: two = two { sec = 10i64, nsec = 20i64 }; + let y: one = one { v = 30i64 }; + return sum(x, y); +}; diff --git a/test/wcc/data/r71_struct_byval_partial_fit/case.ww b/test/wcc/data/r71_struct_byval_partial_fit/case.ww new file mode 100644 index 00000000..8dd8a6fd --- /dev/null +++ b/test/wcc/data/r71_struct_byval_partial_fit/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 48 +package main; +type pair = struct { a: i64, b: i64 }; +fn manyfn(s0: i64, s1: i64, s2: i64, s3: i64, s4: i64, + x: pair) i32 = { + return (s0 + s1 + s2 + s3 + s4 + x.a + x.b): i32; +}; +fn main() i32 = { + let p: pair = pair { a = 11i64, b = 22i64 }; + return manyfn(1i64, 2i64, 3i64, 4i64, 5i64, p); +}; diff --git a/test/wcc/data/r71_struct_byval_str/case.ww b/test/wcc/data/r71_struct_byval_str/case.ww new file mode 100644 index 00000000..272dabd8 --- /dev/null +++ b/test/wcc/data/r71_struct_byval_str/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 45 +package main; +type two = struct { sec: i64, nsec: i64 }; +fn pick(a: two, s: str) i32 = { + return (a.sec + (s.len: i64)): i32; +}; +fn main() i32 = { + let x: two = two { sec = 42i64, nsec = 0i64 }; + return pick(x, "abc"); +}; diff --git a/test/wcc/data/r71_struct_byval_two16/case.ww b/test/wcc/data/r71_struct_byval_two16/case.ww new file mode 100644 index 00000000..2b09ae6e --- /dev/null +++ b/test/wcc/data/r71_struct_byval_two16/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 7 +package main; +type inst = struct { sec: i64, nsec: i64 }; +fn cmp(a: inst, b: inst) i32 = { + if (a.sec < b.sec) { return -1; }; + if (a.sec > b.sec) { return 1; }; + if (a.nsec < b.nsec) { return -1; }; + if (a.nsec > b.nsec) { return 1; }; + return 0; +}; +fn main() i32 = { + let x: inst = inst { sec = 5i64, nsec = 200i64 }; + let y: inst = inst { sec = 5i64, nsec = 100i64 }; + let r: i32 = cmp(x, y); + if (r > 0) { return 7; }; + return 0; +}; diff --git a/test/wcc/data/r71_struct_field_index_str_arg/case.ww b/test/wcc/data/r71_struct_field_index_str_arg/case.ww new file mode 100644 index 00000000..32a5194c --- /dev/null +++ b/test/wcc/data/r71_struct_field_index_str_arg/case.ww @@ -0,0 +1,23 @@ +//ww:run +package main; +fn streq(a: str, b: str) i32 = { + if (a.len != b.len) { return 0i32; }; + let i: i32 = 0; + for (i < a.len) { + if (a[i] != b[i]) { return 0i32; }; + i += 1; + }; + return 1i32; +}; +type cmd = struct { argsptr: *str, argslen: i32 }; +fn main() i32 = { + let xs: [2]str; + xs[0] = "first"; + xs[1] = "second"; + let c: cmd; + c.argsptr = &xs[0]; + c.argslen = 2; + if (streq(c.argsptr[0], "first") == 0i32) { return 1; }; + if (streq(c.argsptr[1], "second") == 0i32) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_struct_field_index_str_stride/case.ww b/test/wcc/data/r71_struct_field_index_str_stride/case.ww new file mode 100644 index 00000000..dd74a5cb --- /dev/null +++ b/test/wcc/data/r71_struct_field_index_str_stride/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 2 +package main; +fn main() i32 = { + let buf: [3]str; + buf[0] = "a"; + buf[1] = "yy"; + buf[2] = "zzz"; + let xs: []str; + xs.ptr = &buf[0]; + xs.len = 3; + xs.cap = 3; + let p: *[]str = &xs; + let q: *str = &p.ptr[1]; + return q.len: i32; +}; diff --git a/test/wcc/data/r71_struct_field_index_struct_stride/case.ww b/test/wcc/data/r71_struct_field_index_struct_stride/case.ww new file mode 100644 index 00000000..d5448a94 --- /dev/null +++ b/test/wcc/data/r71_struct_field_index_struct_stride/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 22 +package main; +type S = struct { a: i32, b: str }; +fn main() i32 = { + let buf: [3]S; + buf[0].a = 10i32; buf[0].b = "x"; + buf[1].a = 22i32; buf[1].b = "yy"; + buf[2].a = 30i32; buf[2].b = "zzz"; + let xs: []S; + xs.ptr = &buf[0]; + xs.len = 3; + xs.cap = 3; + let p: *[]S = &xs; + let q: *S = &p.ptr[1]; + return q.a; +}; diff --git a/test/wcc/data/r71_tagged_f64_binop/case.ww b/test/wcc/data/r71_tagged_f64_binop/case.ww new file mode 100644 index 00000000..0c365a20 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_binop/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = (2.5 + 1.0); + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 4615063718147915776u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_call/case.ww b/test/wcc/data/r71_tagged_f64_call/case.ww new file mode 100644 index 00000000..b54e05fa --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_call/case.ww @@ -0,0 +1,13 @@ +//ww:run +package main; +fn makeone() f64 = { return 1: f64; }; +fn main() i32 = { + let a: (i64 | f64) = makeone(); + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 4607182418800017408u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_cast/case.ww b/test/wcc/data/r71_tagged_f64_cast/case.ww new file mode 100644 index 00000000..e70c4117 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_cast/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = 1: f64; + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 4607182418800017408u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_field/case.ww b/test/wcc/data/r71_tagged_f64_field/case.ww new file mode 100644 index 00000000..de2af012 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_field/case.ww @@ -0,0 +1,15 @@ +//ww:run +package main; +type holder = struct { v: f64, pad: i32 }; +fn main() i32 = { + let h: holder; + h.v = 1: f64; + let a: (i64 | f64) = h.v; + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 4607182418800017408u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_ident/case.ww b/test/wcc/data/r71_tagged_f64_ident/case.ww new file mode 100644 index 00000000..1fe76e6e --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_ident/case.ww @@ -0,0 +1,13 @@ +//ww:run +package main; +fn main() i32 = { + let f: f64 = 1: f64; + let a: (i64 | f64) = f; + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 4607182418800017408u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_integer/case.ww b/test/wcc/data/r71_tagged_f64_integer/case.ww new file mode 100644 index 00000000..cd683fcc --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_integer/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = 7i64; + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 0i64) { return 1; }; + if (*payp != 7u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_literal/case.ww b/test/wcc/data/r71_tagged_f64_literal/case.ww new file mode 100644 index 00000000..6e9ae045 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_literal/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = 1.0; + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 4607182418800017408u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_unary_cast/case.ww b/test/wcc/data/r71_tagged_f64_unary_cast/case.ww new file mode 100644 index 00000000..2433afd7 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_unary_cast/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = -(1: f64); + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 13830554455654793216u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_unary_literal/case.ww b/test/wcc/data/r71_tagged_f64_unary_literal/case.ww new file mode 100644 index 00000000..415f7428 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_unary_literal/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = -2.5; + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 13836183955189006336u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_f64_unary_paren/case.ww b/test/wcc/data/r71_tagged_f64_unary_paren/case.ww new file mode 100644 index 00000000..73a61ac8 --- /dev/null +++ b/test/wcc/data/r71_tagged_f64_unary_paren/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn main() i32 = { + let a: (i64 | f64) = -(2.5); + let pp: *(i64 | f64) = &a; + let pu: *u8 = pp: *u8; + let tagp: *i64 = pu: *i64; + let payp: *u64 = (pu + 8u64): *u64; + if (*tagp != 1i64) { return 1; }; + if (*payp != 13836183955189006336u64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_return_scratch_adjacent/case.ww b/test/wcc/data/r71_tagged_return_scratch_adjacent/case.ww new file mode 100644 index 00000000..1bfe8d63 --- /dev/null +++ b/test/wcc/data/r71_tagged_return_scratch_adjacent/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 110 +package main; +type err = struct { kind: i32, flag: i32, a: i64, b: i64 }; +fn outer() (void | err) = { + let e: err; + e.kind = 11; e.flag = 22; e.a = 33i64; e.b = 44i64; + return e; +}; +fn main() i32 = { + let r: (void | err) = outer(); + match (r) { + case void => return 99; + case let v: err => return v.kind + v.flag + (v.a: i32) + (v.b: i32); + }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_return_scratch_match/case.ww b/test/wcc/data/r71_tagged_return_scratch_match/case.ww new file mode 100644 index 00000000..ad5767b3 --- /dev/null +++ b/test/wcc/data/r71_tagged_return_scratch_match/case.ww @@ -0,0 +1,22 @@ +//ww:run-exit 34 +package main; +type err = struct { kind: i32, flag: i32, a: i64, b: i64 }; +fn make() (void | err) = { + let e: err; + e.kind = 1; e.flag = 2; e.a = 3i64; e.b = 4i64; + return e; +}; +fn main() i32 = { + let r: (void | err) = make(); + let acc: i32 = 0; + match (r) { + case void => return 99; + case let v: err => { + acc += v.kind + 6; + acc += v.flag + 6; + acc += (v.a: i32) + 6; + acc += (v.b: i32) + 6; + }; + }; + return acc; +}; diff --git a/test/wcc/data/r71_tagged_return_scratch_mixed/case.ww b/test/wcc/data/r71_tagged_return_scratch_mixed/case.ww new file mode 100644 index 00000000..05db368a --- /dev/null +++ b/test/wcc/data/r71_tagged_return_scratch_mixed/case.ww @@ -0,0 +1,26 @@ +//ww:run-exit 100 +package main; +type err = struct { kind: i32, flag: i32, a: i64, b: i64 }; +type small = struct { v: i32 }; +fn consume_small(r: (void | small)) void = { + match (r) { + case void => return; + case let v: small => return; + }; +}; +fn mixed() (void | err) = { + let s: small; + s.v = 7; + let e: err; + e.kind = 100; e.flag = 0; e.a = 0i64; e.b = 0i64; + consume_small(s); + return e; +}; +fn main() i32 = { + let r: (void | err) = mixed(); + match (r) { + case void => return 91; + case let v: err => return v.kind; + }; + return 0; +}; diff --git a/test/wcc/data/r71_tagged_return_scratch_param/case.ww b/test/wcc/data/r71_tagged_return_scratch_param/case.ww new file mode 100644 index 00000000..4f88f0df --- /dev/null +++ b/test/wcc/data/r71_tagged_return_scratch_param/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 110 +package main; +type err = struct { kind: i32, flag: i32, a: i64, b: i64 }; +fn consume(r: (void | err)) i32 = { + match (r) { + case void => return 91; + case let v: err => return v.kind + v.flag; + }; + return 0; +}; +fn main() i32 = { + let e: err; + e.kind = 50; e.flag = 60; e.a = 0i64; e.b = 0i64; + return consume(e); +}; diff --git a/test/wcc/data/r72_empty_alloc_annotated_i32/case.ww b/test/wcc/data/r72_empty_alloc_annotated_i32/case.ww new file mode 100644 index 00000000..60091f0d --- /dev/null +++ b/test/wcc/data/r72_empty_alloc_annotated_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 5 +package main; +import rt; +fn main() i32 = { + let w: []i32 = alloc([], 4u64)!; + w[2] = 5i32; + return w[2]; +}; diff --git a/test/wcc/data/r72_empty_alloc_annotated_u8/case.ww b/test/wcc/data/r72_empty_alloc_annotated_u8/case.ww new file mode 100644 index 00000000..d412fdc8 --- /dev/null +++ b/test/wcc/data/r72_empty_alloc_annotated_u8/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 16 +package main; +import rt; +fn main() i32 = { + let b: []u8 = alloc([], 8u64)!; + b[0] = 7u8; + b[3] = 9u8; + return (b[0]: i32) + (b[3]: i32); +}; diff --git a/test/wcc/data/r72_empty_alloc_assign/case.ww b/test/wcc/data/r72_empty_alloc_assign/case.ww new file mode 100644 index 00000000..8fd15ef7 --- /dev/null +++ b/test/wcc/data/r72_empty_alloc_assign/case.ww @@ -0,0 +1,7 @@ +//ww:error "cannot infer slice element type for alloc([], n) without a type hint" +package main; +fn main() i32 = { + let x: []u8 = alloc([], 4u64)!; + x = alloc([], 8u64)!; + return x.len: i32; +}; diff --git a/test/wcc/data/r72_empty_alloc_bare_let/case.ww b/test/wcc/data/r72_empty_alloc_bare_let/case.ww new file mode 100644 index 00000000..7264efd6 --- /dev/null +++ b/test/wcc/data/r72_empty_alloc_bare_let/case.ww @@ -0,0 +1,6 @@ +//ww:error "cannot infer slice element type for alloc([], n) without a type hint" +package main; +fn main() i32 = { + let b = alloc([], 8u64)!; + return b.len: i32; +}; diff --git a/test/wcc/data/r72_empty_alloc_call_arg/case.ww b/test/wcc/data/r72_empty_alloc_call_arg/case.ww new file mode 100644 index 00000000..f1372ad8 --- /dev/null +++ b/test/wcc/data/r72_empty_alloc_call_arg/case.ww @@ -0,0 +1,4 @@ +//ww:error "cannot infer slice element type for alloc([], n) without a type hint" +package main; +fn g(x: []u8) i32 = { return x.len: i32; }; +fn main() i32 = { return g(alloc([], 8u64)!); }; diff --git a/test/wcc/data/r72_empty_alloc_return/case.ww b/test/wcc/data/r72_empty_alloc_return/case.ww new file mode 100644 index 00000000..6a64e7ad --- /dev/null +++ b/test/wcc/data/r72_empty_alloc_return/case.ww @@ -0,0 +1,4 @@ +//ww:error "cannot infer slice element type for alloc([], n) without a type hint" +package main; +fn mk() []u8 = { return alloc([], 8u64)!; }; +fn main() i32 = { let b: []u8 = mk(); return b.len: i32; }; diff --git a/test/wcc/data/r732_def_chain/case.ww b/test/wcc/data/r732_def_chain/case.ww new file mode 100644 index 00000000..380b1b61 --- /dev/null +++ b/test/wcc/data/r732_def_chain/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +def A: i32 = 5; +def B: i32 = A + 1; +def C: i32 = B * A; +fn main() i32 = { let x: i32 = C; if (x == 30) { return 42; }; return 1; }; diff --git a/test/wcc/data/r732_def_narrowing_cast/case.ww b/test/wcc/data/r732_def_narrowing_cast/case.ww new file mode 100644 index 00000000..a2c41c77 --- /dev/null +++ b/test/wcc/data/r732_def_narrowing_cast/case.ww @@ -0,0 +1,4 @@ +//ww:error "def value: narrowing cast loses value" +package main; +def Z: u8 = 0x1FF: u8; +export fn main() i32 = { let z: u8 = Z; return z: i32; }; diff --git a/test/wcc/data/r732_def_same_module_cycle/case.ww b/test/wcc/data/r732_def_same_module_cycle/case.ww new file mode 100644 index 00000000..d3c53658 --- /dev/null +++ b/test/wcc/data/r732_def_same_module_cycle/case.ww @@ -0,0 +1,5 @@ +//ww:error "def value: reference chain too deep (cycle?)" +package main; +def A: i32 = B; +def B: i32 = A; +export fn main() i32 = { return A; }; diff --git a/test/wcc/data/r732_def_shift/case.ww b/test/wcc/data/r732_def_shift/case.ww new file mode 100644 index 00000000..01e75337 --- /dev/null +++ b/test/wcc/data/r732_def_shift/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +def MASK: i32 = (1 << 7) - 1; +fn main() i32 = { let x: i32 = MASK; if (x == 127) { return 42; }; return 1; }; diff --git a/test/wcc/data/r732_def_sibling_add/case.ww b/test/wcc/data/r732_def_sibling_add/case.ww new file mode 100644 index 00000000..6adb866e --- /dev/null +++ b/test/wcc/data/r732_def_sibling_add/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def A: i32 = 5; +def B: i32 = A + 1; +fn main() i32 = { let x: i32 = B; if (x == 6) { return 42; }; return 1; }; diff --git a/test/wcc/data/r732_def_sibling_ref/case.ww b/test/wcc/data/r732_def_sibling_ref/case.ww new file mode 100644 index 00000000..7a27b00d --- /dev/null +++ b/test/wcc/data/r732_def_sibling_ref/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def A: i32 = 7; +def B: i32 = A; +fn main() i32 = { let x: i32 = B; if (x == 7) { return 42; }; return 1; }; diff --git a/test/wcc/data/r732_def_widening_cast/case.ww b/test/wcc/data/r732_def_widening_cast/case.ww new file mode 100644 index 00000000..8dda8afe --- /dev/null +++ b/test/wcc/data/r732_def_widening_cast/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def A: i32 = 5; +def W: i64 = A: i64; +fn main() i32 = { let x: i64 = W; if (x == 5i64) { return 42; }; return 1; }; diff --git a/test/wcc/data/r744_letcopy_slice/case.ww b/test/wcc/data/r744_letcopy_slice/case.ww new file mode 100644 index 00000000..8af8c889 --- /dev/null +++ b/test/wcc/data/r744_letcopy_slice/case.ww @@ -0,0 +1,14 @@ +//ww:run +package main; +import os; +type wsl = struct { a: i32, b: []u8 }; +fn produce() i32 = { + let raw: [3]u8 = [1: u8, 2: u8, 3: u8]; + let p1: wsl; + p1.a = 9; p1.b = raw[0:3]; + let p2: wsl = p1; + if (p2.a != 9) { return 11; }; + if (p2.b.len != 3) { return 12; }; + return 0; +}; +export fn main() i32 = { os.exit(produce()); }; diff --git a/test/wcc/data/r744_letcopy_str/case.ww b/test/wcc/data/r744_letcopy_str/case.ww new file mode 100644 index 00000000..7818df8e --- /dev/null +++ b/test/wcc/data/r744_letcopy_str/case.ww @@ -0,0 +1,13 @@ +//ww:run +package main; +import os; +type ws = struct { a: i32, s: str }; +fn produce() i32 = { + let p1: ws; + p1.a = 7; p1.s = "hi"; + let p2: ws = p1; + if (p2.a != 7) { return 11; }; + if (p2.s.len != 2) { return 12; }; + return 0; +}; +export fn main() i32 = { os.exit(produce()); }; diff --git a/test/wcc/data/r744_letcopy_tagged/case.ww b/test/wcc/data/r744_letcopy_tagged/case.ww new file mode 100644 index 00000000..d29b79e0 --- /dev/null +++ b/test/wcc/data/r744_letcopy_tagged/case.ww @@ -0,0 +1,16 @@ +//ww:run +package main; +import os; +type tag = (i32 | str); +type wtg = struct { a: i32, t: tag }; +fn produce() i32 = { + let p1: wtg = wtg{a=5, t=42: tag}; + let p2: wtg = p1; + if (p2.a != 5) { return 11; }; + match (p2.t) { + case let x: i32 => if (x != 42) { return 12; }; + case let s: str => return 13; + }; + return 0; +}; +export fn main() i32 = { os.exit(produce()); }; diff --git a/test/wcc/data/r744_letcopy_tri_i32/case.ww b/test/wcc/data/r744_letcopy_tri_i32/case.ww new file mode 100644 index 00000000..2bc94f99 --- /dev/null +++ b/test/wcc/data/r744_letcopy_tri_i32/case.ww @@ -0,0 +1,13 @@ +//ww:run +package main; +import os; +type tri = struct { a: i32, b: i32, c: i32 }; +fn produce() i32 = { + let p1: tri = tri{a=11, b=22, c=33}; + let p2: tri = p1; + if (p2.a != 11) { return 11; }; + if (p2.b != 22) { return 12; }; + if (p2.c != 33) { return 13; }; + return 0; +}; +export fn main() i32 = { os.exit(produce()); }; diff --git a/test/wcc/data/r749_sumtype_forward_ident/case.ww b/test/wcc/data/r749_sumtype_forward_ident/case.ww new file mode 100644 index 00000000..673d3a84 --- /dev/null +++ b/test/wcc/data/r749_sumtype_forward_ident/case.ww @@ -0,0 +1,14 @@ +//ww:run +package main; +fn helper(needle: (str | rune)) bool = { + match (needle) { + case let s: str => return s.len == 3; + case let r: rune => return false; + }; + return false; +}; +export fn main() i32 = { + let needle: (str | rune) = "foo"; + if (!helper(needle)) { return 11; }; + return 0; +}; diff --git a/test/wcc/data/r749_sumtype_forward_index/case.ww b/test/wcc/data/r749_sumtype_forward_index/case.ww new file mode 100644 index 00000000..4315d4d2 --- /dev/null +++ b/test/wcc/data/r749_sumtype_forward_index/case.ww @@ -0,0 +1,21 @@ +//ww:run +package main; +fn helper(needle: (str | rune)) bool = { + match (needle) { + case let s: str => return s.len > 0; + case let r: rune => return r == 'x'; + }; + return false; +}; +fn pick(needles: (str | rune)...) bool = { + let i: i32 = 0; + for (i < needles.len) { + if (helper(needles[i])) { return true; }; + i += 1; + }; + return false; +}; +export fn main() i32 = { + if (!pick("foo", "world", 'x')) { return 11; }; + return 0; +}; diff --git a/test/wcc/data/r749_sumtype_forward_literal/case.ww b/test/wcc/data/r749_sumtype_forward_literal/case.ww new file mode 100644 index 00000000..34855b9a --- /dev/null +++ b/test/wcc/data/r749_sumtype_forward_literal/case.ww @@ -0,0 +1,13 @@ +//ww:run +package main; +fn helper(needle: (str | rune)) bool = { + match (needle) { + case let s: str => return s.len == 3; + case let r: rune => return false; + }; + return false; +}; +export fn main() i32 = { + if (!helper("foo")) { return 11; }; + return 0; +}; diff --git a/test/wcc/data/r74_parse_error/case.ww b/test/wcc/data/r74_parse_error/case.ww new file mode 100644 index 00000000..8447d2b8 --- /dev/null +++ b/test/wcc/data/r74_parse_error/case.ww @@ -0,0 +1,3 @@ +//ww:error "expected identifier" +package main; +fn fn fn ; diff --git a/test/wcc/data/r74_size_leaf_baseline/case.ww b/test/wcc/data/r74_size_leaf_baseline/case.ww new file mode 100644 index 00000000..5e25b527 --- /dev/null +++ b/test/wcc/data/r74_size_leaf_baseline/case.ww @@ -0,0 +1,16 @@ +//ww:run +package main; +type tagged = (rune | void); +fn pickrune(x: tagged) i32 = { + match (x) { + case let r: rune => return r: i32; + case void => return 0; + }; + return 0; +}; +export fn main() i32 = { + let v: tagged = 'A'; + let r: i32 = pickrune(v); + if (r != 65) { return 11; }; + return 0; +}; diff --git a/test/wcc/data/r74_size_tag_variadic_runearm/case.ww b/test/wcc/data/r74_size_tag_variadic_runearm/case.ww new file mode 100644 index 00000000..61d97edb --- /dev/null +++ b/test/wcc/data/r74_size_tag_variadic_runearm/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 11 +package main; +import os; +fn want(args: (str | rune)...) i64 = { + let total: i64 = 0; + let i: i32 = 0; + for (i < args.len) { + match (args[i]) { + case let s: str => total += s.len: i64; + case let r: rune => total += 1; + }; + i += 1; + }; + return total; +}; +export fn main() i32 = { + let n: i64 = want("hello", 'X', "world"); + return n: i32; +}; diff --git a/test/wcc/data/r74_size_trim_iter_match_prev/case.ww b/test/wcc/data/r74_size_trim_iter_match_prev/case.ww new file mode 100644 index 00000000..30432081 --- /dev/null +++ b/test/wcc/data/r74_size_trim_iter_match_prev/case.ww @@ -0,0 +1,33 @@ +//ww:run +package main; +import strings; +import encoding.utf8; +fn loop_for(input: str, trim: rune...) str = { + let it: strings.iterator = strings.iter(input); + for (true) { + match (strings.next(&it)) { + case let r: rune => { + let j: i32 = 0; + let found: bool = false; + for (j < trim.len) { + if (r == trim[j]) { found = true; j = trim.len; } + else { j += 1; }; + }; + if (!found) { + match (strings.prev(&it)) { + case let r2: rune => void; + case utf8.done => void; + }; + break; + }; + }; + case utf8.done => break; + }; + }; + return strings.iterstr(&it); +}; +export fn main() i32 = { + let r: str = loop_for("aabcc", 'a', 'b'); + if (r.len != 2) { return 11; }; + return 0; +}; diff --git a/test/wcc/data/r74_size_variadic_rune_stride/case.ww b/test/wcc/data/r74_size_variadic_rune_stride/case.ww new file mode 100644 index 00000000..c2fc6e1f --- /dev/null +++ b/test/wcc/data/r74_size_variadic_rune_stride/case.ww @@ -0,0 +1,15 @@ +//ww:run +package main; +fn pick(idx: i32, args: rune...) i32 = { + if (idx >= args.len) { return 0; }; + return args[idx]: i32; +}; +export fn main() i32 = { + let r0: i32 = pick(0, 'a', 'b', 'c'); + let r1: i32 = pick(1, 'a', 'b', 'c'); + let r2: i32 = pick(2, 'a', 'b', 'c'); + if (r0 != 97) { return 11; }; + if (r1 != 98) { return 12; }; + if (r2 != 99) { return 13; }; + return 0; +}; diff --git a/test/wcc/data/r75_alloc_f64_str_i32/case.ww b/test/wcc/data/r75_alloc_f64_str_i32/case.ww new file mode 100644 index 00000000..4e665327 --- /dev/null +++ b/test/wcc/data/r75_alloc_f64_str_i32/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 13 +package main; +import rt; +type holder = struct { f: f64, s: str, n: i32 }; +fn main() i32 = { let p: *holder = alloc(holder { f = 1.5f64, s = "abc", n = 10 })!; return p.s.len + p.n; }; diff --git a/test/wcc/data/r75_alloc_i32_then_str/case.ww b/test/wcc/data/r75_alloc_i32_then_str/case.ww new file mode 100644 index 00000000..1cbb1dac --- /dev/null +++ b/test/wcc/data/r75_alloc_i32_then_str/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 102 +package main; +import rt; +type holder = struct { n: i32, s: str }; +fn main() i32 = { let p: *holder = alloc(holder { n = 100, s = "hi" })!; return p.n + p.s.len; }; diff --git a/test/wcc/data/r75_alloc_str_readback/case.ww b/test/wcc/data/r75_alloc_str_readback/case.ww new file mode 100644 index 00000000..775513e0 --- /dev/null +++ b/test/wcc/data/r75_alloc_str_readback/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 209 +package main; +import rt; +type holder = struct { s: str }; +fn main() i32 = { let p: *holder = alloc(holder { s = "hi" })!; let sum: i32 = 0; let i: i32 = 0; for (i < p.s.len) { sum += p.s[i]: i32; i += 1; }; return sum; }; diff --git a/test/wcc/data/r75_alloc_str_singleton/case.ww b/test/wcc/data/r75_alloc_str_singleton/case.ww new file mode 100644 index 00000000..0835bd6e --- /dev/null +++ b/test/wcc/data/r75_alloc_str_singleton/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 5 +package main; +import rt; +type holder = struct { s: str }; +fn main() i32 = { let p: *holder = alloc(holder { s = "hello" })!; return p.s.len; }; diff --git a/test/wcc/data/r75_alloc_str_then_i32/case.ww b/test/wcc/data/r75_alloc_str_then_i32/case.ww new file mode 100644 index 00000000..7c7bbcdf --- /dev/null +++ b/test/wcc/data/r75_alloc_str_then_i32/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 12 +package main; +import rt; +type holder = struct { s: str, n: i32 }; +fn main() i32 = { let p: *holder = alloc(holder { s = "world", n = 7 })!; return p.s.len + p.n; }; diff --git a/test/wcc/data/r75_alloc_two_str/case.ww b/test/wcc/data/r75_alloc_two_str/case.ww new file mode 100644 index 00000000..d217f0f9 --- /dev/null +++ b/test/wcc/data/r75_alloc_two_str/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 9 +package main; +import rt; +type holder = struct { a: str, b: str }; +fn main() i32 = { let p: *holder = alloc(holder { a = "foo", b = "barbaz" })!; return p.a.len + p.b.len; }; diff --git a/test/wcc/data/r75_enumfold_bin_amp/case.ww b/test/wcc/data/r75_enumfold_bin_amp/case.ww new file mode 100644 index 00000000..54aa3927 --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_amp/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 15, B = A & 7 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_caret/case.ww b/test/wcc/data/r75_enumfold_bin_caret/case.ww new file mode 100644 index 00000000..54098fe1 --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_caret/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 5, B = A ^ 2 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_lshift/case.ww b/test/wcc/data/r75_enumfold_bin_lshift/case.ww new file mode 100644 index 00000000..de89e88d --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_lshift/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 8 +package main; +type e = enum i32 { A = 1, B = A << 3 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_minus/case.ww b/test/wcc/data/r75_enumfold_bin_minus/case.ww new file mode 100644 index 00000000..9494a114 --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_minus/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 10, B = A - 3 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_percent/case.ww b/test/wcc/data/r75_enumfold_bin_percent/case.ww new file mode 100644 index 00000000..713e6d61 --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_percent/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 17, B = A % 10 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_pipe/case.ww b/test/wcc/data/r75_enumfold_bin_pipe/case.ww new file mode 100644 index 00000000..77e90168 --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_pipe/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 4, B = A | 3 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_plus/case.ww b/test/wcc/data/r75_enumfold_bin_plus/case.ww new file mode 100644 index 00000000..69534f4d --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_plus/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 3, B = A + 4 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_rshift/case.ww b/test/wcc/data/r75_enumfold_bin_rshift/case.ww new file mode 100644 index 00000000..b7978564 --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_rshift/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 28, B = A >> 2 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_slash/case.ww b/test/wcc/data/r75_enumfold_bin_slash/case.ww new file mode 100644 index 00000000..26434b8d --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_slash/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 14, B = A / 2 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_bin_star/case.ww b/test/wcc/data/r75_enumfold_bin_star/case.ww new file mode 100644 index 00000000..0b5fddff --- /dev/null +++ b/test/wcc/data/r75_enumfold_bin_star/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 8 +package main; +type e = enum i32 { A = 2, B = A * 4 }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_chained_backref/case.ww b/test/wcc/data/r75_enumfold_chained_backref/case.ww new file mode 100644 index 00000000..9089ccf3 --- /dev/null +++ b/test/wcc/data/r75_enumfold_chained_backref/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 1, B = A + 1, C = B + 1, D = C + 4 }; +fn main() i32 = { return e.D: i32; }; diff --git a/test/wcc/data/r75_enumfold_intlit/case.ww b/test/wcc/data/r75_enumfold_intlit/case.ww new file mode 100644 index 00000000..b4a45af5 --- /dev/null +++ b/test/wcc/data/r75_enumfold_intlit/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 7 }; +fn main() i32 = { return e.A: i32; }; diff --git a/test/wcc/data/r75_enumfold_runelit/case.ww b/test/wcc/data/r75_enumfold_runelit/case.ww new file mode 100644 index 00000000..5bc9da78 --- /dev/null +++ b/test/wcc/data/r75_enumfold_runelit/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 65 +package main; +type e = enum i32 { A = 'A' }; +fn main() i32 = { return e.A: i32; }; diff --git a/test/wcc/data/r75_enumfold_sibling_backref/case.ww b/test/wcc/data/r75_enumfold_sibling_backref/case.ww new file mode 100644 index 00000000..7c31d093 --- /dev/null +++ b/test/wcc/data/r75_enumfold_sibling_backref/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = 7, B = A }; +fn main() i32 = { return e.B: i32; }; diff --git a/test/wcc/data/r75_enumfold_unary_minus/case.ww b/test/wcc/data/r75_enumfold_unary_minus/case.ww new file mode 100644 index 00000000..54eabaa6 --- /dev/null +++ b/test/wcc/data/r75_enumfold_unary_minus/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { NEG = -7, R = NEG + 14 }; +fn main() i32 = { return e.R: i32; }; diff --git a/test/wcc/data/r75_enumfold_unary_plus/case.ww b/test/wcc/data/r75_enumfold_unary_plus/case.ww new file mode 100644 index 00000000..597dc459 --- /dev/null +++ b/test/wcc/data/r75_enumfold_unary_plus/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = +7 }; +fn main() i32 = { return e.A: i32; }; diff --git a/test/wcc/data/r75_enumfold_unary_tilde_nested/case.ww b/test/wcc/data/r75_enumfold_unary_tilde_nested/case.ww new file mode 100644 index 00000000..4b5656eb --- /dev/null +++ b/test/wcc/data/r75_enumfold_unary_tilde_nested/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type e = enum i32 { A = ~(-8) }; +fn main() i32 = { return e.A: i32; }; diff --git a/test/wcc/data/r75_fromutf8_natural_match/case.ww b/test/wcc/data/r75_fromutf8_natural_match/case.ww new file mode 100644 index 00000000..38c1d5a2 --- /dev/null +++ b/test/wcc/data/r75_fromutf8_natural_match/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 2 +package main; +type invalid = !void; +fn validate(s: str) (void | invalid) = { return; }; +fn fromutf8(s: str) (str | invalid) = { let v: (void | invalid) = validate(s); match (v) { case void => return s; case let e: invalid => return e; }; let e: invalid; return e; }; +fn main() i32 = { match (fromutf8("hi")) { case let s: str => return s.len: i32; case invalid => return -1; }; return 0; }; diff --git a/test/wcc/data/r75_letbind_invalid_arm/case.ww b/test/wcc/data/r75_letbind_invalid_arm/case.ww new file mode 100644 index 00000000..d7adc71a --- /dev/null +++ b/test/wcc/data/r75_letbind_invalid_arm/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 9 +package main; +type invalid = !void; +fn validate() (void | invalid) = { let e: invalid; return e; }; +fn main() i32 = { let v: (void | invalid) = validate(); match (v) { case void => return 7; case let e: invalid => return 9; }; return 0; }; diff --git a/test/wcc/data/r75_letbind_void_arm/case.ww b/test/wcc/data/r75_letbind_void_arm/case.ww new file mode 100644 index 00000000..0bf75811 --- /dev/null +++ b/test/wcc/data/r75_letbind_void_arm/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 7 +package main; +type invalid = !void; +fn validate() (void | invalid) = { return; }; +fn main() i32 = { let v: (void | invalid) = validate(); match (v) { case void => return 7; case let e: invalid => return 9; }; return 0; }; diff --git a/test/wcc/data/r75_modparam_same_module_same_leaf/case.ww b/test/wcc/data/r75_modparam_same_module_same_leaf/case.ww new file mode 100644 index 00000000..4becef93 --- /dev/null +++ b/test/wcc/data/r75_modparam_same_module_same_leaf/case.ww @@ -0,0 +1,20 @@ +//ww:run +package main; +fn variadic_foo(a: i32, xs: i32...) i32 = { + return a + xs.len; +}; +fn scalar_foo(a: i32, n: (u8 | []u8)) i32 = { + match (n) { + case let c: u8 => return a + (c: i32); + case let s: []u8 => return a + s.len; + }; + return 0; +}; +export fn main() i32 = { + let n: (u8 | []u8) = 5u8; + let a: i32 = variadic_foo(1, 2, 3, 4); + let b: i32 = scalar_foo(10, n); + if (a != 4) { return 30; }; + if (b != 15) { return 31; }; + return 0; +}; diff --git a/test/wcc/data/r75_vararg_seq_mixed_arity_two_calls/case.ww b/test/wcc/data/r75_vararg_seq_mixed_arity_two_calls/case.ww new file mode 100644 index 00000000..287d37ea --- /dev/null +++ b/test/wcc/data/r75_vararg_seq_mixed_arity_two_calls/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +import os; +fn pick(args: (str | rune)...) i32 = { return args.len; }; +export fn main() i32 = { + if (pick("a") != 1) { os.exit(11); }; + if (pick("a", "b", "c") != 3) { os.exit(12); }; + return 0; +}; diff --git a/test/wcc/data/r75_vararg_seq_same_arity_two_calls/case.ww b/test/wcc/data/r75_vararg_seq_same_arity_two_calls/case.ww new file mode 100644 index 00000000..1900c10e --- /dev/null +++ b/test/wcc/data/r75_vararg_seq_same_arity_two_calls/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +import os; +fn pick(args: (str | rune)...) i32 = { return args.len; }; +export fn main() i32 = { + if (pick("a") != 1) { os.exit(11); }; + if (pick("b") != 1) { os.exit(12); }; + return 0; +}; diff --git a/test/wcc/data/r75_vararg_seq_three_arity_drift/case.ww b/test/wcc/data/r75_vararg_seq_three_arity_drift/case.ww new file mode 100644 index 00000000..058bcf6e --- /dev/null +++ b/test/wcc/data/r75_vararg_seq_three_arity_drift/case.ww @@ -0,0 +1,10 @@ +//ww:run +package main; +import os; +fn pick(args: (str | rune)...) i32 = { return args.len; }; +export fn main() i32 = { + if (pick("a") != 1) { os.exit(11); }; + if (pick("a", "b") != 2) { os.exit(12); }; + if (pick("a", "b", "c") != 3) { os.exit(13); }; + return 0; +}; diff --git a/test/wcc/data/r764_amp_fn_ident_alias_chain/case.ww b/test/wcc/data/r764_amp_fn_ident_alias_chain/case.ww new file mode 100644 index 00000000..99313458 --- /dev/null +++ b/test/wcc/data/r764_amp_fn_ident_alias_chain/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +fn add1(x: i32) i32 = { return x + 1; }; +export fn main() i32 = { + let f = &add1; + let g = f; + return 0; +}; diff --git a/test/wcc/data/r764_amp_fn_ident_args/case.ww b/test/wcc/data/r764_amp_fn_ident_args/case.ww new file mode 100644 index 00000000..61160af8 --- /dev/null +++ b/test/wcc/data/r764_amp_fn_ident_args/case.ww @@ -0,0 +1,7 @@ +//ww:run +package main; +fn many(a: i32, b: i64, p: *i32) i64 = { return b; }; +export fn main() i32 = { + let f = &many; + return 0; +}; diff --git a/test/wcc/data/r764_amp_fn_ident_branched/case.ww b/test/wcc/data/r764_amp_fn_ident_branched/case.ww new file mode 100644 index 00000000..b66f415c --- /dev/null +++ b/test/wcc/data/r764_amp_fn_ident_branched/case.ww @@ -0,0 +1,10 @@ +//ww:run +package main; +fn aa(x: i32) i32 = { return x; }; +fn bb(x: i32) i32 = { return x + 1; }; +export fn main() i32 = { + let pick: i32 = 1; + let f = &aa; + if (pick != 0) { f = &bb; }; + return 0; +}; diff --git a/test/wcc/data/r764_amp_fn_ident_minimal/case.ww b/test/wcc/data/r764_amp_fn_ident_minimal/case.ww new file mode 100644 index 00000000..8ac0c4e7 --- /dev/null +++ b/test/wcc/data/r764_amp_fn_ident_minimal/case.ww @@ -0,0 +1,7 @@ +//ww:run +package main; +fn add1(x: i32) i32 = { return x + 1; }; +export fn main() i32 = { + let f = &add1; + return 0; +}; diff --git a/test/wcc/data/r764_amp_fn_ident_tuple_return/case.ww b/test/wcc/data/r764_amp_fn_ident_tuple_return/case.ww new file mode 100644 index 00000000..8583fc9e --- /dev/null +++ b/test/wcc/data/r764_amp_fn_ident_tuple_return/case.ww @@ -0,0 +1,7 @@ +//ww:run +package main; +fn pair() (i64, str) = { return (7: i64, "x"); }; +export fn main() i32 = { + let f = &pair; + return 0; +}; diff --git a/test/wcc/data/r766_star_fn_deref_alias_chain/case.ww b/test/wcc/data/r766_star_fn_deref_alias_chain/case.ww new file mode 100644 index 00000000..5207b03b --- /dev/null +++ b/test/wcc/data/r766_star_fn_deref_alias_chain/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 8 +package main; +fn add1(x: i32) i32 = { return x + 1; }; +export fn main() i32 = { + let f: *fn(x: i32) i32 = &add1; + let g: *fn(x: i32) i32 = f; + return (*g)(7); +}; diff --git a/test/wcc/data/r766_star_fn_deref_args/case.ww b/test/wcc/data/r766_star_fn_deref_args/case.ww new file mode 100644 index 00000000..b8992164 --- /dev/null +++ b/test/wcc/data/r766_star_fn_deref_args/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 15 +package main; +fn many(a: i32, b: i32, p: *i32) i32 = { return a + b + *p; }; +export fn main() i32 = { + let z: i32 = 5; + let f: *fn(a: i32, b: i32, p: *i32) i32 = &many; + return (*f)(3, 7, &z); +}; diff --git a/test/wcc/data/r766_star_fn_deref_branched/case.ww b/test/wcc/data/r766_star_fn_deref_branched/case.ww new file mode 100644 index 00000000..637ef34f --- /dev/null +++ b/test/wcc/data/r766_star_fn_deref_branched/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 107 +package main; +fn aa(x: i32) i32 = { return x; }; +fn bb(x: i32) i32 = { return x + 100; }; +export fn main() i32 = { + let pick: i32 = 1; + let f: *fn(x: i32) i32 = &aa; + if (pick != 0) { f = &bb; }; + return (*f)(7); +}; diff --git a/test/wcc/data/r766_star_fn_deref_minimal/case.ww b/test/wcc/data/r766_star_fn_deref_minimal/case.ww new file mode 100644 index 00000000..cd371e37 --- /dev/null +++ b/test/wcc/data/r766_star_fn_deref_minimal/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 8 +package main; +fn add1(x: i32) i32 = { return x + 1; }; +export fn main() i32 = { + let f: *fn(x: i32) i32 = &add1; + return (*f)(7); +}; diff --git a/test/wcc/data/r766_star_fn_deref_tuple_return/case.ww b/test/wcc/data/r766_star_fn_deref_tuple_return/case.ww new file mode 100644 index 00000000..1800b748 --- /dev/null +++ b/test/wcc/data/r766_star_fn_deref_tuple_return/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 15 +package main; +fn pair(x: i32) (i32, i32) = { return (x, x + 1); }; +export fn main() i32 = { + let f: *fn(x: i32) (i32, i32) = &pair; + let a, b = (*f)(7); + return a + b; +}; diff --git a/test/wcc/data/r767_match_variant_aliased_ptr/case.ww b/test/wcc/data/r767_match_variant_aliased_ptr/case.ww new file mode 100644 index 00000000..4ab371c7 --- /dev/null +++ b/test/wcc/data/r767_match_variant_aliased_ptr/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 22 +package main; +type pa = *i32; +type pb = *i64; +export fn main() i32 = { + let a: i64 = 100; + let g: pb = &a; + let v: (pa | pb) = g; + let r: i32 = match (v) { + case pa => yield 11: i32; + case pb => yield 22: i32; + }; + return r; +}; diff --git a/test/wcc/data/r767_match_variant_fn_ptr_local/case.ww b/test/wcc/data/r767_match_variant_fn_ptr_local/case.ww new file mode 100644 index 00000000..d7c8c960 --- /dev/null +++ b/test/wcc/data/r767_match_variant_fn_ptr_local/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 10 +package main; +fn ai(x: i32) i32 = { return x + 1; }; +fn bi(x: i64) i64 = { return x + 1; }; +fn indl(f: *fn(x: i64) i64, x: i64) i64 = { return (*f)(x); }; +export fn main() i32 = { + let g: *fn(x: i64) i64 = &bi; + let v: (*fn(x: i32) i32 | *fn(x: i64) i64) = g; + let r: i32 = match (v) { + case let p: *fn(x: i32) i32 => yield 1: i32; + case let q: *fn(x: i64) i64 => yield indl(q, 9): i32; + }; + return r; +}; diff --git a/test/wcc/data/r767_match_variant_nullable_fn/case.ww b/test/wcc/data/r767_match_variant_nullable_fn/case.ww new file mode 100644 index 00000000..7031b820 --- /dev/null +++ b/test/wcc/data/r767_match_variant_nullable_fn/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 107 +package main; +fn ai(x: i32) i32 = { return x + 1; }; +fn bi(x: i32) i32 = { return x + 100; }; +fn indi(f: *fn(x: i32) i32, x: i32) i32 = { return (*f)(x); }; +export fn main() i32 = { + let pick: i32 = 1; + let v: (*fn(x: i32) i32 | void) = &ai; + if (pick != 0) { v = &bi; }; + let r: i32 = match (v) { + case void => yield 99: i32; + case let f: *fn(x: i32) i32 => yield indi(f, 7); + }; + return r; +}; diff --git a/test/wcc/data/r767_match_variant_ptr_past_zero/case.ww b/test/wcc/data/r767_match_variant_ptr_past_zero/case.ww new file mode 100644 index 00000000..bcb67d98 --- /dev/null +++ b/test/wcc/data/r767_match_variant_ptr_past_zero/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 22 +package main; +export fn main() i32 = { + let a: i64 = 42; + let v: (*i32 | *i64) = &a; + let r: i32 = match (v) { + case *i32 => yield 11: i32; + case *i64 => yield 22: i32; + }; + return r; +}; diff --git a/test/wcc/data/r767_match_variant_stored_roundtrip/case.ww b/test/wcc/data/r767_match_variant_stored_roundtrip/case.ww new file mode 100644 index 00000000..7bc46066 --- /dev/null +++ b/test/wcc/data/r767_match_variant_stored_roundtrip/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 22 +package main; +export fn main() i32 = { + let a: i32 = 5; + let b: i64 = 9; + let pick: i32 = 1; + let v: (*i32 | *i64) = &a; + if (pick != 0) { v = &b; }; + let r: i32 = match (v) { + case *i32 => yield 11: i32; + case *i64 => yield 22: i32; + }; + return r; +}; diff --git a/test/wcc/data/r769_dot_aliased_ptr_double_alias/case.ww b/test/wcc/data/r769_dot_aliased_ptr_double_alias/case.ww new file mode 100644 index 00000000..5c980917 --- /dev/null +++ b/test/wcc/data/r769_dot_aliased_ptr_double_alias/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +type vt = struct { field: i32 }; +type pvt = *vt; +type vs = pvt; +export fn main() i32 = { + let v: vt; v.field = 42; + let s: vs = (&v): vs; + return s.field; +}; diff --git a/test/wcc/data/r769_dot_aliased_ptr_let/case.ww b/test/wcc/data/r769_dot_aliased_ptr_let/case.ww new file mode 100644 index 00000000..b6f74cf1 --- /dev/null +++ b/test/wcc/data/r769_dot_aliased_ptr_let/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type vt = struct { field: i32 }; +type vs = *vt; +export fn main() i32 = { + let v: vt; v.field = 42; + let s: vs = (&v): vs; + return s.field; +}; diff --git a/test/wcc/data/r769_dot_aliased_ptr_param/case.ww b/test/wcc/data/r769_dot_aliased_ptr_param/case.ww new file mode 100644 index 00000000..ab735263 --- /dev/null +++ b/test/wcc/data/r769_dot_aliased_ptr_param/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type vt = struct { field: i32 }; +type vs = *vt; +fn callit(s: vs) i32 = { return s.field; }; +export fn main() i32 = { + let v: vt; v.field = 42; + return callit(&v); +}; diff --git a/test/wcc/data/r769_dot_aliased_ptr_pointee_chain/case.ww b/test/wcc/data/r769_dot_aliased_ptr_pointee_chain/case.ww new file mode 100644 index 00000000..b7e9176f --- /dev/null +++ b/test/wcc/data/r769_dot_aliased_ptr_pointee_chain/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type vt = struct { field: i32 }; +type vti = vt; +type vti2 = vti; +type vs = *vti2; +fn callit(s: vs) i32 = { return s.field; }; +export fn main() i32 = { + let v: vti2; v.field = 42; + return callit(&v); +}; diff --git a/test/wcc/data/r76_def_widen_i32_int_neg/case.ww b/test/wcc/data/r76_def_widen_i32_int_neg/case.ww new file mode 100644 index 00000000..d5b94dd6 --- /dev/null +++ b/test/wcc/data/r76_def_widen_i32_int_neg/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def A_I32: i32 = -2147483648; +def A_INT: int = A_I32; +fn main() i32 = { let x: int = A_INT; if (x == -2147483648) { return 42; }; return 1; }; diff --git a/test/wcc/data/r76_def_widen_i32_int_small/case.ww b/test/wcc/data/r76_def_widen_i32_int_small/case.ww new file mode 100644 index 00000000..d65cfc8c --- /dev/null +++ b/test/wcc/data/r76_def_widen_i32_int_small/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def A_I32: i32 = -7; +def A_INT: int = A_I32; +fn main() i32 = { let x: int = A_INT; if (x == -7) { return 42; }; return 1; }; diff --git a/test/wcc/data/r76_def_widen_u64_size/case.ww b/test/wcc/data/r76_def_widen_u64_size/case.ww new file mode 100644 index 00000000..b73ccf17 --- /dev/null +++ b/test/wcc/data/r76_def_widen_u64_size/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def BIG_U64: u64 = 4294967299; +def S_SIZE: size = BIG_U64; +fn main() i32 = { let x: size = S_SIZE; if (x == 4294967299) { return 42; }; return 1; }; diff --git a/test/wcc/data/r76_infer_struct_big_sret_ptr/case.ww b/test/wcc/data/r76_infer_struct_big_sret_ptr/case.ww new file mode 100644 index 00000000..538df601 --- /dev/null +++ b/test/wcc/data/r76_infer_struct_big_sret_ptr/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 10 +package main; +type big = struct { a: i64, b: i64, c: i64, d: i64 }; +fn make(flag: i32) big = { if (flag == 0) { return big { a = 1i64, b = 2i64, c = 3i64, d = 4i64 }; }; return big { a = 10i64, b = 20i64, c = 30i64, d = 40i64 }; }; +fn use_(p: *big, which: i32) i32 = { if (which == 0) { return (p.a + p.b + p.c + p.d): i32; }; return (p.a * p.b * p.c * p.d): i32; }; +fn main() i32 = { let p = make(0); return use_(&p, 0); }; diff --git a/test/wcc/data/r76_infer_struct_i32_x3/case.ww b/test/wcc/data/r76_infer_struct_i32_x3/case.ww new file mode 100644 index 00000000..be334995 --- /dev/null +++ b/test/wcc/data/r76_infer_struct_i32_x3/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 6 +package main; +type three = struct { a: i32, b: i32, c: i32 }; +fn make(flag: i32) three = { if (flag == 0) { return three { a = 1i32, b = 2i32, c = 3i32 }; }; return three { a = 10i32, b = 20i32, c = 30i32 }; }; +fn use_(p: three, which: i32) i32 = { if (which == 0) { return p.a + p.b + p.c; }; return p.a * p.b * p.c; }; +fn main() i32 = { let p = make(0); return use_(p, 0); }; diff --git a/test/wcc/data/r76_infer_struct_i64_i32_tail/case.ww b/test/wcc/data/r76_infer_struct_i64_i32_tail/case.ww new file mode 100644 index 00000000..9d84b267 --- /dev/null +++ b/test/wcc/data/r76_infer_struct_i64_i32_tail/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 57 +package main; +type ntail = struct { a: i64, b: i32 }; +fn make(flag: i32) ntail = { if (flag == 0) { return ntail { a = 50i64, b = 7i32 }; }; return ntail { a = 500i64, b = 70i32 }; }; +fn use_(p: ntail, which: i32) i32 = { if (which == 0) { return (p.a + (p.b: i64)): i32; }; return (p.a - (p.b: i64)): i32; }; +fn main() i32 = { let p = make(0); return use_(p, 0); }; diff --git a/test/wcc/data/r76_infer_struct_i64_i64/case.ww b/test/wcc/data/r76_infer_struct_i64_i64/case.ww new file mode 100644 index 00000000..9c13ee23 --- /dev/null +++ b/test/wcc/data/r76_infer_struct_i64_i64/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 30 +package main; +type point = struct { a: i64, b: i64 }; +fn make(flag: i32) point = { if (flag == 0) { return point { a = 10i64, b = 20i64 }; }; return point { a = 100i64, b = 200i64 }; }; +fn sum(p: point, which: i32) i32 = { if (which == 0) { return (p.a + p.b): i32; }; return (p.a - p.b): i32; }; +fn main() i32 = { let p = make(0); return sum(p, 0); }; diff --git a/test/wcc/data/r76_infer_struct_ident_chain/case.ww b/test/wcc/data/r76_infer_struct_ident_chain/case.ww new file mode 100644 index 00000000..0f4f1a4c --- /dev/null +++ b/test/wcc/data/r76_infer_struct_ident_chain/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 33 +package main; +type point = struct { a: i64, b: i64 }; +fn make(flag: i32) point = { if (flag == 0) { return point { a = 11i64, b = 22i64 }; }; return point { a = 110i64, b = 220i64 }; }; +fn sum(p: point, which: i32) i32 = { if (which == 0) { return (p.a + p.b): i32; }; return (p.a - p.b): i32; }; +fn main() i32 = { let q = make(0); let p = q; return sum(p, 0); }; diff --git a/test/wcc/data/r76_infer_struct_u32_i64_decf/case.ww b/test/wcc/data/r76_infer_struct_u32_i64_decf/case.ww new file mode 100644 index 00000000..f9f47ab1 --- /dev/null +++ b/test/wcc/data/r76_infer_struct_u32_i64_decf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 20 +package main; +type decf = struct { mantissa: u32, exponent: i64 }; +fn make(flag: i32) decf = { if (flag == 0) { return decf { mantissa = 7u32, exponent = 13i64 }; }; return decf { mantissa = 99u32, exponent = -1i64 }; }; +fn use_(d: decf, which: i32) i32 = { if (which == 0) { return ((d.mantissa: i64) + d.exponent): i32; }; return ((d.mantissa: i64) - d.exponent): i32; }; +fn main() i32 = { let d = make(0); return use_(d, 0); }; diff --git a/test/wcc/data/r76_io_types_closer_alias_param/case.ww b/test/wcc/data/r76_io_types_closer_alias_param/case.ww new file mode 100644 index 00000000..f759c678 --- /dev/null +++ b/test/wcc/data/r76_io_types_closer_alias_param/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 33 +package main; +import io; +fn dummy_close(s: io.stream) (void | io.error) = { + return void; +}; +fn use_closer(c: io.closer, s: io.stream) i32 = { + let _v = c(s); + return 33; +}; +export fn main() i32 = { + let vt: io.vtable; + return use_closer(dummy_close, &vt); +}; diff --git a/test/wcc/data/r76_io_types_enum_mode_value/case.ww b/test/wcc/data/r76_io_types_enum_mode_value/case.ww new file mode 100644 index 00000000..1cd367f2 --- /dev/null +++ b/test/wcc/data/r76_io_types_enum_mode_value/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 3 +package main; +import io; +export fn main() i32 = { + let m: io.mode = io.mode.RDWR; + return m: i32; +}; diff --git a/test/wcc/data/r76_io_types_enum_whence_value/case.ww b/test/wcc/data/r76_io_types_enum_whence_value/case.ww new file mode 100644 index 00000000..73a608e7 --- /dev/null +++ b/test/wcc/data/r76_io_types_enum_whence_value/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 2 +package main; +import io; +export fn main() i32 = { + let w: io.whence = io.whence.END; + return w: i32; +}; diff --git a/test/wcc/data/r76_io_types_reader_alias_param/case.ww b/test/wcc/data/r76_io_types_reader_alias_param/case.ww new file mode 100644 index 00000000..58b590bd --- /dev/null +++ b/test/wcc/data/r76_io_types_reader_alias_param/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 11 +package main; +import io; +fn dummy_read(s: io.stream, buf: []u8) (size | io.eof | io.error) = { + return 0: size; +}; +fn use_reader(r: io.reader, s: io.stream, buf: []u8) i32 = { + let v = r(s, buf); + if (v is size) { return 11; }; + return -1; +}; +export fn main() i32 = { + let vt: io.vtable; + let buf: [4]u8; + let bs: []u8 = buf[0:4]; + return use_reader(dummy_read, &vt, bs); +}; diff --git a/test/wcc/data/r76_io_types_writer_alias_param/case.ww b/test/wcc/data/r76_io_types_writer_alias_param/case.ww new file mode 100644 index 00000000..88ecf0ff --- /dev/null +++ b/test/wcc/data/r76_io_types_writer_alias_param/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 22 +package main; +import io; +fn dummy_write(s: io.stream, buf: []u8) (size | io.error) = { + return buf.len: size; +}; +fn use_writer(w: io.writer, s: io.stream, buf: []u8) i32 = { + let v = w(s, buf); + if (v is size) { return 22; }; + return -1; +}; +export fn main() i32 = { + let vt: io.vtable; + let buf: [7]u8; + let bs: []u8 = buf[0:7]; + return use_writer(dummy_write, &vt, bs); +}; diff --git a/test/wcc/data/r76_struct_size_i16_i64/case.ww b/test/wcc/data/r76_struct_size_i16_i64/case.ww new file mode 100644 index 00000000..344c401f --- /dev/null +++ b/test/wcc/data/r76_struct_size_i16_i64/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 16 +package main; +type t = struct { a: i16, b: i64 }; +export fn main() i32 = { return size(t): i32; }; diff --git a/test/wcc/data/r76_struct_size_i16_x3/case.ww b/test/wcc/data/r76_struct_size_i16_x3/case.ww new file mode 100644 index 00000000..998e8be2 --- /dev/null +++ b/test/wcc/data/r76_struct_size_i16_x3/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +type t = struct { a: i16, b: i16, c: i16 }; +export fn main() i32 = { return size(t): i32; }; diff --git a/test/wcc/data/r76_struct_size_i32_i32_i64/case.ww b/test/wcc/data/r76_struct_size_i32_i32_i64/case.ww new file mode 100644 index 00000000..c8ef069a --- /dev/null +++ b/test/wcc/data/r76_struct_size_i32_i32_i64/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 16 +package main; +type t = struct { a: i32, b: i32, c: i64 }; +export fn main() i32 = { return size(t): i32; }; diff --git a/test/wcc/data/r76_struct_size_i32_x3/case.ww b/test/wcc/data/r76_struct_size_i32_x3/case.ww new file mode 100644 index 00000000..0557ec01 --- /dev/null +++ b/test/wcc/data/r76_struct_size_i32_x3/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 12 +package main; +type t = struct { a: i32, b: i32, c: i32 }; +export fn main() i32 = { return size(t): i32; }; diff --git a/test/wcc/data/r76_struct_size_i64_i32_i32/case.ww b/test/wcc/data/r76_struct_size_i64_i32_i32/case.ww new file mode 100644 index 00000000..04d0968a --- /dev/null +++ b/test/wcc/data/r76_struct_size_i64_i32_i32/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 16 +package main; +type t = struct { a: i64, b: i32, c: i32 }; +export fn main() i32 = { return size(t): i32; }; diff --git a/test/wcc/data/r76_struct_size_i64_x3/case.ww b/test/wcc/data/r76_struct_size_i64_x3/case.ww new file mode 100644 index 00000000..c7bcabf7 --- /dev/null +++ b/test/wcc/data/r76_struct_size_i64_x3/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 24 +package main; +type t = struct { a: i64, b: i64, c: i64 }; +export fn main() i32 = { return size(t): i32; }; diff --git a/test/wcc/data/r76_typeeq_fn_diff_arity/case.ww b/test/wcc/data/r76_typeeq_fn_diff_arity/case.ww new file mode 100644 index 00000000..ea2b3d27 --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_diff_arity/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(x: i32) void | *fn(x: i32, y: i64) void); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(x: i32) void => return 7; + case *fn(x: i32, y: i64) void => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r76_typeeq_fn_diff_param_type/case.ww b/test/wcc/data/r76_typeeq_fn_diff_param_type/case.ww new file mode 100644 index 00000000..2f6d8927 --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_diff_param_type/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(x: i32) void | *fn(x: i64) void); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(x: i32) void => return 7; + case *fn(x: i64) void => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r76_typeeq_fn_diff_return/case.ww b/test/wcc/data/r76_typeeq_fn_diff_return/case.ww new file mode 100644 index 00000000..c21fbacd --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_diff_return/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(x: i32) void | *fn(x: i32) i32); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(x: i32) void => return 7; + case *fn(x: i32) i32 => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r76_typeeq_fn_identical/case.ww b/test/wcc/data/r76_typeeq_fn_identical/case.ww new file mode 100644 index 00000000..1c4ac04c --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_identical/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(x: i32) void | i32); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(x: i32) void => return 7; + case i32 => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r76_typeeq_fn_io_vtable_shape/case.ww b/test/wcc/data/r76_typeeq_fn_io_vtable_shape/case.ww new file mode 100644 index 00000000..799fccf6 --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_io_vtable_shape/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(s: *i32, n: i32) i32 | *fn(s: *i32) i32); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(s: *i32, n: i32) i32 => return 7; + case *fn(s: *i32) i32 => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r76_typeeq_fn_param_name_only/case.ww b/test/wcc/data/r76_typeeq_fn_param_name_only/case.ww new file mode 100644 index 00000000..50debaa5 --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_param_name_only/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(b: i32) void | i32); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(a: i32) void => return 7; + case i32 => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r76_typeeq_fn_variadic_vs_fixed/case.ww b/test/wcc/data/r76_typeeq_fn_variadic_vs_fixed/case.ww new file mode 100644 index 00000000..dff5e9cb --- /dev/null +++ b/test/wcc/data/r76_typeeq_fn_variadic_vs_fixed/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +package main; +type t = (*fn(xs: i32...) void | *fn(x: i32) void); +export fn main() i32 = { + let v: t; + match (v) { + case *fn(xs: i32...) void => return 7; + case *fn(x: i32) void => return 3; + }; + return -1; +}; diff --git a/test/wcc/data/r770_return_tagged_cross_module/case.ww b/test/wcc/data/r770_return_tagged_cross_module/case.ww new file mode 100644 index 00000000..5d286a09 --- /dev/null +++ b/test/wcc/data/r770_return_tagged_cross_module/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 41 +package main; +import mtag770; +fn cw(x: i32) mtag770.result = { return mtag770.ra(x); }; +export fn main() i32 = { + let r: mtag770.result = cw(40); + match (r) { + case let i: i32 => return i; + case let s: str => return 0; + }; +}; diff --git a/test/wcc/data/r770_return_tagged_cross_module/mtag770/mtag770.ww b/test/wcc/data/r770_return_tagged_cross_module/mtag770/mtag770.ww new file mode 100644 index 00000000..298318a9 --- /dev/null +++ b/test/wcc/data/r770_return_tagged_cross_module/mtag770/mtag770.ww @@ -0,0 +1,3 @@ +package mtag770; +export type result = (i32 | str); +export fn ra(x: i32) result = { return x + 1: i32; }; diff --git a/test/wcc/data/r770_return_tagged_deref_call/case.ww b/test/wcc/data/r770_return_tagged_deref_call/case.ww new file mode 100644 index 00000000..2efec2f2 --- /dev/null +++ b/test/wcc/data/r770_return_tagged_deref_call/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 41 +package main; +type result = (i32 | str); +fn ra(x: i32) result = { return x + 1: i32; }; +fn cw(r: *fn(x: i32) result, x: i32) result = { return (*r)(x); }; +export fn main() i32 = { + let p: *fn(x: i32) result = &ra; + let v: result = cw(p, 40); + match (v) { + case let i: i32 => return i; + case let s: str => return 0; + }; +}; diff --git a/test/wcc/data/r770_return_tagged_named/case.ww b/test/wcc/data/r770_return_tagged_named/case.ww new file mode 100644 index 00000000..dd3c76dd --- /dev/null +++ b/test/wcc/data/r770_return_tagged_named/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 41 +package main; +type result = (i32 | str); +fn ra(x: i32) result = { return x + 1: i32; }; +fn cw(x: i32) result = { return ra(x); }; +export fn main() i32 = { + let r: result = cw(40); + match (r) { + case let i: i32 => return i; + case let s: str => return 0; + }; +}; diff --git a/test/wcc/data/r770_return_tagged_nested/case.ww b/test/wcc/data/r770_return_tagged_nested/case.ww new file mode 100644 index 00000000..23a1c599 --- /dev/null +++ b/test/wcc/data/r770_return_tagged_nested/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 40 +package main; +type result = (i32 | str); +fn ri(x: i32) i32 = { return x + 1; }; +fn wrap(x: i32) result = { return x: i32; }; +fn cw(x: i32) result = { return wrap(ri(x)); }; +export fn main() i32 = { + let r: result = cw(39); + match (r) { + case let i: i32 => return i; + case let s: str => return 0; + }; +}; diff --git a/test/wcc/data/r770_return_tagged_scalar/case.ww b/test/wcc/data/r770_return_tagged_scalar/case.ww new file mode 100644 index 00000000..75369c40 --- /dev/null +++ b/test/wcc/data/r770_return_tagged_scalar/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 41 +package main; +fn ri(x: i32) i32 = { return x + 1; }; +fn cw(x: i32) i32 = { return ri(x); }; +export fn main() i32 = { return cw(40); }; diff --git a/test/wcc/data/r770_return_tagged_widen_subset/case.ww b/test/wcc/data/r770_return_tagged_widen_subset/case.ww new file mode 100644 index 00000000..c2c60a83 --- /dev/null +++ b/test/wcc/data/r770_return_tagged_widen_subset/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 41 +package main; +type result = (i32 | str); +fn ri(x: i32) i32 = { return x + 1; }; +fn cw(x: i32) result = { return ri(x); }; +export fn main() i32 = { + let r: result = cw(40); + match (r) { + case let i: i32 => return i; + case let s: str => return 0; + }; +}; diff --git a/test/wcc/data/r771_branched_callee_widen/case.ww b/test/wcc/data/r771_branched_callee_widen/case.ww new file mode 100644 index 00000000..3e9c3404 --- /dev/null +++ b/test/wcc/data/r771_branched_callee_widen/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 72 +// Migrated from 771_widen_transitive row branched_callee_widen. +package main; +type underread = !i32; +type nomem = !void; +fn pick(b: bool) (size | underread | nomem) = { + if (b) { let u: underread; return u; }; + return 42: size; +}; +export fn main() i32 = { + let r: (size | underread | nomem) = pick(true); + if (r is underread) { return 72; }; + return 99; +}; diff --git a/test/wcc/data/r771_direct_flat_variant/case.ww b/test/wcc/data/r771_direct_flat_variant/case.ww new file mode 100644 index 00000000..6b8ec066 --- /dev/null +++ b/test/wcc/data/r771_direct_flat_variant/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 71 +// Migrated from 771_widen_transitive row direct_flat_variant. +package main; +type underread = !i32; +type nomem = !void; +export fn main() i32 = { + let u: underread; + let r: (size | underread | nomem) = u; + if (r is underread) { return 71; }; + return 99; +}; diff --git a/test/wcc/data/r771_reject_transitive_widen/case.ww b/test/wcc/data/r771_reject_transitive_widen/case.ww new file mode 100644 index 00000000..143e3e86 --- /dev/null +++ b/test/wcc/data/r771_reject_transitive_widen/case.ww @@ -0,0 +1,11 @@ +//ww:error "not assignable" +// Migrated from 771_widen_transitive row reject_transitive_widen. +package main; +type underread = !i32; +type nomem = !void; +type wrapper = !(underread | nomem); +export fn main() i32 = { + let u: underread; + let r: (size | wrapper) = u; + return 0; +}; diff --git a/test/wcc/data/r771_wrapper_typed_widen/case.ww b/test/wcc/data/r771_wrapper_typed_widen/case.ww new file mode 100644 index 00000000..e9cbb5df --- /dev/null +++ b/test/wcc/data/r771_wrapper_typed_widen/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 73 +// Migrated from 771_widen_transitive row wrapper_typed_widen. +package main; +type underread = !i32; +type nomem = !void; +type wrapper = !(underread | nomem); +export fn main() i32 = { + let u: underread; + let r: wrapper = u; + if (r is underread) { return 73; }; + return 99; +}; diff --git a/test/wcc/data/r772_branched_call_as/case.ww b/test/wcc/data/r772_branched_call_as/case.ww new file mode 100644 index 00000000..3dd4828c --- /dev/null +++ b/test/wcc/data/r772_branched_call_as/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row branched_call_as. +package main; +fn f(b: bool) (size | str) = { + if (b) { return 42: size; }; + return "x"; +}; +export fn main() i32 = { + let pick: bool = true; + let n = f(pick) as size; + return n: i32; +}; diff --git a/test/wcc/data/r772_call_as_fnptr/case.ww b/test/wcc/data/r772_call_as_fnptr/case.ww new file mode 100644 index 00000000..5de3a417 --- /dev/null +++ b/test/wcc/data/r772_call_as_fnptr/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row call_as_fnptr. +package main; +fn g(x: i32) i32 = { return x + 1; }; +fn f(b: bool) (*fn(x: i32) i32 | size) = { + if (b) { return &g; }; + return 0: size; +}; +export fn main() i32 = { + let p = f(true) as *fn(x: i32) i32; + return (*p)(41); +}; diff --git a/test/wcc/data/r772_call_as_i16/case.ww b/test/wcc/data/r772_call_as_i16/case.ww new file mode 100644 index 00000000..b625fe79 --- /dev/null +++ b/test/wcc/data/r772_call_as_i16/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row call_as_i16. +package main; +fn f(b: bool) (i16 | str) = { + if (b) { return -1: i16; }; + return "x"; +}; +export fn main() i32 = { + let n = f(true) as i16; + if (n: i32 == -1) { return 42; }; + return 1; +}; diff --git a/test/wcc/data/r772_call_as_namedvoid/case.ww b/test/wcc/data/r772_call_as_namedvoid/case.ww new file mode 100644 index 00000000..db4db59b --- /dev/null +++ b/test/wcc/data/r772_call_as_namedvoid/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row call_as_namedvoid. +package main; +type nv = void; +fn f(b: bool) (size | nv) = { + if (b) { return void: nv; }; + return 0: size; +}; +export fn main() i32 = { + let _ = f(true) as nv; + return 42; +}; diff --git a/test/wcc/data/r772_call_as_size/case.ww b/test/wcc/data/r772_call_as_size/case.ww new file mode 100644 index 00000000..d07b29a5 --- /dev/null +++ b/test/wcc/data/r772_call_as_size/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row call_as_size. +package main; +fn f(b: bool) (size | str) = { + if (b) { return 42: size; }; + return "x"; +}; +export fn main() i32 = { + let n = f(true) as size; + return n: i32; +}; diff --git a/test/wcc/data/r772_call_as_str/case.ww b/test/wcc/data/r772_call_as_str/case.ww new file mode 100644 index 00000000..d3e122ba --- /dev/null +++ b/test/wcc/data/r772_call_as_str/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row call_as_str. +package main; +fn f(b: bool) (size | str) = { + if (b) { return "AB"; }; + return 0: size; +}; +export fn main() i32 = { + let s = f(true) as str; + return s.len: i32 + 40; +}; diff --git a/test/wcc/data/r772_call_as_u8/case.ww b/test/wcc/data/r772_call_as_u8/case.ww new file mode 100644 index 00000000..278ea8fd --- /dev/null +++ b/test/wcc/data/r772_call_as_u8/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +// Migrated from 772_typeassert_nonident row call_as_u8. +package main; +fn f(b: bool) (u8 | str) = { + if (b) { return 42: u8; }; + return "x"; +}; +export fn main() i32 = { + let n = f(true) as u8; + return n: i32; +}; diff --git a/test/wcc/data/r773_cross_mod_named_void/case.ww b/test/wcc/data/r773_cross_mod_named_void/case.ww new file mode 100644 index 00000000..d1009656 --- /dev/null +++ b/test/wcc/data/r773_cross_mod_named_void/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 3 +// Migrated from 773_isas_spread_variant row cross_mod_named_void. +package main; +import io; +export fn main() i32 = { + let r: (size | io.eof) = 42: size; + if (r is io.eof) { return 1; }; + if (r is size) { return 3; }; + return 0; +}; diff --git a/test/wcc/data/r773_direct_cross_mod_tagged/case.ww b/test/wcc/data/r773_direct_cross_mod_tagged/case.ww new file mode 100644 index 00000000..b389cd2c --- /dev/null +++ b/test/wcc/data/r773_direct_cross_mod_tagged/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 3 +// Migrated from 773_isas_spread_variant row direct_cross_mod_tagged. +package main; +import io; +export fn main() i32 = { + let r: (size | io.eof | io.error) = 42: size; + if (r is io.error) { return 1; }; + if (r is io.eof) { return 2; }; + if (r is size) { return 3; }; + return 0; +}; diff --git a/test/wcc/data/r773_same_module_variant/case.ww b/test/wcc/data/r773_same_module_variant/case.ww new file mode 100644 index 00000000..a60460b6 --- /dev/null +++ b/test/wcc/data/r773_same_module_variant/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 3 +// Migrated from 773_isas_spread_variant row same_module_variant. +package main; +export fn main() i32 = { + let r: (i32 | str) = 3: i32; + if (r is i32) { return 3; }; + if (r is str) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r773_spread_as_inline_payload/case.ww b/test/wcc/data/r773_spread_as_inline_payload/case.ww new file mode 100644 index 00000000..23500923 --- /dev/null +++ b/test/wcc/data/r773_spread_as_inline_payload/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 7 +// Migrated from 773_isas_spread_variant row spread_as_inline_payload. +package main; +import io; +type rsh = (size | io.eof | ...io.error); +fn pick(b: i32) rsh = { + if (b == 1) { let u: io.underread = 7: i32: io.underread; return u; }; + return 42: size; +}; +export fn main() i32 = { + let r = pick(1); + let u = r as io.underread; + return u: i32; +}; diff --git a/test/wcc/data/r773_spread_is_inline_variant/case.ww b/test/wcc/data/r773_spread_is_inline_variant/case.ww new file mode 100644 index 00000000..1ef470b0 --- /dev/null +++ b/test/wcc/data/r773_spread_is_inline_variant/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 3 +// Migrated from 773_isas_spread_variant row spread_is_inline_variant. +package main; +import io; +type rsh = (size | io.eof | ...io.error); +export fn main() i32 = { + let r: rsh = 42: size; + if (r is io.underread) { return 1; }; + if (r is io.eof) { return 2; }; + if (r is size) { return 3; }; + return 0; +}; diff --git a/test/wcc/data/r774_accept_nested_wrapper/case.ww b/test/wcc/data/r774_accept_nested_wrapper/case.ww new file mode 100644 index 00000000..735c72fe --- /dev/null +++ b/test/wcc/data/r774_accept_nested_wrapper/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +// Migrated from 774_tagged_widen_named_variant row accept_nested_wrapper. +package main; +type ax = !void; +type inner = !(ax); +type outer = !(inner); +fn f() (size | outer) = { + let a: ax; + let i: inner = a; + let o: outer = i; + return o; +}; +export fn main() i32 = { let r = f(); return 42; }; diff --git a/test/wcc/data/r774_accept_pure_leaf_subset/case.ww b/test/wcc/data/r774_accept_pure_leaf_subset/case.ww new file mode 100644 index 00000000..b35a9406 --- /dev/null +++ b/test/wcc/data/r774_accept_pure_leaf_subset/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 43 +// Migrated from 774_tagged_widen_named_variant row accept_pure_leaf_subset. +package main; +type ax = !void; +type bx = !void; +type cx = !void; +fn small() (ax | bx) = { let u: ax; return u; }; +export fn main() i32 = { + let r: (ax | bx | cx) = small(); + return 43; +}; diff --git a/test/wcc/data/r774_accept_wrapper_variant/case.ww b/test/wcc/data/r774_accept_wrapper_variant/case.ww new file mode 100644 index 00000000..d51dadba --- /dev/null +++ b/test/wcc/data/r774_accept_wrapper_variant/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 41 +// Migrated from 774_tagged_widen_named_variant row accept_wrapper_variant. +package main; +type unsupported = !void; +type underread = !i32; +type nomem = !void; +type wrapper = !(unsupported | underread | nomem); +type eof = void; +fn f() (size | eof | wrapper) = { + let u: unsupported; + let e: wrapper = u; + return e; +}; +export fn main() i32 = { let r = f(); return 41; }; diff --git a/test/wcc/data/r774_branched_callee_widen/case.ww b/test/wcc/data/r774_branched_callee_widen/case.ww new file mode 100644 index 00000000..ce743dfe --- /dev/null +++ b/test/wcc/data/r774_branched_callee_widen/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 45 +// Migrated from 774_tagged_widen_named_variant row branched_callee_widen. +package main; +type unsupported = !void; +type wrapper = !(unsupported); +type eof = void; +fn pick(b: bool) (size | eof | wrapper) = { + if (b) { + let u: unsupported; + let e: wrapper = u; + return e; + }; + return 50: size; +}; +export fn main() i32 = { + let r1 = pick(true); + let r2 = pick(false); + return 45; +}; diff --git a/test/wcc/data/r774_reject_concrete_unrelated/case.ww b/test/wcc/data/r774_reject_concrete_unrelated/case.ww new file mode 100644 index 00000000..0fbe1a2e --- /dev/null +++ b/test/wcc/data/r774_reject_concrete_unrelated/case.ww @@ -0,0 +1,11 @@ +//ww:error "not assignable" +// Migrated from 774_tagged_widen_named_variant row reject_concrete_unrelated. +package main; +type ax = !i32; +type bx = !i64; +type cx = !f64; +export fn main() i32 = { + let u: ax; + let r: (bx | cx) = u; + return 0; +}; diff --git a/test/wcc/data/r775_branched_readers/case.ww b/test/wcc/data/r775_branched_readers/case.ww new file mode 100644 index 00000000..b0338cac --- /dev/null +++ b/test/wcc/data/r775_branched_readers/case.ww @@ -0,0 +1,26 @@ +//ww:run-exit 95 +// Migrated from 775_io_vtable_run row branched_readers. +package main; +import io; +fn r1(s: io.stream, buf: []u8) (size | io.eof | io.error) = { + return 1: size; +}; +fn r2(s: io.stream, buf: []u8) (size | io.eof | io.error) = { + return 2: size; +}; +export fn main() i32 = { + let vt1: io.vtable; + let vt2: io.vtable; + vt1.reader = (&r1): *io.reader; + vt2.reader = (&r2): *io.reader; + let buf: [4]u8; + let bs: []u8 = buf[0:4]; + let a = io.read(&vt1, bs); + let b = io.read(&vt2, bs); + let asz: size = 0; + let bsz: size = 0; + if (a is size) { asz = a as size; }; + if (b is size) { bsz = b as size; }; + if (asz == 1: size && bsz == 2: size) { return 95; }; + return 99; +}; diff --git a/test/wcc/data/r775_closer_set/case.ww b/test/wcc/data/r775_closer_set/case.ww new file mode 100644 index 00000000..00852119 --- /dev/null +++ b/test/wcc/data/r775_closer_set/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 60 +// Migrated from 775_io_vtable_run row closer_set. +package main; +import io; +fn myclose(s: io.stream) (void | io.error) = { + return void; +}; +export fn main() i32 = { + let vt: io.vtable; + vt.closer = (&myclose): *io.closer; + let v: io.stream = &vt; + let r = io.close(v); + if (r is void) { return 60; }; + return 99; +}; diff --git a/test/wcc/data/r775_closer_void_noop/case.ww b/test/wcc/data/r775_closer_void_noop/case.ww new file mode 100644 index 00000000..b1de28fd --- /dev/null +++ b/test/wcc/data/r775_closer_void_noop/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 50 +// Migrated from 775_io_vtable_run row closer_void_noop. +package main; +import io; +export fn main() i32 = { + let vt: io.vtable; + let v: io.stream = &vt; + let r = io.close(v); + if (r is void) { return 50; }; + return 99; +}; diff --git a/test/wcc/data/r775_reader_set_happy/case.ww b/test/wcc/data/r775_reader_set_happy/case.ww new file mode 100644 index 00000000..de6eec75 --- /dev/null +++ b/test/wcc/data/r775_reader_set_happy/case.ww @@ -0,0 +1,21 @@ +//ww:run-exit 70 +// Migrated from 775_io_vtable_run row reader_set_happy. +package main; +import io; +fn myread(s: io.stream, buf: []u8) (size | io.eof | io.error) = { + return 7: size; +}; +export fn main() i32 = { + let vt: io.vtable; + vt.reader = (&myread): *io.reader; + let v: io.stream = &vt; + let buf: [4]u8; + let bs: []u8 = buf[0:4]; + let r = io.read(v, bs); + if (r is size) { + let n = r as size; + if (n == 7: size) { return 70; }; + return 71; + }; + return 99; +}; diff --git a/test/wcc/data/r775_reader_void_unsupported/case.ww b/test/wcc/data/r775_reader_void_unsupported/case.ww new file mode 100644 index 00000000..5688ea24 --- /dev/null +++ b/test/wcc/data/r775_reader_void_unsupported/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 11 +// Migrated from 775_io_vtable_run row reader_void_unsupported. +package main; +import io; +export fn main() i32 = { + let vt: io.vtable; + let v: io.stream = &vt; + let buf: [4]u8; + let bs: []u8 = buf[0:4]; + let _r = io.read(v, bs); + return 11; +}; diff --git a/test/wcc/data/r775_writer_set_happy/case.ww b/test/wcc/data/r775_writer_set_happy/case.ww new file mode 100644 index 00000000..ce6cb629 --- /dev/null +++ b/test/wcc/data/r775_writer_set_happy/case.ww @@ -0,0 +1,21 @@ +//ww:run-exit 80 +// Migrated from 775_io_vtable_run row writer_set_happy. +package main; +import io; +fn mywrite(s: io.stream, buf: []u8) (size | io.error) = { + return buf.len: size; +}; +export fn main() i32 = { + let vt: io.vtable; + vt.writer = (&mywrite): *io.writer; + let v: io.stream = &vt; + let buf: [5]u8; + let bs: []u8 = buf[0:5]; + let r = io.write(v, bs); + if (r is size) { + let n = r as size; + if (n == 5: size) { return 80; }; + return 81; + }; + return 99; +}; diff --git a/test/wcc/data/r775_writer_void_unsupported/case.ww b/test/wcc/data/r775_writer_void_unsupported/case.ww new file mode 100644 index 00000000..98fc7c17 --- /dev/null +++ b/test/wcc/data/r775_writer_void_unsupported/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 22 +// Migrated from 775_io_vtable_run row writer_void_unsupported. +package main; +import io; +export fn main() i32 = { + let vt: io.vtable; + let v: io.stream = &vt; + let buf: [3]u8; + let bs: []u8 = buf[0:3]; + let _r = io.write(v, bs); + return 22; +}; diff --git a/test/wcc/data/r776_accessors_string_buffer_reset/case.ww b/test/wcc/data/r776_accessors_string_buffer_reset/case.ww new file mode 100644 index 00000000..beadcec8 --- /dev/null +++ b/test/wcc/data/r776_accessors_string_buffer_reset/case.ww @@ -0,0 +1,22 @@ +//ww:run-exit 46 +// Migrated from 776_memio_vstream_run row accessors_string_buffer_reset. +package main; +import memio; +import io; +import os; +export fn main() i32 = { + let buf: [16]u8; + let st: memio.stream = memio.fixed(buf[0:16]); + let s: io.stream = &st.vt; + let payload: [3]u8; + payload[0] = 65u8; payload[1] = 66u8; payload[2] = 67u8; + let wr = io.write(s, payload[0:3]); + if (!(wr is size)) { return 90; }; + let v: str = memio.string(&st); + if (v.len != 3 || v[0] != 65u8 || v[2] != 67u8) { return 91; }; + let bv: []u8 = memio.buffer(&st); + if (bv.len != 3 || bv[1] != 66u8) { return 92; }; + memio.reset(&st); + if (memio.string(&st).len != 0) { return 93; }; + return 46; +}; diff --git a/test/wcc/data/r776_borrowedread_view_eof/case.ww b/test/wcc/data/r776_borrowedread_view_eof/case.ww new file mode 100644 index 00000000..3e4ac290 --- /dev/null +++ b/test/wcc/data/r776_borrowedread_view_eof/case.ww @@ -0,0 +1,22 @@ +//ww:run-exit 47 +// Migrated from 776_memio_vstream_run row borrowedread_view_eof. +package main; +import memio; +import io; +import os; +export fn main() i32 = { + let seed: [4]u8; + seed[0] = 1u8; seed[1] = 2u8; seed[2] = 3u8; seed[3] = 4u8; + let st: memio.stream = memio.dynamicfrom(seed[0:4]); + let br = memio.borrowedread(&st, 3); + match (br) { + case let b: []u8 => { if (b.len != 3 || b[0] != 1u8 || b[2] != 3u8) { return 91; }; }; + case io.eof => { return 92; }; + }; + let br2 = memio.borrowedread(&st, 2); + match (br2) { + case let b: []u8 => { return 93; }; + case io.eof => { return 47; }; + }; + return 99; +}; diff --git a/test/wcc/data/r776_branched_fixed/case.ww b/test/wcc/data/r776_branched_fixed/case.ww new file mode 100644 index 00000000..5f665c65 --- /dev/null +++ b/test/wcc/data/r776_branched_fixed/case.ww @@ -0,0 +1,26 @@ +//ww:run-exit 45 +// Migrated from 776_memio_vstream_run row branched_fixed. +package main; +import memio; +import io; +import os; +export fn main() i32 = { + let a: [3]u8; + a[0] = 10u8; a[1] = 11u8; a[2] = 12u8; + let b: [5]u8; + b[0] = 20u8; b[1] = 21u8; b[2] = 22u8; b[3] = 23u8; b[4] = 24u8; + let sta: memio.stream = memio.fixed(a[0:3]); + let stb: memio.stream = memio.fixed(b[0:5]); + let sa: io.stream = &sta.vt; + let sb: io.stream = &stb.vt; + let outa: [3]u8; + let outb: [5]u8; + let rda = io.read(sa, outa[0:3]); + let rdb = io.read(sb, outb[0:5]); + let na: size = 0; + let nb: size = 0; + if (rda is size) { na = rda as size; }; + if (rdb is size) { nb = rdb as size; }; + if (na == 3: size && nb == 5: size && outa[2] == 12u8 && outb[4] == 24u8) { return 45; }; + return 99; +}; diff --git a/test/wcc/data/r776_dynamic_write_grow/case.ww b/test/wcc/data/r776_dynamic_write_grow/case.ww new file mode 100644 index 00000000..2dbf8fa4 --- /dev/null +++ b/test/wcc/data/r776_dynamic_write_grow/case.ww @@ -0,0 +1,18 @@ +//ww:run-exit 43 +// Migrated from 776_memio_vstream_run row dynamic_write_grow. +package main; +import memio; +import io; +import os; +export fn main() i32 = { + let st: memio.stream = memio.dynamic(); + let s: io.stream = &st.vt; + let src: [3]u8; + src[0] = 88u8; src[1] = 89u8; src[2] = 90u8; + let wr = io.write(s, src[0:3]); + let n: size = 0; + if (wr is size) { n = wr as size; }; + let cl = io.close(s); + if (cl is void && n == 3: size) { return 43; }; + return 99; +}; diff --git a/test/wcc/data/r776_dynamicfrom_alt_rw/case.ww b/test/wcc/data/r776_dynamicfrom_alt_rw/case.ww new file mode 100644 index 00000000..67cf6f0a --- /dev/null +++ b/test/wcc/data/r776_dynamicfrom_alt_rw/case.ww @@ -0,0 +1,23 @@ +//ww:run-exit 44 +// Migrated from 776_memio_vstream_run row dynamicfrom_alt_rw. +package main; +import memio; +import io; +import os; +export fn main() i32 = { + let seed: [4]u8; + seed[0] = 1u8; seed[1] = 2u8; seed[2] = 3u8; seed[3] = 4u8; + let st: memio.stream = memio.dynamicfrom(seed[0:4]); + let s: io.stream = &st.vt; + let out: [4]u8; + let rd = io.read(s, out[0:4]); + let rn: size = 0; + if (rd is size) { rn = rd as size; }; + let extra: [2]u8; + extra[0] = 99u8; extra[1] = 100u8; + let wr = io.write(s, extra[0:2]); + let wn: size = 0; + if (wr is size) { wn = wr as size; }; + if (rn == 4: size && wn == 2: size && out[0] == 1u8 && out[3] == 4u8) { return 44; }; + return 99; +}; diff --git a/test/wcc/data/r776_fixed_read_5/case.ww b/test/wcc/data/r776_fixed_read_5/case.ww new file mode 100644 index 00000000..09fb1828 --- /dev/null +++ b/test/wcc/data/r776_fixed_read_5/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 42 +// Migrated from 776_memio_vstream_run row fixed_read_5. +package main; +import memio; +import io; +import os; +export fn main() i32 = { + let buf: [8]u8; + buf[0] = 65u8; buf[1] = 66u8; buf[2] = 67u8; buf[3] = 68u8; + buf[4] = 69u8; buf[5] = 70u8; buf[6] = 71u8; buf[7] = 72u8; + let st: memio.stream = memio.fixed(buf[0:8]); + let s: io.stream = &st.vt; + let out: [5]u8; + let n: size = 0; + let rd = io.read(s, out[0:5]); + if (rd is size) { n = rd as size; }; + if (n == 5: size && out[0] == 65u8 && out[4] == 69u8) { return 42; }; + return 99; +}; diff --git a/test/wcc/data/r777_branched_fprintf/case.ww b/test/wcc/data/r777_branched_fprintf/case.ww new file mode 100644 index 00000000..6c623a5c --- /dev/null +++ b/test/wcc/data/r777_branched_fprintf/case.ww @@ -0,0 +1,32 @@ +//ww:run-exit 45 +// Migrated from 777_fmt_handle_run row branched_fprintf. +package main; +import os; +import fmt; +import io; +export fn main() i32 = { + let path: str = "wwfmth_777_d"; + let fd: i32 = os.open(path, os.flag.RDWR | os.flag.CREATE | os.flag.TRUNC, 0o644: i32); + if (fd < 0) { return 90; }; + let sel: i32 = 1; + let f1: str = "A{}"; + let f2: str = "B{}"; + let fmtstr: str = f1; + if (sel == 0) { fmtstr = f2; }; + let wr = fmt.fprintf(fd: io.file, fmtstr, 9i64); + let nw: size = 0; + match (wr) { + case let n: size => { nw = n; }; + case io.error => { return 91; }; + }; + os.close(fd); + let rd: i32 = os.open(path, os.flag.RDONLY, 0i32); + if (rd < 0) { return 92; }; + let buf: [8]u8; + let n: i64 = os.read(rd, &buf[0], 8u64); + os.close(rd); + if (n != 2i64) { return 93; }; + if (nw != 2: size) { return 94; }; + if (buf[0] != 65u8 || buf[1] != 57u8) { return 95; }; + return 45; +}; diff --git a/test/wcc/data/r777_fprint_file_raw/case.ww b/test/wcc/data/r777_fprint_file_raw/case.ww new file mode 100644 index 00000000..6acf5637 --- /dev/null +++ b/test/wcc/data/r777_fprint_file_raw/case.ww @@ -0,0 +1,27 @@ +//ww:run-exit 44 +// Migrated from 777_fmt_handle_run row fprint_file_raw. +package main; +import os; +import fmt; +import io; +export fn main() i32 = { + let path: str = "wwfmth_777_c"; + let fd: i32 = os.open(path, os.flag.RDWR | os.flag.CREATE | os.flag.TRUNC, 0o644: i32); + if (fd < 0) { return 90; }; + let wr = fmt.fprint(fd: io.file, "raw"); + let nw: size = 0; + match (wr) { + case let n: size => { nw = n; }; + case io.error => { return 91; }; + }; + os.close(fd); + let rd: i32 = os.open(path, os.flag.RDONLY, 0i32); + if (rd < 0) { return 92; }; + let buf: [8]u8; + let n: i64 = os.read(rd, &buf[0], 8u64); + os.close(rd); + if (n != 3i64) { return 93; }; + if (nw != 3: size) { return 94; }; + if (buf[0] != 114u8 || buf[1] != 97u8 || buf[2] != 119u8) { return 95; }; + return 44; +}; diff --git a/test/wcc/data/r777_fprintf_file_int/case.ww b/test/wcc/data/r777_fprintf_file_int/case.ww new file mode 100644 index 00000000..555b78e1 --- /dev/null +++ b/test/wcc/data/r777_fprintf_file_int/case.ww @@ -0,0 +1,27 @@ +//ww:run-exit 42 +// Migrated from 777_fmt_handle_run row fprintf_file_int. +package main; +import os; +import fmt; +import io; +export fn main() i32 = { + let path: str = "wwfmth_777_a"; + let fd: i32 = os.open(path, os.flag.RDWR | os.flag.CREATE | os.flag.TRUNC, 0o644: i32); + if (fd < 0) { return 90; }; + let wr = fmt.fprintf(fd: io.file, "v={}\n", 42i64); + let nw: size = 0; + match (wr) { + case let n: size => { nw = n; }; + case io.error => { return 91; }; + }; + os.close(fd); + let rd: i32 = os.open(path, os.flag.RDONLY, 0i32); + if (rd < 0) { return 92; }; + let buf: [16]u8; + let n: i64 = os.read(rd, &buf[0], 16u64); + os.close(rd); + if (n != 5i64) { return 93; }; + if (nw != 5: size) { return 94; }; + if (buf[0] != 118u8 || buf[1] != 61u8 || buf[2] != 52u8 || buf[3] != 50u8 || buf[4] != 10u8) { return 95; }; + return 42; +}; diff --git a/test/wcc/data/r777_fprintf_stream/case.ww b/test/wcc/data/r777_fprintf_stream/case.ww new file mode 100644 index 00000000..ea915e51 --- /dev/null +++ b/test/wcc/data/r777_fprintf_stream/case.ww @@ -0,0 +1,23 @@ +//ww:run-exit 46 +// Migrated from 777_fmt_handle_run row fprintf_stream. +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { + let buf: [16]u8; + let st: memio.stream = memio.fixed(buf[0:16]); + let s: io.stream = &st.vt; + let wr = fmt.fprintf(s, "v={}\n", 42i64); + let nw: size = 0; + match (wr) { + case let n: size => { nw = n; }; + case io.error => { return 91; }; + }; + if (nw != 5: size) { return 94; }; + let view: str = memio.string(&st); + if (view.len != 5) { return 93; }; + if (view[0] != 118u8 || view[1] != 61u8 || view[2] != 52u8 || view[3] != 50u8 || view[4] != 10u8) { return 95; }; + return 46; +}; diff --git a/test/wcc/data/r777_fprintln_file_multi/case.ww b/test/wcc/data/r777_fprintln_file_multi/case.ww new file mode 100644 index 00000000..907da799 --- /dev/null +++ b/test/wcc/data/r777_fprintln_file_multi/case.ww @@ -0,0 +1,27 @@ +//ww:run-exit 43 +// Migrated from 777_fmt_handle_run row fprintln_file_multi. +package main; +import os; +import fmt; +import io; +export fn main() i32 = { + let path: str = "wwfmth_777_b"; + let fd: i32 = os.open(path, os.flag.RDWR | os.flag.CREATE | os.flag.TRUNC, 0o644: i32); + if (fd < 0) { return 90; }; + let wr = fmt.fprintln(fd: io.file, 7i64, "hi", true); + let nw: size = 0; + match (wr) { + case let n: size => { nw = n; }; + case io.error => { return 91; }; + }; + os.close(fd); + let rd: i32 = os.open(path, os.flag.RDONLY, 0i32); + if (rd < 0) { return 92; }; + let buf: [16]u8; + let n: i64 = os.read(rd, &buf[0], 16u64); + os.close(rd); + if (n != 10i64) { return 93; }; + if (nw != 10: size) { return 94; }; + if (buf[0] != 55u8 || buf[1] != 32u8 || buf[2] != 104u8 || buf[3] != 105u8 || buf[4] != 32u8 || buf[5] != 116u8 || buf[6] != 114u8 || buf[7] != 117u8 || buf[8] != 101u8 || buf[9] != 10u8) { return 95; }; + return 43; +}; diff --git a/test/wcc/data/r778_branched_bufio_wrap/case.ww b/test/wcc/data/r778_branched_bufio_wrap/case.ww new file mode 100644 index 00000000..85df4f4b --- /dev/null +++ b/test/wcc/data/r778_branched_bufio_wrap/case.ww @@ -0,0 +1,29 @@ +//ww:run-exit 51 +// Migrated from 778_bufio_vstream_run row branched_bufio_wrap. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raA: [4]u8; + raA[0] = 10u8; raA[1] = 11u8; raA[2] = 12u8; raA[3] = 13u8; + let raB: [4]u8; + raB[0] = 20u8; raB[1] = 21u8; raB[2] = 22u8; raB[3] = 23u8; + let mstA: memio.stream = memio.fixed(raA[0:4]); + let mstB: memio.stream = memio.fixed(raB[0:4]); + let sel: i32 = 1; + let src: io.stream = &mstA.vt; + if (sel == 0) { src = &mstB.vt; }; + let rbuf: [4]u8; + let wbuf: [4]u8; + let bc: bufio.stream = bufio.init(src, rbuf[0:4], wbuf[0:4]); + let vs: io.stream = &bc.vt; + let out: [4]u8; + let rd = io.read(vs, out[0:4]); + let n: size = 0; + if (rd is size) { n = rd as size; }; + if (n != 4: size) { return 91; }; + if (out[0] != 10u8 || out[3] != 13u8) { return 92; }; + return 51; +}; diff --git a/test/wcc/data/r778_isbuffered_v_boundary/case.ww b/test/wcc/data/r778_isbuffered_v_boundary/case.ww new file mode 100644 index 00000000..7b87d747 --- /dev/null +++ b/test/wcc/data/r778_isbuffered_v_boundary/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 49 +// Migrated from 778_bufio_vstream_run row isbuffered_v_boundary. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [8]u8; + let mst: memio.stream = memio.fixed(raw[0:8]); + let msrc: io.stream = &mst.vt; + let rbuf: [4]u8; + let wbuf: [4]u8; + let bc: bufio.stream = bufio.init(msrc, rbuf[0:4], wbuf[0:4]); + let vs: io.stream = &bc.vt; + if (!bufio.isbuffered(vs)) { return 91; }; + if (bufio.isbuffered(msrc)) { return 92; }; + return 49; +}; diff --git a/test/wcc/data/r778_isbuffered_v_discriminate/case.ww b/test/wcc/data/r778_isbuffered_v_discriminate/case.ww new file mode 100644 index 00000000..26312e7e --- /dev/null +++ b/test/wcc/data/r778_isbuffered_v_discriminate/case.ww @@ -0,0 +1,22 @@ +//ww:run-exit 48 +// Migrated from 778_bufio_vstream_run row isbuffered_v_discriminate. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [8]u8; + let mst: memio.stream = memio.fixed(raw[0:8]); + let msrc: io.stream = &mst.vt; + let rbuf: [4]u8; + let wbuf: [4]u8; + let b: bufio.stream = bufio.init(msrc, rbuf[0:4], wbuf[0:4]); + let vsbuf: io.stream = &b.vt; + let buf2: [4]u8; + let st2: memio.stream = memio.fixed(buf2[0:4]); + let vsplain: io.stream = &st2.vt; + if (!bufio.isbuffered(vsbuf)) { return 91; }; + if (bufio.isbuffered(vsplain)) { return 92; }; + return 48; +}; diff --git a/test/wcc/data/r778_scanner_byte_bytes/case.ww b/test/wcc/data/r778_scanner_byte_bytes/case.ww new file mode 100644 index 00000000..9cef4493 --- /dev/null +++ b/test/wcc/data/r778_scanner_byte_bytes/case.ww @@ -0,0 +1,37 @@ +//ww:run-exit 53 +// Migrated from 778_bufio_vstream_run row scanner_byte_bytes. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [6]u8; + raw[0]=65u8; raw[1]=66u8; raw[2]=44u8; + raw[3]=67u8; raw[4]=68u8; raw[5]=44u8; + let mst: memio.stream = memio.dynamicfrom(raw[0:6]); + let vs: io.stream = &mst.vt; + let win: [8]u8; + let sc: bufio.scanner = bufio.newscannerbuf(vs, win[0:8]); + let fb: u8 = 0u8; + match (bufio.scanbyte(&sc)) { + case let b: u8 => { fb = b; }; + case io.eof => { return 81; }; + case let e: io.error => { return 82; }; + case bufio.overflow => { return 92; }; + }; + if (fb != 65u8) { return 83; }; + match (bufio.scanbytes(&sc, 44u8)) { + case let bs: []u8 => { if (bs.len != 1 || bs[0] != 66u8) { return 84; }; }; + case io.eof => { return 85; }; + case let e: io.error => { return 86; }; + case bufio.overflow => { return 87; }; + }; + match (bufio.scanbytes(&sc, 44u8)) { + case let bs: []u8 => { if (bs.len != 2 || bs[0] != 67u8 || bs[1] != 68u8) { return 88; }; }; + case io.eof => { return 89; }; + case let e: io.error => { return 90; }; + case bufio.overflow => { return 91; }; + }; + return 53; +}; diff --git a/test/wcc/data/r778_scanner_lines/case.ww b/test/wcc/data/r778_scanner_lines/case.ww new file mode 100644 index 00000000..c0888548 --- /dev/null +++ b/test/wcc/data/r778_scanner_lines/case.ww @@ -0,0 +1,39 @@ +//ww:run-exit 52 +// Migrated from 778_bufio_vstream_run row scanner_lines. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [8]u8; + raw[0]=97u8; raw[1]=98u8; raw[2]=10u8; + raw[3]=99u8; raw[4]=10u8; + raw[5]=100u8; raw[6]=101u8; raw[7]=102u8; + let mst: memio.stream = memio.dynamicfrom(raw[0:8]); + let vs: io.stream = &mst.vt; + let win: [16]u8; + let sc: bufio.scanner = bufio.newscannerbuf(vs, win[0:16]); + let ok: i32 = 0; + match (bufio.scanline(&sc)) { + case let s: str => { if (s.len == 2 && s[0] == 97u8 && s[1] == 98u8) { ok += 1; }; }; + case io.eof => { return 81; }; + case let e: io.error => { return 82; }; + case bufio.overflow => { return 83; }; + }; + match (bufio.scanline(&sc)) { + case let s: str => { if (s.len == 1 && s[0] == 99u8) { ok += 1; }; }; + case io.eof => { return 84; }; + case let e: io.error => { return 85; }; + case bufio.overflow => { return 86; }; + }; + match (bufio.scanline(&sc)) { + case let s: str => { return 87; }; + case io.eof => { ok += 1; }; + case let e: io.error => { return 88; }; + case bufio.overflow => { return 89; }; + }; + bufio.finish(&sc); + if (ok != 3) { return 90; }; + return 52; +}; diff --git a/test/wcc/data/r778_stream_read_unread/case.ww b/test/wcc/data/r778_stream_read_unread/case.ww new file mode 100644 index 00000000..7773ae3f --- /dev/null +++ b/test/wcc/data/r778_stream_read_unread/case.ww @@ -0,0 +1,30 @@ +//ww:run-exit 47 +// Migrated from 778_bufio_vstream_run row stream_read_unread. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [8]u8; + raw[0] = 65u8; raw[1] = 66u8; raw[2] = 67u8; raw[3] = 68u8; + raw[4] = 69u8; raw[5] = 70u8; raw[6] = 71u8; raw[7] = 72u8; + let mst: memio.stream = memio.fixed(raw[0:8]); + let msrc: io.stream = &mst.vt; + let rbuf: [8]u8; + let wbuf: [4]u8; + let b: bufio.stream = bufio.init(msrc, rbuf[0:8], wbuf[0:4]); + let vs: io.stream = &b.vt; + let out: [4]u8; + let rd1 = io.read(vs, out[0:3]); + let n1: size = 0; + if (rd1 is size) { n1 = rd1 as size; }; + if (n1 != 3: size) { return 91; }; + if (out[0] != 65u8 || out[2] != 67u8) { return 92; }; + let rd2 = io.read(vs, out[0:4]); + let n2: size = 0; + if (rd2 is size) { n2 = rd2 as size; }; + if (n2 != 4: size) { return 93; }; + if (out[0] != 68u8 || out[3] != 71u8) { return 94; }; + return 47; +}; diff --git a/test/wcc/data/r778_stream_setflush/case.ww b/test/wcc/data/r778_stream_setflush/case.ww new file mode 100644 index 00000000..dbfb4b80 --- /dev/null +++ b/test/wcc/data/r778_stream_setflush/case.ww @@ -0,0 +1,26 @@ +//ww:run-exit 54 +// Migrated from 778_bufio_vstream_run row stream_setflush. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let sinkbuf: [16]u8; + let sink: memio.stream = memio.fixed(sinkbuf[0:16]); + let sinkvs: io.stream = &sink.vt; + let rb: [4]u8; + let wb: [8]u8; + let b: bufio.stream = bufio.init(sinkvs, rb[0:4], wb[0:8]); + let bvs: io.stream = &b.vt; + let semi: [1]u8; + semi[0] = 59u8; + bufio.setflush(&b, semi[0:1]); + let payload: [3]u8; + payload[0]=97u8; payload[1]=98u8; payload[2]=59u8; + let wr = io.write(bvs, payload[0:3]); + if (!(wr is size)) { return 81; }; + if (sink.pos != 3) { return 82; }; + if (sinkbuf[0] != 97u8 || sinkbuf[2] != 59u8) { return 83; }; + return 54; +}; diff --git a/test/wcc/data/r778_stream_unread/case.ww b/test/wcc/data/r778_stream_unread/case.ww new file mode 100644 index 00000000..1534e445 --- /dev/null +++ b/test/wcc/data/r778_stream_unread/case.ww @@ -0,0 +1,31 @@ +//ww:run-exit 55 +// Migrated from 778_bufio_vstream_run row stream_unread. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [4]u8; + raw[0]=88u8; raw[1]=89u8; raw[2]=90u8; + let mst: memio.stream = memio.dynamicfrom(raw[0:3]); + let vs: io.stream = &mst.vt; + let rbuf: [4]u8; + let wbuf: [4]u8; + let b: bufio.stream = bufio.init(vs, rbuf[0:4], wbuf[0:4]); + let bvs: io.stream = &b.vt; + let out: [4]u8; + let rd = io.read(bvs, out[0:3]); + let n: size = 0; + if (rd is size) { n = rd as size; }; + if (n != 3: size || out[0] != 88u8 || out[2] != 90u8) { return 81; }; + let push: [2]u8; + push[0]=88u8; push[1]=89u8; + bufio.unread(&b, push[0:2]); + let out2: [2]u8; + let rd2 = io.read(bvs, out2[0:2]); + let n2: size = 0; + if (rd2 is size) { n2 = rd2 as size; }; + if (n2 != 2: size || out2[0] != 88u8 || out2[1] != 89u8) { return 82; }; + return 55; +}; diff --git a/test/wcc/data/r778_stream_write_flush/case.ww b/test/wcc/data/r778_stream_write_flush/case.ww new file mode 100644 index 00000000..6b963cac --- /dev/null +++ b/test/wcc/data/r778_stream_write_flush/case.ww @@ -0,0 +1,29 @@ +//ww:run-exit 46 +// Migrated from 778_bufio_vstream_run row stream_write_flush. +package main; +import os; +import bufio; +import memio; +import io; +export fn main() i32 = { + let raw: [16]u8; + let mst: memio.stream = memio.fixed(raw[0:16]); + let msrc: io.stream = &mst.vt; + let rbuf: [8]u8; + let wbuf: [8]u8; + let b: bufio.stream = bufio.init(msrc, rbuf[0:8], wbuf[0:8]); + let vs: io.stream = &b.vt; + let payload: [5]u8; + payload[0] = 104u8; payload[1] = 105u8; + payload[2] = 33u8; payload[3] = 98u8; payload[4] = 121u8; + let wr = io.write(vs, payload[0:5]); + let nw: size = 0; + if (wr is size) { nw = wr as size; }; + if (mst.pos != 0) { return 91; }; + let cl = io.close(vs); + if (cl is io.error) { return 92; }; + if (mst.pos != 5) { return 93; }; + if (nw != 5: size) { return 94; }; + if (raw[0] != 104u8 || raw[4] != 121u8) { return 95; }; + return 46; +}; diff --git a/test/wcc/data/r780_fmt_mods/case.ww b/test/wcc/data/r780_fmt_mods/case.ww new file mode 100644 index 00000000..ff297bb7 --- /dev/null +++ b/test/wcc/data/r780_fmt_mods/case.ww @@ -0,0 +1,75 @@ +//ww:run +package main; + +import os; +import fmt; +import io; +import temp; + +fn fresh() i32 = { + let fd: i32 = -1; + let path: str; + match (temp.named(&fd, &path, "/tmp", temp.mode.RDWR, 0o600: i32)) { + case void => void; + case let e: os.oserror => return -1; + }; + if (os.remove(path) != 0) { os.close(fd); return -1; }; + return fd; +}; + +fn expect(fd: i32, nw: size, want: str) bool = { + if (os.lseek(fd, 0i64, os.whence.SET) != 0i64) { + os.close(fd); + return false; + }; + let buf: [16]u8; + let n: i64 = os.read(fd, &buf[0], 16u64); + let closed: i32 = os.close(fd); + if (closed != 0 || n != want.len: i64 || nw != want.len: size) { + return false; + }; + let i: i32 = 0; + for (i < want.len) { + if (buf[i] != want[i]) { return false; }; + i += 1; + }; + return true; +}; + +export fn main() i32 = { + let fd: i32 = fresh(); + if (fd < 0) { return 1; }; + match (fmt.fprintf(fd: io.file, "{:5}", 42i64)) { + case let n: size => { if (!expect(fd, n, " 42")) { return 2; }; }; + case io.error => { os.close(fd); return 3; }; + }; + + fd = fresh(); + if (fd < 0) { return 4; }; + match (fmt.fprintf(fd: io.file, "{:.3}", "hello")) { + case let n: size => { if (!expect(fd, n, "hel")) { return 5; }; }; + case io.error => { os.close(fd); return 6; }; + }; + + fd = fresh(); + if (fd < 0) { return 7; }; + match (fmt.fprintf(fd: io.file, "{:x}", 255i64)) { + case let n: size => { if (!expect(fd, n, "ff")) { return 8; }; }; + case io.error => { os.close(fd); return 9; }; + }; + + fd = fresh(); + if (fd < 0) { return 10; }; + match (fmt.fprintf(fd: io.file, "{:+}", 7i64)) { + case let n: size => { if (!expect(fd, n, "+7")) { return 11; }; }; + case io.error => { os.close(fd); return 12; }; + }; + + fd = fresh(); + if (fd < 0) { return 13; }; + match (fmt.fprintf(fd: io.file, "{:_05}", 42i64)) { + case let n: size => { if (!expect(fd, n, "00042")) { return 14; }; }; + case io.error => { os.close(fd); return 15; }; + }; + return 0; +}; diff --git a/test/wcc/data/r781_fmt_compositions/case.ww b/test/wcc/data/r781_fmt_compositions/case.ww new file mode 100644 index 00000000..a835fe08 --- /dev/null +++ b/test/wcc/data/r781_fmt_compositions/case.ww @@ -0,0 +1,98 @@ +//ww:run +package main; + +import os; +import fmt; +import io; +import memio; +import temp; + +fn fresh() i32 = { + let fd: i32 = -1; + let path: str; + match (temp.named(&fd, &path, "/tmp", temp.mode.RDWR, 0o600: i32)) { + case void => void; + case let e: os.oserror => return -1; + }; + if (os.remove(path) != 0) { os.close(fd); return -1; }; + return fd; +}; + +fn fileexpect(fd: i32, nw: size, want: str) bool = { + if (os.lseek(fd, 0i64, os.whence.SET) != 0i64) { + os.close(fd); + return false; + }; + let buf: [16]u8; + let n: i64 = os.read(fd, &buf[0], 16u64); + let closed: i32 = os.close(fd); + if (closed != 0 || n != want.len: i64 || nw != want.len: size) { + return false; + }; + let i: i32 = 0; + for (i < want.len) { + if (buf[i] != want[i]) { return false; }; + i += 1; + }; + return true; +}; + +fn streq(a: str, b: str) bool = { + if (a.len != b.len) { return false; }; + let i: i32 = 0; + for (i < a.len) { + if (a[i] != b[i]) { return false; }; + i += 1; + }; + return true; +}; + +export fn main() i32 = { + let fd: i32 = fresh(); + if (fd < 0) { return 1; }; + match (fmt.fprintln(fd: io.file, 1i64, "hi", true)) { + case let n: size => { if (!fileexpect(fd, n, "1 hi true\n")) { return 2; }; }; + case io.error => { os.close(fd); return 3; }; + }; + + fd = fresh(); + if (fd < 0) { return 4; }; + match (fmt.fprintfln(fd: io.file, "x={}", 7i64)) { + case let n: size => { if (!fileexpect(fd, n, "x=7\n")) { return 5; }; }; + case io.error => { os.close(fd); return 6; }; + }; + + let buf1: [16]u8; + let st1: memio.stream = memio.fixed(buf1[0:16]); + let s1: io.stream = &st1.vt; + match (fmt.fprintln(s1, 1i64, "hi", true)) { + case let n: size => { + if (n != 10: size || !streq(memio.string(&st1), "1 hi true\n")) { return 7; }; + }; + case io.error => return 8; + }; + + let buf2: [16]u8; + let st2: memio.stream = memio.fixed(buf2[0:16]); + let s2: io.stream = &st2.vt; + match (fmt.fprintfln(s2, "x={}", 7i64)) { + case let n: size => { + if (n != 4: size || !streq(memio.string(&st2), "x=7\n")) { return 9; }; + }; + case io.error => return 10; + }; + + let buf3: [16]u8; + match (fmt.bsprintf(buf3[0:16], "v={}", 42i64)) { + case let view: str => { + if (!streq(view, "v=42") || buf3[0] != 118u8 || buf3[3] != 50u8) { return 11; }; + }; + case io.error => return 12; + }; + + let view: str = fmt.asprintf("hello={}", 9i64); + let asok: bool = streq(view, "hello=9"); + os.free(view.ptr: *void, view.len: u64); + if (!asok) { return 13; }; + return 0; +}; diff --git a/test/wcc/data/r783_amp_fn_assign_neg_launder/case.ww b/test/wcc/data/r783_amp_fn_assign_neg_launder/case.ww new file mode 100644 index 00000000..b17b6e50 --- /dev/null +++ b/test/wcc/data/r783_amp_fn_assign_neg_launder/case.ww @@ -0,0 +1,10 @@ +//ww:error "not assignable" +// A materialized *fn remains nominally distinct from *reader. +package main; +type reader = fn(x: i32) i32; +fn rd(x: i32) i32 = { return x + 1; }; +fn main() i32 = { + let p = &rd; + let s: *reader = p; + return 0; +}; diff --git a/test/wcc/data/r783_amp_fn_assign_neg_samesig/case.ww b/test/wcc/data/r783_amp_fn_assign_neg_samesig/case.ww new file mode 100644 index 00000000..59f018c7 --- /dev/null +++ b/test/wcc/data/r783_amp_fn_assign_neg_samesig/case.ww @@ -0,0 +1,11 @@ +//ww:error "not assignable" +// Distinct same-signature aliases remain nominal after materialization. +package main; +type adder = fn(x: i32) i32; +type negator = fn(x: i32) i32; +fn add1(x: i32) i32 = { return x + 1; }; +fn main() i32 = { + let p = &add1; + let n: *negator = p; + return 0; +}; diff --git a/test/wcc/data/r788_type_q_cast_accept/case.ww b/test/wcc/data/r788_type_q_cast_accept/case.ww new file mode 100644 index 00000000..15550caa --- /dev/null +++ b/test/wcc/data/r788_type_q_cast_accept/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 3 +package main; + +type q = i32; + +export fn main() i32 = { + return 3: q; +}; diff --git a/test/wcc/data/r788_value_not_type_reject/case.ww b/test/wcc/data/r788_value_not_type_reject/case.ww new file mode 100644 index 00000000..1c65626d --- /dev/null +++ b/test/wcc/data/r788_value_not_type_reject/case.ww @@ -0,0 +1,7 @@ +//ww:error c "unknown type 'q'" ww "asserttyped: cast" +package main; + +export fn main() i32 = { + let q: i32 = 3; + return q: q; +}; diff --git a/test/wcc/data/r78_alias_narrow_deref_store/case.ww b/test/wcc/data/r78_alias_narrow_deref_store/case.ww new file mode 100644 index 00000000..30420e44 --- /dev/null +++ b/test/wcc/data/r78_alias_narrow_deref_store/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type errno = !i32; +type box = struct { data: [3]u64 }; +fn store(v: errno) box = { let b: box; b.data[0] = 0xFFFFFFFF00000000u64; let p = (&b.data): *errno; *p = v; return b; }; +export fn main() i32 = { let r = store(7i32: errno); let hi: u64 = r.data[0] >> 32u64; if (hi == 0u64) { return 7; }; return 42; }; diff --git a/test/wcc/data/r78_amp_fn_assign_fieldstore_dispatch/case.ww b/test/wcc/data/r78_amp_fn_assign_fieldstore_dispatch/case.ww new file mode 100644 index 00000000..66f9135a --- /dev/null +++ b/test/wcc/data/r78_amp_fn_assign_fieldstore_dispatch/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 52 +package main; +type reader = fn(s: *vtable, x: i32) i32; +type vtable = struct { reader: (*reader | void), writer: (*reader | void), closer: (*reader | void) }; +fn rd(s: *vtable, x: i32) i32 = { return x + 1; }; +fn dispatch(s: *vtable, x: i32) i32 = { match (s.reader) { case void => return -1; case let f: *reader => return (*f)(s, x); }; }; +fn main() i32 = { let a: vtable; a.reader = &rd; let b: vtable; b.reader = void; return dispatch(&a, 41) + dispatch(&b, 0) + 11; }; diff --git a/test/wcc/data/r78_amp_fn_assign_let_call/case.ww b/test/wcc/data/r78_amp_fn_assign_let_call/case.ww new file mode 100644 index 00000000..5fa3adac --- /dev/null +++ b/test/wcc/data/r78_amp_fn_assign_let_call/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type reader = fn(x: i32) i32; +fn rd(x: i32) i32 = { return x + 1; }; +fn main() i32 = { let p: *reader = &rd; return (*p)(41); }; diff --git a/test/wcc/data/r78_amp_fn_assign_structlit/case.ww b/test/wcc/data/r78_amp_fn_assign_structlit/case.ww new file mode 100644 index 00000000..84d4f3d2 --- /dev/null +++ b/test/wcc/data/r78_amp_fn_assign_structlit/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type reader = fn(x: i32) i32; +type vtable = struct { r: (*reader | void) }; +fn rd(x: i32) i32 = { return x + 1; }; +fn main() i32 = { let v = vtable { r = &rd }; return 0; }; diff --git a/test/wcc/data/r78_named_ptr_alias_degenerate_ambig/case.ww b/test/wcc/data/r78_named_ptr_alias_degenerate_ambig/case.ww new file mode 100644 index 00000000..170c497e --- /dev/null +++ b/test/wcc/data/r78_named_ptr_alias_degenerate_ambig/case.ww @@ -0,0 +1,18 @@ +//ww:error "bare source structurally matches >=2 NAMED variants" +package main; +type vtable = struct { x: i32 }; +type sa = *vtable; +type sb = *vtable; +type h = (sa | sb); +fn w(x: h) i32 = { + match (x) { + case sa => return 1; + case sb => return 2; + }; +}; +fn emit(v: *vtable) i32 = { return w(v); }; +export fn main() i32 = { + let vt: vtable; + vt.x = 0; + return emit(&vt); +}; diff --git a/test/wcc/data/r78_named_ptr_alias_handle_widen/case.ww b/test/wcc/data/r78_named_ptr_alias_handle_widen/case.ww new file mode 100644 index 00000000..6a0ff694 --- /dev/null +++ b/test/wcc/data/r78_named_ptr_alias_handle_widen/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package main; +type vtable = struct { x: i32 }; +type stream = *vtable; +type file = i32; +type handle = (file | stream); +fn hwrite(h: handle, n: u64) u64 = { match (h) { case file => return 111u64; case let s: stream => return n; }; }; +fn emit(v: *vtable, n: u64) u64 = { return hwrite(v, n); }; +export fn main() i32 = { let vt: vtable; vt.x = 0; let sum: u64 = 0u64; let i: i32 = 0; for (i < 10) { sum = sum + emit(&vt, 4u64); i += 1; }; if (sum == 40u64) { return 42; }; return (sum: i32); }; diff --git a/test/wcc/data/r78_plain_i32_deref_store_ctrl/case.ww b/test/wcc/data/r78_plain_i32_deref_store_ctrl/case.ww new file mode 100644 index 00000000..5616ee8e --- /dev/null +++ b/test/wcc/data/r78_plain_i32_deref_store_ctrl/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type box = struct { data: [3]u64 }; +fn store(v: i32) box = { let b: box; b.data[0] = 0xFFFFFFFF00000000u64; let p = (&b.data): *i32; *p = v; return b; }; +export fn main() i32 = { let r = store(7i32); let hi: u64 = r.data[0] >> 32u64; if (hi == 0u64) { return 7; }; return 42; }; diff --git a/test/wcc/data/r78_strict_package_comment_only_accept/case.ww b/test/wcc/data/r78_strict_package_comment_only_accept/case.ww new file mode 100644 index 00000000..430591ff --- /dev/null +++ b/test/wcc/data/r78_strict_package_comment_only_accept/case.ww @@ -0,0 +1,2 @@ +//ww:compile +// just a comment, no decls diff --git a/test/wcc/data/r78_strict_package_main_accept/case.ww b/test/wcc/data/r78_strict_package_main_accept/case.ww new file mode 100644 index 00000000..f9ebf8ee --- /dev/null +++ b/test/wcc/data/r78_strict_package_main_accept/case.ww @@ -0,0 +1,3 @@ +//ww:compile +package main; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r78_strict_package_module_leaf_match_accept/case.ww b/test/wcc/data/r78_strict_package_module_leaf_match_accept/case.ww new file mode 100644 index 00000000..1f3762ab --- /dev/null +++ b/test/wcc/data/r78_strict_package_module_leaf_match_accept/case.ww @@ -0,0 +1,4 @@ +//ww:compile +//ww:module foo +package foo; +export fn x() i32 = { return 0; }; diff --git a/test/wcc/data/r78_strict_package_module_leaf_mismatch_reject/case.ww b/test/wcc/data/r78_strict_package_module_leaf_mismatch_reject/case.ww new file mode 100644 index 00000000..a2dd1b79 --- /dev/null +++ b/test/wcc/data/r78_strict_package_module_leaf_mismatch_reject/case.ww @@ -0,0 +1,4 @@ +//ww:error "does not match import path" +//ww:module foo +package bar; +export fn x() i32 = { return 0; }; diff --git a/test/wcc/data/r78_strict_package_no_clause_reject/case.ww b/test/wcc/data/r78_strict_package_no_clause_reject/case.ww new file mode 100644 index 00000000..6aace402 --- /dev/null +++ b/test/wcc/data/r78_strict_package_no_clause_reject/case.ww @@ -0,0 +1,2 @@ +//ww:error "missing package clause" +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r78_strict_package_reset_second_section_reject/case.ww b/test/wcc/data/r78_strict_package_reset_second_section_reject/case.ww new file mode 100644 index 00000000..d20fa364 --- /dev/null +++ b/test/wcc/data/r78_strict_package_reset_second_section_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "missing package clause" +package main; +export fn a() i32 = { return 0; }; +//ww:module-reset +export fn b() i32 = { return 0; }; diff --git a/test/wcc/data/r78_structvariant_large_union/case.ww b/test/wcc/data/r78_structvariant_large_union/case.ww new file mode 100644 index 00000000..331a600e --- /dev/null +++ b/test/wcc/data/r78_structvariant_large_union/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +type a = !void; type b = !void; +type big = !struct { f: *fn(p: *i32) i32, data: [3]u64 }; +type u = !(a | b | big); +fn impl(p: *i32) i32 = { return *p + 41i32; }; +fn mkbig() u = { let x: big; x.f = (&impl): *fn(p: *i32) i32; return x; }; +export fn main() i32 = { let r = mkbig(); match (r) { case a => return 90; case b => return 91; case let z: big => { let n: i32 = 1i32; let fp = z.f; return (*fp)(&n): i32; }; }; }; diff --git a/test/wcc/data/r78_structvariant_namedvoid_ctrl/case.ww b/test/wcc/data/r78_structvariant_namedvoid_ctrl/case.ww new file mode 100644 index 00000000..1650b982 --- /dev/null +++ b/test/wcc/data/r78_structvariant_namedvoid_ctrl/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 22 +package main; +type a = !void; type b = !void; +type big = !struct { f: *fn(p: *i32) i32, data: [3]u64 }; +type u = !(a | b | big); +fn mksmall() u = { let y: b; return y; }; +export fn main() i32 = { let r = mksmall(); match (r) { case a => return 90; case b => return 22; case big => return 9; }; }; diff --git a/test/wcc/data/r791_io_handle/case.ww b/test/wcc/data/r791_io_handle/case.ww new file mode 100644 index 00000000..6cfa9406 --- /dev/null +++ b/test/wcc/data/r791_io_handle/case.ww @@ -0,0 +1,116 @@ +//ww:run +package main; + +import io; +import memio; +import os; +import temp; + +fn myseek(s: io.stream, off: io.off, w: io.whence) (io.off | io.error) = { + return off + 100: io.off; +}; + +fn fresh() i32 = { + let fd: i32 = -1; + let path: str; + match (temp.named(&fd, &path, "/tmp", temp.mode.RDWR, 0o600: i32)) { + case void => void; + case let e: os.oserror => return -1; + }; + if (os.remove(path) != 0) { os.close(fd); return -1; }; + return fd; +}; + +export fn main() i32 = { + let fd: i32 = fresh(); + if (fd < 0) { return 1; }; + let h: io.file = fd; + let data: [3]u8; + data[0] = 65u8; data[1] = 66u8; data[2] = 67u8; + match (io.write(h, data[0:3])) { + case let n: size => { if (n != 3: size) { io.close(h); return 2; }; }; + case let e: io.error => { io.close(h); return 3; }; + }; + match (io.seek(h, 0: io.off, io.whence.SET)) { + case let o: io.off => { if (o != 0: io.off) { io.close(h); return 4; }; }; + case let e: io.error => { io.close(h); return 5; }; + }; + let rb: [3]u8; + match (io.read(h, rb[0:3])) { + case let n: size => { if (n != 3: size) { io.close(h); return 6; }; }; + case let z: io.eof => { io.close(h); return 7; }; + case let e: io.error => { io.close(h); return 8; }; + }; + if (rb[0] != 65u8 || rb[1] != 66u8 || rb[2] != 67u8) { io.close(h); return 9; }; + match (io.seek(h, 0: io.off, io.whence.END)) { + case let o: io.off => { if (o != 3: io.off) { io.close(h); return 10; }; }; + case let e: io.error => { io.close(h); return 11; }; + }; + match (io.tell(h)) { + case let o: io.off => { if (o != 3: io.off) { io.close(h); return 12; }; }; + case let e: io.error => { io.close(h); return 13; }; + }; + match (io.close(h)) { + case void => void; + case let e: io.error => return 14; + }; + + let sbuf: [8]u8; + let st: memio.stream = memio.fixed(sbuf[0:8]); + let s: io.stream = &st.vt; + let sdata: [3]u8; + sdata[0] = 88u8; sdata[1] = 89u8; sdata[2] = 90u8; + match (io.write(s, sdata[0:3])) { + case let n: size => { if (n != 3: size) { return 15; }; }; + case let e: io.error => return 16; + }; + if (sbuf[0] != 88u8 || sbuf[1] != 89u8 || sbuf[2] != 90u8) { return 17; }; + let st2: memio.stream = memio.fixed(sbuf[0:8]); + let s2: io.stream = &st2.vt; + let srb: [3]u8; + match (io.read(s2, srb[0:3])) { + case let n: size => { if (n != 3: size) { return 18; }; }; + case let z: io.eof => return 19; + case let e: io.error => return 20; + }; + if (srb[0] != 88u8 || srb[1] != 89u8 || srb[2] != 90u8) { return 21; }; + + let emptyvt: io.vtable; + let noseek: io.stream = &emptyvt; + match (io.seek(noseek, 0: io.off, io.whence.SET)) { + case let o: io.off => return 22; + case let e: io.error => void; + }; + + let seekvt: io.vtable; + seekvt.seeker = (&myseek): *io.seeker; + let seeker: io.stream = &seekvt; + match (io.seek(seeker, 5: io.off, io.whence.SET)) { + case let o: io.off => { if (o != 105: io.off) { return 23; }; }; + case let e: io.error => return 24; + }; + match (io.tell(seeker)) { + case let o: io.off => { if (o != 100: io.off) { return 25; }; }; + case let e: io.error => return 26; + }; + + let bad: io.file = -1i32; + match (io.write(bad, data[0:3])) { + case let n: size => return 27; + case let e: io.error => void; + }; + match (io.read(bad, data[0:3])) { + case let n: size => return 28; + case let z: io.eof => return 29; + case let e: io.error => void; + }; + match (io.seek(bad, 0: io.off, io.whence.SET)) { + case let o: io.off => return 30; + case let e: io.error => void; + }; + match (io.close(bad)) { + case void => return 31; + case let e: io.error => void; + }; + return 0; +}; diff --git a/test/wcc/data/r79_single_field_struct_assign/case.ww b/test/wcc/data/r79_single_field_struct_assign/case.ww new file mode 100644 index 00000000..3d49d089 --- /dev/null +++ b/test/wcc/data/r79_single_field_struct_assign/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 42 +package main; +type vtable = struct { x: i32 }; +type box = struct { src: *vtable }; +fn use(b: *box) i32 = { return b.src.x; }; +export fn main() i32 = { let vt: vtable; vt.x = 42; let b: box; b.src = &vt; return use(&b); }; diff --git a/test/wcc/data/r79_single_field_struct_read_before_init/case.ww b/test/wcc/data/r79_single_field_struct_read_before_init/case.ww new file mode 100644 index 00000000..bb2de3fd --- /dev/null +++ b/test/wcc/data/r79_single_field_struct_read_before_init/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type box = struct { x: i64 }; +fn dirty() i64 = { let a: i64 = 0x7777777777777777i64; let b: i64 = a; return b; }; +fn readit() i64 = { let b: box; return b.x; }; +export fn main() i32 = { let j: i64 = dirty(); let v: i64 = readit(); if (v == 0i64) { return 0; }; return 1; }; diff --git a/test/wcc/data/r79_spread_variant_match_compile/case.ww b/test/wcc/data/r79_spread_variant_match_compile/case.ww new file mode 100644 index 00000000..7580d32e --- /dev/null +++ b/test/wcc/data/r79_spread_variant_match_compile/case.ww @@ -0,0 +1,6 @@ +//ww:compile +package main; +type inner = (i64 | bool | rune); +type field = (...inner | str); +fn classify(f: field) i64 = { match (f) { case let n: i64 => return n; case let b: bool => return 1; case let r: rune => return 2; case let s: str => return s.len: i64; }; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r79_tuple_sret_str_str_i32/case.ww b/test/wcc/data/r79_tuple_sret_str_str_i32/case.ww new file mode 100644 index 00000000..1fa22139 --- /dev/null +++ b/test/wcc/data/r79_tuple_sret_str_str_i32/case.ww @@ -0,0 +1,3 @@ +//ww:compile +package main; +export fn f(a: str, b: str, n: i32) (str, str, i32) = { return (a, b, n); }; diff --git a/test/wcc/data/r79_tuple_sret_three_f64/case.ww b/test/wcc/data/r79_tuple_sret_three_f64/case.ww new file mode 100644 index 00000000..25c6ce02 --- /dev/null +++ b/test/wcc/data/r79_tuple_sret_three_f64/case.ww @@ -0,0 +1,3 @@ +//ww:compile +package main; +export fn f(x: f64, y: f64, z: f64) (f64, f64, f64) = { return (x, y, z); }; diff --git a/test/wcc/data/r79_tuple_sret_two_slices/case.ww b/test/wcc/data/r79_tuple_sret_two_slices/case.ww new file mode 100644 index 00000000..24b267ad --- /dev/null +++ b/test/wcc/data/r79_tuple_sret_two_slices/case.ww @@ -0,0 +1,3 @@ +//ww:compile +package main; +export fn f(a: []u8, b: []u8) ([]u8, []u8) = { return (a, b); }; diff --git a/test/wcc/data/r79_tuple_sret_two_str/case.ww b/test/wcc/data/r79_tuple_sret_two_str/case.ww new file mode 100644 index 00000000..ca4c0a4b --- /dev/null +++ b/test/wcc/data/r79_tuple_sret_two_str/case.ww @@ -0,0 +1,3 @@ +//ww:compile +package main; +export fn f(a: str, b: str) (str, str) = { return (a, b); }; diff --git a/test/wcc/data/r79_xmod_valglobal_def/case.ww b/test/wcc/data/r79_xmod_valglobal_def/case.ww new file mode 100644 index 00000000..64ef9d85 --- /dev/null +++ b/test/wcc/data/r79_xmod_valglobal_def/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 5 +package aa; +export def K: i32 = 5; +export fn getk() i32 = { return K; }; +package main; +import aa; +def K: i32 = 88; +export fn main() i32 = { return aa.getk(); }; diff --git a/test/wcc/data/r79_xmod_valglobal_dot_addrof/case.ww b/test/wcc/data/r79_xmod_valglobal_dot_addrof/case.ww new file mode 100644 index 00000000..2b159c46 --- /dev/null +++ b/test/wcc/data/r79_xmod_valglobal_dot_addrof/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package aa; +export let v: i32 = 7; +package main; +import aa; +let v: i32 = 99; +export fn main() i32 = { let p: *i32 = &aa.v; return *p; }; diff --git a/test/wcc/data/r79_xmod_valglobal_dot_read/case.ww b/test/wcc/data/r79_xmod_valglobal_dot_read/case.ww new file mode 100644 index 00000000..67aa3841 --- /dev/null +++ b/test/wcc/data/r79_xmod_valglobal_dot_read/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package aa; +export let v: i32 = 7; +package main; +import aa; +let v: i32 = 99; +export fn main() i32 = { return aa.v; }; diff --git a/test/wcc/data/r79_xmod_valglobal_f64/case.ww b/test/wcc/data/r79_xmod_valglobal_f64/case.ww new file mode 100644 index 00000000..dd766c55 --- /dev/null +++ b/test/wcc/data/r79_xmod_valglobal_f64/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 2 +package aa; +export let f: f64 = 2.5; +export fn getf() f64 = { return f; }; +package main; +import aa; +let f: f64 = 9.9; +export fn main() i32 = { return aa.getf(): i32; }; diff --git a/test/wcc/data/r79_xmod_valglobal_i32/case.ww b/test/wcc/data/r79_xmod_valglobal_i32/case.ww new file mode 100644 index 00000000..ec61c80d --- /dev/null +++ b/test/wcc/data/r79_xmod_valglobal_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package aa; +export let v: i32 = 7; +export fn getv() i32 = { return v; }; +package main; +import aa; +let v: i32 = 99; +export fn main() i32 = { return aa.getv(); }; diff --git a/test/wcc/data/r800append_enum_alias_esz/case.ww b/test/wcc/data/r800append_enum_alias_esz/case.ww new file mode 100644 index 00000000..96554825 --- /dev/null +++ b/test/wcc/data/r800append_enum_alias_esz/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 5 +package main; +type ek = enum { A = 5, B = 9 }; +export fn main() i32 = { + let xs: []ek = []; + append(xs, ek.A); + return xs[0]: i32; +}; diff --git a/test/wcc/data/r800append_slice_elem/case.ww b/test/wcc/data/r800append_slice_elem/case.ww new file mode 100644 index 00000000..8b0d7234 --- /dev/null +++ b/test/wcc/data/r800append_slice_elem/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 12 +package main; +export fn main() i32 = { + let hb: [4]u8; hb[0] = 9u8; hb[1] = 4u8; + let a: []u8; a.ptr = &hb[0]; a.len = 3; a.cap = 4; + let ys: [][]u8 = []; + append(ys, a); + return (ys[0].len: i32) + (ys[0][0]: i32); +}; diff --git a/test/wcc/data/r800append_spread_call_loudstop/case.ww b/test/wcc/data/r800append_spread_call_loudstop/case.ww new file mode 100644 index 00000000..b2edf6e3 --- /dev/null +++ b/test/wcc/data/r800append_spread_call_loudstop/case.ww @@ -0,0 +1,13 @@ +//ww:error "#35: append() spread source shape unsupported (rule-7)" +package main; +fn mks() []str = { + let xs: []str = []; + let a: str = "abc"; + append(xs, a); + return xs; +}; +export fn main() i32 = { + let ys: []str = []; + append(ys, mks()...); + return ys[0].len: i32; +}; diff --git a/test/wcc/data/r800append_spread_str/case.ww b/test/wcc/data/r800append_spread_str/case.ww new file mode 100644 index 00000000..0cba1d37 --- /dev/null +++ b/test/wcc/data/r800append_spread_str/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 7 +package main; +export fn main() i32 = { + let xs: []str = []; + let a: str = "abc"; + let b: str = "fg"; + append(xs, a); + let ys: []str = []; + append(ys, xs...); + append(ys, b); + return (ys[0].len + ys[1].len + ys.len): i32; +}; diff --git a/test/wcc/data/r800append_spread_tagged/case.ww b/test/wcc/data/r800append_spread_tagged/case.ww new file mode 100644 index 00000000..edf8c49e --- /dev/null +++ b/test/wcc/data/r800append_spread_tagged/case.ww @@ -0,0 +1,20 @@ +//ww:run-exit 42 +package main; +type cell = (i64 | bool); +export fn main() i32 = { + let xs: []cell = []; + append(xs, 40i64); + append(xs, 2i64); + let ys: []cell = []; + append(ys, xs...); + let r: i32 = 0; + match (ys[0]) { + case let v: i64 => r += v: i32; + case bool => r = 99; + }; + match (ys[1]) { + case let v: i64 => r += v: i32; + case bool => r = 98; + }; + return r; +}; diff --git a/test/wcc/data/r800append_str_len_bytes/case.ww b/test/wcc/data/r800append_str_len_bytes/case.ww new file mode 100644 index 00000000..ac25e2af --- /dev/null +++ b/test/wcc/data/r800append_str_len_bytes/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 11 +package main; +export fn main() i32 = { + let xs: []str = []; + let s: str = "abcdef"; + append(xs, s); + return (xs[0].len: i32) + (xs[0][5]: i32) - (xs[0][0]: i32); +}; diff --git a/test/wcc/data/r800append_str_two_append/case.ww b/test/wcc/data/r800append_str_two_append/case.ww new file mode 100644 index 00000000..f5e4784a --- /dev/null +++ b/test/wcc/data/r800append_str_two_append/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 32 +package main; +export fn main() i32 = { + let xs: []str = []; + let a: str = "abc"; + let b: str = "fg"; + append(xs, a); + append(xs, b); + return (xs[0].len * 10 + xs[1].len): i32; +}; diff --git a/test/wcc/data/r800append_struct_call_loudstop/case.ww b/test/wcc/data/r800append_struct_call_loudstop/case.ww new file mode 100644 index 00000000..bb56e77c --- /dev/null +++ b/test/wcc/data/r800append_struct_call_loudstop/case.ww @@ -0,0 +1,11 @@ +//ww:error "#34: append() struct element source shape unsupported (rule-7)" +package main; +type pt = struct { x: i32, y: i32, z: i64 }; +fn mk() pt = { + return pt { x = 1, y = 2, z = 3 }; +}; +export fn main() i32 = { + let xs: []pt = []; + append(xs, mk()); + return 0; +}; diff --git a/test/wcc/data/r800append_struct_eight_appends/case.ww b/test/wcc/data/r800append_struct_eight_appends/case.ww new file mode 100644 index 00000000..42b1e2a1 --- /dev/null +++ b/test/wcc/data/r800append_struct_eight_appends/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 15 +package main; +type option = struct { flag: rune, value: str }; +export fn main() i32 = { + let opts: []option = []; + append(opts, option { flag = 'a', value = "v0" }); + append(opts, option { flag = 'b', value = "v1" }); + append(opts, option { flag = 'c', value = "v2" }); + append(opts, option { flag = 'd', value = "v3" }); + append(opts, option { flag = 'e', value = "v4" }); + append(opts, option { flag = 'f', value = "v5" }); + append(opts, option { flag = 'g', value = "v6" }); + append(opts, option { flag = 'h', value = "seventh" }); + return (opts[7].value.len + opts.len): i32; +}; diff --git a/test/wcc/data/r800append_struct_first8/case.ww b/test/wcc/data/r800append_struct_first8/case.ww new file mode 100644 index 00000000..b3b7f57b --- /dev/null +++ b/test/wcc/data/r800append_struct_first8/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 8 +package main; +type pt = struct { x: i32, y: i32, z: i64 }; +export fn main() i32 = { + let xs: []pt = []; + let p: pt = pt { x = 3, y = 5, z = 9 }; + append(xs, p); + return (xs[0].x + xs[0].y): i32; +}; diff --git a/test/wcc/data/r800append_struct_lit_two/case.ww b/test/wcc/data/r800append_struct_lit_two/case.ww new file mode 100644 index 00000000..1aa09c8e --- /dev/null +++ b/test/wcc/data/r800append_struct_lit_two/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 7 +package main; +type pt = struct { x: i32, y: i32, z: i64 }; +export fn main() i32 = { + let xs: []pt = []; + append(xs, pt { x = 1, y = 2, z = 5 }); + append(xs, pt { x = 3, y = 4, z = 7 }); + return (xs[0].z + xs[1].z): i32 - xs[0].x - xs[1].y; +}; diff --git a/test/wcc/data/r800append_struct_tail_word/case.ww b/test/wcc/data/r800append_struct_tail_word/case.ww new file mode 100644 index 00000000..9b4cde5f --- /dev/null +++ b/test/wcc/data/r800append_struct_tail_word/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 8 +package main; +type pt = struct { x: i32, y: i32, z: i64 }; +export fn main() i32 = { + let xs: []pt = []; + let p: pt = pt { x = 3, y = 5, z = 9 }; + append(xs, p); + return (xs[0].z - 1): i32; +}; diff --git a/test/wcc/data/r800append_tagged_box/case.ww b/test/wcc/data/r800append_tagged_box/case.ww new file mode 100644 index 00000000..dfdb0dce --- /dev/null +++ b/test/wcc/data/r800append_tagged_box/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 100 +package main; +type cell = (i64 | bool); +export fn main() i32 = { + let xs: []cell = []; + append(xs, 100i64); + let r: i32 = 1; + match (xs[0]) { + case let v: i64 => r = v: i32; + case bool => r = 2; + }; + return r; +}; diff --git a/test/wcc/data/r800append_tagged_ident_src/case.ww b/test/wcc/data/r800append_tagged_ident_src/case.ww new file mode 100644 index 00000000..f062a009 --- /dev/null +++ b/test/wcc/data/r800append_tagged_ident_src/case.ww @@ -0,0 +1,20 @@ +//ww:run-exit 42 +package main; +type cell = (i64 | bool); +export fn main() i32 = { + let xs: []cell = []; + let c: cell = 40i64; + let b: cell = true; + append(xs, c); + append(xs, b); + let r: i32 = 0; + match (xs[0]) { + case let v: i64 => r += v: i32; + case bool => r = 99; + }; + match (xs[1]) { + case i64 => r = 98; + case let w: bool => { if (w) { r += 2; }; }; + }; + return r; +}; diff --git a/test/wcc/data/r800append_tagged_two_append/case.ww b/test/wcc/data/r800append_tagged_two_append/case.ww new file mode 100644 index 00000000..65721816 --- /dev/null +++ b/test/wcc/data/r800append_tagged_two_append/case.ww @@ -0,0 +1,18 @@ +//ww:run-exit 42 +package main; +type cell = (i64 | bool); +export fn main() i32 = { + let xs: []cell = []; + append(xs, 40i64); + append(xs, 2i64); + let r: i32 = 0; + match (xs[0]) { + case let v: i64 => r += v: i32; + case bool => r = 99; + }; + match (xs[1]) { + case let v: i64 => r += v: i32; + case bool => r = 98; + }; + return r; +}; diff --git a/test/wcc/data/r800append_u8_baseline/case.ww b/test/wcc/data/r800append_u8_baseline/case.ww new file mode 100644 index 00000000..7e280938 --- /dev/null +++ b/test/wcc/data/r800append_u8_baseline/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 8 +package main; +export fn main() i32 = { + let xs: []u8 = []; + append(xs, 5u8); + append(xs, 3u8); + return (xs[0] + xs[1]): i32; +}; diff --git a/test/wcc/data/r804_delete_elem_reject_arity/case.ww b/test/wcc/data/r804_delete_elem_reject_arity/case.ww new file mode 100644 index 00000000..58bdd7ba --- /dev/null +++ b/test/wcc/data/r804_delete_elem_reject_arity/case.ww @@ -0,0 +1,3 @@ +//ww:error "delete: takes exactly one argument" +package main; +export fn main() i32 = { let xs: []u8 = []; append(xs, 5u8); append(xs, 6u8); delete(xs[0], xs[1]); return 0; }; diff --git a/test/wcc/data/r804_delete_elem_reject_array/case.ww b/test/wcc/data/r804_delete_elem_reject_array/case.ww new file mode 100644 index 00000000..9131fc70 --- /dev/null +++ b/test/wcc/data/r804_delete_elem_reject_array/case.ww @@ -0,0 +1,3 @@ +//ww:error "delete must operate on a slice" +package main; +export fn main() i32 = { let t: [3]i64 = [1, 2, 3]; delete(t[0]); return 0; }; diff --git a/test/wcc/data/r804_delete_elem_reject_nonindex/case.ww b/test/wcc/data/r804_delete_elem_reject_nonindex/case.ww new file mode 100644 index 00000000..4100adc7 --- /dev/null +++ b/test/wcc/data/r804_delete_elem_reject_nonindex/case.ww @@ -0,0 +1,3 @@ +//ww:error "delete: operand must be an indexing or slicing expression" +package main; +export fn main() i32 = { let xs: []u8 = []; append(xs, 5u8); delete(xs); return 0; }; diff --git a/test/wcc/data/r804_delete_elem_runtime/case.ww b/test/wcc/data/r804_delete_elem_runtime/case.ww new file mode 100644 index 00000000..78920921 --- /dev/null +++ b/test/wcc/data/r804_delete_elem_runtime/case.ww @@ -0,0 +1,87 @@ +//ww:run +package main; + +type s6 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type cell = (s6 | bool); +type thread = struct { pc: i64, matched: bool }; + +fn i64_first() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + delete(xs[0]); return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn i64_middle() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + delete(xs[1]); return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn i64_last() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + delete(xs[2]); return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn i32_narrow() i32 = { + let xs: []i32 = []; append(xs, 4i32); append(xs, 9i32); append(xs, 2i32); + delete(xs[0]); return xs[0] + xs[1]*10 + len(xs)*100; +}; +fn u16_narrow() i32 = { + let xs: []u16 = []; append(xs, 4u16); append(xs, 9u16); append(xs, 2u16); + delete(xs[1]); return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn u8_narrow() i32 = { + let xs: []u8 = []; append(xs, 5u8); append(xs, 9u8); append(xs, 3u8); + delete(xs[1]); return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn cap_unchanged() i32 = { + let hb: [8]u8; hb[0] = 4u8; hb[1] = 6u8; hb[2] = 9u8; + let xs: []u8; xs.ptr = &hb[0]; xs.len = 3; xs.cap = 8; + delete(xs[1]); return (xs.cap*10 + xs.len): i32 + xs[1]: i32; +}; +fn delete_to_empty() i32 = { + let xs: []u8 = []; append(xs, 5u8); delete(xs[0]); return len(xs) + 7; +}; +fn str_elem() i32 = { + let xs: []str = []; let a: str = "abc"; let b: str = "de"; let g: str = "fghi"; + append(xs, a); append(xs, b); append(xs, g); delete(xs[1]); + return (xs[0].len*10 + xs[1].len): i32 + len(xs)*100; +}; +fn tagged_56b() i32 = { + let xs: []cell = []; + let p0: s6 = s6 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6 }; + let p1: s6 = s6 { a = 7, b = 8, c = 9, d = 10, e = 11, f = 12 }; + let p2: s6 = s6 { a = 13, b = 14, c = 15, d = 16, e = 17, f = 18 }; + append(xs, p0); append(xs, p1); append(xs, p2); delete(xs[1]); + let r: i32 = 0; + match (xs[1]) { case let s: s6 => r = s.a: i32; case bool => r = 99; }; + let bp: *u8 = xs.ptr: *u8; r += bp[104]: i32; + return r + len(xs)*100; +}; +fn delete_thread(i: i64, threads: *[]thread) void = { delete((*threads)[i]); }; +fn regex_shape() i32 = { + let xs: []thread = []; + append(xs, thread { pc = 1, matched = false }); + append(xs, thread { pc = 2, matched = false }); + append(xs, thread { pc = 3, matched = false }); + delete_thread(1, &xs); + let r: i32 = (xs[0].pc + xs[1].pc): i32; + return r + len(xs)*10; +}; +fn delete_in_loop() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); append(xs, 4); + let acc: i64 = 0; + for (len(xs) > 0) { acc = acc*4 + xs[0]; delete(xs[0]); }; + return acc: i32 + len(xs)*1000; +}; + +export fn main() i32 = { + if (i64_first() != 44) { return 1; }; + if (i64_middle() != 40) { return 2; }; + if (i64_last() != 38) { return 3; }; + if (i32_narrow() != 229) { return 4; }; + if (u16_narrow() != 26) { return 5; }; + if (u8_narrow() != 28) { return 6; }; + if (cap_unchanged() != 91) { return 7; }; + if (delete_to_empty() != 7) { return 8; }; + if (str_elem() != 234) { return 9; }; + if (tagged_56b() != 231) { return 10; }; + if (regex_shape() != 24) { return 11; }; + if (delete_in_loop() != 112) { return 12; }; + return 0; +}; diff --git a/test/wcc/data/r806_tryprop_accept_nested_tagged/case.ww b/test/wcc/data/r806_tryprop_accept_nested_tagged/case.ww new file mode 100644 index 00000000..1697f51e --- /dev/null +++ b/test/wcc/data/r806_tryprop_accept_nested_tagged/case.ww @@ -0,0 +1,13 @@ +//ww:run +package main; +type ab = (i32 | bool); +fn f(k: i32) (ab | nomem) = { let v: ab = 7; return v; }; +fn g() (i32 | nomem) = { if (f(1)? is i32) { return 0; }; return 1; }; +export fn main() i32 = { + let x: (i32 | nomem) = g(); + match (x) { + case let v: i32 => return v; + case nomem => return 2; + }; + return 3; +}; diff --git a/test/wcc/data/r806_tryprop_accept_two_member/case.ww b/test/wcc/data/r806_tryprop_accept_two_member/case.ww new file mode 100644 index 00000000..132ced9c --- /dev/null +++ b/test/wcc/data/r806_tryprop_accept_two_member/case.ww @@ -0,0 +1,11 @@ +//ww:run +package main; +fn f(k: i32) (i32 | nomem) = { return 7; }; +fn g() (i32 | nomem) = { let v: i32 = f(1)?; return v + 1; }; +export fn main() i32 = { + match (g()) { + case let v: i32 => return v - 8; + case nomem => return 2; + }; + return 3; +}; diff --git a/test/wcc/data/r806_tryprop_accept_unw_multi_error/case.ww b/test/wcc/data/r806_tryprop_accept_unw_multi_error/case.ww new file mode 100644 index 00000000..3f7ccc08 --- /dev/null +++ b/test/wcc/data/r806_tryprop_accept_unw_multi_error/case.ww @@ -0,0 +1,10 @@ +//ww:run +package main; +type e1 = !void; +type e2 = !void; +fn g(which: i32) (i32 | e1 | e2) = { + if (which == 1) { return e1{}; }; + if (which == 2) { return e2{}; }; + return 100; +}; +export fn main() i32 = { let v: i32 = g(0)!; return v - 100; }; diff --git a/test/wcc/data/r806_tryprop_accept_void_success/case.ww b/test/wcc/data/r806_tryprop_accept_void_success/case.ww new file mode 100644 index 00000000..63442001 --- /dev/null +++ b/test/wcc/data/r806_tryprop_accept_void_success/case.ww @@ -0,0 +1,12 @@ +//ww:run +package main; +fn f(k: i32) (void | nomem) = { return; }; +fn g() (i32 | nomem) = { f(1)?; return 5; }; +export fn main() i32 = { + let x: (i32 | nomem) = g(); + match (x) { + case let v: i32 => return v - 5; + case nomem => return 2; + }; + return 3; +}; diff --git a/test/wcc/data/r806_tryprop_reject_callarg/case.ww b/test/wcc/data/r806_tryprop_reject_callarg/case.ww new file mode 100644 index 00000000..14cfe2a4 --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_callarg/case.ww @@ -0,0 +1,6 @@ +//ww:error "?: multi-success union unwired (task #14): bind and match instead" +package main; +fn f(k: i32) (i32 | bool | nomem) = { return 7; }; +fn g(v: i32) i32 = { return v; }; +fn h() (i32 | nomem) = { return g(f(1)?); }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r806_tryprop_reject_success2/case.ww b/test/wcc/data/r806_tryprop_reject_success2/case.ww new file mode 100644 index 00000000..1c2ae2a1 --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_success2/case.ww @@ -0,0 +1,15 @@ +//ww:error "?: multi-success union unwired (task #14): bind and match instead" +package main; +type capture = struct { content: str, start: size, end: size }; +fn search2(k: i32) (void | []capture | nomem) = { + if (k == 0) { return; }; + let caps: []capture = []; + append(caps, capture { content = "xy", start = 1, end = 3 }); + return caps; +}; +fn tb(k: i32) (i32 | nomem) = { + let r: (void | []capture) = search2(k)?; + if (r is []capture) { return 7; }; + return 8; +}; +export fn main() i32 = { let x: (i32 | nomem) = tb(1); return 0; }; diff --git a/test/wcc/data/r806_tryprop_reject_success3/case.ww b/test/wcc/data/r806_tryprop_reject_success3/case.ww new file mode 100644 index 00000000..033e9e5f --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_success3/case.ww @@ -0,0 +1,5 @@ +//ww:error "?: multi-success union unwired (task #14): bind and match instead" +package main; +fn f(k: i32) (i32 | bool | u64 | nomem) = { return 7; }; +fn g() (i32 | nomem) = { let v: i32 = f(1)?; return v; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r806_tryprop_reject_try_is/case.ww b/test/wcc/data/r806_tryprop_reject_try_is/case.ww new file mode 100644 index 00000000..a1926a65 --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_try_is/case.ww @@ -0,0 +1,11 @@ +//ww:error c "is on non-tagged-union" ww "is/as: operand is not a tagged union" +package main; + +fn f(k: i32) (i32 | nomem) = { return 7; }; + +fn g() (i32 | nomem) = { + if (f(1)? is i32) { return 1; }; + return 0; +}; + +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r806_tryprop_reject_try_match/case.ww b/test/wcc/data/r806_tryprop_reject_try_match/case.ww new file mode 100644 index 00000000..b22098ca --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_try_match/case.ww @@ -0,0 +1,13 @@ +//ww:error c "match on non-tagged-union" ww "match on non-tagged-union try-result" +package main; + +fn f(k: i32) (i32 | nomem) = { return 7; }; + +fn g() (i32 | nomem) = { + match (f(1)?) { + case i32 => return 1; + }; + return 0; +}; + +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r806_tryprop_reject_tryunw_is/case.ww b/test/wcc/data/r806_tryprop_reject_tryunw_is/case.ww new file mode 100644 index 00000000..a93cb305 --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_tryunw_is/case.ww @@ -0,0 +1,11 @@ +//ww:error c "is on non-tagged-union" ww "is/as: operand is not a tagged union" +package main; + +fn f(k: i32) (i32 | nomem) = { return 7; }; + +fn g() i32 = { + if (f(1)! is i32) { return 1; }; + return 0; +}; + +export fn main() i32 = { return g() - 1; }; diff --git a/test/wcc/data/r806_tryprop_reject_unw_success2/case.ww b/test/wcc/data/r806_tryprop_reject_unw_success2/case.ww new file mode 100644 index 00000000..2b790d69 --- /dev/null +++ b/test/wcc/data/r806_tryprop_reject_unw_success2/case.ww @@ -0,0 +1,15 @@ +//ww:error "!: multi-success union unwired (task #14): bind and match instead" +package main; +type capture = struct { content: str, start: size, end: size }; +fn search2(k: i32) (void | []capture | nomem) = { + if (k == 0) { return; }; + let caps: []capture = []; + append(caps, capture { content = "xy", start = 1, end = 3 }); + return caps; +}; +fn tb(k: i32) i32 = { + let r: (void | []capture) = search2(k)!; + if (r is []capture) { return 7; }; + return 8; +}; +export fn main() i32 = { return tb(1); }; diff --git a/test/wcc/data/r807_insert_elem_reject_arity1/case.ww b/test/wcc/data/r807_insert_elem_reject_arity1/case.ww new file mode 100644 index 00000000..89d30258 --- /dev/null +++ b/test/wcc/data/r807_insert_elem_reject_arity1/case.ww @@ -0,0 +1,3 @@ +//ww:error "insert: takes exactly two arguments" +package main; +export fn main() i32 = { let xs: []u8 = []; append(xs, 5u8); insert(xs[0]); return 0; }; diff --git a/test/wcc/data/r807_insert_elem_reject_arity3/case.ww b/test/wcc/data/r807_insert_elem_reject_arity3/case.ww new file mode 100644 index 00000000..c80e0d2a --- /dev/null +++ b/test/wcc/data/r807_insert_elem_reject_arity3/case.ww @@ -0,0 +1,3 @@ +//ww:error "insert: takes exactly two arguments" +package main; +export fn main() i32 = { let xs: []u8 = []; append(xs, 5u8); insert(xs[0], 6u8, 7u8); return 0; }; diff --git a/test/wcc/data/r807_insert_elem_reject_array/case.ww b/test/wcc/data/r807_insert_elem_reject_array/case.ww new file mode 100644 index 00000000..29ea752d --- /dev/null +++ b/test/wcc/data/r807_insert_elem_reject_array/case.ww @@ -0,0 +1,3 @@ +//ww:error "insert must operate on a slice" +package main; +export fn main() i32 = { let t: [3]i64 = [1, 2, 3]; insert(t[0], 9); return 0; }; diff --git a/test/wcc/data/r807_insert_elem_reject_nonindex/case.ww b/test/wcc/data/r807_insert_elem_reject_nonindex/case.ww new file mode 100644 index 00000000..0aa2a088 --- /dev/null +++ b/test/wcc/data/r807_insert_elem_reject_nonindex/case.ww @@ -0,0 +1,3 @@ +//ww:error "insert: operand must be an indexing expression" +package main; +export fn main() i32 = { let xs: []u8 = []; append(xs, 5u8); insert(xs, 6u8); return 0; }; diff --git a/test/wcc/data/r807_insert_elem_reject_range/case.ww b/test/wcc/data/r807_insert_elem_reject_range/case.ww new file mode 100644 index 00000000..b3a3f239 --- /dev/null +++ b/test/wcc/data/r807_insert_elem_reject_range/case.ww @@ -0,0 +1,3 @@ +//ww:error "insert: range place is invalid" +package main; +export fn main() i32 = { let xs: []u8 = []; append(xs, 5u8); append(xs, 6u8); insert(xs[0:1], 7u8); return 0; }; diff --git a/test/wcc/data/r807_insert_elem_reject_spread/case.ww b/test/wcc/data/r807_insert_elem_reject_spread/case.ww new file mode 100644 index 00000000..e0824353 --- /dev/null +++ b/test/wcc/data/r807_insert_elem_reject_spread/case.ww @@ -0,0 +1,3 @@ +//ww:error "insert: spread form insert(xs[i], vs...) unimplemented (task #35)" +package main; +export fn main() i32 = { let xs: []u8 = []; let vs: []u8 = []; append(vs, 1u8); insert(xs[0], vs...); return 0; }; diff --git a/test/wcc/data/r807_insert_elem_runtime/case.ww b/test/wcc/data/r807_insert_elem_runtime/case.ww new file mode 100644 index 00000000..231b45bb --- /dev/null +++ b/test/wcc/data/r807_insert_elem_runtime/case.ww @@ -0,0 +1,188 @@ +//ww:run +package main; + +type p2t = struct { x: i64, y: i64 }; +type s6 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type cell = (s6 | bool); +type inst_lit = rune; +type inst_split = i64; +type inst = (inst_lit | inst_split); +type un_size_void = (size | void); +type un_void_size = (void | size); +type un_str_void = (str | void); +type minrep_split = size; +type minrep_un = (minrep_split | void); + +fn i64_front() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + insert(xs[0], 5); return (xs[0] + xs[1]*10): i32 + len(xs)*10; +}; +fn i64_middle() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + insert(xs[1], 5); return (xs[0] + xs[1]*10): i32 + len(xs)*10; +}; +fn i64_end() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + insert(xs[3], 5); return (xs[0] + xs[1]*10): i32 + len(xs)*10; +}; +fn end_insert_len() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); insert(xs[len(xs)], 13); + if (len(xs) != 3) { return 1; }; return xs[2]: i32; +}; +fn pregrow_len_idx() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); insert(xs[len(xs)-1], 13); + if (len(xs) != 3) { return 1; }; + if (xs[0] != 7) { return 2; }; if (xs[1] != 13) { return 3; }; + if (xs[2] != 11) { return 4; }; return 48; +}; +fn i32_narrow() i32 = { + let xs: []i32 = []; append(xs, 4i32); append(xs, 2i32); insert(xs[1], 9i32); + if (len(xs) != 3) { return 1; }; + if (xs[0] != 4i32) { return 2; }; if (xs[1] != 9i32) { return 3; }; + if (xs[2] != 2i32) { return 4; }; return 42; +}; +fn u16_narrow() i32 = { + let xs: []u16 = []; append(xs, 4u16); append(xs, 2u16); insert(xs[1], 9u16); + if (len(xs) != 3) { return 1; }; + if (xs[0] != 4u16) { return 2; }; if (xs[1] != 9u16) { return 3; }; + if (xs[2] != 2u16) { return 4; }; return 43; +}; +fn u8_narrow() i32 = { + let xs: []u8 = []; append(xs, 5u8); append(xs, 3u8); insert(xs[0], 2u8); + if (len(xs) != 3) { return 1; }; + if (xs[0] != 2u8) { return 2; }; if (xs[1] != 5u8) { return 3; }; + if (xs[2] != 3u8) { return 4; }; return 44; +}; +fn empty_insert() i32 = { + let xs: []i64 = []; insert(xs[0], 5); return xs[0]: i32 + len(xs)*10; +}; +fn str_elem() i32 = { + let xs: []str = []; let a: str = "abc"; let g: str = "fghi"; + append(xs, a); append(xs, g); let b: str = "de"; insert(xs[1], b); + if (len(xs) != 3) { return 1; }; + if (xs[0].len != 3) { return 2; }; if (xs[1].len != 2) { return 3; }; + if (xs[2].len != 4) { return 4; }; return 45; +}; +fn struct_elem() i32 = { + let xs: []p2t = []; + append(xs, p2t { x = 1, y = 2 }); append(xs, p2t { x = 5, y = 6 }); + insert(xs[1], p2t { x = 3, y = 4 }); + if (len(xs) != 3) { return 1; }; + if (xs[0].x != 1 || xs[0].y != 2) { return 2; }; + if (xs[1].x != 3 || xs[1].y != 4) { return 3; }; + if (xs[2].x != 5 || xs[2].y != 6) { return 4; }; return 46; +}; +fn tagged_56b() i32 = { + let xs: []cell = []; + let p0: s6 = s6 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6 }; + let p2: s6 = s6 { a = 13, b = 14, c = 15, d = 16, e = 17, f = 18 }; + append(xs, p0); append(xs, p2); + let p1: cell = (s6 { a = 7, b = 8, c = 9, d = 10, e = 11, f = 12 }); + insert(xs[1], p1); let r: i32 = 0; + match (xs[1]) { case let s: s6 => r = s.a: i32; case bool => r = 99; }; + let bp: *u8 = xs.ptr: *u8; r += (bp[160]: i32) * 10; + return r + len(xs)*10; +}; +fn tagged_cast() i32 = { + let insts: []inst = []; append(insts, ('a': inst_lit)); append(insts, ('b': inst_lit)); + insert(insts[1], (7: inst_split)); if (len(insts) != 3) { return 1; }; + let r: i32 = 0; + match (insts[1]) { case let z: inst_split => r += z: i32; case => return 2; }; + match (insts[2]) { + case let l: inst_lit => { if ((l: rune) == 'b') { r += 20; }; }; + case => return 3; + }; return r; +}; +fn ins_at(i: i64, p: *[]i64, v: i64) void = { insert((*p)[i], v); }; +fn regex_shape() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 3); ins_at(1, &xs, 2); + if (len(xs) != 3) { return 1; }; return (xs[0] + xs[1]*10 + xs[2]*50): i32; +}; +fn insert_in_loop() i32 = { + let xs: []i64 = []; let v: i64 = 1; + for (v <= 4) { insert(xs[0], v); v += 1; }; + if (len(xs) != 4) { return 1; }; let k: i32 = 0; + for (k < 4) { if (xs[k] != (4-k): i64) { return 2+k; }; k += 1; }; + return 47; +}; +fn tagged_pregrow_val() i32 = { + let xs: []un_size_void = []; + append(xs, 10: size); append(xs, 20: size); insert(xs[1], (xs.len: size)+2); + match (xs[1]) { case let v: size => { if (v != 4) { return (v: i32)+10; }; }; case void => return 2; }; + if (len(xs) != 3) { return 3; }; return 50; +}; +fn scalar_pregrow_val() i32 = { + let xs: []size = []; append(xs, 10: size); append(xs, 20: size); + insert(xs[1], len(xs): size); if (xs[1] != 2) { return 1; }; + if (len(xs) != 3) { return 2; }; return 55; +}; +fn tagged_selfref_val() i32 = { + let xs: []un_size_void = []; + append(xs, 10: size); append(xs, 20: size); insert(xs[0], xs[1]); + match (xs[0]) { case let v: size => { if (v != 20) { return 1; }; }; case void => return 2; }; + match (xs[1]) { case let v: size => { if (v != 10) { return 3; }; }; case void => return 4; }; + match (xs[2]) { case let v: size => { if (v != 20) { return 5; }; }; case void => return 6; }; + if (len(xs) != 3) { return 7; }; return 51; +}; +fn tagged_str_payload() i32 = { + let ss: []un_str_void = []; append(ss, "aa"); insert(ss[0], "bb"); + match (ss[0]) { case let s: str => { if (s.len != 2) { return 1; }; if (s[0] != 'b') { return 2; }; }; case void => return 3; }; + match (ss[1]) { case let s: str => { if (s[0] != 'a') { return 4; }; }; case void => return 5; }; + return 52; +}; +fn tagged_regex_minrep() i32 = { + let xs: []minrep_un = []; + append(xs, 7: minrep_split); append(xs, 8: minrep_split); insert(xs[0], ((xs.len: size)+2): minrep_split); + match (xs[0]) { case let v: minrep_split => { if (v != 4) { return (v: i32)+10; }; }; case void => return 2; }; + if (len(xs) != 3) { return 3; }; return 53; +}; +fn tagged_realloc_selfref_loop() i32 = { + let xs: []un_void_size = []; append(xs, 100: size); let i: size = 0; + for (i < 30) { append(xs, (xs[0] as size)+i); i += 1; }; + if (len(xs) != 31) { return 1; }; let k: size = 1; + for (k < 31) { + match (xs[k]) { case let v: size => { if (v != 100+(k-1)) { return 2; }; }; case void => return 3; }; + k += 1; + }; return 56; +}; +fn tagged_append_pregrow_val() i32 = { + let xs: []un_size_void = []; + append(xs, 10: size); append(xs, 20: size); append(xs, (xs.len: size)+2); + match (xs[2]) { case let v: size => { if (v != 4) { return (v: i32)+10; }; }; case void => return 2; }; + if (len(xs) != 3) { return 3; }; return 54; +}; +fn tagged_seq_positions() i32 = { + let xs: []un_void_size = []; + append(xs, 10: size); append(xs, 20: size); insert(xs[0], (xs.len: size)*100); + match (xs[0]) { case let v: size => { if (v != 200) { return 1; }; }; case void => return 2; }; + insert(xs[2], (xs.len: size)+1); + match (xs[2]) { case let v: size => { if (v != 4) { return 3; }; }; case void => return 4; }; + match (xs[1]) { case let v: size => { if (v != 10) { return 5; }; }; case void => return 6; }; + match (xs[3]) { case let v: size => { if (v != 20) { return 7; }; }; case void => return 8; }; + if (len(xs) != 4) { return 9; }; return 57; +}; +fn tagged_void_variant() i32 = { + let xs: []un_void_size = []; append(xs, 5: size); insert(xs[0], void); + if (!(xs[0] is void)) { return 1; }; + match (xs[1]) { case let v: size => { if (v != 5) { return 2; }; }; case void => return 3; }; + insert(xs[1], xs.len: size); + match (xs[1]) { case let v: size => { if (v != 2) { return 4; }; }; case void => return 5; }; + if (len(xs) != 3) { return 6; }; return 58; +}; + +export fn main() i32 = { + if (i64_front() != 115) { return 1; }; if (i64_middle() != 97) { return 2; }; + if (i64_end() != 157) { return 3; }; if (end_insert_len() != 13) { return 4; }; + if (pregrow_len_idx() != 48) { return 5; }; if (i32_narrow() != 42) { return 6; }; + if (u16_narrow() != 43) { return 7; }; if (u8_narrow() != 44) { return 8; }; + if (empty_insert() != 15) { return 9; }; if (str_elem() != 45) { return 10; }; + if (struct_elem() != 46) { return 11; }; if (tagged_56b() != 217) { return 12; }; + if (tagged_cast() != 27) { return 13; }; if (regex_shape() != 171) { return 14; }; + if (insert_in_loop() != 47) { return 15; }; if (tagged_pregrow_val() != 50) { return 16; }; + if (scalar_pregrow_val() != 55) { return 17; }; if (tagged_selfref_val() != 51) { return 18; }; + if (tagged_str_payload() != 52) { return 19; }; if (tagged_regex_minrep() != 53) { return 20; }; + if (tagged_realloc_selfref_loop() != 56) { return 21; }; + if (tagged_append_pregrow_val() != 54) { return 22; }; + if (tagged_seq_positions() != 57) { return 23; }; if (tagged_void_variant() != 58) { return 24; }; + return 0; +}; diff --git a/test/wcc/data/r808_arrlit_alias_exact_module/case.ww b/test/wcc/data/r808_arrlit_alias_exact_module/case.ww new file mode 100644 index 00000000..39c8df5f --- /dev/null +++ b/test/wcc/data/r808_arrlit_alias_exact_module/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type row = [2]int; +let g: [2]row = [[1: int, 2: int], [4: int, 5: int]]; +export fn main() i32 = { + if (g[0][0] != 1) { return 1; }; + if (g[1][1] != 5) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r808_arrlit_alias_nested_2lvl/case.ww b/test/wcc/data/r808_arrlit_alias_nested_2lvl/case.ww new file mode 100644 index 00000000..48c13040 --- /dev/null +++ b/test/wcc/data/r808_arrlit_alias_nested_2lvl/case.ww @@ -0,0 +1,8 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +type row = [2]int; +type row2 = row; +let g: [2]row2 = [[1: int, 2: int, 3: int], [4: int, 5: int]]; + +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r808_arrlit_alias_nested_def/case.ww b/test/wcc/data/r808_arrlit_alias_nested_def/case.ww new file mode 100644 index 00000000..27d3a68f --- /dev/null +++ b/test/wcc/data/r808_arrlit_alias_nested_def/case.ww @@ -0,0 +1,7 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +type row = [2]int; +def TAB: [2]row = [[1: int, 2: int, 3: int], [4: int, 5: int]]; + +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r808_arrlit_alias_nested_field/case.ww b/test/wcc/data/r808_arrlit_alias_nested_field/case.ww new file mode 100644 index 00000000..2aed0d14 --- /dev/null +++ b/test/wcc/data/r808_arrlit_alias_nested_field/case.ww @@ -0,0 +1,10 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +type row = [2]int; +type s = struct { f: [2]row }; + +export fn main() i32 = { + let v: s = s{ f = [[1: int, 2: int, 3: int], [4: int, 5: int]] }; + return 0; +}; diff --git a/test/wcc/data/r808_arrlit_alias_nested_local/case.ww b/test/wcc/data/r808_arrlit_alias_nested_local/case.ww new file mode 100644 index 00000000..e3df5680 --- /dev/null +++ b/test/wcc/data/r808_arrlit_alias_nested_local/case.ww @@ -0,0 +1,9 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +type row = [2]int; + +export fn main() i32 = { + let g: [2]row = [[1: int, 2: int, 3: int], [4: int, 5: int]]; + return 0; +}; diff --git a/test/wcc/data/r808_arrlit_alias_nested_module/case.ww b/test/wcc/data/r808_arrlit_alias_nested_module/case.ww new file mode 100644 index 00000000..af5fc67c --- /dev/null +++ b/test/wcc/data/r808_arrlit_alias_nested_module/case.ww @@ -0,0 +1,7 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +type row = [2]int; +let g: [2]row = [[1: int, 2: int, 3: int], [4: int, 5: int]]; + +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r808_arrlit_exact_def/case.ww b/test/wcc/data/r808_arrlit_exact_def/case.ww new file mode 100644 index 00000000..1b2ba351 --- /dev/null +++ b/test/wcc/data/r808_arrlit_exact_def/case.ww @@ -0,0 +1,4 @@ +//ww:run +package main; +def TAB: [3]int = [1, 2, 3]; +export fn main() i32 = { return TAB[2]: i32 - 3; }; diff --git a/test/wcc/data/r808_arrlit_exact_field/case.ww b/test/wcc/data/r808_arrlit_exact_field/case.ww new file mode 100644 index 00000000..6fa49333 --- /dev/null +++ b/test/wcc/data/r808_arrlit_exact_field/case.ww @@ -0,0 +1,4 @@ +//ww:run +package main; +type s = struct { f: [2]int, g: int }; +export fn main() i32 = { let v: s = s{ f = [6, 7], g = 8 }; return v.f[1]: i32 + v.g: i32 - 15; }; diff --git a/test/wcc/data/r808_arrlit_exact_local/case.ww b/test/wcc/data/r808_arrlit_exact_local/case.ww new file mode 100644 index 00000000..549ee578 --- /dev/null +++ b/test/wcc/data/r808_arrlit_exact_local/case.ww @@ -0,0 +1,3 @@ +//ww:run +package main; +export fn main() i32 = { let a: [2]int = [1, 2]; return a[1]: i32 - 2; }; diff --git a/test/wcc/data/r808_arrlit_exact_module/case.ww b/test/wcc/data/r808_arrlit_exact_module/case.ww new file mode 100644 index 00000000..21b2384a --- /dev/null +++ b/test/wcc/data/r808_arrlit_exact_module/case.ww @@ -0,0 +1,4 @@ +//ww:run +package main; +let g: [2]int = [4, 5]; +export fn main() i32 = { return g[1]: i32 - 5; }; diff --git a/test/wcc/data/r808_arrlit_infer_len/case.ww b/test/wcc/data/r808_arrlit_infer_len/case.ww new file mode 100644 index 00000000..b73c5a92 --- /dev/null +++ b/test/wcc/data/r808_arrlit_infer_len/case.ww @@ -0,0 +1,3 @@ +//ww:run +package main; +export fn main() i32 = { let a: [_]int = [10, 20, 30]; return a.len: i32 - 3; }; diff --git a/test/wcc/data/r808_arrlit_nested_field/case.ww b/test/wcc/data/r808_arrlit_nested_field/case.ww new file mode 100644 index 00000000..5bebefc1 --- /dev/null +++ b/test/wcc/data/r808_arrlit_nested_field/case.ww @@ -0,0 +1,9 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +type s = struct { f: [2][2]int }; + +export fn main() i32 = { + let v: s = s{ f = [[1, 2, 3], [4, 5]] }; + return 0; +}; diff --git a/test/wcc/data/r808_arrlit_nested_module/case.ww b/test/wcc/data/r808_arrlit_nested_module/case.ww new file mode 100644 index 00000000..39729ff8 --- /dev/null +++ b/test/wcc/data/r808_arrlit_nested_module/case.ww @@ -0,0 +1,6 @@ +//ww:error c "not assignable" ww "array literal has 3 elements but declared array holds 2" +package main; + +let g: [2][2]int = [[1, 2, 3], [4, 5]]; + +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r808_arrlit_overlong_def/case.ww b/test/wcc/data/r808_arrlit_overlong_def/case.ww new file mode 100644 index 00000000..f57d83f4 --- /dev/null +++ b/test/wcc/data/r808_arrlit_overlong_def/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has 5 elements but declared array holds 3" +package main; +def TAB: [3]int = [1, 2, 3, 4, 5]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r808_arrlit_overlong_field/case.ww b/test/wcc/data/r808_arrlit_overlong_field/case.ww new file mode 100644 index 00000000..2660190b --- /dev/null +++ b/test/wcc/data/r808_arrlit_overlong_field/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has 3 elements but declared array holds 2" +package main; +type s = struct { f: [2]int }; +export fn main() i32 = { let v: s = s{ f = [1, 2, 3] }; return 0; }; diff --git a/test/wcc/data/r808_arrlit_overlong_local/case.ww b/test/wcc/data/r808_arrlit_overlong_local/case.ww new file mode 100644 index 00000000..57f30128 --- /dev/null +++ b/test/wcc/data/r808_arrlit_overlong_local/case.ww @@ -0,0 +1,3 @@ +//ww:error "array literal has 3 elements but declared array holds 2" +package main; +export fn main() i32 = { let a: [2]int = [1, 2, 3]; return 0; }; diff --git a/test/wcc/data/r808_arrlit_overlong_module/case.ww b/test/wcc/data/r808_arrlit_overlong_module/case.ww new file mode 100644 index 00000000..ee87925d --- /dev/null +++ b/test/wcc/data/r808_arrlit_overlong_module/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has 3 elements but declared array holds 2" +package main; +let g: [2]int = [1, 2, 3]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r808_arrlit_overlong_narrow/case.ww b/test/wcc/data/r808_arrlit_overlong_narrow/case.ww new file mode 100644 index 00000000..b32667f8 --- /dev/null +++ b/test/wcc/data/r808_arrlit_overlong_narrow/case.ww @@ -0,0 +1,3 @@ +//ww:error "array literal has 3 elements but declared array holds 2" +package main; +export fn main() i32 = { let a: [2]u8 = [1u8, 2u8, 3u8]; return 0; }; diff --git a/test/wcc/data/r808_arrlit_overlong_repeat/case.ww b/test/wcc/data/r808_arrlit_overlong_repeat/case.ww new file mode 100644 index 00000000..c7c1f3f1 --- /dev/null +++ b/test/wcc/data/r808_arrlit_overlong_repeat/case.ww @@ -0,0 +1,3 @@ +//ww:error "array literal has 3 elements but declared array holds 2" +package main; +export fn main() i32 = { let a: [2]int = [1, 2, 3...]; return 0; }; diff --git a/test/wcc/data/r808_arrlit_repeat_fill/case.ww b/test/wcc/data/r808_arrlit_repeat_fill/case.ww new file mode 100644 index 00000000..7dcb92b7 --- /dev/null +++ b/test/wcc/data/r808_arrlit_repeat_fill/case.ww @@ -0,0 +1,3 @@ +//ww:run +package main; +export fn main() i32 = { let a: [4]int = [9...]; return a[3]: i32 - 9; }; diff --git a/test/wcc/data/r808_arrlit_repeat_partial/case.ww b/test/wcc/data/r808_arrlit_repeat_partial/case.ww new file mode 100644 index 00000000..b458da4d --- /dev/null +++ b/test/wcc/data/r808_arrlit_repeat_partial/case.ww @@ -0,0 +1,3 @@ +//ww:run +package main; +export fn main() i32 = { let a: [4]int = [1, 2...]; return a[3]: i32 - 2; }; diff --git a/test/wcc/data/r809del_delete_range_reject_array/case.ww b/test/wcc/data/r809del_delete_range_reject_array/case.ww new file mode 100644 index 00000000..d77edcce --- /dev/null +++ b/test/wcc/data/r809del_delete_range_reject_array/case.ww @@ -0,0 +1,3 @@ +//ww:error "delete must operate on a slice" +package main; +export fn main() i32 = { let t: [3]i64 = [1, 2, 3]; delete(t[0:2]); return 0; }; diff --git a/test/wcc/data/r809del_delete_range_reject_str/case.ww b/test/wcc/data/r809del_delete_range_reject_str/case.ww new file mode 100644 index 00000000..06776629 --- /dev/null +++ b/test/wcc/data/r809del_delete_range_reject_str/case.ww @@ -0,0 +1,3 @@ +//ww:error "delete must operate on a slice" +package main; +export fn main() i32 = { let s: str = "abc"; delete(s[:]); return 0; }; diff --git a/test/wcc/data/r809del_delete_range_runtime/case.ww b/test/wcc/data/r809del_delete_range_runtime/case.ww new file mode 100644 index 00000000..9fa9951a --- /dev/null +++ b/test/wcc/data/r809del_delete_range_runtime/case.ww @@ -0,0 +1,112 @@ +//ww:run +package main; + +type pair = struct { a: i64, b: i64 }; + +fn full_range() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + delete(xs[:]); return len(xs): i32 + 7; +}; +fn full_explicit() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); + delete(xs[0:3]); return len(xs): i32 + 8; +}; +fn full_twice() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); + delete(xs[:]); delete(xs[:]); return len(xs): i32 + 9; +}; +fn head() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); + delete(xs[:2]); return xs[0]: i32 + len(xs)*10; +}; +fn mid() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); append(xs, 4); append(xs, 5); + delete(xs[1:3]); return (xs[0]*100 + xs[1]*10 + xs[2]): i32 + len(xs); +}; +fn tail_open() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); + delete(xs[1:]); return xs[0]: i32 + len(xs)*10; +}; +fn empty_range() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); delete(xs[1:1]); + return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn end_boundary() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); + delete(xs[len(xs):len(xs)]); return (xs[0]*10 + xs[1]): i32 + len(xs)*100; +}; +fn empty_explicit() i32 = { + let xs: []i64 = []; delete(xs[0:0]); return len(xs): i32 + 31; +}; +fn single_via_range() i32 = { + let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); delete(xs[1:2]); + let ys: []i64 = []; append(ys, 7); append(ys, 11); append(ys, 13); delete(ys[1]); + if (len(xs) != len(ys)) { return 99; }; + if (xs[0] != ys[0]) { return 98; }; if (xs[1] != ys[1]) { return 97; }; + return 42; +}; +fn cap_preserved() i32 = { + let hb: [8]u8; hb[0] = 4u8; hb[1] = 6u8; hb[2] = 9u8; + let xs: []u8; xs.ptr = &hb[0]; xs.len = 3; xs.cap = 8; + delete(xs[:]); return (xs.cap*10 + xs.len): i32; +}; +fn u8_narrow() i32 = { + let xs: []u8 = []; append(xs, 1u8); append(xs, 2u8); append(xs, 3u8); append(xs, 4u8); append(xs, 5u8); + delete(xs[1:4]); return (xs[0]*10u8 + xs[1]): i32 + len(xs)*100; +}; +fn u16_narrow() i32 = { + let xs: []u16 = []; append(xs, 1u16); append(xs, 2u16); append(xs, 3u16); append(xs, 4u16); + delete(xs[1:3]); return (xs[0] + xs[1]): i32 + len(xs)*10; +}; +fn i32_narrow() i32 = { + let xs: []i32 = []; append(xs, 10i32); append(xs, 20i32); append(xs, 30i32); append(xs, 40i32); + delete(xs[2:4]); return xs[0] + xs[1] + len(xs)*10; +}; +fn struct16() i32 = { + let xs: []pair = []; + append(xs, pair { a = 1, b = 2 }); append(xs, pair { a = 3, b = 4 }); append(xs, pair { a = 5, b = 6 }); + delete(xs[1:2]); return (xs[0].a*10 + xs[1].b): i32 + len(xs)*100; +}; +fn str_elem() i32 = { + let xs: []str = []; let a: str = "abc"; let b: str = "de"; let g: str = "fghi"; let h: str = "jklmn"; + append(xs, a); append(xs, b); append(xs, g); append(xs, h); delete(xs[1:3]); + return (xs[0].len*10 + xs[1].len): i32 + len(xs)*100; +}; +fn regex_exact() i32 = { + let jump_idxs: [][]size = []; let lvl0: []size = []; + let a: size = 3; let b: size = 9; append(lvl0, a); append(lvl0, b); append(jump_idxs, lvl0); + let group_level: size = 0; delete(jump_idxs[group_level][:]); + return len(jump_idxs[0]): i32 + len(jump_idxs): i32 * 10; +}; +fn clear(p: *[]u8) void = { delete((*p)[:]); }; +fn deref_shape() i32 = { + let xs: []u8 = []; append(xs, 5u8); append(xs, 6u8); clear(&xs); + return len(xs): i32 + 17; +}; +let trace: i64 = 0; +fn lof() size = { trace = trace*10 + 1; return 1; }; +fn hif() size = { trace = trace*10 + 2; return 3; }; +fn order_of_eval() i32 = { + trace = 0; let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); append(xs, 4); + delete(xs[lof():hif()]); if (trace != 12) { return 90; }; + return (xs[0]*10 + xs[1]): i32 + len(xs); +}; +fn poke(p: *[]i64) size = { (*p)[0] = 9; return 1; }; +fn alias_visible() i32 = { + let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); + delete(xs[poke(&xs):]); return xs[0]: i32 * 10 + len(xs); +}; + +export fn main() i32 = { + if (full_range() != 7) { return 1; }; if (full_explicit() != 8) { return 2; }; + if (full_twice() != 9) { return 3; }; if (head() != 13) { return 4; }; + if (mid() != 148) { return 5; }; if (tail_open() != 11) { return 6; }; + if (empty_range() != 23) { return 7; }; if (end_boundary() != 212) { return 8; }; + if (empty_explicit() != 31) { return 9; }; if (single_via_range() != 42) { return 10; }; + if (cap_preserved() != 80) { return 11; }; if (u8_narrow() != 215) { return 12; }; + if (u16_narrow() != 25) { return 13; }; if (i32_narrow() != 50) { return 14; }; + if (struct16() != 216) { return 15; }; if (str_elem() != 235) { return 16; }; + if (regex_exact() != 10) { return 17; }; if (deref_shape() != 17) { return 18; }; + if (order_of_eval() != 16) { return 19; }; if (alias_visible() != 91) { return 20; }; + return 0; +}; diff --git a/test/wcc/data/r809idx_alias_lit/case.ww b/test/wcc/data/r809idx_alias_lit/case.ww new file mode 100644 index 00000000..023c8abf --- /dev/null +++ b/test/wcc/data/r809idx_alias_lit/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 34 +package main; +type pt = struct { x: u64, y: u64 }; +type qt = pt; +export fn main() i32 = { let a: [3]pt; a[1] = qt { x = 3u64, y = 4u64 }; return (a[1].x * 10u64 + a[1].y): i32; }; diff --git a/test/wcc/data/r809idx_all_default/case.ww b/test/wcc/data/r809idx_all_default/case.ww new file mode 100644 index 00000000..57c4c63d --- /dev/null +++ b/test/wcc/data/r809idx_all_default/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type pt = struct { x: u64, y: u64 }; +export fn main() i32 = { let a: [3]pt; a[1].x = 9u64; a[1].y = 9u64; a[1] = pt {}; return (a[1].x * 10u64 + a[1].y + 7u64): i32; }; diff --git a/test/wcc/data/r809idx_arr_elem/case.ww b/test/wcc/data/r809idx_arr_elem/case.ww new file mode 100644 index 00000000..511d8061 --- /dev/null +++ b/test/wcc/data/r809idx_arr_elem/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 34 +package main; +type pt = struct { x: u64, y: u64 }; +export fn main() i32 = { let a: [3]pt; a[1] = pt { x = 3u64, y = 4u64 }; return (a[1].x * 10u64 + a[1].y): i32; }; diff --git a/test/wcc/data/r809idx_arr_neighbor/case.ww b/test/wcc/data/r809idx_arr_neighbor/case.ww new file mode 100644 index 00000000..d2bbc30b --- /dev/null +++ b/test/wcc/data/r809idx_arr_neighbor/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 82 +package main; +type pt = struct { x: u64, y: u64 }; +export fn main() i32 = { let a: [3]pt; a[0].x = 7u64; a[2].y = 9u64; a[1] = pt { x = 3u64, y = 4u64 }; return (a[0].x * 10u64 + a[2].y + a[1].x): i32; }; diff --git a/test/wcc/data/r809idx_arr_var_idx/case.ww b/test/wcc/data/r809idx_arr_var_idx/case.ww new file mode 100644 index 00000000..eb4f55f3 --- /dev/null +++ b/test/wcc/data/r809idx_arr_var_idx/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 34 +package main; +type pt = struct { x: u64, y: u64 }; +fn geti() size = { return 1: size; }; +export fn main() i32 = { let a: [3]pt; a[geti()] = pt { x = 3u64, y = 4u64 }; return (a[1].x * 10u64 + a[1].y): i32; }; diff --git a/test/wcc/data/r809idx_arrlit_deref_loud/case.ww b/test/wcc/data/r809idx_arrlit_deref_loud/case.ww new file mode 100644 index 00000000..e1d84bf9 --- /dev/null +++ b/test/wcc/data/r809idx_arrlit_deref_loud/case.ww @@ -0,0 +1,3 @@ +//ww:error "array-literal store at assignment unwired (task #32)" +package main; +export fn main() i32 = { let a: [2]u64; let p: *[2]u64 = &a; *p = [3u64, 4u64]; return 0; }; diff --git a/test/wcc/data/r809idx_arrlit_idx_loud/case.ww b/test/wcc/data/r809idx_arrlit_idx_loud/case.ww new file mode 100644 index 00000000..23093033 --- /dev/null +++ b/test/wcc/data/r809idx_arrlit_idx_loud/case.ww @@ -0,0 +1,3 @@ +//ww:error "array-literal store at assignment unwired (task #32)" +package main; +export fn main() i32 = { let a: [2][2]u64; a[1] = [3u64, 4u64]; return 0; }; diff --git a/test/wcc/data/r809idx_callee_capture/case.ww b/test/wcc/data/r809idx_callee_capture/case.ww new file mode 100644 index 00000000..0bbfb077 --- /dev/null +++ b/test/wcc/data/r809idx_callee_capture/case.ww @@ -0,0 +1,19 @@ +//ww:run-exit 197 +package main; +import strings; +type capture = struct { content: str, start: size, start_bytesize: size, end: size, end_bytesize: size }; +type thr = struct { pc: size, caps: []capture }; +fn store(ts: *[]thr, i: size, idx: size) void = { (*ts)[i].caps[idx] = capture { content = "grp", start = 3: size, start_bytesize = 4: size, end = 60: size, end_bytesize = 61: size }; }; +export fn main() i32 = { + let cs: []capture = []; + append(cs, capture { content = "a", start = 1: size, start_bytesize = 1: size, end = 1: size, end_bytesize = 1: size }); + append(cs, capture { content = "b", start = 2: size, start_bytesize = 2: size, end = 2: size, end_bytesize = 2: size }); + append(cs, capture { content = "c", start = 9: size, start_bytesize = 9: size, end = 9: size, end_bytesize = 9: size }); + let ts: []thr = []; append(ts, thr { pc = 5: size, caps = cs }); store(&ts, 0: size, 1: size); + if (strings.compare(ts[0].caps[1].content, "grp") != 0) { return 250; }; + if (len(ts[0].caps[1].content) != 3) { return 249; }; + if (ts[0].caps[0].end != 1 || ts[0].caps[2].start != 9) { return 248; }; + if (strings.compare(ts[0].caps[2].content, "c") != 0) { return 247; }; + let acc = ts[0].caps[1].start + ts[0].caps[1].start_bytesize + ts[0].caps[1].end + ts[0].caps[1].end_bytesize + ts[0].caps[1].start * 23; + return acc: i32; +}; diff --git a/test/wcc/data/r809idx_deref_lit/case.ww b/test/wcc/data/r809idx_deref_lit/case.ww new file mode 100644 index 00000000..b9573a64 --- /dev/null +++ b/test/wcc/data/r809idx_deref_lit/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 34 +package main; +type pt = struct { x: u64, y: u64 }; +export fn main() i32 = { let a: pt = pt { x = 1u64, y = 2u64 }; let p: *pt = &a; *p = pt { x = 3u64, y = 4u64 }; return (a.x * 10u64 + a.y): i32; }; diff --git a/test/wcc/data/r809idx_derefspine_slice/case.ww b/test/wcc/data/r809idx_derefspine_slice/case.ww new file mode 100644 index 00000000..0aa05556 --- /dev/null +++ b/test/wcc/data/r809idx_derefspine_slice/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 128 +package main; +type capture = struct { content: str, start: size, start_bytesize: size, end: size, end_bytesize: size }; +type thr = struct { pc: size, caps: []capture }; +export fn main() i32 = { + let cs: []capture = []; + append(cs, capture { content = "a", start = 1: size, start_bytesize = 1: size, end = 1: size, end_bytesize = 1: size }); + append(cs, capture { content = "b", start = 2: size, start_bytesize = 2: size, end = 2: size, end_bytesize = 2: size }); + let ts: []thr = []; append(ts, thr { pc = 5: size, caps = cs }); let tsp = &ts; + (*tsp)[0].caps[1] = capture { content = "grp", start = 3: size, start_bytesize = 4: size, end = 60: size, end_bytesize = 61: size }; + if (ts[0].caps[0].start != 1) { return 250; }; + return (ts[0].caps[1].start + ts[0].caps[1].start_bytesize + ts[0].caps[1].end + ts[0].caps[1].end_bytesize): i32; +}; diff --git a/test/wcc/data/r809idx_dotidx_field/case.ww b/test/wcc/data/r809idx_dotidx_field/case.ww new file mode 100644 index 00000000..264e96b8 --- /dev/null +++ b/test/wcc/data/r809idx_dotidx_field/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 34 +package main; +type pt = struct { x: u64, y: u64 }; +type box = struct { p: pt, t: u64 }; +export fn main() i32 = { let a: [2]box; a[1].p.x = 9u64; a[1].p.y = 9u64; if (a[1].p.x != 9u64 || a[1].p.y != 9u64) { return 250; }; a[1].p = pt { x = 3u64, y = 4u64 }; return (a[1].p.x * 10u64 + a[1].p.y): i32; }; diff --git a/test/wcc/data/r809idx_fieldplace_slice/case.ww b/test/wcc/data/r809idx_fieldplace_slice/case.ww new file mode 100644 index 00000000..e8d489c3 --- /dev/null +++ b/test/wcc/data/r809idx_fieldplace_slice/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 128 +package main; +type capture = struct { content: str, start: size, start_bytesize: size, end: size, end_bytesize: size }; +type thr = struct { pc: size, caps: []capture }; +export fn main() i32 = { + let cs: []capture = []; + append(cs, capture { content = "a", start = 1: size, start_bytesize = 1: size, end = 1: size, end_bytesize = 1: size }); + append(cs, capture { content = "b", start = 2: size, start_bytesize = 2: size, end = 2: size, end_bytesize = 2: size }); + let ts: []thr = []; append(ts, thr { pc = 5: size, caps = cs }); + ts[0].caps[1] = capture { content = "grp", start = 3: size, start_bytesize = 4: size, end = 60: size, end_bytesize = 61: size }; + if (ts[0].caps[0].start != 1) { return 250; }; + return (ts[0].caps[1].start + ts[0].caps[1].start_bytesize + ts[0].caps[1].end + ts[0].caps[1].end_bytesize): i32; +}; diff --git a/test/wcc/data/r809idx_global_arr/case.ww b/test/wcc/data/r809idx_global_arr/case.ww new file mode 100644 index 00000000..05d46c70 --- /dev/null +++ b/test/wcc/data/r809idx_global_arr/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 34 +package main; +type pt = struct { x: u64, y: u64 }; +let g: [3]pt; +export fn main() i32 = { g[1] = pt { x = 3u64, y = 4u64 }; return (g[1].x * 10u64 + g[1].y): i32; }; diff --git a/test/wcc/data/r809idx_nested_lit/case.ww b/test/wcc/data/r809idx_nested_lit/case.ww new file mode 100644 index 00000000..f3db9216 --- /dev/null +++ b/test/wcc/data/r809idx_nested_lit/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 45 +package main; +type inner = struct { a: u64, b: u64 }; +type outer = struct { in: inner, t: u64 }; +export fn main() i32 = { let a: [2]outer; a[1] = outer { in = inner { a = 3u64, b = 4u64 }, t = 5u64 }; return (a[1].in.b * 10u64 + a[1].t): i32; }; diff --git a/test/wcc/data/r809idx_partial_ellipsis/case.ww b/test/wcc/data/r809idx_partial_ellipsis/case.ww new file mode 100644 index 00000000..b789b0d9 --- /dev/null +++ b/test/wcc/data/r809idx_partial_ellipsis/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 30 +package main; +type pt = struct { x: u64, y: u64 }; +export fn main() i32 = { let a: [3]pt; a[1].x = 9u64; a[1].y = 9u64; a[1] = pt { x = 3u64, ... }; return (a[1].x * 10u64 + a[1].y): i32; }; diff --git a/test/wcc/data/r809idx_slice_elem_str/case.ww b/test/wcc/data/r809idx_slice_elem_str/case.ww new file mode 100644 index 00000000..eb2d087d --- /dev/null +++ b/test/wcc/data/r809idx_slice_elem_str/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 128 +package main; +type capture = struct { content: str, start: size, start_bytesize: size, end: size, end_bytesize: size }; +export fn main() i32 = { + let cs: []capture = []; + append(cs, capture { content = "a", start = 1: size, start_bytesize = 1: size, end = 1: size, end_bytesize = 1: size }); + append(cs, capture { content = "b", start = 2: size, start_bytesize = 2: size, end = 2: size, end_bytesize = 2: size }); + cs[1] = capture { content = "grp", start = 3: size, start_bytesize = 4: size, end = 60: size, end_bytesize = 61: size }; + if (cs[0].start != 1) { return 250; }; + return (cs[1].start + cs[1].start_bytesize + cs[1].end + cs[1].end_bytesize): i32; +}; diff --git a/test/wcc/data/r809idx_small_elem/case.ww b/test/wcc/data/r809idx_small_elem/case.ww new file mode 100644 index 00000000..c3482ac6 --- /dev/null +++ b/test/wcc/data/r809idx_small_elem/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 52 +package main; +type one = struct { v: u64 }; +export fn main() i32 = { let a: [2]one; a[0].v = 2u64; a[1] = one { v = 5u64 }; return (a[1].v * 10u64 + a[0].v): i32; }; diff --git a/test/wcc/data/r809idx_tuple_elem/case.ww b/test/wcc/data/r809idx_tuple_elem/case.ww new file mode 100644 index 00000000..8bde06f5 --- /dev/null +++ b/test/wcc/data/r809idx_tuple_elem/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 34 +package main; +export fn main() i32 = { let a: [2](u64, u64); a[1] = (3u64, 4u64); let t: (u64, u64) = a[1]; return (t.0 * 10u64 + t.1): i32; }; diff --git a/test/wcc/data/r811_annotated_pin/case.ww b/test/wcc/data/r811_annotated_pin/case.ww new file mode 100644 index 00000000..2a4cce52 --- /dev/null +++ b/test/wcc/data/r811_annotated_pin/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +type rep = struct { id: size, min: (void | size) }; +export fn main() i32 = { let r: rep = rep { id = 0: size, min = void }; r.id = 1; r.min = 2: size; let acc = 0: size; acc += r.id; if (r.min is size) { acc += r.min as size; }; return acc: i32; }; diff --git a/test/wcc/data/r811_boxed_prebound/case.ww b/test/wcc/data/r811_boxed_prebound/case.ww new file mode 100644 index 00000000..695e6917 --- /dev/null +++ b/test/wcc/data/r811_boxed_prebound/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 103 +package main; +type inst_lit = rune; +type rep3 = struct { id: size, min: (void | size), max: (void | size) }; +type inst = (inst_lit | rep3); +export fn main() i32 = { + let r = rep3 { id = 0: size, min = void, max = void }; r.id = 1; r.min = 2: size; r.max = 5: size; + let pre = 0: size; if (r.min is size) { pre += r.min as size; }; if (pre != 2) { return 200 + pre: i32; }; + let v: inst = r; let acc = 0: size; + match (v) { case let ir: rep3 => { acc += ir.id; if (ir.min is size) { acc += ir.min as size; }; if (ir.max is size && ir.max as size == 5) { acc += 100; }; }; case let l: inst_lit => { acc += 1; }; }; + return acc: i32; +}; diff --git a/test/wcc/data/r811_ellipsis_fill/case.ww b/test/wcc/data/r811_ellipsis_fill/case.ww new file mode 100644 index 00000000..87b670ab --- /dev/null +++ b/test/wcc/data/r811_ellipsis_fill/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 40 +package main; +type pt = struct { x: size, y: size }; +export fn main() i32 = { let p = pt { x = 4: size, ... }; return (p.x * 10 + p.y): i32; }; diff --git a/test/wcc/data/r811_nested_read/case.ww b/test/wcc/data/r811_nested_read/case.ww new file mode 100644 index 00000000..2401ed6c --- /dev/null +++ b/test/wcc/data/r811_nested_read/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +type in_ = struct { g: size }; +type out_ = struct { f: in_ }; +export fn main() i32 = { let s = out_ { f = in_ { g = 6: size } }; return (s.f.g * 7): i32; }; diff --git a/test/wcc/data/r811_paren_form/case.ww b/test/wcc/data/r811_paren_form/case.ww new file mode 100644 index 00000000..aa103498 --- /dev/null +++ b/test/wcc/data/r811_paren_form/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type pt = struct { x: size, y: size }; +export fn main() i32 = { let p = (pt { x = 4: size, y = 2: size }); return (p.x * 10 + p.y): i32; }; diff --git a/test/wcc/data/r811_plain_read/case.ww b/test/wcc/data/r811_plain_read/case.ww new file mode 100644 index 00000000..32f537c3 --- /dev/null +++ b/test/wcc/data/r811_plain_read/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 42 +package main; +type pt = struct { x: size, y: size }; +export fn main() i32 = { let p = pt { x = 4: size, y = 2: size }; return (p.x * 10 + p.y): i32; }; diff --git a/test/wcc/data/r811_tagged_assign/case.ww b/test/wcc/data/r811_tagged_assign/case.ww new file mode 100644 index 00000000..a55191bc --- /dev/null +++ b/test/wcc/data/r811_tagged_assign/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +type rep = struct { id: size, min: (void | size) }; +export fn main() i32 = { let r = rep { id = 0: size, min = void }; r.id = 1; r.min = 2: size; let acc = 0: size; acc += r.id; if (r.min is size) { acc += r.min as size; }; return acc: i32; }; diff --git a/test/wcc/data/r811_tagged_read_is_as/case.ww b/test/wcc/data/r811_tagged_read_is_as/case.ww new file mode 100644 index 00000000..73276944 --- /dev/null +++ b/test/wcc/data/r811_tagged_read_is_as/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +type rep = struct { id: size, min: (void | size) }; +export fn main() i32 = { let r = rep { id = 1: size, min = 5: size }; let acc = 0: size; acc += r.id; if (r.min is size) { acc += r.min as size; }; return acc: i32; }; diff --git a/test/wcc/data/r811_tagged_str_field/case.ww b/test/wcc/data/r811_tagged_str_field/case.ww new file mode 100644 index 00000000..0290e476 --- /dev/null +++ b/test/wcc/data/r811_tagged_str_field/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 14 +package main; +type rep = struct { id: size, min: (void | size), name: (void | str) }; +export fn main() i32 = { let b = rep { id = 0: size, min = void, name = void }; b.id = 2; b.min = 9: size; b.name = "hey"; let acc = 0: size; acc += b.id; if (b.min is size) { acc += b.min as size; }; if (b.name is str) { acc += (b.name as str).len: size; }; return acc: i32; }; diff --git a/test/wcc/data/r811_tagged_void_read/case.ww b/test/wcc/data/r811_tagged_void_read/case.ww new file mode 100644 index 00000000..37ced53e --- /dev/null +++ b/test/wcc/data/r811_tagged_void_read/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type rep = struct { id: size, min: (void | size) }; +export fn main() i32 = { let r = rep { id = 0: size, min = void }; let acc = 0: size; if (r.min is void) { acc += 7; }; if (r.min is size) { acc += r.min as size; }; return acc: i32; }; diff --git a/test/wcc/data/r812_alias_named_assign/case.ww b/test/wcc/data/r812_alias_named_assign/case.ww new file mode 100644 index 00000000..1fe63977 --- /dev/null +++ b/test/wcc/data/r812_alias_named_assign/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +type st = struct { a: size, b: size }; +type row = st; +export fn main() i32 = { let a: row; a.a = 4; a.b = 9; let b: row; b.a = 0; b.b = 0; b = a; if (b.a != 4) { return 1; }; if (b.b != 9) { return 2; }; return 0; }; diff --git a/test/wcc/data/r812_alias_twolevel_assign/case.ww b/test/wcc/data/r812_alias_twolevel_assign/case.ww new file mode 100644 index 00000000..38ae386d --- /dev/null +++ b/test/wcc/data/r812_alias_twolevel_assign/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +type ali = base; +type base = struct { a: size, b: size, c: size }; +export fn main() i32 = { let a: ali; a.a = 4; a.b = 9; a.c = 13; let b: ali; b.a = 0; b.b = 0; b.c = 0; b = a; if (b.a != 4) { return 1; }; if (b.b != 9) { return 2; }; if (b.c != 13) { return 3; }; return 0; }; diff --git a/test/wcc/data/r812_arrelem_roundtrip/case.ww b/test/wcc/data/r812_arrelem_roundtrip/case.ww new file mode 100644 index 00000000..a5b4d7b0 --- /dev/null +++ b/test/wcc/data/r812_arrelem_roundtrip/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 15 +package main; +type pt = struct { x: size, y: size, z: size }; +export fn main() i32 = { let a: [2]pt = [pt { x = 0: size, y = 0: size, z = 0: size }, pt { x = 0: size, y = 0: size, z = 0: size }]; let b: pt = pt { x = 4: size, y = 5: size, z = 6: size }; a[1] = b; if (a[0].x != 0) { return 99; }; let cc: pt = pt { x = 0: size, y = 0: size, z = 0: size }; cc = a[1]; return (cc.x + cc.y + cc.z): i32; }; diff --git a/test/wcc/data/r812_assign_16b/case.ww b/test/wcc/data/r812_assign_16b/case.ww new file mode 100644 index 00000000..3f9eb13f --- /dev/null +++ b/test/wcc/data/r812_assign_16b/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 39 +package main; +type p2 = struct { x: size, y: size }; +export fn main() i32 = { let a: p2 = p2 { x = 3: size, y = 9: size }; let b: p2 = p2 { x = 0: size, y = 0: size }; b = a; return (b.x * 10 + b.y): i32; }; diff --git a/test/wcc/data/r812_assign_24b_plain/case.ww b/test/wcc/data/r812_assign_24b_plain/case.ww new file mode 100644 index 00000000..a588b9ac --- /dev/null +++ b/test/wcc/data/r812_assign_24b_plain/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +type st = struct { id: size, x: size, y: size }; +export fn main() i32 = { let a: st = st { id = 1: size, x = 2: size, y = 3: size }; let b: st = st { id = 0: size, x = 0: size, y = 0: size }; b = a; return (b.id + b.x + b.y): i32; }; diff --git a/test/wcc/data/r812_assign_48b/case.ww b/test/wcc/data/r812_assign_48b/case.ww new file mode 100644 index 00000000..d0694253 --- /dev/null +++ b/test/wcc/data/r812_assign_48b/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 21 +package main; +type big = struct { a: size, b: size, c: size, d: size, e: size, f: size }; +export fn main() i32 = { let x: big = big { a = 1: size, b = 2: size, c = 3: size, d = 4: size, e = 5: size, f = 6: size }; let y: big = big { a = 0: size, b = 0: size, c = 0: size, d = 0: size, e = 0: size, f = 0: size }; y = x; return (y.a + y.b + y.c + y.d + y.e + y.f): i32; }; diff --git a/test/wcc/data/r812_assign_deref/case.ww b/test/wcc/data/r812_assign_deref/case.ww new file mode 100644 index 00000000..7583352a --- /dev/null +++ b/test/wcc/data/r812_assign_deref/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 27 +package main; +type pt = struct { x: size, y: size, z: size }; +export fn main() i32 = { let guard1: size = 111: size; let d: pt = pt { x = 0: size, y = 0: size, z = 0: size }; let guard2: size = 222: size; let s: pt = pt { x = 8: size, y = 9: size, z = 10: size }; let p: *pt = &d; *p = s; if (guard1 != 111) { return 98; }; if (guard2 != 222) { return 97; }; return (d.x + d.y + d.z): i32; }; diff --git a/test/wcc/data/r812_assign_dot_source/case.ww b/test/wcc/data/r812_assign_dot_source/case.ww new file mode 100644 index 00000000..01832e3d --- /dev/null +++ b/test/wcc/data/r812_assign_dot_source/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 6 +package main; +type inner = struct { x: size, y: size, z: size }; +type outer = struct { tag: size, i: inner }; +export fn main() i32 = { let o: outer = outer { tag = 1: size, i = inner { x = 2: size, y = 3: size, z = 4: size } }; let b: inner = inner { x = 0: size, y = 0: size, z = 0: size }; b = o.i; return (b.x + b.z): i32; }; diff --git a/test/wcc/data/r812_assign_global/case.ww b/test/wcc/data/r812_assign_global/case.ww new file mode 100644 index 00000000..154acc69 --- /dev/null +++ b/test/wcc/data/r812_assign_global/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 36 +package main; +type pt = struct { x: size, y: size, z: size }; +let g: pt = pt { x = 0: size, y = 0: size, z = 0: size }; +export fn main() i32 = { let a: pt = pt { x = 11: size, y = 12: size, z = 13: size }; g = a; if (g.z != 13) { return 99; }; let b: pt = pt { x = 0: size, y = 0: size, z = 0: size }; b = g; return (b.x + b.y + b.z): i32; }; diff --git a/test/wcc/data/r812_assign_match_bind/case.ww b/test/wcc/data/r812_assign_match_bind/case.ww new file mode 100644 index 00000000..fa2b5b14 --- /dev/null +++ b/test/wcc/data/r812_assign_match_bind/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +type st = struct { id: size, m: (void | size) }; +type un = (st | void); +export fn main() i32 = { let src: un = st { id = 6: size, m = 8: size }; let dst: st = st { id = 0: size, m = void }; match (src) { case let s: st => { if (!(s.m is size)) { return 1; }; dst = s; }; case void => { return 2; }; }; if (dst.id != 6) { return 3; }; if (!(dst.m is size)) { return 4; }; if (dst.m as size != 8) { return 5; }; return 0; }; diff --git a/test/wcc/data/r812_assign_nested/case.ww b/test/wcc/data/r812_assign_nested/case.ww new file mode 100644 index 00000000..e6cdf525 --- /dev/null +++ b/test/wcc/data/r812_assign_nested/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 6 +package main; +type inner = struct { x: size, y: size }; +type outer = struct { tag: size, i: inner }; +export fn main() i32 = { let a: outer = outer { tag = 1: size, i = inner { x = 2: size, y = 3: size } }; let b: outer = outer { tag = 0: size, i = inner { x = 0: size, y = 0: size } }; b = a; return (b.tag + b.i.x + b.i.y): i32; }; diff --git a/test/wcc/data/r812_assign_odd_12b/case.ww b/test/wcc/data/r812_assign_odd_12b/case.ww new file mode 100644 index 00000000..2d49a498 --- /dev/null +++ b/test/wcc/data/r812_assign_odd_12b/case.ww @@ -0,0 +1,4 @@ +//ww:run +package main; +type tri = struct { a: u32, b: u32, c: u32 }; +export fn main() i32 = { let x: tri = tri { a = 7: u32, b = 8: u32, c = 9: u32 }; let y: tri = tri { a = 0: u32, b = 0: u32, c = 0: u32 }; y = x; if (y.a != 7) { return 1; }; if (y.b != 8) { return 2; }; if (y.c != 9) { return 3; }; return 0; }; diff --git a/test/wcc/data/r812_assign_str_field/case.ww b/test/wcc/data/r812_assign_str_field/case.ww new file mode 100644 index 00000000..e0d9e4d9 --- /dev/null +++ b/test/wcc/data/r812_assign_str_field/case.ww @@ -0,0 +1,4 @@ +//ww:run +package main; +type named = struct { id: size, name: str }; +export fn main() i32 = { let a: named = named { id = 7: size, name = "hello" }; let b: named = named { id = 0: size, name = "" }; b = a; if (b.id != 7) { return 1; }; if (b.name.len != 5) { return 2; }; return 0; }; diff --git a/test/wcc/data/r812_assign_tuple/case.ww b/test/wcc/data/r812_assign_tuple/case.ww new file mode 100644 index 00000000..52b19f5d --- /dev/null +++ b/test/wcc/data/r812_assign_tuple/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 13 +package main; +export fn main() i32 = { let t: (size, size) = (4: size, 9: size); let u: (size, size) = (0: size, 0: size); u = t; return (u.0 + u.1): i32; }; diff --git a/test/wcc/data/r812_global_structlit/case.ww b/test/wcc/data/r812_global_structlit/case.ww new file mode 100644 index 00000000..f63d2f8c --- /dev/null +++ b/test/wcc/data/r812_global_structlit/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 18 +package main; +type pt = struct { x: size, y: size, z: size }; +let g: pt = pt { x = 0: size, y = 0: size, z = 0: size }; +export fn main() i32 = { g = pt { x = 5: size, y = 6: size, z = 7: size }; return (g.x + g.y + g.z): i32; }; diff --git a/test/wcc/data/r812_lit_field_from_ident/case.ww b/test/wcc/data/r812_lit_field_from_ident/case.ww new file mode 100644 index 00000000..ee9df370 --- /dev/null +++ b/test/wcc/data/r812_lit_field_from_ident/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 21 +package main; +type rep = struct { id: size, x: size, y: size }; +type outer = struct { tag: size, r: rep }; +export fn main() i32 = { let r: rep = rep { id = 6: size, x = 7: size, y = 8: size }; let o: outer = outer { tag = 4: size, r = r }; if (o.tag != 4) { return 99; }; return (o.r.id + o.r.x + o.r.y): i32; }; diff --git a/test/wcc/data/r812_neighbor_guard/case.ww b/test/wcc/data/r812_neighbor_guard/case.ww new file mode 100644 index 00000000..00a8cf57 --- /dev/null +++ b/test/wcc/data/r812_neighbor_guard/case.ww @@ -0,0 +1,4 @@ +//ww:run +package main; +type pt = struct { x: size, y: size, z: size }; +export fn main() i32 = { let guard1: size = 111: size; let b: pt = pt { x = 0: size, y = 0: size, z = 0: size }; let guard2: size = 222: size; let a: pt = pt { x = 1: size, y = 2: size, z = 3: size }; b = a; if (guard1 != 111) { return 1; }; if (guard2 != 222) { return 2; }; if (b.x + b.y + b.z != 6) { return 3; }; return 0; }; diff --git a/test/wcc/data/r814_def_2d_first/case.ww b/test/wcc/data/r814_def_2d_first/case.ww new file mode 100644 index 00000000..fe09cfb3 --- /dev/null +++ b/test/wcc/data/r814_def_2d_first/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 1 +package main; +def D: [_][2]int = [[1, 2], [3, 4], [5, 6]]; +export fn main() i32 = { return D[0][0]: i32; }; diff --git a/test/wcc/data/r814_def_2d_last/case.ww b/test/wcc/data/r814_def_2d_last/case.ww new file mode 100644 index 00000000..949eef62 --- /dev/null +++ b/test/wcc/data/r814_def_2d_last/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +def D: [_][2]int = [[1, 2], [3, 4], [5, 6]]; +export fn main() i32 = { return D[2][1]: i32; }; diff --git a/test/wcc/data/r814_def_int_i1/case.ww b/test/wcc/data/r814_def_int_i1/case.ww new file mode 100644 index 00000000..d5ee9563 --- /dev/null +++ b/test/wcc/data/r814_def_int_i1/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 20 +package main; +def TAB: [_]int = [10, 20, 30]; +export fn main() i32 = { return TAB[1]: i32; }; diff --git a/test/wcc/data/r814_def_int_last/case.ww b/test/wcc/data/r814_def_int_last/case.ww new file mode 100644 index 00000000..bb9d5cfb --- /dev/null +++ b/test/wcc/data/r814_def_int_last/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 30 +package main; +def TAB: [_]int = [10, 20, 30]; +export fn main() i32 = { return TAB[2]: i32; }; diff --git a/test/wcc/data/r814_def_one_elem/case.ww b/test/wcc/data/r814_def_one_elem/case.ww new file mode 100644 index 00000000..6a2d04dd --- /dev/null +++ b/test/wcc/data/r814_def_one_elem/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +def A: [_]int = [7]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r814_def_u8_first/case.ww b/test/wcc/data/r814_def_u8_first/case.ww new file mode 100644 index 00000000..53e69a48 --- /dev/null +++ b/test/wcc/data/r814_def_u8_first/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 1 +package main; +def B: [_]u8 = [1u8, 2u8, 3u8, 4u8, 5u8]; +export fn main() i32 = { return B[0]: i32; }; diff --git a/test/wcc/data/r814_def_u8_last/case.ww b/test/wcc/data/r814_def_u8_last/case.ww new file mode 100644 index 00000000..f42317e5 --- /dev/null +++ b/test/wcc/data/r814_def_u8_last/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +def B: [_]u8 = [1u8, 2u8, 3u8, 4u8, 5u8]; +export fn main() i32 = { return B[4]: i32; }; diff --git a/test/wcc/data/r814_nonarray_reject/case.ww b/test/wcc/data/r814_nonarray_reject/case.ww new file mode 100644 index 00000000..06dd7ca5 --- /dev/null +++ b/test/wcc/data/r814_nonarray_reject/case.ww @@ -0,0 +1,4 @@ +//ww:error "[_]T needs an array-literal initialiser" +package main; +def TAB: [_]int = 5; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r815_bare_int/case.ww b/test/wcc/data/r815_bare_int/case.ww new file mode 100644 index 00000000..5ef4885a --- /dev/null +++ b/test/wcc/data/r815_bare_int/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 50 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; let x: int = 42; match (fmt.fprint(vs, x)) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 2) { return 92; }; if (v[0] != 52u8 || v[1] != 50u8) { return 93; }; return 50; }; diff --git a/test/wcc/data/r815_bare_int_neg/case.ww b/test/wcc/data/r815_bare_int_neg/case.ww new file mode 100644 index 00000000..6969d5c0 --- /dev/null +++ b/test/wcc/data/r815_bare_int_neg/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 51 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; let x: int = -7; match (fmt.fprint(vs, x)) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 2) { return 92; }; if (v[0] != 45u8 || v[1] != 55u8) { return 93; }; return 51; }; diff --git a/test/wcc/data/r815_bare_uint/case.ww b/test/wcc/data/r815_bare_uint/case.ww new file mode 100644 index 00000000..ccedab95 --- /dev/null +++ b/test/wcc/data/r815_bare_uint/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 52 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; let x: uint = 42u64: uint; match (fmt.fprint(vs, x)) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 2) { return 92; }; if (v[0] != 52u8 || v[1] != 50u8) { return 93; }; return 52; }; diff --git a/test/wcc/data/r815_int_printf/case.ww b/test/wcc/data/r815_int_printf/case.ww new file mode 100644 index 00000000..e664e963 --- /dev/null +++ b/test/wcc/data/r815_int_printf/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 54 +package main; +import os; +import fmt; +import io; +export fn main() i32 = { let buf: [16]u8; let x: int = 42; let v: str = ""; match (fmt.bsprintf(buf[0:16], "{}", x)) { case let s: str => { v = s; }; case io.error => { return 91; }; }; if (v.len != 2) { return 92; }; if (v[0] != 52u8 || v[1] != 50u8) { return 93; }; return 54; }; diff --git a/test/wcc/data/r815_mixed/case.ww b/test/wcc/data/r815_mixed/case.ww new file mode 100644 index 00000000..17043160 --- /dev/null +++ b/test/wcc/data/r815_mixed/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 57 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; let x: int = 1; match (fmt.fprint(vs, x, 2i64, true)) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 8) { return 92; }; if (v[0] != 49u8 || v[1] != 32u8) { return 93; }; if (v[2] != 50u8 || v[3] != 32u8) { return 94; }; if (v[4] != 116u8 || v[7] != 101u8) { return 95; }; return 57; }; diff --git a/test/wcc/data/r815_uint_highbit/case.ww b/test/wcc/data/r815_uint_highbit/case.ww new file mode 100644 index 00000000..e3f32838 --- /dev/null +++ b/test/wcc/data/r815_uint_highbit/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 53 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; let x: uint = 9223372036854775809u64: uint; match (fmt.fprint(vs, x)) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 19) { return 92; }; if (v[0] != 57u8) { return 93; }; if (v[18] != 57u8) { return 94; }; return 53; }; diff --git a/test/wcc/data/r815_unaffected_i64/case.ww b/test/wcc/data/r815_unaffected_i64/case.ww new file mode 100644 index 00000000..8d401e8b --- /dev/null +++ b/test/wcc/data/r815_unaffected_i64/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 55 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; match (fmt.fprint(vs, 42i64)) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 2) { return 92; }; if (v[0] != 52u8 || v[1] != 50u8) { return 93; }; return 55; }; diff --git a/test/wcc/data/r815_unaffected_str/case.ww b/test/wcc/data/r815_unaffected_str/case.ww new file mode 100644 index 00000000..706cf848 --- /dev/null +++ b/test/wcc/data/r815_unaffected_str/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 56 +package main; +import os; +import fmt; +import io; +import memio; +export fn main() i32 = { let buf: [32]u8; let st: memio.stream = memio.fixed(buf[0:32]); let vs: io.stream = &st.vt; match (fmt.fprint(vs, "hi")) { case size => {}; case io.error => { return 91; }; }; let v: str = memio.string(&st); if (v.len != 2) { return 92; }; if (v[0] != 104u8 || v[1] != 105u8) { return 93; }; return 56; }; diff --git a/test/wcc/data/r816_explicit_len/case.ww b/test/wcc/data/r816_explicit_len/case.ww new file mode 100644 index 00000000..0d3098ba --- /dev/null +++ b/test/wcc/data/r816_explicit_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +def A: [3]int = [10, 20, 30]; +export fn main() i32 = { return A.len: i32; }; diff --git a/test/wcc/data/r816_infer_len/case.ww b/test/wcc/data/r816_infer_len/case.ww new file mode 100644 index 00000000..b456c64e --- /dev/null +++ b/test/wcc/data/r816_infer_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 4 +package main; +def B: [_]int = [1, 2, 3, 4]; +export fn main() i32 = { return B.len: i32; }; diff --git a/test/wcc/data/r816_one_elem/case.ww b/test/wcc/data/r816_one_elem/case.ww new file mode 100644 index 00000000..1171b1e8 --- /dev/null +++ b/test/wcc/data/r816_one_elem/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 1 +package main; +def C: [_]int = [9]; +export fn main() i32 = { return C.len: i32; }; diff --git a/test/wcc/data/r816_sum/case.ww b/test/wcc/data/r816_sum/case.ww new file mode 100644 index 00000000..4c8d28a0 --- /dev/null +++ b/test/wcc/data/r816_sum/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 7 +package main; +def A: [3]int = [10, 20, 30]; +def B: [_]int = [1, 2, 3, 4]; +export fn main() i32 = { return (A.len: i32) + (B.len: i32); }; diff --git a/test/wcc/data/r816_u8_len/case.ww b/test/wcc/data/r816_u8_len/case.ww new file mode 100644 index 00000000..4852a2cf --- /dev/null +++ b/test/wcc/data/r816_u8_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +def D: [_]u8 = [1u8, 2u8, 3u8, 4u8, 5u8]; +export fn main() i32 = { return D.len: i32; }; diff --git a/test/wcc/data/r817_neg_def_cap/case.ww b/test/wcc/data/r817_neg_def_cap/case.ww new file mode 100644 index 00000000..282ce5bc --- /dev/null +++ b/test/wcc/data/r817_neg_def_cap/case.ww @@ -0,0 +1,4 @@ +//ww:error "no field 'cap' on a fixed-size array" +package main; +def A: [3]int = [1, 2, 3]; +export fn main() i32 = { return A.cap: i32; }; diff --git a/test/wcc/data/r817_neg_infer_cap/case.ww b/test/wcc/data/r817_neg_infer_cap/case.ww new file mode 100644 index 00000000..39204015 --- /dev/null +++ b/test/wcc/data/r817_neg_infer_cap/case.ww @@ -0,0 +1,4 @@ +//ww:error "no field 'cap' on a fixed-size array" +package main; +def A: [_]int = [1, 2, 3]; +export fn main() i32 = { return A.cap: i32; }; diff --git a/test/wcc/data/r817_neg_let_global_cap/case.ww b/test/wcc/data/r817_neg_let_global_cap/case.ww new file mode 100644 index 00000000..28cf9d04 --- /dev/null +++ b/test/wcc/data/r817_neg_let_global_cap/case.ww @@ -0,0 +1,4 @@ +//ww:error "no field 'cap' on a fixed-size array" +package main; +let G: [3]int = [1, 2, 3]; +export fn main() i32 = { return G.cap: i32; }; diff --git a/test/wcc/data/r817_neg_local_cap/case.ww b/test/wcc/data/r817_neg_local_cap/case.ww new file mode 100644 index 00000000..24bde0ce --- /dev/null +++ b/test/wcc/data/r817_neg_local_cap/case.ww @@ -0,0 +1,3 @@ +//ww:error "no field 'cap' on a fixed-size array" +package main; +export fn main() i32 = { let a: [3]int = [1, 2, 3]; return a.cap: i32; }; diff --git a/test/wcc/data/r817_pos_def_len/case.ww b/test/wcc/data/r817_pos_def_len/case.ww new file mode 100644 index 00000000..f473177a --- /dev/null +++ b/test/wcc/data/r817_pos_def_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +def A: [_]int = [10, 20, 30]; +export fn main() i32 = { return A.len: i32; }; diff --git a/test/wcc/data/r817_pos_local_len/case.ww b/test/wcc/data/r817_pos_local_len/case.ww new file mode 100644 index 00000000..d27da06b --- /dev/null +++ b/test/wcc/data/r817_pos_local_len/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 3 +package main; +export fn main() i32 = { let a: [3]int = [10, 20, 30]; return a.len: i32; }; diff --git a/test/wcc/data/r817_pos_local_ptr/case.ww b/test/wcc/data/r817_pos_local_ptr/case.ww new file mode 100644 index 00000000..f4229eba --- /dev/null +++ b/test/wcc/data/r817_pos_local_ptr/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 10 +package main; +export fn main() i32 = { let a: [3]int = [10, 20, 30]; let p: *int = a.ptr; return (*p): i32; }; diff --git a/test/wcc/data/r818_def_global_ptr/case.ww b/test/wcc/data/r818_def_global_ptr/case.ww new file mode 100644 index 00000000..dfb86e16 --- /dev/null +++ b/test/wcc/data/r818_def_global_ptr/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 10 +package main; +def A: [3]int = [10, 20, 30]; +export fn main() i32 = { let p: *int = A.ptr; return (*p): i32; }; diff --git a/test/wcc/data/r818_let_global_ptr/case.ww b/test/wcc/data/r818_let_global_ptr/case.ww new file mode 100644 index 00000000..00a4c5e2 --- /dev/null +++ b/test/wcc/data/r818_let_global_ptr/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +let G: [3]int = [5, 6, 7]; +export fn main() i32 = { let p: *int = G.ptr; return (*p): i32; }; diff --git a/test/wcc/data/r818_local_ptr/case.ww b/test/wcc/data/r818_local_ptr/case.ww new file mode 100644 index 00000000..ecd1b8e7 --- /dev/null +++ b/test/wcc/data/r818_local_ptr/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 3 +package main; +export fn main() i32 = { let a: [3]int = [1, 2, 3]; let p: *int = a.ptr; return p[2]: i32; }; diff --git a/test/wcc/data/r819_def_str_content/case.ww b/test/wcc/data/r819_def_str_content/case.ww new file mode 100644 index 00000000..d1d4aefc --- /dev/null +++ b/test/wcc/data/r819_def_str_content/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 99 +package main; +def C: [2]str = ["ab", "cde"]; +export fn main() i32 = { return C[1][0]: i32; }; diff --git a/test/wcc/data/r819_def_str_elem0/case.ww b/test/wcc/data/r819_def_str_elem0/case.ww new file mode 100644 index 00000000..c7ca6233 --- /dev/null +++ b/test/wcc/data/r819_def_str_elem0/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 2 +package main; +def C: [2]str = ["ab", "cde"]; +export fn main() i32 = { return C[0].len: i32; }; diff --git a/test/wcc/data/r819_def_str_elem1/case.ww b/test/wcc/data/r819_def_str_elem1/case.ww new file mode 100644 index 00000000..a2df6d00 --- /dev/null +++ b/test/wcc/data/r819_def_str_elem1/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +def C: [2]str = ["ab", "cde"]; +export fn main() i32 = { return C[1].len: i32; }; diff --git a/test/wcc/data/r819_def_str_len/case.ww b/test/wcc/data/r819_def_str_len/case.ww new file mode 100644 index 00000000..b89841c6 --- /dev/null +++ b/test/wcc/data/r819_def_str_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 2 +package main; +def C: [2]str = ["ab", "cde"]; +export fn main() i32 = { return C.len: i32; }; diff --git a/test/wcc/data/r819_def_str_multi/case.ww b/test/wcc/data/r819_def_str_multi/case.ww new file mode 100644 index 00000000..48623ee3 --- /dev/null +++ b/test/wcc/data/r819_def_str_multi/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +def C: [3]str = ["a", "bb", "ccc"]; +export fn main() i32 = { return C[2].len: i32; }; diff --git a/test/wcc/data/r819_def_str_varbind/case.ww b/test/wcc/data/r819_def_str_varbind/case.ww new file mode 100644 index 00000000..59a60677 --- /dev/null +++ b/test/wcc/data/r819_def_str_varbind/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +def C: [3]str = ["x", "yy", "zzz"]; +export fn main() i32 = { let s: str = C[2]; return s.len: i32; }; diff --git a/test/wcc/data/r819_let_str_elem1/case.ww b/test/wcc/data/r819_let_str_elem1/case.ww new file mode 100644 index 00000000..cb211ed5 --- /dev/null +++ b/test/wcc/data/r819_let_str_elem1/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +let C: [2]str = ["ab", "cde"]; +export fn main() i32 = { return C[1].len: i32; }; diff --git a/test/wcc/data/r81_deflen_explicit/case.ww b/test/wcc/data/r81_deflen_explicit/case.ww new file mode 100644 index 00000000..edc8311c --- /dev/null +++ b/test/wcc/data/r81_deflen_explicit/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +def A:[3]int=[10,20,30]; +export fn main() i32 = { return A.len:i32; }; diff --git a/test/wcc/data/r81_deflen_infer/case.ww b/test/wcc/data/r81_deflen_infer/case.ww new file mode 100644 index 00000000..9b9586ad --- /dev/null +++ b/test/wcc/data/r81_deflen_infer/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 4 +package main; +def B:[_]int=[1,2,3,4]; +export fn main() i32 = { return B.len:i32; }; diff --git a/test/wcc/data/r81_deflen_one/case.ww b/test/wcc/data/r81_deflen_one/case.ww new file mode 100644 index 00000000..634d430e --- /dev/null +++ b/test/wcc/data/r81_deflen_one/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 1 +package main; +def C:[_]int=[9]; +export fn main() i32 = { return C.len:i32; }; diff --git a/test/wcc/data/r81_deflen_sum/case.ww b/test/wcc/data/r81_deflen_sum/case.ww new file mode 100644 index 00000000..09c30943 --- /dev/null +++ b/test/wcc/data/r81_deflen_sum/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +def A:[3]int=[10,20,30]; def B:[_]int=[1,2,3,4]; +export fn main() i32 = { return (A.len:i32)+(B.len:i32); }; diff --git a/test/wcc/data/r81_deflen_u8/case.ww b/test/wcc/data/r81_deflen_u8/case.ww new file mode 100644 index 00000000..a7872025 --- /dev/null +++ b/test/wcc/data/r81_deflen_u8/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +def D:[_]u8=[1u8,2u8,3u8,4u8,5u8]; +export fn main() i32 = { return D.len:i32; }; diff --git a/test/wcc/data/r820_def_two_overfill/case.ww b/test/wcc/data/r820_def_two_overfill/case.ww new file mode 100644 index 00000000..ad19bb06 --- /dev/null +++ b/test/wcc/data/r820_def_two_overfill/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has" +package main; +def X: [2]int = [1, 2, 3]; +export fn main() i32 = { return X[1]: i32; }; diff --git a/test/wcc/data/r820_def_zero_overfill/case.ww b/test/wcc/data/r820_def_zero_overfill/case.ww new file mode 100644 index 00000000..a2402ee8 --- /dev/null +++ b/test/wcc/data/r820_def_zero_overfill/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has" +package main; +def X: [0]int = [1, 2]; +export fn main() i32 = { return X[1]: i32; }; diff --git a/test/wcc/data/r820_empty_zero/case.ww b/test/wcc/data/r820_empty_zero/case.ww new file mode 100644 index 00000000..c2402900 --- /dev/null +++ b/test/wcc/data/r820_empty_zero/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +let X: [0]int = []; +export fn main() i32 = { return 7; }; diff --git a/test/wcc/data/r820_empty_zero_local/case.ww b/test/wcc/data/r820_empty_zero_local/case.ww new file mode 100644 index 00000000..451fed55 --- /dev/null +++ b/test/wcc/data/r820_empty_zero_local/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 7 +package main; +export fn main() i32 = { + let x: [0]int = []; + return 7; +}; diff --git a/test/wcc/data/r820_infer_ctl/case.ww b/test/wcc/data/r820_infer_ctl/case.ww new file mode 100644 index 00000000..35dfef5a --- /dev/null +++ b/test/wcc/data/r820_infer_ctl/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 20 +package main; +def X: [_]int = [10, 20]; +export fn main() i32 = { return X[1]: i32; }; diff --git a/test/wcc/data/r820_infer_len/case.ww b/test/wcc/data/r820_infer_len/case.ww new file mode 100644 index 00000000..f65dda5f --- /dev/null +++ b/test/wcc/data/r820_infer_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +let X: [_]int = [1, 2, 3]; +export fn main() i32 = { return X.len: i32; }; diff --git a/test/wcc/data/r820_let_zero_overfill/case.ww b/test/wcc/data/r820_let_zero_overfill/case.ww new file mode 100644 index 00000000..8f05ec09 --- /dev/null +++ b/test/wcc/data/r820_let_zero_overfill/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has" +package main; +let X: [0]int = [1, 2]; +export fn main() i32 = { return X[1]: i32; }; diff --git a/test/wcc/data/r820_local_zero_overfill/case.ww b/test/wcc/data/r820_local_zero_overfill/case.ww new file mode 100644 index 00000000..7c28fd44 --- /dev/null +++ b/test/wcc/data/r820_local_zero_overfill/case.ww @@ -0,0 +1,6 @@ +//ww:error "array literal has" +package main; +export fn main() i32 = { + let X: [0]int = [1, 2]; + return X[1]: i32; +}; diff --git a/test/wcc/data/r820_str_zero_overfill/case.ww b/test/wcc/data/r820_str_zero_overfill/case.ww new file mode 100644 index 00000000..469c34d7 --- /dev/null +++ b/test/wcc/data/r820_str_zero_overfill/case.ww @@ -0,0 +1,4 @@ +//ww:error "array literal has" +package main; +def X: [0]str = ["a"]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r820_void_local/case.ww b/test/wcc/data/r820_void_local/case.ww new file mode 100644 index 00000000..0379c603 --- /dev/null +++ b/test/wcc/data/r820_void_local/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +type done = void; +export fn main() i32 = { + let d: done; + let a: i32 = 7; + return a; +}; diff --git a/test/wcc/data/r821_def_arr_index/case.ww b/test/wcc/data/r821_def_arr_index/case.ww new file mode 100644 index 00000000..6a95aadd --- /dev/null +++ b/test/wcc/data/r821_def_arr_index/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 20 +package main; +def A: [3]int = [10, 20, 30]; +export fn main() i32 = { return A[1]: i32; }; diff --git a/test/wcc/data/r821_def_scalar_field/case.ww b/test/wcc/data/r821_def_scalar_field/case.ww new file mode 100644 index 00000000..c3d292e4 --- /dev/null +++ b/test/wcc/data/r821_def_scalar_field/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 100 +package main; +def S: str = "abc"; +export fn main() i32 = { + let n: i32 = S.len: i32; + let p: *u8 = S.ptr; + return n + (*p): i32; +}; diff --git a/test/wcc/data/r821_def_scalar_index/case.ww b/test/wcc/data/r821_def_scalar_index/case.ww new file mode 100644 index 00000000..eed93a10 --- /dev/null +++ b/test/wcc/data/r821_def_scalar_index/case.ww @@ -0,0 +1,4 @@ +//ww:error "cannot index a def-constant str" +package main; +def S: str = "hi"; +export fn main() i32 = { return S[0]: i32; }; diff --git a/test/wcc/data/r821_def_scalar_varbind/case.ww b/test/wcc/data/r821_def_scalar_varbind/case.ww new file mode 100644 index 00000000..4aedc8de --- /dev/null +++ b/test/wcc/data/r821_def_scalar_varbind/case.ww @@ -0,0 +1,7 @@ +//ww:error "cannot index a def-constant str" +package main; +def S: str = "hi"; +export fn main() i32 = { + let c = S[1]; + return c: i32; +}; diff --git a/test/wcc/data/r821_def_strarray_elem/case.ww b/test/wcc/data/r821_def_strarray_elem/case.ww new file mode 100644 index 00000000..e8a43ec7 --- /dev/null +++ b/test/wcc/data/r821_def_strarray_elem/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 99 +package main; +def C: [2]str = ["ab", "cd"]; +export fn main() i32 = { return C[1][0]: i32; }; diff --git a/test/wcc/data/r821_let_scalar_index/case.ww b/test/wcc/data/r821_let_scalar_index/case.ww new file mode 100644 index 00000000..cbd6dd03 --- /dev/null +++ b/test/wcc/data/r821_let_scalar_index/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 104 +package main; +let S: str = "hi"; +export fn main() i32 = { return S[0]: i32; }; diff --git a/test/wcc/data/r821_local_index/case.ww b/test/wcc/data/r821_local_index/case.ww new file mode 100644 index 00000000..7f78e3ee --- /dev/null +++ b/test/wcc/data/r821_local_index/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 104 +package main; +export fn main() i32 = { + let s: str = "hi"; + return s[0]: i32; +}; diff --git a/test/wcc/data/r821_param_index/case.ww b/test/wcc/data/r821_param_index/case.ww new file mode 100644 index 00000000..0fc6bd6c --- /dev/null +++ b/test/wcc/data/r821_param_index/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 104 +package main; +fn f(s: str) i32 = { return s[0]: i32; }; +export fn main() i32 = { return f("hi"); }; diff --git a/test/wcc/data/r822_ctrl_local/case.ww b/test/wcc/data/r822_ctrl_local/case.ww new file mode 100644 index 00000000..c00450f3 --- /dev/null +++ b/test/wcc/data/r822_ctrl_local/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 14 +package main; +type pt = struct { a: int, b: int }; +fn take(x: pt) int = { return x.a + x.b; }; +export fn main() i32 = { + let g: pt = pt { a = 5, b = 9 }; + return take(g): i32; +}; diff --git a/test/wcc/data/r822_narrow_mix/case.ww b/test/wcc/data/r822_narrow_mix/case.ww new file mode 100644 index 00000000..be7ce0d4 --- /dev/null +++ b/test/wcc/data/r822_narrow_mix/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 6 +package main; +type pt = struct { a: i32, b: i32, c: int }; +let g: pt = pt { a = 1, b = 2, c = 3 }; +fn take(x: pt) int = { return (x.a: int) + (x.b: int) + x.c; }; +export fn main() i32 = { return take(g): i32; }; diff --git a/test/wcc/data/r822_three_word/case.ww b/test/wcc/data/r822_three_word/case.ww new file mode 100644 index 00000000..0f2c4db8 --- /dev/null +++ b/test/wcc/data/r822_three_word/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 7 +package main; +type pt = struct { a: int, b: int, c: int }; +let g: pt = pt { a = 1, b = 2, c = 4 }; +fn take(x: pt) int = { return x.a + x.b + x.c; }; +export fn main() i32 = { return take(g): i32; }; diff --git a/test/wcc/data/r822_two_field/case.ww b/test/wcc/data/r822_two_field/case.ww new file mode 100644 index 00000000..799730a6 --- /dev/null +++ b/test/wcc/data/r822_two_field/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 14 +package main; +type pt = struct { a: int, b: int }; +let g: pt = pt { a = 5, b = 9 }; +fn take(x: pt) int = { return x.a + x.b; }; +export fn main() i32 = { return take(g): i32; }; diff --git a/test/wcc/data/r823_scalar/case.ww b/test/wcc/data/r823_scalar/case.ww new file mode 100644 index 00000000..6c3b08cc --- /dev/null +++ b/test/wcc/data/r823_scalar/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +let n = 5; +export fn main() i32 = { return (n + 0): i32; }; diff --git a/test/wcc/data/r823_struct_arg/case.ww b/test/wcc/data/r823_struct_arg/case.ww new file mode 100644 index 00000000..c9f6ace2 --- /dev/null +++ b/test/wcc/data/r823_struct_arg/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 14 +package main; +type pt = struct { a: int, b: int }; +let g = pt { a = 5, b = 9 }; +fn take(x: pt) int = { return x.a + x.b; }; +export fn main() i32 = { return take(g): i32; }; diff --git a/test/wcc/data/r823_struct_field/case.ww b/test/wcc/data/r823_struct_field/case.ww new file mode 100644 index 00000000..fc9a0525 --- /dev/null +++ b/test/wcc/data/r823_struct_field/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 16 +package main; +type pt = struct { a: int, b: int }; +let g = pt { a = 7, b = 9 }; +export fn main() i32 = { return (g.a + g.b): i32; }; diff --git a/test/wcc/data/r824_ctrl_expl/case.ww b/test/wcc/data/r824_ctrl_expl/case.ww new file mode 100644 index 00000000..79737873 --- /dev/null +++ b/test/wcc/data/r824_ctrl_expl/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +let e: f64 = 3.5; +export fn main() i32 = { return (e * 2.0): i32; }; diff --git a/test/wcc/data/r824_ctrl_int/case.ww b/test/wcc/data/r824_ctrl_int/case.ww new file mode 100644 index 00000000..caa92155 --- /dev/null +++ b/test/wcc/data/r824_ctrl_int/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 6 +package main; +let n = 5; +export fn main() i32 = { return (n + 1): i32; }; diff --git a/test/wcc/data/r824_infer_f32/case.ww b/test/wcc/data/r824_infer_f32/case.ww new file mode 100644 index 00000000..13676436 --- /dev/null +++ b/test/wcc/data/r824_infer_f32/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +let q = 1.5f32; +export fn main() i32 = { return (q + 1.5f32): i32; }; diff --git a/test/wcc/data/r824_infer_mul/case.ww b/test/wcc/data/r824_infer_mul/case.ww new file mode 100644 index 00000000..dacbc42e --- /dev/null +++ b/test/wcc/data/r824_infer_mul/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +let pi = 3.5; +export fn main() i32 = { return (pi * 2.0): i32; }; diff --git a/test/wcc/data/r824_infer_neg/case.ww b/test/wcc/data/r824_infer_neg/case.ww new file mode 100644 index 00000000..5fce7046 --- /dev/null +++ b/test/wcc/data/r824_infer_neg/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +let g = -2.5; +export fn main() i32 = { return (g * -2.0): i32; }; diff --git a/test/wcc/data/r824_infer_read/case.ww b/test/wcc/data/r824_infer_read/case.ww new file mode 100644 index 00000000..6d62794a --- /dev/null +++ b/test/wcc/data/r824_infer_read/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +let r = 2.5; +export fn main() i32 = { return (r + 0.5): i32; }; diff --git a/test/wcc/data/r825_errfirst_3var/case.ww b/test/wcc/data/r825_errfirst_3var/case.ww new file mode 100644 index 00000000..267d9ddb --- /dev/null +++ b/test/wcc/data/r825_errfirst_3var/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 99 +// Migrated from 825_errfirst_union_try row errfirst_3var. +package main; +type e1 = !i32; +type e2 = !i64; +type u3 = (e1 | e2 | u16); +fn h() u3 = { return 99u16; }; +export fn main() i32 = { + return h()!: i32; +}; diff --git a/test/wcc/data/r825_errfirst_must/case.ww b/test/wcc/data/r825_errfirst_must/case.ww new file mode 100644 index 00000000..75200696 --- /dev/null +++ b/test/wcc/data/r825_errfirst_must/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 44 +// Migrated from 825_errfirst_union_try row errfirst_must. +package main; +type e = !i32; +type u = (e | u16); +fn ok() u = { return 300u16; }; +export fn main() i32 = { + let x = ok()!; + return x: i32; +}; diff --git a/test/wcc/data/r825_errfirst_prop/case.ww b/test/wcc/data/r825_errfirst_prop/case.ww new file mode 100644 index 00000000..60368b56 --- /dev/null +++ b/test/wcc/data/r825_errfirst_prop/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 44 +// Migrated from 825_errfirst_union_try row errfirst_prop. +package main; +type e = !i32; +type u = (e | u16); +fn inner() u = { return 300u16; }; +fn outer() u = { + let v = inner()?; + return v; +}; +export fn main() i32 = { + return outer()!: i32; +}; diff --git a/test/wcc/data/r825_errfirst_tuple/case.ww b/test/wcc/data/r825_errfirst_tuple/case.ww new file mode 100644 index 00000000..6c9ec201 --- /dev/null +++ b/test/wcc/data/r825_errfirst_tuple/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 51 +// Migrated from 825_errfirst_union_try row errfirst_tuple. +package main; +type e = !i32; +type ut = (e | (u16, u16)); +fn ok() ut = { return (300u16, 7u16); }; +export fn main() i32 = { + let t = ok()!; + let (a, b) = t; + return (a: i32) + (b: i32); +}; diff --git a/test/wcc/data/r825_succfirst_ctrl/case.ww b/test/wcc/data/r825_succfirst_ctrl/case.ww new file mode 100644 index 00000000..79a310b9 --- /dev/null +++ b/test/wcc/data/r825_succfirst_ctrl/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 7 +// Migrated from 825_errfirst_union_try row succfirst_ctrl. +package main; +type e = !i32; +type u2 = (u16 | e); +fn g() u2 = { return 7u16; }; +export fn main() i32 = { + return g()!: i32; +}; diff --git a/test/wcc/data/r826_alias_tuple_ctrl_direct/case.ww b/test/wcc/data/r826_alias_tuple_ctrl_direct/case.ww new file mode 100644 index 00000000..9115424b --- /dev/null +++ b/test/wcc/data/r826_alias_tuple_ctrl_direct/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +// Migrated from 826_alias_tuple_coerce row ctrl_dir. +package main; +export fn main() i32 = { + let x: (int, int) = (3, 4); + return (x.0 + x.1): i32; +}; diff --git a/test/wcc/data/r826_alias_tuple_ctrl_typed/case.ww b/test/wcc/data/r826_alias_tuple_ctrl_typed/case.ww new file mode 100644 index 00000000..48bd816d --- /dev/null +++ b/test/wcc/data/r826_alias_tuple_ctrl_typed/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +// Migrated from 826_alias_tuple_coerce row ctrl_typed. +package main; +type pair = (int, int); +export fn main() i32 = { + let x: pair = (3: int, 4: int); + return (x.0 + x.1): i32; +}; diff --git a/test/wcc/data/r826_alias_tuple_fnarg/case.ww b/test/wcc/data/r826_alias_tuple_fnarg/case.ww new file mode 100644 index 00000000..81fdde38 --- /dev/null +++ b/test/wcc/data/r826_alias_tuple_fnarg/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 7 +// Migrated from 826_alias_tuple_coerce row fnarg. +package main; +type pair = (int, int); +fn g(p: pair) i32 = { + return (p.0 + p.1): i32; +}; +export fn main() i32 = { + return g((3, 4)); +}; diff --git a/test/wcc/data/r826_alias_tuple_init/case.ww b/test/wcc/data/r826_alias_tuple_init/case.ww new file mode 100644 index 00000000..5b42247f --- /dev/null +++ b/test/wcc/data/r826_alias_tuple_init/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +// Migrated from 826_alias_tuple_coerce row init. +package main; +type pair = (int, int); +export fn main() i32 = { + let x: pair = (3, 4); + return (x.0 + x.1): i32; +}; diff --git a/test/wcc/data/r826_alias_tuple_mixed/case.ww b/test/wcc/data/r826_alias_tuple_mixed/case.ww new file mode 100644 index 00000000..5df67474 --- /dev/null +++ b/test/wcc/data/r826_alias_tuple_mixed/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +// Migrated from 826_alias_tuple_coerce row mixed. +package main; +type box = (int, u16); +export fn main() i32 = { + let x: box = (3, 4); + return (x.0 + (x.1: int)): i32; +}; diff --git a/test/wcc/data/r826_alias_tuple_ret/case.ww b/test/wcc/data/r826_alias_tuple_ret/case.ww new file mode 100644 index 00000000..b2cdeb16 --- /dev/null +++ b/test/wcc/data/r826_alias_tuple_ret/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 7 +// Migrated from 826_alias_tuple_coerce row ret. +package main; +type pair = (int, int); +fn f() pair = { + return (3, 4); +}; +export fn main() i32 = { + let r: pair = f(); + return (r.0 + r.1): i32; +}; diff --git a/test/wcc/data/r827_byte_eq_global/case.ww b/test/wcc/data/r827_byte_eq_global/case.ww new file mode 100644 index 00000000..028efb45 --- /dev/null +++ b/test/wcc/data/r827_byte_eq_global/case.ww @@ -0,0 +1,9 @@ +//ww:run +// Import-free byte-identity source from 827_str_eq row be_eq_global. +package main; +let g: str = "abc"; +let h: str = "abd"; +export fn main() i32 = { + if (g == h) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_byte_eq_local/case.ww b/test/wcc/data/r827_byte_eq_local/case.ww new file mode 100644 index 00000000..5f0a8131 --- /dev/null +++ b/test/wcc/data/r827_byte_eq_local/case.ww @@ -0,0 +1,9 @@ +//ww:run +// Import-free byte-identity source from 827_str_eq row be_eq_local. +package main; +export fn main() i32 = { + let a: str = "abc"; + let b: str = "abd"; + if (a == b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_byte_eq_strlit/case.ww b/test/wcc/data/r827_byte_eq_strlit/case.ww new file mode 100644 index 00000000..9428ab2e --- /dev/null +++ b/test/wcc/data/r827_byte_eq_strlit/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 1 +// Import-free byte-identity source from 827_str_eq row be_eq_strlit. +package main; +export fn main() i32 = { + if ("abc" == "abc") { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_byte_ne_local/case.ww b/test/wcc/data/r827_byte_ne_local/case.ww new file mode 100644 index 00000000..7284ae1c --- /dev/null +++ b/test/wcc/data/r827_byte_ne_local/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 1 +// Import-free byte-identity source from 827_str_eq row be_ne_local. +package main; +export fn main() i32 = { + let a: str = "abc"; + let b: str = "abd"; + if (a != b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_str_eq_diff_content/case.ww b/test/wcc/data/r827_str_eq_diff_content/case.ww new file mode 100644 index 00000000..555ed89a --- /dev/null +++ b/test/wcc/data/r827_str_eq_diff_content/case.ww @@ -0,0 +1,7 @@ +//ww:run +// Migrated from 827_str_eq row diff_content. +package main; +export fn main() i32 = { + if ("abc" == "abd") { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_str_eq_dup_true/case.ww b/test/wcc/data/r827_str_eq_dup_true/case.ww new file mode 100644 index 00000000..bcebed18 --- /dev/null +++ b/test/wcc/data/r827_str_eq_dup_true/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 1 +// Migrated from 827_str_eq row eq_dup_true. +package main; +import strings; +export fn main() i32 = { + let a: str = "abc"; + let b: str = strings.dup("abc"); + if (a == b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_str_eq_empty/case.ww b/test/wcc/data/r827_str_eq_empty/case.ww new file mode 100644 index 00000000..869022e6 --- /dev/null +++ b/test/wcc/data/r827_str_eq_empty/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 1 +// Migrated from 827_str_eq row empty. +package main; +import strings; +export fn main() i32 = { + let a: str = ""; + let b: str = strings.dup(""); + if (a == b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_str_eq_self/case.ww b/test/wcc/data/r827_str_eq_self/case.ww new file mode 100644 index 00000000..f03f8b36 --- /dev/null +++ b/test/wcc/data/r827_str_eq_self/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 1 +// Migrated from 827_str_eq row eq_self. +package main; +export fn main() i32 = { + let a: str = "x"; + if (a == a) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r827_str_ne_dup_false/case.ww b/test/wcc/data/r827_str_ne_dup_false/case.ww new file mode 100644 index 00000000..84c6b67e --- /dev/null +++ b/test/wcc/data/r827_str_ne_dup_false/case.ww @@ -0,0 +1,10 @@ +//ww:run +// Migrated from 827_str_eq row ne_dup_false. +package main; +import strings; +export fn main() i32 = { + let a: str = "abc"; + let b: str = strings.dup("abc"); + if (a != b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r828_arrlit_alias_exact/case.ww b/test/wcc/data/r828_arrlit_alias_exact/case.ww new file mode 100644 index 00000000..847d2198 --- /dev/null +++ b/test/wcc/data/r828_arrlit_alias_exact/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 2 +// Migrated from 828_overlong_arrlit row alias_exact. +package main; +type A = [2]int; +let g: A = [1, 2]; +export fn main() i32 = { + return g[1]: i32; +}; diff --git a/test/wcc/data/r828_arrlit_alias_global_overlong/case.ww b/test/wcc/data/r828_arrlit_alias_global_overlong/case.ww new file mode 100644 index 00000000..f9509084 --- /dev/null +++ b/test/wcc/data/r828_arrlit_alias_global_overlong/case.ww @@ -0,0 +1,8 @@ +//ww:error "array literal has 3 elements but declared array holds 2" +// Migrated from 828_overlong_arrlit negative alias_g_over. +package main; +type A = [2]int; +let g: A = [1, 2, 3]; +export fn main() i32 = { + return g[1]: i32; +}; diff --git a/test/wcc/data/r828_arrlit_alias_ret_overlong/case.ww b/test/wcc/data/r828_arrlit_alias_ret_overlong/case.ww new file mode 100644 index 00000000..6db58665 --- /dev/null +++ b/test/wcc/data/r828_arrlit_alias_ret_overlong/case.ww @@ -0,0 +1,13 @@ +//ww:error c "return [3]int not assignable to A" ww "array literal has 3 elements but declared array holds 2" +package main; + +type A = [2]int; + +fn f() A = { + return [1, 2, 3]; +}; + +export fn main() i32 = { + let r: A = f(); + return r[1]: i32; +}; diff --git a/test/wcc/data/r828_arrlit_arg_exact/case.ww b/test/wcc/data/r828_arrlit_arg_exact/case.ww new file mode 100644 index 00000000..43bfe510 --- /dev/null +++ b/test/wcc/data/r828_arrlit_arg_exact/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 20 +// Migrated from 828_overlong_arrlit row arg_exact. +package main; +fn g(a: [2]int) int = { + return a[1]; +}; +export fn main() i32 = { + let v: [2]int = [10, 20]; + return g(v): i32; +}; diff --git a/test/wcc/data/r828_arrlit_arg_overlong/case.ww b/test/wcc/data/r828_arrlit_arg_overlong/case.ww new file mode 100644 index 00000000..bf26ba67 --- /dev/null +++ b/test/wcc/data/r828_arrlit_arg_overlong/case.ww @@ -0,0 +1,10 @@ +//ww:error c "argument type [3]int not assignable to [2]int" ww "array literal has 3 elements but declared array holds 2" +package main; + +fn g(a: [2]int) int = { + return a[1]; +}; + +export fn main() i32 = { + return g([1, 2, 3]): i32; +}; diff --git a/test/wcc/data/r828_arrlit_ret_exact/case.ww b/test/wcc/data/r828_arrlit_ret_exact/case.ww new file mode 100644 index 00000000..36af53db --- /dev/null +++ b/test/wcc/data/r828_arrlit_ret_exact/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 2 +// Migrated from 828_overlong_arrlit row ret_exact. +package main; +fn f() [2]int = { + return [1, 2]; +}; +export fn main() i32 = { + let r: [2]int = f(); + return r[1]: i32; +}; diff --git a/test/wcc/data/r828_arrlit_ret_overlong/case.ww b/test/wcc/data/r828_arrlit_ret_overlong/case.ww new file mode 100644 index 00000000..39ecac56 --- /dev/null +++ b/test/wcc/data/r828_arrlit_ret_overlong/case.ww @@ -0,0 +1,11 @@ +//ww:error c "return [3]int not assignable to [2]int" ww "array literal has 3 elements but declared array holds 2" +package main; + +fn f() [2]int = { + return [1, 2, 3]; +}; + +export fn main() i32 = { + let r: [2]int = f(); + return r[1]: i32; +}; diff --git a/test/wcc/data/r829_def_str_len/case.ww b/test/wcc/data/r829_def_str_len/case.ww new file mode 100644 index 00000000..ecefb0f9 --- /dev/null +++ b/test/wcc/data/r829_def_str_len/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 4 +// Migrated from 829_slice_str_global_arg row def_str_len. +package main; +def s: str = "abcd"; +fn take(x: str) int = { return x.len: int; }; +export fn main() i32 = { return take(s): i32; }; diff --git a/test/wcc/data/r829_def_str_ptr/case.ww b/test/wcc/data/r829_def_str_ptr/case.ww new file mode 100644 index 00000000..d5426c40 --- /dev/null +++ b/test/wcc/data/r829_def_str_ptr/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 97 +// Migrated from 829_slice_str_global_arg row def_str_ptr. +package main; +def s: str = "abcd"; +fn take(x: str) int = { return x[0]: int; }; +export fn main() i32 = { return take(s): i32; }; diff --git a/test/wcc/data/r829_def_str_return/case.ww b/test/wcc/data/r829_def_str_return/case.ww new file mode 100644 index 00000000..d66780d8 --- /dev/null +++ b/test/wcc/data/r829_def_str_return/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 5 +// Migrated from 829_slice_str_global_arg row def_str_return. +package main; +def s: str = "hello"; +fn give() str = { return s; }; +fn take(x: str) int = { return x.len: int; }; +export fn main() i32 = { return take(give()): i32; }; diff --git a/test/wcc/data/r829_local_slice_ctrl/case.ww b/test/wcc/data/r829_local_slice_ctrl/case.ww new file mode 100644 index 00000000..a11b86f1 --- /dev/null +++ b/test/wcc/data/r829_local_slice_ctrl/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 8 +// Migrated from 829_slice_str_global_arg row ctrl_local_sl. +package main; +fn take(x: []int) int = { return x[1]; }; +export fn main() i32 = { + let g: []int = [7, 8, 9]; + return take(g): i32; +}; diff --git a/test/wcc/data/r829_local_str_ctrl/case.ww b/test/wcc/data/r829_local_str_ctrl/case.ww new file mode 100644 index 00000000..3ad00c4a --- /dev/null +++ b/test/wcc/data/r829_local_str_ctrl/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 2 +// Migrated from 829_slice_str_global_arg row ctrl_local_str. +package main; +fn take(x: str) int = { return x.len: int; }; +export fn main() i32 = { + let s: str = "ab"; + return take(s): i32; +}; diff --git a/test/wcc/data/r829_slice_global_idx/case.ww b/test/wcc/data/r829_slice_global_idx/case.ww new file mode 100644 index 00000000..900b618c --- /dev/null +++ b/test/wcc/data/r829_slice_global_idx/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 30 +// Migrated from 829_slice_str_global_arg row slice_glob_idx. +package main; +let g: []int = [10, 20, 30, 40, 50]; +fn take(x: []int) int = { return x[2]; }; +export fn main() i32 = { return take(g): i32; }; diff --git a/test/wcc/data/r829_slice_global_len/case.ww b/test/wcc/data/r829_slice_global_len/case.ww new file mode 100644 index 00000000..bdc5eb7e --- /dev/null +++ b/test/wcc/data/r829_slice_global_len/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 5 +// Migrated from 829_slice_str_global_arg row slice_glob_len. +package main; +let g: []int = [10, 20, 30, 40, 50]; +fn take(x: []int) int = { return x.len: int; }; +export fn main() i32 = { return take(g): i32; }; diff --git a/test/wcc/data/r829_str_global_len/case.ww b/test/wcc/data/r829_str_global_len/case.ww new file mode 100644 index 00000000..72ab6164 --- /dev/null +++ b/test/wcc/data/r829_str_global_len/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 4 +// Migrated from 829_slice_str_global_arg row str_glob_len. +package main; +let s: str = "abcd"; +fn take(x: str) int = { return x.len: int; }; +export fn main() i32 = { return take(s): i32; }; diff --git a/test/wcc/data/r829_str_global_ptr/case.ww b/test/wcc/data/r829_str_global_ptr/case.ww new file mode 100644 index 00000000..82ce3d96 --- /dev/null +++ b/test/wcc/data/r829_str_global_ptr/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 97 +// Migrated from 829_slice_str_global_arg row str_glob_ptr. +package main; +let s: str = "abcd"; +fn take(x: str) int = { return x[0]: int; }; +export fn main() i32 = { return take(s): i32; }; diff --git a/test/wcc/data/r830_call_base_u32/case.ww b/test/wcc/data/r830_call_base_u32/case.ww new file mode 100644 index 00000000..df87d7a3 --- /dev/null +++ b/test/wcc/data/r830_call_base_u32/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 30 +// Migrated from 830_cast_base_index row call_idx. +package main; +fn mk(p: *[4]u32) *[4]u32 = { return p; }; +export fn main() i32 = { + let a: [4]u32 = [10u32, 20u32, 30u32, 40u32]; + let i: int = 2; + return mk(&a)[i]: i32; +}; diff --git a/test/wcc/data/r830_cast_base_u16/case.ww b/test/wcc/data/r830_cast_base_u16/case.ww new file mode 100644 index 00000000..786130f6 --- /dev/null +++ b/test/wcc/data/r830_cast_base_u16/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 30 +// Migrated from 830_cast_base_index row u16_idx. +package main; +export fn main() i32 = { + let a: [4]u16 = [10u16, 20u16, 30u16, 40u16]; + let i: int = 2; + return ((&a): *[4]u16)[i]: i32; +}; diff --git a/test/wcc/data/r830_cast_base_u32/case.ww b/test/wcc/data/r830_cast_base_u32/case.ww new file mode 100644 index 00000000..0416541f --- /dev/null +++ b/test/wcc/data/r830_cast_base_u32/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 30 +// Migrated from 830_cast_base_index row u32_idx. +package main; +export fn main() i32 = { + let a: [4]u32 = [10u32, 20u32, 30u32, 40u32]; + let i: int = 2; + return ((&a): *[4]u32)[i]: i32; +}; diff --git a/test/wcc/data/r830_cast_base_u64_ctrl/case.ww b/test/wcc/data/r830_cast_base_u64_ctrl/case.ww new file mode 100644 index 00000000..b36afa8a --- /dev/null +++ b/test/wcc/data/r830_cast_base_u64_ctrl/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 20 +// Migrated from 830_cast_base_index row u64_ctl. +package main; +export fn main() i32 = { + let a: [4]u64 = [10u64, 20u64, 30u64, 40u64]; + let i: int = 1; + return ((&a): *[4]u64)[i]: i32; +}; diff --git a/test/wcc/data/r830_cast_base_u8/case.ww b/test/wcc/data/r830_cast_base_u8/case.ww new file mode 100644 index 00000000..78fb2dd1 --- /dev/null +++ b/test/wcc/data/r830_cast_base_u8/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 40 +// Migrated from 830_cast_base_index row u8_idx. +package main; +export fn main() i32 = { + let a: [4]u8 = [10u8, 20u8, 30u8, 40u8]; + let i: int = 3; + return ((&a): *[4]u8)[i]: i32; +}; diff --git a/test/wcc/data/r830_slice_base_u16/case.ww b/test/wcc/data/r830_slice_base_u16/case.ww new file mode 100644 index 00000000..4266a954 --- /dev/null +++ b/test/wcc/data/r830_slice_base_u16/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 30 +// Migrated from 830_cast_base_index row slc_idx. +package main; +export fn main() i32 = { + let a: [4]u16 = [10u16, 20u16, 30u16, 40u16]; + let i: int = 2; + return a[0:4][i]: i32; +}; diff --git a/test/wcc/data/r830_typeassert_base_u16/case.ww b/test/wcc/data/r830_typeassert_base_u16/case.ww new file mode 100644 index 00000000..ad59a2f0 --- /dev/null +++ b/test/wcc/data/r830_typeassert_base_u16/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 30 +// Migrated from 830_cast_base_index row asrt_idx. +package main; +type IP = (*[4]u16 | int); +export fn main() i32 = { + let a: [4]u16 = [10u16, 20u16, 30u16, 40u16]; + let v: IP = &a; + let i: int = 2; + return (v as *[4]u16)[i]: i32; +}; diff --git a/test/wcc/data/r831_match_call_result/case.ww b/test/wcc/data/r831_match_call_result/case.ww new file mode 100644 index 00000000..df022110 --- /dev/null +++ b/test/wcc/data/r831_match_call_result/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +fn mk(b: bool) (int | bool) = { if (b) { return 7; }; return false; }; +fn main() i32 = { match (mk(true)) { case let n: int => return n: i32; case bool => return 1; }; }; diff --git a/test/wcc/data/r831_match_field_local_int/case.ww b/test/wcc/data/r831_match_field_local_int/case.ww new file mode 100644 index 00000000..b4812f87 --- /dev/null +++ b/test/wcc/data/r831_match_field_local_int/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 42 +package main; +type box = struct { t: (int | bool), n: int }; +fn main() i32 = { + let b: box = box { t = 0, n = 5 }; b.t = 42; + match (b.t) { case let n: int => return n: i32; case bool => return 1; }; +}; diff --git a/test/wcc/data/r831_match_field_ptr/case.ww b/test/wcc/data/r831_match_field_ptr/case.ww new file mode 100644 index 00000000..7f81e917 --- /dev/null +++ b/test/wcc/data/r831_match_field_ptr/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 9 +package main; +type box = struct { t: (int | bool), n: int }; +fn pick(h: *box) i32 = { match (h.t) { case let n: int => return n: i32; case bool => return 1; }; }; +fn main() i32 = { let b: box = box { t = 9, n = 5 }; return pick(&b); }; diff --git a/test/wcc/data/r831_match_field_remap/case.ww b/test/wcc/data/r831_match_field_remap/case.ww new file mode 100644 index 00000000..766df06b --- /dev/null +++ b/test/wcc/data/r831_match_field_remap/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 12 +package main; +type box = struct { t: (int | bool), n: int }; +fn main() i32 = { + let b: box = box { t = true, n = 5 }; b.t = 7; + match (b.t) { case let n: int => return (n + b.n): i32; case bool => return 1; }; +}; diff --git a/test/wcc/data/r831_match_field_str/case.ww b/test/wcc/data/r831_match_field_str/case.ww new file mode 100644 index 00000000..a7752811 --- /dev/null +++ b/test/wcc/data/r831_match_field_str/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 5 +package main; +type box = struct { t: (str | int), n: int }; +fn main() i32 = { + let b: box = box { t = 0, n = 5 }; b.t = "hello"; + match (b.t) { case let s: str => return len(s): i32; case int => return 99; }; +}; diff --git a/test/wcc/data/r831_match_plain_local/case.ww b/test/wcc/data/r831_match_plain_local/case.ww new file mode 100644 index 00000000..654d355c --- /dev/null +++ b/test/wcc/data/r831_match_plain_local/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 5 +package main; +fn main() i32 = { + let t: (int | bool) = 5; + match (t) { case let n: int => return n: i32; case bool => return 1; }; +}; diff --git a/test/wcc/data/r832_tuple_array_exact_reject/case.ww b/test/wcc/data/r832_tuple_array_exact_reject/case.ww new file mode 100644 index 00000000..9e90a359 --- /dev/null +++ b/test/wcc/data/r832_tuple_array_exact_reject/case.ww @@ -0,0 +1,3 @@ +//ww:error "tuple element must be a scalar" +package main; +export fn main() i32 = { let t: ([2]int, i32) = ([1, 2], 5); return t.1; }; diff --git a/test/wcc/data/r832_tuple_array_overlong/case.ww b/test/wcc/data/r832_tuple_array_overlong/case.ww new file mode 100644 index 00000000..764651cf --- /dev/null +++ b/test/wcc/data/r832_tuple_array_overlong/case.ww @@ -0,0 +1,3 @@ +//ww:error "tuple element must be a scalar" +package main; +export fn main() i32 = { let t: ([2]int, i32) = ([1, 2, 3], 5); return t.0[1]: i32; }; diff --git a/test/wcc/data/r832_tuple_nested_array_overlong/case.ww b/test/wcc/data/r832_tuple_nested_array_overlong/case.ww new file mode 100644 index 00000000..39952705 --- /dev/null +++ b/test/wcc/data/r832_tuple_nested_array_overlong/case.ww @@ -0,0 +1,6 @@ +//ww:error "tuple element must be a scalar" +package main; +export fn main() i32 = { + let t: ([2][3]int, i32) = ([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 5); + return t.0[0][0]: i32; +}; diff --git a/test/wcc/data/r832_tuple_nested_exact_reject/case.ww b/test/wcc/data/r832_tuple_nested_exact_reject/case.ww new file mode 100644 index 00000000..4f3af98a --- /dev/null +++ b/test/wcc/data/r832_tuple_nested_exact_reject/case.ww @@ -0,0 +1,3 @@ +//ww:error "tuple element must be a scalar" +package main; +export fn main() i32 = { let t: (i32, ([2]int, i32)) = (9, ([3, 4], 7)); return t.0; }; diff --git a/test/wcc/data/r832_tuple_nested_overlong/case.ww b/test/wcc/data/r832_tuple_nested_overlong/case.ww new file mode 100644 index 00000000..255c7912 --- /dev/null +++ b/test/wcc/data/r832_tuple_nested_overlong/case.ww @@ -0,0 +1,6 @@ +//ww:error "tuple element must be a scalar" +package main; +export fn main() i32 = { + let t: ([2]int, ([2]int, i32)) = ([1, 2], ([3, 4, 5], 6)); + return t.0[0]: i32; +}; diff --git a/test/wcc/data/r832_tuple_return_nested_overlong/case.ww b/test/wcc/data/r832_tuple_return_nested_overlong/case.ww new file mode 100644 index 00000000..2c5a9281 --- /dev/null +++ b/test/wcc/data/r832_tuple_return_nested_overlong/case.ww @@ -0,0 +1,4 @@ +//ww:error "tuple element must be a scalar" +package main; +fn f() ([2]int, ([2]int, i32)) = { return ([1, 2], ([3, 4, 5], 6)); }; +export fn main() i32 = { let t = f(); return t.0[0]: i32; }; diff --git a/test/wcc/data/r832_tuple_return_overlong/case.ww b/test/wcc/data/r832_tuple_return_overlong/case.ww new file mode 100644 index 00000000..5a5d2222 --- /dev/null +++ b/test/wcc/data/r832_tuple_return_overlong/case.ww @@ -0,0 +1,4 @@ +//ww:error "tuple element must be a scalar" +package main; +fn f() ([2]int, i32) = { return ([1, 2, 3], 5); }; +export fn main() i32 = { let t = f(); return t.1; }; diff --git a/test/wcc/data/r832_tuple_scalar/case.ww b/test/wcc/data/r832_tuple_scalar/case.ww new file mode 100644 index 00000000..a4359e90 --- /dev/null +++ b/test/wcc/data/r832_tuple_scalar/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 2 +package main; +export fn main() i32 = { let t: (i32, i32) = (1, 2); return t.1; }; diff --git a/test/wcc/data/r832_tuple_slice/case.ww b/test/wcc/data/r832_tuple_slice/case.ww new file mode 100644 index 00000000..8ba8ee56 --- /dev/null +++ b/test/wcc/data/r832_tuple_slice/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 5 +package main; +export fn main() i32 = { + let hb: [8]u8; let a: []u8; a.ptr = &hb[0]; a.len = 3; a.cap = 8; + let t: ([]u8, i32) = (a, 5); return t.1; +}; diff --git a/test/wcc/data/r832_tuple_str/case.ww b/test/wcc/data/r832_tuple_str/case.ww new file mode 100644 index 00000000..4c20826e --- /dev/null +++ b/test/wcc/data/r832_tuple_str/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 7 +package main; +export fn main() i32 = { let t: (str, i32) = ("hi", 7); return t.1; }; diff --git a/test/wcc/data/r832_tuple_struct_reject/case.ww b/test/wcc/data/r832_tuple_struct_reject/case.ww new file mode 100644 index 00000000..771a44a5 --- /dev/null +++ b/test/wcc/data/r832_tuple_struct_reject/case.ww @@ -0,0 +1,4 @@ +//ww:error "tuple element must be a scalar" +package main; +type P = struct { x: int }; +export fn main() i32 = { let t: (P, i32) = (P { x = 1 }, 5); return t.1; }; diff --git a/test/wcc/data/r832_tuple_tagged/case.ww b/test/wcc/data/r832_tuple_tagged/case.ww new file mode 100644 index 00000000..06141e1a --- /dev/null +++ b/test/wcc/data/r832_tuple_tagged/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 9 +package main; +export fn main() i32 = { let t: ((void | size), i32) = (3, 9); return t.1; }; diff --git a/test/wcc/data/r833_explicit_array_control/case.ww b/test/wcc/data/r833_explicit_array_control/case.ww new file mode 100644 index 00000000..c434720c --- /dev/null +++ b/test/wcc/data/r833_explicit_array_control/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 20 +package main; +let xs: [3]int = [10, 20, 30]; +export fn main() i32 = { return xs[1]: i32; }; diff --git a/test/wcc/data/r833_inferred_array_index/case.ww b/test/wcc/data/r833_inferred_array_index/case.ww new file mode 100644 index 00000000..fb743f6d --- /dev/null +++ b/test/wcc/data/r833_inferred_array_index/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 20 +package main; +let xs = [10, 20, 30]; +export fn main() i32 = { return xs[1]: i32; }; diff --git a/test/wcc/data/r833_inferred_array_len/case.ww b/test/wcc/data/r833_inferred_array_len/case.ww new file mode 100644 index 00000000..83e107f8 --- /dev/null +++ b/test/wcc/data/r833_inferred_array_len/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +let xs = [10, 20, 30]; +export fn main() i32 = { return xs.len: i32; }; diff --git a/test/wcc/data/r833_inferred_array_u8/case.ww b/test/wcc/data/r833_inferred_array_u8/case.ww new file mode 100644 index 00000000..a00c747e --- /dev/null +++ b/test/wcc/data/r833_inferred_array_u8/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 3 +package main; +let bs = [1u8, 2u8, 3u8]; +export fn main() i32 = { return bs[2]: i32; }; diff --git a/test/wcc/data/r835_union_alias_int/case.ww b/test/wcc/data/r835_union_alias_int/case.ww new file mode 100644 index 00000000..db2119f9 --- /dev/null +++ b/test/wcc/data/r835_union_alias_int/case.ww @@ -0,0 +1,5 @@ +//ww:compile +package main; +type myint = int; type u = (myint | str); +fn mk() u = { return 5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r835_union_direct_int/case.ww b/test/wcc/data/r835_union_direct_int/case.ww new file mode 100644 index 00000000..0386b457 --- /dev/null +++ b/test/wcc/data/r835_union_direct_int/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 5 +package main; +type u = (int | str); +fn mk() u = { return 5; }; +export fn main() i32 = { let v = mk(); match (v) { case let n: int => return n: i32; case str => return 1; }; return 9; }; diff --git a/test/wcc/data/r835_union_enum_int/case.ww b/test/wcc/data/r835_union_enum_int/case.ww new file mode 100644 index 00000000..d5fa13f9 --- /dev/null +++ b/test/wcc/data/r835_union_enum_int/case.ww @@ -0,0 +1,5 @@ +//ww:compile +package main; +type col = enum { RED, GREEN }; type u = (col | str); +fn mk() u = { return 5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r835_union_nested_int_reject/case.ww b/test/wcc/data/r835_union_nested_int_reject/case.ww new file mode 100644 index 00000000..cd280e9f --- /dev/null +++ b/test/wcc/data/r835_union_nested_int_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "not assignable" +package main; +type inner = (int | bool); type outer = (inner | str); +fn mk() outer = { return 5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r835_union_nested_source/case.ww b/test/wcc/data/r835_union_nested_source/case.ww new file mode 100644 index 00000000..14d774d3 --- /dev/null +++ b/test/wcc/data/r835_union_nested_source/case.ww @@ -0,0 +1,5 @@ +//ww:compile +package main; +type inner = (int | bool); type outer = (inner | str); +fn mk(x: inner) outer = { return x; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r835_union_no_int_reject/case.ww b/test/wcc/data/r835_union_no_int_reject/case.ww new file mode 100644 index 00000000..0414a3e0 --- /dev/null +++ b/test/wcc/data/r835_union_no_int_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "not assignable" +package main; +type u = (str | bool); +fn mk() u = { return 5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r835_union_struct_int_reject/case.ww b/test/wcc/data/r835_union_struct_int_reject/case.ww new file mode 100644 index 00000000..aa72078b --- /dev/null +++ b/test/wcc/data/r835_union_struct_int_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "not assignable" +package main; +type A = struct { v: int }; type u = (A | str); +fn mk() u = { return 5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r835_union_subset_cast_reject/case.ww b/test/wcc/data/r835_union_subset_cast_reject/case.ww new file mode 100644 index 00000000..e65bdb37 --- /dev/null +++ b/test/wcc/data/r835_union_subset_cast_reject/case.ww @@ -0,0 +1,9 @@ +//ww:error "tagged cast source shape unwired" +package main; +type inner = (int | bool); type outer = (int | bool | str); +fn mk() outer = { return true: inner; }; +export fn main() i32 = { + let v = mk(); + match (v) { case let n: int => return 70; case let b: bool => return 11; case let s: str => return 22; }; + return 99; +}; diff --git a/test/wcc/data/r835_union_subset_source/case.ww b/test/wcc/data/r835_union_subset_source/case.ww new file mode 100644 index 00000000..612b8cc5 --- /dev/null +++ b/test/wcc/data/r835_union_subset_source/case.ww @@ -0,0 +1,5 @@ +//ww:compile +package main; +type sub = (int | uint); type sup = (int | uint | str); +fn w(x: sub) sup = { return x; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_assign_directstr/case.ww b/test/wcc/data/r83_assign_directstr/case.ww new file mode 100644 index 00000000..c1fccfaa --- /dev/null +++ b/test/wcc/data/r83_assign_directstr/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type inner = (int | bool); +type u = (inner | str); +fn mk(s: str) u = { return s; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_assign_f64/case.ww b/test/wcc/data/r83_assign_f64/case.ww new file mode 100644 index 00000000..3d2d8dff --- /dev/null +++ b/test/wcc/data/r83_assign_f64/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 35 +package main; +type u = (f64 | str); +fn mk() u = { return 3.5; }; +export fn main() i32 = { let v = mk(); match (v) { case let f: f64 => return 35; case str => return 1; }; return 9; }; diff --git a/test/wcc/data/r83_assign_float_reject/case.ww b/test/wcc/data/r83_assign_float_reject/case.ww new file mode 100644 index 00000000..379d64c9 --- /dev/null +++ b/test/wcc/data/r83_assign_float_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "not assignable" +package main; +type u = (int | str); +fn mk() u = { return 3.5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_assign_intbool/case.ww b/test/wcc/data/r83_assign_intbool/case.ww new file mode 100644 index 00000000..56d08079 --- /dev/null +++ b/test/wcc/data/r83_assign_intbool/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +type u = (int | bool); +fn mk() u = { return 5; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_assign_nil_nullable/case.ww b/test/wcc/data/r83_assign_nil_nullable/case.ww new file mode 100644 index 00000000..416a8e07 --- /dev/null +++ b/test/wcc/data/r83_assign_nil_nullable/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +type u = (*int | void); +fn mk() u = { return nil; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_assign_nil_reject/case.ww b/test/wcc/data/r83_assign_nil_reject/case.ww new file mode 100644 index 00000000..f082ef72 --- /dev/null +++ b/test/wcc/data/r83_assign_nil_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "not assignable" +package main; +type u = (int | str); +fn mk() u = { return nil; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_assign_subset/case.ww b/test/wcc/data/r83_assign_subset/case.ww new file mode 100644 index 00000000..8cc2403b --- /dev/null +++ b/test/wcc/data/r83_assign_subset/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type sub = (int | uint); +type sup = (int | uint | str); +fn w(x: sub) sup = { return x; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_gtag_barebool/case.ww b/test/wcc/data/r83_gtag_barebool/case.ww new file mode 100644 index 00000000..8e2eb3c7 --- /dev/null +++ b/test/wcc/data/r83_gtag_barebool/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 11 +package main; +type u = (int | bool | str); +let g: u = true; +export fn main() i32 = { match (g) { case let n: int => return n: i32; case let b: bool => return 11; case let s: str => return 22; }; return 99; }; diff --git a/test/wcc/data/r83_gtag_bareint/case.ww b/test/wcc/data/r83_gtag_bareint/case.ww new file mode 100644 index 00000000..c52887ea --- /dev/null +++ b/test/wcc/data/r83_gtag_bareint/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 7 +package main; +type u = (int | bool | str); +let g: u = 7; +export fn main() i32 = { match (g) { case let n: int => return n: i32; case let b: bool => return 11; case let s: str => return 22; }; return 99; }; diff --git a/test/wcc/data/r83_gtag_barestr/case.ww b/test/wcc/data/r83_gtag_barestr/case.ww new file mode 100644 index 00000000..ebaccb72 --- /dev/null +++ b/test/wcc/data/r83_gtag_barestr/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 22 +package main; +type u = (int | bool | str); +let g: u = "hi"; +export fn main() i32 = { match (g) { case let n: int => return n: i32; case let b: bool => return 11; case let s: str => return 22; }; return 99; }; diff --git a/test/wcc/data/r83_gtag_boolcast_reject/case.ww b/test/wcc/data/r83_gtag_boolcast_reject/case.ww new file mode 100644 index 00000000..949abdc4 --- /dev/null +++ b/test/wcc/data/r83_gtag_boolcast_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "unsupported variant init" +package main; +type u = (int | bool | str); +let g: u = true: u; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_gtag_intcast_reject/case.ww b/test/wcc/data/r83_gtag_intcast_reject/case.ww new file mode 100644 index 00000000..b5e4fe26 --- /dev/null +++ b/test/wcc/data/r83_gtag_intcast_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "unsupported variant init" +package main; +type u = (int | bool | str); +let g: u = 7: u; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_gtag_strcast/case.ww b/test/wcc/data/r83_gtag_strcast/case.ww new file mode 100644 index 00000000..7a34c3b2 --- /dev/null +++ b/test/wcc/data/r83_gtag_strcast/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 22 +package main; +type u = (int | bool | str); +let g: u = "hi": u; +export fn main() i32 = { match (g) { case let n: int => return n: i32; case let b: bool => return 11; case let s: str => return 22; }; return 99; }; diff --git a/test/wcc/data/r83_idcast_bool/case.ww b/test/wcc/data/r83_idcast_bool/case.ww new file mode 100644 index 00000000..3eb1761c --- /dev/null +++ b/test/wcc/data/r83_idcast_bool/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 11 +package main; +type u = (int | bool | str); +fn f() u = { let x: u = true; return x: u; }; +export fn main() i32 = { + match (f()) { + case let n: int => return 70; + case let b: bool => return 11; + case let s: str => return 22; + }; + return 99; +}; diff --git a/test/wcc/data/r83_idcast_control/case.ww b/test/wcc/data/r83_idcast_control/case.ww new file mode 100644 index 00000000..dd5f03a5 --- /dev/null +++ b/test/wcc/data/r83_idcast_control/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 11 +package main; +type u = (int | bool | str); +fn f() u = { let x: u = true; return x; }; +export fn main() i32 = { + match (f()) { + case let n: int => return 70; + case let b: bool => return 11; + case let s: str => return 22; + }; + return 99; +}; diff --git a/test/wcc/data/r83_idcast_int/case.ww b/test/wcc/data/r83_idcast_int/case.ww new file mode 100644 index 00000000..58c205ac --- /dev/null +++ b/test/wcc/data/r83_idcast_int/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 7 +package main; +type u = (int | bool | str); +fn f() u = { let x: u = 7; return x: u; }; +export fn main() i32 = { + match (f()) { + case let n: int => return n: i32; + case let b: bool => return 11; + case let s: str => return 22; + }; + return 99; +}; diff --git a/test/wcc/data/r83_tagarr_lit_reject/case.ww b/test/wcc/data/r83_tagarr_lit_reject/case.ww new file mode 100644 index 00000000..fdf4ce23 --- /dev/null +++ b/test/wcc/data/r83_tagarr_lit_reject/case.ww @@ -0,0 +1,4 @@ +//ww:error "array-typed tagged-union variant construction unwired" +package main; +type V = ([3]int | int); +export fn main() i32 = { let v:V=[7,8,9]; return 0; }; diff --git a/test/wcc/data/r83_tagarr_narrow/case.ww b/test/wcc/data/r83_tagarr_narrow/case.ww new file mode 100644 index 00000000..058f21b7 --- /dev/null +++ b/test/wcc/data/r83_tagarr_narrow/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type big = (void | size | [5]size); +export fn main() i32 = { let m:big=7:size; match(m) { case let s:size => return s:i32; case => return 9; }; return 9; }; diff --git a/test/wcc/data/r83_tagarr_return_reject/case.ww b/test/wcc/data/r83_tagarr_return_reject/case.ww new file mode 100644 index 00000000..662d431c --- /dev/null +++ b/test/wcc/data/r83_tagarr_return_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "array-typed tagged-union variant construction unwired" +package main; +type V = ([3]int | int); +fn f() V = { return [7,8,9]; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r83_tagarr_scalar/case.ww b/test/wcc/data/r83_tagarr_scalar/case.ww new file mode 100644 index 00000000..a513ced9 --- /dev/null +++ b/test/wcc/data/r83_tagarr_scalar/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +type V = (int | bool); +export fn main() i32 = { let v:V=5; match(v) { case let n:int => return n:i32; case bool => return 0; }; return 9; }; diff --git a/test/wcc/data/r83_tagarr_slice/case.ww b/test/wcc/data/r83_tagarr_slice/case.ww new file mode 100644 index 00000000..e6b9c0dc --- /dev/null +++ b/test/wcc/data/r83_tagarr_slice/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 9 +package main; +type V = ([]int | int); +export fn main() i32 = { let hb:[3]int=[7,8,9]; let a:[]int=hb; let v:V=a; match(v) { case let s:[]int => return s[2]:i32; case int => return 0; }; return 9; }; diff --git a/test/wcc/data/r83_tagarr_str/case.ww b/test/wcc/data/r83_tagarr_str/case.ww new file mode 100644 index 00000000..fc3ff971 --- /dev/null +++ b/test/wcc/data/r83_tagarr_str/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 2 +package main; +type V = (str | int); +export fn main() i32 = { let v:V="hi"; match(v) { case let s:str => return s.len:i32; case int => return 0; }; return 9; }; diff --git a/test/wcc/data/r83_tagarr_struct/case.ww b/test/wcc/data/r83_tagarr_struct/case.ww new file mode 100644 index 00000000..a34b061f --- /dev/null +++ b/test/wcc/data/r83_tagarr_struct/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 2 +package main; +type P = struct { x: int, y: int }; +type V = (P | int); +export fn main() i32 = { let v: V = P{x=1,y=2}; match(v) { case let p:P => return p.y:i32; case int => return 0; }; return 9; }; diff --git a/test/wcc/data/r83_tagarr_var_reject/case.ww b/test/wcc/data/r83_tagarr_var_reject/case.ww new file mode 100644 index 00000000..ce542db3 --- /dev/null +++ b/test/wcc/data/r83_tagarr_var_reject/case.ww @@ -0,0 +1,4 @@ +//ww:error "array-typed tagged-union variant construction unwired" +package main; +type V = ([3]int | int); +export fn main() i32 = { let a:[3]int=[7,8,9]; let v:V=a; return 0; }; diff --git a/test/wcc/data/r845_tuple_one_comma/case.ww b/test/wcc/data/r845_tuple_one_comma/case.ww new file mode 100644 index 00000000..75ed606c --- /dev/null +++ b/test/wcc/data/r845_tuple_one_comma/case.ww @@ -0,0 +1,7 @@ +//ww:error c "unexpected token in expression" ww "expected expression" +package main; + +fn main() i32 = { + let t = (5,); + return 0; +}; diff --git a/test/wcc/data/r84_const_reassign/case.ww b/test/wcc/data/r84_const_reassign/case.ww new file mode 100644 index 00000000..0bf4e4f0 --- /dev/null +++ b/test/wcc/data/r84_const_reassign/case.ww @@ -0,0 +1,3 @@ +//ww:error "cannot assign to const" +package main; +fn main() i32 = { const x: i32 = 5; x = 6; return x; }; diff --git a/test/wcc/data/r84_dupentry_def/case.ww b/test/wcc/data/r84_dupentry_def/case.ww new file mode 100644 index 00000000..3f0cffda --- /dev/null +++ b/test/wcc/data/r84_dupentry_def/case.ww @@ -0,0 +1,7 @@ +//ww:error "duplicate entry main" +package foo; +export def main: i32 = 5; +export fn anchor() i32 = { return main; }; +package main; +import foo; +fn main() i32 = { return foo.anchor(); }; diff --git a/test/wcc/data/r84_dupentry_fn/case.ww b/test/wcc/data/r84_dupentry_fn/case.ww new file mode 100644 index 00000000..bf20df24 --- /dev/null +++ b/test/wcc/data/r84_dupentry_fn/case.ww @@ -0,0 +1,7 @@ +//ww:error "duplicate entry main" +package foo; +export fn main() i32 = { return 1; }; +export fn anchor() i32 = { return 2; }; +package main; +import foo; +fn main() i32 = { return foo.anchor(); }; diff --git a/test/wcc/data/r84_dupentry_let/case.ww b/test/wcc/data/r84_dupentry_let/case.ww new file mode 100644 index 00000000..aa226be4 --- /dev/null +++ b/test/wcc/data/r84_dupentry_let/case.ww @@ -0,0 +1,7 @@ +//ww:error "duplicate entry main" +package foo; +export let main: i32 = 99; +export fn anchor() i32 = { return main; }; +package main; +import foo; +fn main() i32 = { return foo.anchor(); }; diff --git a/test/wcc/data/r84_dupentry_single_nonmain/case.ww b/test/wcc/data/r84_dupentry_single_nonmain/case.ww new file mode 100644 index 00000000..e8e299a1 --- /dev/null +++ b/test/wcc/data/r84_dupentry_single_nonmain/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 7 +package cmatrix; +fn main() i32 = { return 7; }; diff --git a/test/wcc/data/r84_dupentry_type/case.ww b/test/wcc/data/r84_dupentry_type/case.ww new file mode 100644 index 00000000..b5d215f5 --- /dev/null +++ b/test/wcc/data/r84_dupentry_type/case.ww @@ -0,0 +1,7 @@ +//ww:error "duplicate entry main" +package foo; +export type main = i32; +export fn anchor() i32 = { return 3; }; +package main; +import foo; +fn main() i32 = { return foo.anchor(); }; diff --git a/test/wcc/data/r84_dupfield_adj/case.ww b/test/wcc/data/r84_dupfield_adj/case.ww new file mode 100644 index 00000000..564e8326 --- /dev/null +++ b/test/wcc/data/r84_dupfield_adj/case.ww @@ -0,0 +1,4 @@ +//ww:error "duplicate field" +package main; +type d = struct { a: i32, a: i32 }; +fn main() i32 = { let p: *d = nil; return 0; }; diff --git a/test/wcc/data/r84_dupfield_difftype/case.ww b/test/wcc/data/r84_dupfield_difftype/case.ww new file mode 100644 index 00000000..934cfe3e --- /dev/null +++ b/test/wcc/data/r84_dupfield_difftype/case.ww @@ -0,0 +1,4 @@ +//ww:error "duplicate field" +package main; +type d = struct { a: i32, a: bool }; +fn main() i32 = { let p: *d = nil; return 0; }; diff --git a/test/wcc/data/r84_dupfield_distinct/case.ww b/test/wcc/data/r84_dupfield_distinct/case.ww new file mode 100644 index 00000000..868c2d90 --- /dev/null +++ b/test/wcc/data/r84_dupfield_distinct/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +type pt = struct { x: i32, y: i32 }; +fn main() i32 = { let p: pt = pt{x=3, y=4}; return p.x + p.y; }; diff --git a/test/wcc/data/r84_dupfield_nonadj/case.ww b/test/wcc/data/r84_dupfield_nonadj/case.ww new file mode 100644 index 00000000..fbb503ea --- /dev/null +++ b/test/wcc/data/r84_dupfield_nonadj/case.ww @@ -0,0 +1,4 @@ +//ww:error "duplicate field" +package main; +type d = struct { a: i32, b: i32, a: i32 }; +fn main() i32 = { let p: *d = nil; return 0; }; diff --git a/test/wcc/data/r84_let_reassign/case.ww b/test/wcc/data/r84_let_reassign/case.ww new file mode 100644 index 00000000..c6dee462 --- /dev/null +++ b/test/wcc/data/r84_let_reassign/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 6 +package main; +fn main() i32 = { let y: i32 = 5; y = 6; return y; }; diff --git a/test/wcc/data/r84_matchglob_int/case.ww b/test/wcc/data/r84_matchglob_int/case.ww new file mode 100644 index 00000000..ea1929ac --- /dev/null +++ b/test/wcc/data/r84_matchglob_int/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type box = struct { t: (int | bool), n: int }; +let g: box = box { t = 0, n = 5 }; +fn main() i32 = { + g.t = 42; + match (g.t) { + case let n: int => return n: i32; + case bool => return 1; + }; +}; diff --git a/test/wcc/data/r84_matchglob_local/case.ww b/test/wcc/data/r84_matchglob_local/case.ww new file mode 100644 index 00000000..b940d52a --- /dev/null +++ b/test/wcc/data/r84_matchglob_local/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +type box = struct { t: (int | bool), n: int }; +fn main() i32 = { + let b: box = box { t = 0, n = 5 }; + b.t = 42; + match (b.t) { + case let n: int => return n: i32; + case bool => return 1; + }; +}; diff --git a/test/wcc/data/r84_matchglob_remap/case.ww b/test/wcc/data/r84_matchglob_remap/case.ww new file mode 100644 index 00000000..e7e84b8a --- /dev/null +++ b/test/wcc/data/r84_matchglob_remap/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 12 +package main; +type box = struct { t: (int | bool), n: int }; +let g: box = box { t = 0, n = 5 }; +fn main() i32 = { + g.t = 7; + match (g.t) { + case let n: int => return (n + g.n): i32; + case bool => return 1; + }; +}; diff --git a/test/wcc/data/r84_matchglob_str/case.ww b/test/wcc/data/r84_matchglob_str/case.ww new file mode 100644 index 00000000..769bd442 --- /dev/null +++ b/test/wcc/data/r84_matchglob_str/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 5 +package main; +type box = struct { t: (str | int), n: int }; +let g: box = box { t = 0, n = 5 }; +fn main() i32 = { + g.t = "hello"; + match (g.t) { + case let s: str => return len(s): i32; + case int => return 99; + }; +}; diff --git a/test/wcc/data/r84_qualstruct_fields/case.ww b/test/wcc/data/r84_qualstruct_fields/case.ww new file mode 100644 index 00000000..0948c680 --- /dev/null +++ b/test/wcc/data/r84_qualstruct_fields/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 37 +package pkg; +export type point = struct { x: i64, y: i64 }; +export type rect = struct { lo: point, hi: point }; +package main; +import pkg; +export fn main() i32 = { + let a: pkg.point = pkg.point { x = 3i64, y = 4i64 }; + let b: pkg.point = pkg.point { x = 10i64, y = 20i64 }; + if (a.x != 3i64) { return 1; }; + if (a.y != 4i64) { return 2; }; + if (b.x != 10i64) { return 3; }; + if (b.y != 20i64) { return 4; }; + return (a.x + a.y + b.x + b.y): i32; +}; diff --git a/test/wcc/data/r84_qualstruct_nested/case.ww b/test/wcc/data/r84_qualstruct_nested/case.ww new file mode 100644 index 00000000..e0fbe0e0 --- /dev/null +++ b/test/wcc/data/r84_qualstruct_nested/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 18 +package pkg; +export type point = struct { x: i64, y: i64 }; +export type rect = struct { lo: point, hi: point }; +package main; +import pkg; +export fn main() i32 = { + let r: pkg.rect = pkg.rect { + lo = pkg.point { x = 1i64, y = 2i64 }, + hi = pkg.point { x = 7i64, y = 5i64 } + }; + if (r.lo.x != 1i64) { return 1; }; + if (r.hi.y != 5i64) { return 2; }; + return ((r.hi.x - r.lo.x) * (r.hi.y - r.lo.y)): i32; +}; diff --git a/test/wcc/data/r84_qualstruct_ret_assign/case.ww b/test/wcc/data/r84_qualstruct_ret_assign/case.ww new file mode 100644 index 00000000..6f5d19c6 --- /dev/null +++ b/test/wcc/data/r84_qualstruct_ret_assign/case.ww @@ -0,0 +1,18 @@ +//ww:run-exit 27 +package pkg; +export type point = struct { x: i64, y: i64 }; +export type rect = struct { lo: point, hi: point }; +package main; +import pkg; +fn mk(vx: i64, vy: i64) pkg.point = { + return pkg.point { x = vx, y = vy }; +}; +export fn main() i32 = { + let a: pkg.point = mk(8i64, 2i64); + a = pkg.point { x = 15i64, y = 5i64 }; + if (a.x != 15i64) { return 1; }; + if (a.y != 5i64) { return 2; }; + let b: pkg.point = mk(3i64, 4i64); + if (b.x != 3i64) { return 3; }; + return (a.x + a.y + b.x + b.y): i32; +}; diff --git a/test/wcc/data/r84_size_arith/case.ww b/test/wcc/data/r84_size_arith/case.ww new file mode 100644 index 00000000..23ddbdcf --- /dev/null +++ b/test/wcc/data/r84_size_arith/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +export fn main() i32 = { + let n: size = 1; + let pad: size = size(u64) - n; + return pad: i32; +}; diff --git a/test/wcc/data/r84_size_let_size/case.ww b/test/wcc/data/r84_size_let_size/case.ww new file mode 100644 index 00000000..282a6d4c --- /dev/null +++ b/test/wcc/data/r84_size_let_size/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 8 +package main; +export fn main() i32 = { + let lenbytes: size = size(u64); + return lenbytes: i32; +}; diff --git a/test/wcc/data/r84_size_let_u64/case.ww b/test/wcc/data/r84_size_let_u64/case.ww new file mode 100644 index 00000000..b1ff77da --- /dev/null +++ b/test/wcc/data/r84_size_let_u64/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 8 +package main; +export fn main() i32 = { + let x: u64 = size(int); + return x: i32; +}; diff --git a/test/wcc/data/r84_size_unannotated/case.ww b/test/wcc/data/r84_size_unannotated/case.ww new file mode 100644 index 00000000..32fe5a0c --- /dev/null +++ b/test/wcc/data/r84_size_unannotated/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 8 +package main; +export fn main() i32 = { + let x = size(u64); + return x: i32; +}; diff --git a/test/wcc/data/r84_tagstatic_array_bool/case.ww b/test/wcc/data/r84_tagstatic_array_bool/case.ww new file mode 100644 index 00000000..488d8331 --- /dev/null +++ b/test/wcc/data/r84_tagstatic_array_bool/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 2 +package main; +let gs: [2](int | bool) = [7, true]; +export fn main() int = { + match (gs[1]) { + case let n: int => return 1; + case let b: bool => { if (b) { return 2; }; return 3; }; + }; + return 4; +}; diff --git a/test/wcc/data/r84_tagstatic_array_nonzero/case.ww b/test/wcc/data/r84_tagstatic_array_nonzero/case.ww new file mode 100644 index 00000000..3c2ea3d9 --- /dev/null +++ b/test/wcc/data/r84_tagstatic_array_nonzero/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +let gs: [2](int | bool) = [42, 7]; +export fn main() int = { + match (gs[0]) { + case let n: int => return n; + case bool => return 99; + }; + return 1; +}; diff --git a/test/wcc/data/r84_tagstatic_array_set/case.ww b/test/wcc/data/r84_tagstatic_array_set/case.ww new file mode 100644 index 00000000..2444ed5a --- /dev/null +++ b/test/wcc/data/r84_tagstatic_array_set/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +let gs: [2](int | bool) = [0, 0]; +export fn main() int = { + gs[0] = 42; + match (gs[0]) { + case let n: int => return n; + case bool => return 9; + }; + return 1; +}; diff --git a/test/wcc/data/r84_tagstatic_plain_struct/case.ww b/test/wcc/data/r84_tagstatic_plain_struct/case.ww new file mode 100644 index 00000000..d6ce3255 --- /dev/null +++ b/test/wcc/data/r84_tagstatic_plain_struct/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 9 +package main; +type pt = struct { x: int, y: int }; +let p: pt = pt { x = 5, y = 9 }; +export fn main() int = { return p.y; }; diff --git a/test/wcc/data/r84_tagstatic_struct_nonzero/case.ww b/test/wcc/data/r84_tagstatic_struct_nonzero/case.ww new file mode 100644 index 00000000..a70c6a4e --- /dev/null +++ b/test/wcc/data/r84_tagstatic_struct_nonzero/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 55 +package main; +type box = struct { t: (int | bool), n: int }; +let g: box = box { t = 55, n = 5 }; +fn main() i32 = { + match (g.t) { + case let v: int => return v: i32; + case bool => return 7; + }; + return 1; +}; diff --git a/test/wcc/data/r84_tagstatic_struct_set/case.ww b/test/wcc/data/r84_tagstatic_struct_set/case.ww new file mode 100644 index 00000000..50c85abb --- /dev/null +++ b/test/wcc/data/r84_tagstatic_struct_set/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package main; +type box = struct { t: (int | bool), n: int }; +let g: box = box { t = 0, n = 5 }; +fn main() i32 = { + g.t = 42; + match (g.t) { + case let v: int => return v: i32; + case bool => return 7; + }; + return 1; +}; diff --git a/test/wcc/data/r84_tagstatic_wide_array/case.ww b/test/wcc/data/r84_tagstatic_wide_array/case.ww new file mode 100644 index 00000000..dfed0472 --- /dev/null +++ b/test/wcc/data/r84_tagstatic_wide_array/case.ww @@ -0,0 +1,4 @@ +//ww:error "tagged-union array element static-init needs a zero/int payload" +package main; +let gs: [2](int | str) = ["hi", 0]; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r84_tagstatic_wide_struct/case.ww b/test/wcc/data/r84_tagstatic_wide_struct/case.ww new file mode 100644 index 00000000..e5eef765 --- /dev/null +++ b/test/wcc/data/r84_tagstatic_wide_struct/case.ww @@ -0,0 +1,5 @@ +//ww:error "tagged-union struct-field" +package main; +type sbox = struct { s: (int | str) }; +let g: sbox = sbox { s = "hi" }; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r84_tuple_two_comma/case.ww b/test/wcc/data/r84_tuple_two_comma/case.ww new file mode 100644 index 00000000..6ee17c6a --- /dev/null +++ b/test/wcc/data/r84_tuple_two_comma/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +fn pair() (i32, i32) = { return (3, 4,); }; +fn main() i32 = { let a, b = pair(); return a + b; }; diff --git a/test/wcc/data/r84_tuple_two_elem/case.ww b/test/wcc/data/r84_tuple_two_elem/case.ww new file mode 100644 index 00000000..f5b54c39 --- /dev/null +++ b/test/wcc/data/r84_tuple_two_elem/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +fn pair() (i32, i32) = { return (3, 4); }; +fn main() i32 = { let a, b = pair(); return a + b; }; diff --git a/test/wcc/data/r84_voidless_nonvoid/case.ww b/test/wcc/data/r84_voidless_nonvoid/case.ww new file mode 100644 index 00000000..03b02737 --- /dev/null +++ b/test/wcc/data/r84_voidless_nonvoid/case.ww @@ -0,0 +1,4 @@ +//ww:error "not assignable" +package main; +fn f() i32 = { return; }; +fn main() i32 = { return f(); }; diff --git a/test/wcc/data/r84_voidless_tagged/case.ww b/test/wcc/data/r84_voidless_tagged/case.ww new file mode 100644 index 00000000..baaa16b8 --- /dev/null +++ b/test/wcc/data/r84_voidless_tagged/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 9 +package main; +fn f(x: i32) (i32 | void) = { if (x > 0) { return x; }; return; }; +fn main() i32 = { match (f(0)) { case let v: i32 => return v; case => return 9; }; }; diff --git a/test/wcc/data/r84_voidless_value/case.ww b/test/wcc/data/r84_voidless_value/case.ww new file mode 100644 index 00000000..7ef644f4 --- /dev/null +++ b/test/wcc/data/r84_voidless_value/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +fn f() i32 = { return 5; }; +fn main() i32 = { return f(); }; diff --git a/test/wcc/data/r84_voidless_void/case.ww b/test/wcc/data/r84_voidless_void/case.ww new file mode 100644 index 00000000..67ef7405 --- /dev/null +++ b/test/wcc/data/r84_voidless_void/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +fn f() void = { return; }; +fn main() i32 = { f(); return 5; }; diff --git a/test/wcc/data/r85_enum_dup_member/case.ww b/test/wcc/data/r85_enum_dup_member/case.ww new file mode 100644 index 00000000..e52cec18 --- /dev/null +++ b/test/wcc/data/r85_enum_dup_member/case.ww @@ -0,0 +1,4 @@ +//ww:error "duplicate enum member" +package main; +type e = enum { A, B, A }; +fn main() i32 = { return e.A as i32; }; diff --git a/test/wcc/data/r85_enum_fwd_ref/case.ww b/test/wcc/data/r85_enum_fwd_ref/case.ww new file mode 100644 index 00000000..b96cc2ba --- /dev/null +++ b/test/wcc/data/r85_enum_fwd_ref/case.ww @@ -0,0 +1,4 @@ +//ww:error "enum value" +package main; +type e = enum { A = B, B }; +fn main() i32 = { return e.A as i32; }; diff --git a/test/wcc/data/r85_index_alias/case.ww b/test/wcc/data/r85_index_alias/case.ww new file mode 100644 index 00000000..6b312fe5 --- /dev/null +++ b/test/wcc/data/r85_index_alias/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 30 +package main; +type ix = i32; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let i: ix = 2; + return a[i]; +}; diff --git a/test/wcc/data/r85_index_bool/case.ww b/test/wcc/data/r85_index_bool/case.ww new file mode 100644 index 00000000..92b7cd78 --- /dev/null +++ b/test/wcc/data/r85_index_bool/case.ww @@ -0,0 +1,7 @@ +//ww:error "index must be integer" +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let b: bool = true; + return a[b]; +}; diff --git a/test/wcc/data/r85_index_enum/case.ww b/test/wcc/data/r85_index_enum/case.ww new file mode 100644 index 00000000..46d206c4 --- /dev/null +++ b/test/wcc/data/r85_index_enum/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 20 +package main; +type col = enum { A, B, C }; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + return a[col.B]; +}; diff --git a/test/wcc/data/r85_index_float/case.ww b/test/wcc/data/r85_index_float/case.ww new file mode 100644 index 00000000..02226a55 --- /dev/null +++ b/test/wcc/data/r85_index_float/case.ww @@ -0,0 +1,7 @@ +//ww:error "index must be integer" +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let f: f64 = 1.0; + return a[f]; +}; diff --git a/test/wcc/data/r85_index_int/case.ww b/test/wcc/data/r85_index_int/case.ww new file mode 100644 index 00000000..9a930142 --- /dev/null +++ b/test/wcc/data/r85_index_int/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 20 +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let i: int = 1; + return a[i]; +}; diff --git a/test/wcc/data/r85_index_ptr/case.ww b/test/wcc/data/r85_index_ptr/case.ww new file mode 100644 index 00000000..7d7c187d --- /dev/null +++ b/test/wcc/data/r85_index_ptr/case.ww @@ -0,0 +1,7 @@ +//ww:error "index must be integer" +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let p: *i32 = nil; + return a[p]; +}; diff --git a/test/wcc/data/r85_index_str/case.ww b/test/wcc/data/r85_index_str/case.ww new file mode 100644 index 00000000..27b3e5a7 --- /dev/null +++ b/test/wcc/data/r85_index_str/case.ww @@ -0,0 +1,7 @@ +//ww:error "index must be integer" +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let s: str = "x"; + return a[s]; +}; diff --git a/test/wcc/data/r85_index_uint/case.ww b/test/wcc/data/r85_index_uint/case.ww new file mode 100644 index 00000000..59de3f96 --- /dev/null +++ b/test/wcc/data/r85_index_uint/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 30 +package main; +fn main() i32 = { + let a: [3]i32 = [10i32, 20i32, 30i32]; + let i: uint = 2; + return a[i]; +}; diff --git a/test/wcc/data/r85_varbody_bare/case.ww b/test/wcc/data/r85_varbody_bare/case.ww new file mode 100644 index 00000000..4468b448 --- /dev/null +++ b/test/wcc/data/r85_varbody_bare/case.ww @@ -0,0 +1,4 @@ +//ww:error "C-style variadic '...' requires a bodiless declaration" +package main; +fn f(...) void = { return; }; +fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r85_varbody_cvar/case.ww b/test/wcc/data/r85_varbody_cvar/case.ww new file mode 100644 index 00000000..7d938b6e --- /dev/null +++ b/test/wcc/data/r85_varbody_cvar/case.ww @@ -0,0 +1,4 @@ +//ww:error "C-style variadic '...' requires a bodiless declaration" +package main; +fn f(x: i64, ...) void = { return; }; +fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r85_varbody_extern/case.ww b/test/wcc/data/r85_varbody_extern/case.ww new file mode 100644 index 00000000..b3658ed7 --- /dev/null +++ b/test/wcc/data/r85_varbody_extern/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +@symbol("extfix") fn extfix(x: i64, ...) i64; +fn main() i32 = { return 7; }; diff --git a/test/wcc/data/r85_varbody_hare/case.ww b/test/wcc/data/r85_varbody_hare/case.ww new file mode 100644 index 00000000..f90c2636 --- /dev/null +++ b/test/wcc/data/r85_varbody_hare/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +fn sum(xs: i64...) i64 = { return 0; }; +fn main() i32 = { return 7; }; diff --git a/test/wcc/data/r913_def_mangle_exported/case.ww b/test/wcc/data/r913_def_mangle_exported/case.ww new file mode 100644 index 00000000..7defa65c --- /dev/null +++ b/test/wcc/data/r913_def_mangle_exported/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 100 +// Source-level runtime half of 913_def_mangle_run.c exported_def_i64. +package main; +export def X: i64 = 100i64; +export fn main() i32 = { return X: i32; }; diff --git a/test/wcc/data/r913_def_mangle_local/case.ww b/test/wcc/data/r913_def_mangle_local/case.ww new file mode 100644 index 00000000..274842db --- /dev/null +++ b/test/wcc/data/r913_def_mangle_local/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 77 +// Source-level runtime half of 913_def_mangle_run.c main_local_def_i64. +package main; +def X: i64 = 77i64; +export fn main() i32 = { return X: i32; }; diff --git a/test/wcc/data/r913_def_mangle_multi/case.ww b/test/wcc/data/r913_def_mangle_multi/case.ww new file mode 100644 index 00000000..1956c124 --- /dev/null +++ b/test/wcc/data/r913_def_mangle_multi/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 100 +// Source-level runtime half of 913_def_mangle_run.c multi_def. +package main; +def A: u64 = 10u64; +def B: u64 = 30u64; +export def C: u64 = 60u64; +export fn main() i32 = { return (A + B + C): i32; }; diff --git a/test/wcc/data/r913_def_mangle_u64/case.ww b/test/wcc/data/r913_def_mangle_u64/case.ww new file mode 100644 index 00000000..71b3ac14 --- /dev/null +++ b/test/wcc/data/r913_def_mangle_u64/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 200 +// Source-level runtime half of 913_def_mangle_run.c u64_def. +package main; +def X: u64 = 200u64; +export fn main() i32 = { return X: i32; }; diff --git a/test/wcc/data/r915_arr_local_control/case.ww b/test/wcc/data/r915_arr_local_control/case.ww new file mode 100644 index 00000000..7daa1fa4 --- /dev/null +++ b/test/wcc/data/r915_arr_local_control/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 30 +package main; +export fn main() i32 = { + let a: [4]u16 = [10u16, 20u16, 30u16, 40u16]; + let v: u32 = (a[2]: u32); + return v: i32; +}; diff --git a/test/wcc/data/r915_arr_local_nonzero/case.ww b/test/wcc/data/r915_arr_local_nonzero/case.ww new file mode 100644 index 00000000..db9322e7 --- /dev/null +++ b/test/wcc/data/r915_arr_local_nonzero/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 1 +package main; +export fn main() i32 = { + let t: [8]u16 = [0u16, 0x0800u16, 0x0801u16, 0x0803u16, + 0x1006u16, 0x1009u16, 0x100Du16, 0x1812u16]; + let v: u32 = (t[2]: u32); + return v: i32; +}; diff --git a/test/wcc/data/r920_arrfit_bare_u32/case.ww b/test/wcc/data/r920_arrfit_bare_u32/case.ww new file mode 100644 index 00000000..e24db868 --- /dev/null +++ b/test/wcc/data/r920_arrfit_bare_u32/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 10 +package main; +let A: [4]u32 = [10, 20, 30, 40]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r920_arrfit_bare_u64/case.ww b/test/wcc/data/r920_arrfit_bare_u64/case.ww new file mode 100644 index 00000000..95213d11 --- /dev/null +++ b/test/wcc/data/r920_arrfit_bare_u64/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +let A: [2]u64 = [5, 6]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r920_arrfit_bare_u8/case.ww b/test/wcc/data/r920_arrfit_bare_u8/case.ww new file mode 100644 index 00000000..21481139 --- /dev/null +++ b/test/wcc/data/r920_arrfit_bare_u8/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 1 +package main; +let A: [4]u8 = [1, 2, 3, 4]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r920_arrfit_i8_boundary/case.ww b/test/wcc/data/r920_arrfit_i8_boundary/case.ww new file mode 100644 index 00000000..a9f8cb24 --- /dev/null +++ b/test/wcc/data/r920_arrfit_i8_boundary/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 127 +package main; +let A: [2]i8 = [127, -128]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r920_arrfit_i8_over/case.ww b/test/wcc/data/r920_arrfit_i8_over/case.ww new file mode 100644 index 00000000..d4409526 --- /dev/null +++ b/test/wcc/data/r920_arrfit_i8_over/case.ww @@ -0,0 +1,4 @@ +//ww:error "array element out of range" +package main; +let A: [2]i8 = [128, 0]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r920_arrfit_negative_u8/case.ww b/test/wcc/data/r920_arrfit_negative_u8/case.ww new file mode 100644 index 00000000..4e21380e --- /dev/null +++ b/test/wcc/data/r920_arrfit_negative_u8/case.ww @@ -0,0 +1,4 @@ +//ww:error "array element out of range" +package main; +let A: [2]u8 = [-1, 0]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r920_arrfit_nonfold/case.ww b/test/wcc/data/r920_arrfit_nonfold/case.ww new file mode 100644 index 00000000..fc9189a9 --- /dev/null +++ b/test/wcc/data/r920_arrfit_nonfold/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 5 +package main; +export fn main() i32 = { + let u: u8 = 5u8; + let A: [2]u8 = [u, 0u8]; + return A[0]: i32; +}; diff --git a/test/wcc/data/r920_arrfit_nonfold_wide/case.ww b/test/wcc/data/r920_arrfit_nonfold_wide/case.ww new file mode 100644 index 00000000..3ca1f2da --- /dev/null +++ b/test/wcc/data/r920_arrfit_nonfold_wide/case.ww @@ -0,0 +1,5 @@ +//ww:error "not assignable" +package main; +let i: int = 5; +let A: [2]u8 = [i, 0u8]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r920_arrfit_over_256/case.ww b/test/wcc/data/r920_arrfit_over_256/case.ww new file mode 100644 index 00000000..e0c90e46 --- /dev/null +++ b/test/wcc/data/r920_arrfit_over_256/case.ww @@ -0,0 +1,4 @@ +//ww:error "array element out of range" +package main; +let A: [2]u8 = [256, 0]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r920_arrfit_over_300/case.ww b/test/wcc/data/r920_arrfit_over_300/case.ww new file mode 100644 index 00000000..f4679725 --- /dev/null +++ b/test/wcc/data/r920_arrfit_over_300/case.ww @@ -0,0 +1,4 @@ +//ww:error "array element out of range" +package main; +let A: [2]u8 = [300, 1]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r920_arrfit_signed/case.ww b/test/wcc/data/r920_arrfit_signed/case.ww new file mode 100644 index 00000000..2ad20003 --- /dev/null +++ b/test/wcc/data/r920_arrfit_signed/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 255 +package main; +let A: [4]i32 = [-1, -2, -3, -4]; +export fn main() i32 = { return A[0]; }; diff --git a/test/wcc/data/r920_arrfit_str_u8/case.ww b/test/wcc/data/r920_arrfit_str_u8/case.ww new file mode 100644 index 00000000..dc2f0881 --- /dev/null +++ b/test/wcc/data/r920_arrfit_str_u8/case.ww @@ -0,0 +1,4 @@ +//ww:error "not assignable" +package main; +let A: [2]u8 = ["x", "y"]; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r920_arrfit_typed/case.ww b/test/wcc/data/r920_arrfit_typed/case.ww new file mode 100644 index 00000000..378cf39b --- /dev/null +++ b/test/wcc/data/r920_arrfit_typed/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 1 +package main; +let A: [4]u8 = [1u8, 2u8, 3u8, 4u8]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r920_arrfit_u8_max/case.ww b/test/wcc/data/r920_arrfit_u8_max/case.ww new file mode 100644 index 00000000..ed89bd05 --- /dev/null +++ b/test/wcc/data/r920_arrfit_u8_max/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 255 +package main; +let A: [2]u8 = [255, 0]; +export fn main() i32 = { return A[0]: i32; }; diff --git a/test/wcc/data/r921_amp_arr_index/case.ww b/test/wcc/data/r921_amp_arr_index/case.ww new file mode 100644 index 00000000..4a4277a0 --- /dev/null +++ b/test/wcc/data/r921_amp_arr_index/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 18 +package main; +fn rd(p: *i64) i64 = { return *p; }; +export fn main() i32 = { + let a: [3]i64 = [5i64, 18i64, 9i64]; + let p: *i64 = &a[1]; + return rd(p): i32; +}; diff --git a/test/wcc/data/r921_amp_def_array/case.ww b/test/wcc/data/r921_amp_def_array/case.ww new file mode 100644 index 00000000..2e8c8df5 --- /dev/null +++ b/test/wcc/data/r921_amp_def_array/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 18 +package main; +def A: [3]i64 = [18i64, 11i64, 0i64]; +fn rd(p: *[3]i64) i64 = { let q: *i64 = p: *i64; return *q; }; +export fn main() i32 = { return rd(&A): i32; }; diff --git a/test/wcc/data/r921_amp_def_float/case.ww b/test/wcc/data/r921_amp_def_float/case.ww new file mode 100644 index 00000000..0c960739 --- /dev/null +++ b/test/wcc/data/r921_amp_def_float/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 50 +package main; +def D: f64 = 0.5; +fn rd(p: *f64) f64 = { return *p; }; +export fn main() i32 = { return (rd(&D) * 100.0): i32; }; diff --git a/test/wcc/data/r921_amp_def_int/case.ww b/test/wcc/data/r921_amp_def_int/case.ww new file mode 100644 index 00000000..d4b590f3 --- /dev/null +++ b/test/wcc/data/r921_amp_def_int/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 42 +package main; +def N: i32 = 42; +fn rd(p: *i32) i32 = { return *p; }; +export fn main() i32 = { return rd(&N); }; diff --git a/test/wcc/data/r921_amp_def_struct/case.ww b/test/wcc/data/r921_amp_def_struct/case.ww new file mode 100644 index 00000000..489961e2 --- /dev/null +++ b/test/wcc/data/r921_amp_def_struct/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 18 +package main; +type pt = struct { x: i32, y: i32 }; +def P: pt = pt{x=7, y=11}; +fn rd(p: *pt) i32 = { return p.x + p.y; }; +export fn main() i32 = { return rd(&P); }; diff --git a/test/wcc/data/r921_amp_float_def_reject/case.ww b/test/wcc/data/r921_amp_float_def_reject/case.ww new file mode 100644 index 00000000..26c57e4b --- /dev/null +++ b/test/wcc/data/r921_amp_float_def_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "cannot take address of non-addressable def" +package main; +def D: f64 = 1.0 / 4.0; +fn rd(p: *f64) f64 = { return *p; }; +export fn main() i32 = { return (rd(&D) * 100.0): i32; }; diff --git a/test/wcc/data/r921_amp_let_struct/case.ww b/test/wcc/data/r921_amp_let_struct/case.ww new file mode 100644 index 00000000..a699617f --- /dev/null +++ b/test/wcc/data/r921_amp_let_struct/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 18 +package main; +type pt = struct { x: i32, y: i32 }; +let L: pt = pt{x=7, y=11}; +fn rd(p: *pt) i32 = { return p.x + p.y; }; +export fn main() i32 = { return rd(&L); }; diff --git a/test/wcc/data/r921_amp_str_def_reject/case.ww b/test/wcc/data/r921_amp_str_def_reject/case.ww new file mode 100644 index 00000000..aeb6d937 --- /dev/null +++ b/test/wcc/data/r921_amp_str_def_reject/case.ww @@ -0,0 +1,5 @@ +//ww:error "cannot take address of non-addressable def" +package main; +def MSG: str = "hello"; +fn rd(p: *str) i32 = { return 7; }; +export fn main() i32 = { return rd(&MSG); }; diff --git a/test/wcc/data/r921_amp_xmod_def/case.ww b/test/wcc/data/r921_amp_xmod_def/case.ww new file mode 100644 index 00000000..89a21df2 --- /dev/null +++ b/test/wcc/data/r921_amp_xmod_def/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 18 +package myf; +export type pt = struct { x: i32, y: i32 }; +export def P: pt = pt{x=7, y=11}; +package main; +import myf; +fn rd(p: *myf.pt) i32 = { return p.x + p.y; }; +export fn main() i32 = { return rd(&myf.P); }; diff --git a/test/wcc/data/r921_amp_xmod_fn/case.ww b/test/wcc/data/r921_amp_xmod_fn/case.ww new file mode 100644 index 00000000..73beba25 --- /dev/null +++ b/test/wcc/data/r921_amp_xmod_fn/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package myf; +export fn helper() i32 = { return 42; }; +package main; +import myf; +fn take(p: *fn() i32) i32 = { return 7; }; +export fn main() i32 = { return take(&myf.helper); }; diff --git a/test/wcc/data/r921_amp_xmod_let/case.ww b/test/wcc/data/r921_amp_xmod_let/case.ww new file mode 100644 index 00000000..bb0e4fe6 --- /dev/null +++ b/test/wcc/data/r921_amp_xmod_let/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 18 +package myf; +export type pt = struct { x: i32, y: i32 }; +export let L: pt = pt{x=7, y=11}; +package main; +import myf; +fn rd(p: *myf.pt) i32 = { return p.x + p.y; }; +export fn main() i32 = { return rd(&myf.L); }; diff --git a/test/wcc/data/r921_amp_xmod_scalar/case.ww b/test/wcc/data/r921_amp_xmod_scalar/case.ww new file mode 100644 index 00000000..f560d0a1 --- /dev/null +++ b/test/wcc/data/r921_amp_xmod_scalar/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 42 +package myf; +export let S: i32 = 42; +package main; +import myf; +fn rd(p: *i32) i32 = { return *p; }; +export fn main() i32 = { return rd(&myf.S); }; diff --git a/test/wcc/data/r926_sret_reject_call_arg/case.ww b/test/wcc/data/r926_sret_reject_call_arg/case.ww new file mode 100644 index 00000000..fcca2c16 --- /dev/null +++ b/test/wcc/data/r926_sret_reject_call_arg/case.ww @@ -0,0 +1,19 @@ +//ww:error "#38b: sret-class tagged call result as a >48B by-value arg unwired (#40-family follow-up)" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +fn mk(b: []u8) (wide | oops | nomem) = { return wide { xs = b, ys = b, n = 1 }; }; +fn use(r: (wide | oops | nomem)) i64 = { + match (r) { + case let w: wide => return w.n; + case let e: oops => return -1; + case nomem => return -2; + }; + return -3; +}; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + if (use(mk(buf[0:4])) != 1) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r926_sret_reject_global/case.ww b/test/wcc/data/r926_sret_reject_global/case.ww new file mode 100644 index 00000000..30868f90 --- /dev/null +++ b/test/wcc/data/r926_sret_reject_global/case.ww @@ -0,0 +1,17 @@ +//ww:error "sret receive into a tagged GLOBAL lvalue unwired" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +let g: (wide | oops | nomem); +fn mk(b: []u8) (wide | oops | nomem) = { return wide { xs = b, ys = b, n = 1 }; }; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + g = mk(buf[0:4]); + match (g) { + case let w: wide => { if (w.n != 1) { return 1; }; }; + case let e: oops => return 13; + case nomem => return 14; + }; + return 0; +}; diff --git a/test/wcc/data/r926_sret_reject_struct_field/case.ww b/test/wcc/data/r926_sret_reject_struct_field/case.ww new file mode 100644 index 00000000..90b0a6a6 --- /dev/null +++ b/test/wcc/data/r926_sret_reject_struct_field/case.ww @@ -0,0 +1,17 @@ +//ww:error "#40: sret-class call result cannot be cursor-widened into a tagged slot (mem-to-mem widen unwired)" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +type holder = struct { r: (wide | oops | nomem), k: i64 }; +fn mk(b: []u8) (wide | oops | nomem) = { return wide { xs = b, ys = b, n = 1 }; }; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + let h: holder = holder { r = mk(buf[0:4]), k = 5 }; + match (h.r) { + case let w: wide => { if (w.n != 1) { return 1; }; }; + case let e: oops => return 13; + case nomem => return 14; + }; + return 0; +}; diff --git a/test/wcc/data/r926_sret_reject_tryprop/case.ww b/test/wcc/data/r926_sret_reject_tryprop/case.ww new file mode 100644 index 00000000..4ae290a7 --- /dev/null +++ b/test/wcc/data/r926_sret_reject_tryprop/case.ww @@ -0,0 +1,16 @@ +//ww:error "on an sret-class call result unwired" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +fn mk(b: []u8) (wide | oops | nomem) = { return wide { xs = b, ys = b, n = 1 }; }; +fn go(b: []u8) (i64 | oops | nomem) = { let w: wide = mk(b)?; return w.n; }; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + match (go(buf[0:4])) { + case let v: i64 => { if (v != 1) { return 1; }; }; + case let e: oops => return 13; + case nomem => return 14; + }; + return 0; +}; diff --git a/test/wcc/data/r926_sret_reject_tryunw/case.ww b/test/wcc/data/r926_sret_reject_tryunw/case.ww new file mode 100644 index 00000000..f20f7921 --- /dev/null +++ b/test/wcc/data/r926_sret_reject_tryunw/case.ww @@ -0,0 +1,12 @@ +//ww:error "on an sret-class call result unwired" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +fn mk(b: []u8) (wide | oops | nomem) = { return wide { xs = b, ys = b, n = 1 }; }; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + let w: wide = mk(buf[0:4])!; + if (w.n != 1) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r926_sret_reject_typetest/case.ww b/test/wcc/data/r926_sret_reject_typetest/case.ww new file mode 100644 index 00000000..faa1cf55 --- /dev/null +++ b/test/wcc/data/r926_sret_reject_typetest/case.ww @@ -0,0 +1,11 @@ +//ww:error "`is` on an sret-class call result unwired" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +fn mk(b: []u8) (wide | oops | nomem) = { return wide { xs = b, ys = b, n = 1 }; }; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + if (mk(buf[0:4]) is wide) { return 0; }; + return 1; +}; diff --git a/test/wcc/data/r926_sret_reject_widen_forward/case.ww b/test/wcc/data/r926_sret_reject_widen_forward/case.ww new file mode 100644 index 00000000..5984810d --- /dev/null +++ b/test/wcc/data/r926_sret_reject_widen_forward/case.ww @@ -0,0 +1,16 @@ +//ww:error "widening tagged return-forward" +package main; +type oops = !str; +type nomem = !void; +type wide = struct { xs: []u8, ys: []u8, n: i64 }; +fn inner(b: []u8) (wide | oops) = { return wide { xs = b, ys = b, n = 1 }; }; +fn outer(b: []u8) (wide | oops | nomem) = { return inner(b); }; +export fn main() i32 = { + let buf: [4]u8 = [1u8, 2u8, 3u8, 4u8]; + match (outer(buf[0:4])) { + case let w: wide => return 0; + case let e: oops => return 13; + case nomem => return 14; + }; + return 0; +}; diff --git a/test/wcc/data/r926_tagscr_idx_sret/case.ww b/test/wcc/data/r926_tagscr_idx_sret/case.ww new file mode 100644 index 00000000..fae13cc5 --- /dev/null +++ b/test/wcc/data/r926_tagscr_idx_sret/case.ww @@ -0,0 +1,24 @@ +//ww:run +// Runtime half of 926_tagscr_sizes_run.c idx_store_then_sret. +package main; +type oops = !str; +type nomem = !void; +type p48 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type small = (p48 | bool); +type p56 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64 }; +fn f() (p56 | oops | nomem) = { + let arr: [2]small; + let b: bool = true; + let v: small = b; + arr[1] = v; + let e: small = arr[1]; + if (!(e is bool)) { return "bad": oops; }; + return p56 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7 }; +}; +export fn main() i32 = { + match (f()) { + case let w: p56 => { if (w.g != 7) { return 1; }; }; + case => return 2; + }; + return 0; +}; diff --git a/test/wcc/data/r926_tagscr_large_small/case.ww b/test/wcc/data/r926_tagscr_large_small/case.ww new file mode 100644 index 00000000..32f57747 --- /dev/null +++ b/test/wcc/data/r926_tagscr_large_small/case.ww @@ -0,0 +1,29 @@ +//ww:run +// Runtime half of 926_tagscr_sizes_run.c large_then_small. +package main; +type oops = !str; +type nomem = !void; +type p48 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type small = (p48 | bool); +type p56 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64 }; +fn f(flag: bool) (p56 | oops | nomem) = { + if (flag) { return p56 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 9 }; }; + let xs: []small; + let b: bool = true; + let v: small = b; + append(xs, v); + let e: small = xs[0]; + if (!(e is bool)) { return "bad": oops; }; + return p56 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7 }; +}; +export fn main() i32 = { + match (f(false)) { + case let w: p56 => { if (w.g != 7) { return 1; }; }; + case => return 2; + }; + match (f(true)) { + case let w: p56 => { if (w.g != 9) { return 3; }; }; + case => return 4; + }; + return 0; +}; diff --git a/test/wcc/data/r926_tagscr_same_twice/case.ww b/test/wcc/data/r926_tagscr_same_twice/case.ww new file mode 100644 index 00000000..3903cd70 --- /dev/null +++ b/test/wcc/data/r926_tagscr_same_twice/case.ww @@ -0,0 +1,31 @@ +//ww:run +// Runtime half of 926_tagscr_sizes_run.c same_size_twice. +package main; +type oops = !str; +type nomem = !void; +type p48 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type small = (p48 | bool); +type p56 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64 }; +type other = (p48 | i64); +export fn main() i32 = { + let canary1: i64 = 111; + let xs: []small; + let ys: []other; + let b: bool = true; + let v: small = b; + append(xs, v); + let canary2: i64 = 222; + let n: i64 = 7; + let w: other = n; + append(ys, w); + if (canary1 != 111) { return 11; }; + if (canary2 != 222) { return 12; }; + let e: small = xs[0]; + if (!(e is bool)) { return 1; }; + let e2: other = ys[0]; + match (e2) { + case let q: i64 => { if (q != 7) { return 2; }; }; + case => return 3; + }; + return 0; +}; diff --git a/test/wcc/data/r926_tagscr_single/case.ww b/test/wcc/data/r926_tagscr_single/case.ww new file mode 100644 index 00000000..7ad59ecd --- /dev/null +++ b/test/wcc/data/r926_tagscr_single/case.ww @@ -0,0 +1,17 @@ +//ww:run +// Runtime half of 926_tagscr_sizes_run.c single_size_control. +package main; +type oops = !str; +type nomem = !void; +type p48 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type small = (p48 | bool); +type p56 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64 }; +export fn main() i32 = { + let xs: []small; + let b: bool = true; + let v: small = b; + append(xs, v); + let e: small = xs[0]; + if (!(e is bool)) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r926_tagscr_small_large/case.ww b/test/wcc/data/r926_tagscr_small_large/case.ww new file mode 100644 index 00000000..55df80bd --- /dev/null +++ b/test/wcc/data/r926_tagscr_small_large/case.ww @@ -0,0 +1,22 @@ +//ww:run +// Runtime half of 926_tagscr_sizes_run.c small_then_large. +package main; +type oops = !str; +type nomem = !void; +type p48 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 }; +type small = (p48 | bool); +type p56 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64, g: i64 }; +fn f() (p56 | oops | nomem) = { + let xs: []small; + let b: bool = true; + let v: small = b; + append(xs, v); + return p56 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7 }; +}; +export fn main() i32 = { + match (f()) { + case let w: p56 => { if (w.g != 7) { return 1; }; }; + case => return 2; + }; + return 0; +}; diff --git a/test/wcc/data/r929_memarg_reject_call_overflow/case.ww b/test/wcc/data/r929_memarg_reject_call_overflow/case.ww new file mode 100644 index 00000000..bc543b70 --- /dev/null +++ b/test/wcc/data/r929_memarg_reject_call_overflow/case.ww @@ -0,0 +1,19 @@ +//ww:error ">48B tagged arg mixed with register-overflow stack args unwired" +package main; +type t_lit = rune; +type t_any = void; +type t_rep = struct { id: size, origin: size, m0: size, m1: size, m2: size, m3: size }; +type t_u = (t_lit | t_any | t_rep); +export fn main() i32 = { + let r: t_rep = t_rep { id = 7, origin = 9, m0 = 10, m1 = 11, m2 = 12, m3 = 1234 }; + let a: t_u = r; + if (f(a, "abc", "de", 1) != 1240) { return 1; }; + return 0; +}; +fn f(a: t_u, s1: str, s2: str, k: i64) i64 = { + match (a) { + case let r: t_rep => return (r.m3: i64) + (s1.len: i64) + (s2.len: i64) + k; + case => return 91; + }; + return 99; +}; diff --git a/test/wcc/data/r929_memarg_reject_callsrc/case.ww b/test/wcc/data/r929_memarg_reject_callsrc/case.ww new file mode 100644 index 00000000..37b1e29f --- /dev/null +++ b/test/wcc/data/r929_memarg_reject_callsrc/case.ww @@ -0,0 +1,16 @@ +//ww:error "sret-class tagged call result as a >48B by-value arg unwired" +package main; +type t_lit = rune; +type t_any = void; +type t_rep = struct { id: size, origin: size, m0: size, m1: size, m2: size, m3: size }; +type t_u = (t_lit | t_any | t_rep); +fn probe(a: t_u) i32 = { + match (a) { + case let l: t_lit => { if (l == 'x') { return 1; }; return 91; }; + case t_any => return 2; + case let r: t_rep => { if (r.m3 != 1234) { return 92; }; return 3; }; + }; + return 99; +}; +fn mk() t_u = { return ('x': t_lit); }; +export fn main() i32 = { if (probe(mk()) != 1) { return 1; }; return 0; }; diff --git a/test/wcc/data/r929_memarg_reject_param_overflow/case.ww b/test/wcc/data/r929_memarg_reject_param_overflow/case.ww new file mode 100644 index 00000000..7d25fa7c --- /dev/null +++ b/test/wcc/data/r929_memarg_reject_param_overflow/case.ww @@ -0,0 +1,19 @@ +//ww:error ">48B tagged param mixed with stack-spilled params unwired" +package main; +type t_lit = rune; +type t_any = void; +type t_rep = struct { id: size, origin: size, m0: size, m1: size, m2: size, m3: size }; +type t_u = (t_lit | t_any | t_rep); +fn f(a: t_u, s1: str, s2: str, k: i64) i64 = { + match (a) { + case let r: t_rep => return (r.m3: i64) + (s1.len: i64) + (s2.len: i64) + k; + case => return 91; + }; + return 99; +}; +export fn main() i32 = { + let r: t_rep = t_rep { id = 7, origin = 9, m0 = 10, m1 = 11, m2 = 12, m3 = 1234 }; + let a: t_u = r; + if (f(a, "abc", "de", 1) != 1240) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r929_memarg_reject_variadic/case.ww b/test/wcc/data/r929_memarg_reject_variadic/case.ww new file mode 100644 index 00000000..87e78ae0 --- /dev/null +++ b/test/wcc/data/r929_memarg_reject_variadic/case.ww @@ -0,0 +1,12 @@ +//ww:error ">48B tagged variadic element unwired" +package main; +type t_lit = rune; +type t_any = void; +type t_rep = struct { id: size, origin: size, m0: size, m1: size, m2: size, m3: size }; +type t_u = (t_lit | t_any | t_rep); +fn v(xs: t_u...) i32 = { return len(xs): i32; }; +export fn main() i32 = { + let a: t_u = ('x': t_lit); + if (v(a) != 1) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r930_free_alloc/case.ww b/test/wcc/data/r930_free_alloc/case.ww new file mode 100644 index 00000000..294f5257 --- /dev/null +++ b/test/wcc/data/r930_free_alloc/case.ww @@ -0,0 +1,10 @@ +//ww:run +// Runtime half of 930_free_noop_run.c free_alloc_roundtrip. +package main; +import rt; +export fn main() i32 = { + let p: *i64 = alloc(11i64)!; + free(p); + if (*p != 11i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r930_free_call_effect/case.ww b/test/wcc/data/r930_free_call_effect/case.ww new file mode 100644 index 00000000..c4f71343 --- /dev/null +++ b/test/wcc/data/r930_free_call_effect/case.ww @@ -0,0 +1,12 @@ +//ww:run +// Runtime half of 930_free_noop_run.c free_call_operand_effects. +package main; +let g: i32 = 0; +fn bump(p: *i32) *i32 = { g = g + 2; return p; }; +export fn main() i32 = { + let x: i32 = 1; + free(bump(&x)); + free(bump(&x)); + if (g != 4) { return 3; }; + return 0; +}; diff --git a/test/wcc/data/r930_free_field/case.ww b/test/wcc/data/r930_free_field/case.ww new file mode 100644 index 00000000..3feb9c4f --- /dev/null +++ b/test/wcc/data/r930_free_field/case.ww @@ -0,0 +1,11 @@ +//ww:run +// Runtime half of 930_free_noop_run.c free_struct_field. +package main; +type holder = struct { p: *i32, n: i32 }; +export fn main() i32 = { + let x: i32 = 3; + let h: holder = holder { p = &x, n = 4 }; + free(h.p); + if (h.n != 4) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r930_free_local/case.ww b/test/wcc/data/r930_free_local/case.ww new file mode 100644 index 00000000..a3266d23 --- /dev/null +++ b/test/wcc/data/r930_free_local/case.ww @@ -0,0 +1,10 @@ +//ww:run +// Runtime half of 930_free_noop_run.c free_local_ptr_deref_after. +package main; +export fn main() i32 = { + let x: i32 = 5; + let p: *i32 = &x; + free(p); + if (*p != 5) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r930_free_loop/case.ww b/test/wcc/data/r930_free_loop/case.ww new file mode 100644 index 00000000..6c0af79b --- /dev/null +++ b/test/wcc/data/r930_free_loop/case.ww @@ -0,0 +1,15 @@ +//ww:run +// Runtime half of 930_free_noop_run.c free_loop_no_stack_damage. +package main; +let g: i32 = 0; +fn bump(p: *i32) *i32 = { g = g + 1; return p; }; +export fn main() i32 = { + let x: i32 = 1; + let i: i32 = 0; + for (i < 1000000) { + free(bump(&x)); + i += 1; + }; + if (g != 1000000) { return 5; }; + return 0; +}; diff --git a/test/wcc/data/r930_struct_tuple_header/case.ww b/test/wcc/data/r930_struct_tuple_header/case.ww new file mode 100644 index 00000000..08a89250 --- /dev/null +++ b/test/wcc/data/r930_struct_tuple_header/case.ww @@ -0,0 +1,11 @@ +//ww:run +// Positive source carrier for 930_struct_tuple_field_slot.c. +package main; +type S = struct { hdr: int, f: ([]u8, []u8) }; +export fn main() i32 = { + let s: S; + s.hdr = 9; + let p: *int = (&s.f): *int; + p[1] = 1; + return 0; +}; diff --git a/test/wcc/data/r930_struct_tuple_single/case.ww b/test/wcc/data/r930_struct_tuple_single/case.ww new file mode 100644 index 00000000..b002bc9a --- /dev/null +++ b/test/wcc/data/r930_struct_tuple_single/case.ww @@ -0,0 +1,10 @@ +//ww:run +// Positive source carrier for 930_struct_tuple_field_slot.c. +package main; +type S = struct { f: ([]u8, []u8) }; +export fn main() i32 = { + let s: S; + let p: *int = (&s.f): *int; + p[1] = 1; + return 0; +}; diff --git a/test/wcc/data/r940_global_sret_assign/case.ww b/test/wcc/data/r940_global_sret_assign/case.ww new file mode 100644 index 00000000..27d3d53f --- /dev/null +++ b/test/wcc/data/r940_global_sret_assign/case.ww @@ -0,0 +1,16 @@ +//ww:run +// Runtime half of 940_global_sret_run.c global_assign. +package main; +type quad = struct { a: i64, b: i64, c: i64, d: i64 }; +fn mk(x: i64) quad = { + return quad { a = x, b = x + 1i64, c = x + 2i64, d = x + 3i64 }; +}; +let g: quad; +export fn main() i32 = { + g = mk(10i64); + if (g.a != 10i64) { return 1; }; + if (g.b != 11i64) { return 2; }; + if (g.c != 12i64) { return 3; }; + if (g.d != 13i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r940_global_sret_branched/case.ww b/test/wcc/data/r940_global_sret_branched/case.ww new file mode 100644 index 00000000..cf477f69 --- /dev/null +++ b/test/wcc/data/r940_global_sret_branched/case.ww @@ -0,0 +1,16 @@ +//ww:run +// Runtime half of 940_global_sret_run.c global_branched. +package main; +type quad = struct { a: i64, b: i64, c: i64, d: i64 }; +fn mk1() quad = { return quad { a = 1i64, b = 2i64, c = 3i64, d = 4i64 }; }; +fn mk2() quad = { return quad { a = 50i64, b = 0i64, c = 0i64, d = 0i64 }; }; +fn pick(w: i64) quad = { if (w == 1i64) { return mk1(); }; return mk2(); }; +let g: quad; +export fn main() i32 = { + g = pick(1i64); + if (g.a != 1i64) { return 1; }; + if (g.b != 2i64) { return 2; }; + if (g.c != 3i64) { return 3; }; + if (g.d != 4i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r940_global_sret_local_assign/case.ww b/test/wcc/data/r940_global_sret_local_assign/case.ww new file mode 100644 index 00000000..afdd8ba8 --- /dev/null +++ b/test/wcc/data/r940_global_sret_local_assign/case.ww @@ -0,0 +1,16 @@ +//ww:run +// Runtime half of 940_global_sret_run.c local_assign_regression. +package main; +type quad = struct { a: i64, b: i64, c: i64, d: i64 }; +fn mk(x: i64) quad = { + return quad { a = x, b = x + 1i64, c = x + 2i64, d = x + 3i64 }; +}; +export fn main() i32 = { + let g: quad; + g = mk(20i64); + if (g.a != 20i64) { return 1; }; + if (g.b != 21i64) { return 2; }; + if (g.c != 22i64) { return 3; }; + if (g.d != 23i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r940_global_sret_local_init/case.ww b/test/wcc/data/r940_global_sret_local_init/case.ww new file mode 100644 index 00000000..ea537497 --- /dev/null +++ b/test/wcc/data/r940_global_sret_local_init/case.ww @@ -0,0 +1,15 @@ +//ww:run +// Runtime half of 940_global_sret_run.c local_init_regression. +package main; +type quad = struct { a: i64, b: i64, c: i64, d: i64 }; +fn mk(x: i64) quad = { + return quad { a = x, b = x + 1i64, c = x + 2i64, d = x + 3i64 }; +}; +export fn main() i32 = { + let g: quad = mk(30i64); + if (g.a != 30i64) { return 1; }; + if (g.b != 31i64) { return 2; }; + if (g.c != 32i64) { return 3; }; + if (g.d != 33i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r940_global_sret_pointer/case.ww b/test/wcc/data/r940_global_sret_pointer/case.ww new file mode 100644 index 00000000..fe08e276 --- /dev/null +++ b/test/wcc/data/r940_global_sret_pointer/case.ww @@ -0,0 +1,18 @@ +//ww:run +// Runtime half of 940_global_sret_run.c global_through_pointer. +package main; +type quad = struct { a: i64, b: i64, c: i64, d: i64 }; +fn mk(x: i64) quad = { + return quad { a = x, b = x + 1i64, c = x + 2i64, d = x + 3i64 }; +}; +fn bump(p: *quad) void = { p.a += 100i64; }; +let g: quad; +export fn main() i32 = { + g = mk(7i64); + bump(&g); + if (g.a != 107i64) { return 1; }; + if (g.b != 8i64) { return 2; }; + if (g.c != 9i64) { return 3; }; + if (g.d != 10i64) { return 4; }; + return 0; +}; diff --git a/test/wcc/data/r940_str_forrange_arg/case.ww b/test/wcc/data/r940_str_forrange_arg/case.ww new file mode 100644 index 00000000..26bffbf8 --- /dev/null +++ b/test/wcc/data/r940_str_forrange_arg/case.ww @@ -0,0 +1,16 @@ +//ww:run +// Lifted from test/wcc/940_str_forrange_loopvar_run.c +// sitea_arg_readback: a str for-range binding is u8 when read as a call arg. +package main; +fn check(x: u8) i32 = { + if (x: i32 < 65) { return 1; }; + if (x: i32 > 66) { return 1; }; + return 0; +}; +export fn main() i32 = { + let s: str = "AB"; + for (let b .. s) { + if (check(b) != 0) { return 1; }; + }; + return 0; +}; diff --git a/test/wcc/data/r940_str_forrange_expr/case.ww b/test/wcc/data/r940_str_forrange_expr/case.ww new file mode 100644 index 00000000..2d6590a5 --- /dev/null +++ b/test/wcc/data/r940_str_forrange_expr/case.ww @@ -0,0 +1,13 @@ +//ww:run +// Lifted from test/wcc/940_str_forrange_loopvar_run.c +// siteb_expr_readback: a str for-range binding is u8 in arithmetic. +package main; +export fn main() i32 = { + let s: str = "AB"; + let sum: i32 = 0; + for (let b .. s) { + sum += b: i32; + }; + if (sum != 131) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r944_alias_emit_slcstr_2lvl/case.ww b/test/wcc/data/r944_alias_emit_slcstr_2lvl/case.ww new file mode 100644 index 00000000..9dde15ec --- /dev/null +++ b/test/wcc/data/r944_alias_emit_slcstr_2lvl/case.ww @@ -0,0 +1,9 @@ +//ww:error "slice-of-{str,slice,tagged} literal static-init unsupported" +package main; +type ms0 = str; +type ms = ms0; +let G: []ms = ["aa", "bbb"]; +export fn main() i32 = { + if (len(G[0]) != 2) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r944_alias_emit_slctag_2lvl/case.ww b/test/wcc/data/r944_alias_emit_slctag_2lvl/case.ww new file mode 100644 index 00000000..20a81090 --- /dev/null +++ b/test/wcc/data/r944_alias_emit_slctag_2lvl/case.ww @@ -0,0 +1,9 @@ +//ww:error "slice-of-{str,slice,tagged} literal static-init unsupported" +package main; +type u0 = (void | i64); +type u1 = u0; +let G: []u1 = [1i64, 2i64]; +export fn main() i32 = { + if (len(G) != 2) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structparam_f32f32_arg_fallback/case.ww b/test/wcc/data/r946_structparam_f32f32_arg_fallback/case.ww new file mode 100644 index 00000000..118e1895 --- /dev/null +++ b/test/wcc/data/r946_structparam_f32f32_arg_fallback/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pf32 = struct { a: f32, b: f32 }; +fn use(s: pf32) i64 = { return (s.a: i64) + (s.b: i64); }; +export fn main() i32 = { + let s: pf32 = pf32 { a = 3.0f32, b = 5.0f32 }; + if (use(s) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structparam_f64f64_arg/case.ww b/test/wcc/data/r946_structparam_f64f64_arg/case.ww new file mode 100644 index 00000000..a6803cda --- /dev/null +++ b/test/wcc/data/r946_structparam_f64f64_arg/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pff = struct { a: f64, b: f64 }; +fn use(s: pff) f64 = { return s.a + s.b; }; +export fn main() i32 = { + let s: pff = pff { a = 3.0, b = 5.0 }; + if (use(s) != 8.0) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structparam_f64i64_arg/case.ww b/test/wcc/data/r946_structparam_f64i64_arg/case.ww new file mode 100644 index 00000000..fb6e503c --- /dev/null +++ b/test/wcc/data/r946_structparam_f64i64_arg/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pfi = struct { a: f64, b: i64 }; +fn use(s: pfi) i64 = { return (s.a: i64) + s.b; }; +export fn main() i32 = { + let s: pfi = pfi { a = 3.0, b = 5 }; + if (use(s) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structparam_i64f64_arg/case.ww b/test/wcc/data/r946_structparam_i64f64_arg/case.ww new file mode 100644 index 00000000..0a081277 --- /dev/null +++ b/test/wcc/data/r946_structparam_i64f64_arg/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pif = struct { a: i64, b: f64 }; +fn use(s: pif) i64 = { return s.a + (s.b: i64); }; +export fn main() i32 = { + let s: pif = pif { a = 3, b = 5.0 }; + if (use(s) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structparam_i64i64_arg/case.ww b/test/wcc/data/r946_structparam_i64i64_arg/case.ww new file mode 100644 index 00000000..c1e34262 --- /dev/null +++ b/test/wcc/data/r946_structparam_i64i64_arg/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pii = struct { a: i64, b: i64 }; +fn use(s: pii) i64 = { return s.a + s.b; }; +export fn main() i32 = { + let s: pii = pii { a = 3, b = 5 }; + if (use(s) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structparam_scalar_plus_f64f64/case.ww b/test/wcc/data/r946_structparam_scalar_plus_f64f64/case.ww new file mode 100644 index 00000000..6e876192 --- /dev/null +++ b/test/wcc/data/r946_structparam_scalar_plus_f64f64/case.ww @@ -0,0 +1,11 @@ +//ww:run +package main; +type pff = struct { a: f64, b: f64 }; +fn use(n: i64, s: pff) i64 = { + return n + (s.a: i64) + (s.b: i64); +}; +export fn main() i32 = { + let s: pff = pff { a = 3.0, b = 5.0 }; + if (use(2, s) != 10) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structret_f32f32_ret_fallback/case.ww b/test/wcc/data/r946_structret_f32f32_ret_fallback/case.ww new file mode 100644 index 00000000..a98d3be2 --- /dev/null +++ b/test/wcc/data/r946_structret_f32f32_ret_fallback/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pf32 = struct { a: f32, b: f32 }; +fn mk() pf32 = { return pf32 { a = 3.0f32, b = 5.0f32 }; }; +export fn main() i32 = { + let s: pf32 = mk(); + if ((s.a: i64) + (s.b: i64) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structret_f64f64_ret/case.ww b/test/wcc/data/r946_structret_f64f64_ret/case.ww new file mode 100644 index 00000000..5ac4fd79 --- /dev/null +++ b/test/wcc/data/r946_structret_f64f64_ret/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pff = struct { a: f64, b: f64 }; +fn mk() pff = { return pff { a = 3.0, b = 5.0 }; }; +export fn main() i32 = { + let s: pff = mk(); + if ((s.a: i64) + (s.b: i64) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structret_f64i32_ret/case.ww b/test/wcc/data/r946_structret_f64i32_ret/case.ww new file mode 100644 index 00000000..bc9dd389 --- /dev/null +++ b/test/wcc/data/r946_structret_f64i32_ret/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pfi = struct { a: f64, b: i32 }; +fn mk() pfi = { return pfi { a = 3.0, b = 5 }; }; +export fn main() i32 = { + let s: pfi = mk(); + if ((s.a: i64) + (s.b: i64) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structret_i64f64_ret/case.ww b/test/wcc/data/r946_structret_i64f64_ret/case.ww new file mode 100644 index 00000000..77276db4 --- /dev/null +++ b/test/wcc/data/r946_structret_i64f64_ret/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pif = struct { a: i64, b: f64 }; +fn mk() pif = { return pif { a = 3, b = 5.0 }; }; +export fn main() i32 = { + let s: pif = mk(); + if (s.a + (s.b: i64) != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r946_structret_i64i64_ret/case.ww b/test/wcc/data/r946_structret_i64i64_ret/case.ww new file mode 100644 index 00000000..87ae0916 --- /dev/null +++ b/test/wcc/data/r946_structret_i64i64_ret/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type pii = struct { a: i64, b: i64 }; +fn mk() pii = { return pii { a = 3, b = 5 }; }; +export fn main() i32 = { + let s: pii = mk(); + if (s.a + s.b != 8) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r948_selfimport/case.ww b/test/wcc/data/r948_selfimport/case.ww new file mode 100644 index 00000000..3e023aca --- /dev/null +++ b/test/wcc/data/r948_selfimport/case.ww @@ -0,0 +1,4 @@ +//ww:error "self-import" +package foo; +import foo; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r949_errtype_eq_invalid_i32/case.ww b/test/wcc/data/r949_errtype_eq_invalid_i32/case.ww new file mode 100644 index 00000000..74f03067 --- /dev/null +++ b/test/wcc/data/r949_errtype_eq_invalid_i32/case.ww @@ -0,0 +1,9 @@ +//ww:error "operands have differing types" +package main; +type invalid = !i32; +export fn main() i32 = { + let e: invalid = 5: invalid; + let n: i32 = 3; + if (e == n) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_errtype_lt_invalid_i32/case.ww b/test/wcc/data/r949_errtype_lt_invalid_i32/case.ww new file mode 100644 index 00000000..f5d0bf6a --- /dev/null +++ b/test/wcc/data/r949_errtype_lt_invalid_i32/case.ww @@ -0,0 +1,9 @@ +//ww:error "operands have differing types" +package main; +type invalid = !i32; +export fn main() i32 = { + let e: invalid = 5: invalid; + let n: i32 = 3; + if (e < n) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_errtype_neq_int_int/case.ww b/test/wcc/data/r949_errtype_neq_int_int/case.ww new file mode 100644 index 00000000..317bd7ae --- /dev/null +++ b/test/wcc/data/r949_errtype_neq_int_int/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() i32 = { + let a: i32 = 1; + let b: i32 = 2; + if (a != b) { return 0; }; + return 1; +}; diff --git a/test/wcc/data/r949_errtype_neq_invalid_i32/case.ww b/test/wcc/data/r949_errtype_neq_invalid_i32/case.ww new file mode 100644 index 00000000..4c6b15b7 --- /dev/null +++ b/test/wcc/data/r949_errtype_neq_invalid_i32/case.ww @@ -0,0 +1,9 @@ +//ww:error "operands have differing types" +package main; +type invalid = !i32; +export fn main() i32 = { + let e: invalid = 5: invalid; + let n: i32 = 3; + if (e != n) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_errtype_neq_same_error/case.ww b/test/wcc/data/r949_errtype_neq_same_error/case.ww new file mode 100644 index 00000000..be07bd43 --- /dev/null +++ b/test/wcc/data/r949_errtype_neq_same_error/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type invalid = !i32; +export fn main() i32 = { + let e: invalid = 5: invalid; + let f: invalid = 6: invalid; + if (e != f) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_alias_vs_base/case.ww b/test/wcc/data/r949_intbinop_alias_vs_base/case.ww new file mode 100644 index 00000000..a5463887 --- /dev/null +++ b/test/wcc/data/r949_intbinop_alias_vs_base/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +type myint = i32; +export fn main() i32 = { + let a: myint = 1: myint; + let b: i32 = 2; + if (a < b) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_enum_flag_or/case.ww b/test/wcc/data/r949_intbinop_enum_flag_or/case.ww new file mode 100644 index 00000000..1fba3d2b --- /dev/null +++ b/test/wcc/data/r949_intbinop_enum_flag_or/case.ww @@ -0,0 +1,7 @@ +//ww:run +package main; +type flag = enum uint { A = 1, B = 2, C = 4 }; +export fn main() i32 = { + let f: flag = flag.A | flag.B | flag.C; + return (f: i32) - 7; +}; diff --git a/test/wcc/data/r949_intbinop_i32_lt_i32/case.ww b/test/wcc/data/r949_intbinop_i32_lt_i32/case.ww new file mode 100644 index 00000000..ba234ead --- /dev/null +++ b/test/wcc/data/r949_intbinop_i32_lt_i32/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() i32 = { + let a: i32 = 1; + let b: i32 = 2; + if (a < b) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_i32_lt_len/case.ww b/test/wcc/data/r949_intbinop_i32_lt_len/case.ww new file mode 100644 index 00000000..6b3d2c9d --- /dev/null +++ b/test/wcc/data/r949_intbinop_i32_lt_len/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() i32 = { + let s: []u8 = []; + let a: i32 = 0; + if (a < len(s)) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_int_and_i32/case.ww b/test/wcc/data/r949_intbinop_int_and_i32/case.ww new file mode 100644 index 00000000..462e9ba5 --- /dev/null +++ b/test/wcc/data/r949_intbinop_int_and_i32/case.ww @@ -0,0 +1,9 @@ +//ww:error "operands have differing types" +package main; +export fn main() i32 = { + let a: int = 1; + let b: i32 = 2; + let r: int = a & b; + if (r < 0) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_int_cast_len/case.ww b/test/wcc/data/r949_intbinop_int_cast_len/case.ww new file mode 100644 index 00000000..71ff5167 --- /dev/null +++ b/test/wcc/data/r949_intbinop_int_cast_len/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() i32 = { + let s: []u8 = []; + let a: int = 0; + if (a < len(s): int) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_int_lt_i64/case.ww b/test/wcc/data/r949_intbinop_int_lt_i64/case.ww new file mode 100644 index 00000000..3484bc7e --- /dev/null +++ b/test/wcc/data/r949_intbinop_int_lt_i64/case.ww @@ -0,0 +1,8 @@ +//ww:error "operands have differing types" +package main; +export fn main() i32 = { + let a: int = 1; + let b: i64 = 2i64; + if (a < b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_int_lt_int/case.ww b/test/wcc/data/r949_intbinop_int_lt_int/case.ww new file mode 100644 index 00000000..93833af5 --- /dev/null +++ b/test/wcc/data/r949_intbinop_int_lt_int/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() i32 = { + let a: int = 1; + let b: int = 2; + if (a < b) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_int_lt_len_i32/case.ww b/test/wcc/data/r949_intbinop_int_lt_len_i32/case.ww new file mode 100644 index 00000000..4ad3c323 --- /dev/null +++ b/test/wcc/data/r949_intbinop_int_lt_len_i32/case.ww @@ -0,0 +1,8 @@ +//ww:error "operands have differing types" +package main; +export fn main() i32 = { + let a: int = 1; + let s: []u8 = []; + if (a < len(s)) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_int_lt_uint/case.ww b/test/wcc/data/r949_intbinop_int_lt_uint/case.ww new file mode 100644 index 00000000..c216c6a9 --- /dev/null +++ b/test/wcc/data/r949_intbinop_int_lt_uint/case.ww @@ -0,0 +1,8 @@ +//ww:error "operands have differing types" +package main; +export fn main() i32 = { + let a: int = 1; + let b: uint = 2; + if (a < b) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r949_intbinop_rune_lit_arith/case.ww b/test/wcc/data/r949_intbinop_rune_lit_arith/case.ww new file mode 100644 index 00000000..2673fe18 --- /dev/null +++ b/test/wcc/data/r949_intbinop_rune_lit_arith/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() i32 = { + let c: u8 = 53u8; + let r: u8 = c - '0'; + if (r < 10u8) { return 0; }; + return 0; +}; diff --git a/test/wcc/data/r951_defdim_m4095_end/case.ww b/test/wcc/data/r951_defdim_m4095_end/case.ww new file mode 100644 index 00000000..8227947a --- /dev/null +++ b/test/wcc/data/r951_defdim_m4095_end/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 99 +package main; +def MAX: i32 = 4095; +type t = struct { b: [MAX]u8, end: i32 }; +export fn main() i32 = { + let s: t; + s.b[4094] = 5u8; + s.end = 99; + return s.end; +}; diff --git a/test/wcc/data/r951_defdim_m4_belem/case.ww b/test/wcc/data/r951_defdim_m4_belem/case.ww new file mode 100644 index 00000000..27025d9e --- /dev/null +++ b/test/wcc/data/r951_defdim_m4_belem/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 200 +package main; +def M: i32 = 4; +type t = struct { b: [M]u8, end: i32 }; +export fn main() i32 = { + let s: t; + s.b[3] = 200u8; + s.end = 7; + return s.b[3]: i32; +}; diff --git a/test/wcc/data/r951_defdim_m4_end/case.ww b/test/wcc/data/r951_defdim_m4_end/case.ww new file mode 100644 index 00000000..cb855ca5 --- /dev/null +++ b/test/wcc/data/r951_defdim_m4_end/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +def M: i32 = 4; +type t = struct { b: [M]u8, end: i32 }; +export fn main() i32 = { + let s: t; + s.b[3] = 9u8; + s.end = 42; + return s.end; +}; diff --git a/test/wcc/data/r951_defdim_twoafter/case.ww b/test/wcc/data/r951_defdim_twoafter/case.ww new file mode 100644 index 00000000..7757d8c6 --- /dev/null +++ b/test/wcc/data/r951_defdim_twoafter/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 33 +package main; +def M: i32 = 4; +type t = struct { b: [M]u8, a: i32, c: i32 }; +export fn main() i32 = { + let s: t; + s.a = 11; + s.c = 22; + return s.a + s.c; +}; diff --git a/test/wcc/data/r951_defdim_xmod_pathmax/case.ww b/test/wcc/data/r951_defdim_xmod_pathmax/case.ww new file mode 100644 index 00000000..dd05eeac --- /dev/null +++ b/test/wcc/data/r951_defdim_xmod_pathmax/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 77 +package main; +import os; +def MAX: i32 = os.PATH_MAX - 1; +type t = struct { b: [MAX]u8, end: i32 }; +export fn main() i32 = { + let s: t; + s.b[4094] = 7u8; + s.end = 77; + return s.end; +}; diff --git a/test/wcc/data/r953_f64crossmod_x101_neg/case.ww b/test/wcc/data/r953_f64crossmod_x101_neg/case.ww new file mode 100644 index 00000000..ce65c0a2 --- /dev/null +++ b/test/wcc/data/r953_f64crossmod_x101_neg/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 249 +package myf; +export fn g() f64 = { return -7.0; }; +package main; +import myf; +export fn main() i32 = { return myf.g(): i32; }; diff --git a/test/wcc/data/r953_f64crossmod_x101_trunc_neg/case.ww b/test/wcc/data/r953_f64crossmod_x101_trunc_neg/case.ww new file mode 100644 index 00000000..065669bd --- /dev/null +++ b/test/wcc/data/r953_f64crossmod_x101_trunc_neg/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 253 +package myf; +export fn g() f64 = { return -3.9; }; +package main; +import myf; +export fn main() i32 = { return myf.g(): i32; }; diff --git a/test/wcc/data/r953_f64crossmod_x101_trunc_pos/case.ww b/test/wcc/data/r953_f64crossmod_x101_trunc_pos/case.ww new file mode 100644 index 00000000..1496b6a7 --- /dev/null +++ b/test/wcc/data/r953_f64crossmod_x101_trunc_pos/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 3 +package myf; +export fn g() f64 = { return 3.9; }; +package main; +import myf; +export fn main() i32 = { return myf.g(): i32; }; diff --git a/test/wcc/data/r953_f64crossmod_x98_nested_arg/case.ww b/test/wcc/data/r953_f64crossmod_x98_nested_arg/case.ww new file mode 100644 index 00000000..6948a91c --- /dev/null +++ b/test/wcc/data/r953_f64crossmod_x98_nested_arg/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 242 +package myf; +export fn g() f64 = { return -7.0; }; +package main; +import myf; +fn dbl(x: f64) f64 = { return x * 2.0; }; +export fn main() i32 = { return dbl(myf.g()): i32; }; diff --git a/test/wcc/data/r953_f64crossmod_x98_xmm_pressure/case.ww b/test/wcc/data/r953_f64crossmod_x98_xmm_pressure/case.ww new file mode 100644 index 00000000..00ba88be --- /dev/null +++ b/test/wcc/data/r953_f64crossmod_x98_xmm_pressure/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 8 +package myf; +export fn g() f64 = { return -7.0; }; +package main; +import myf; +fn sum3(a: f64, b: f64, c: f64) f64 = { return a + b + c; }; +export fn main() i32 = { return sum3(myf.g(), 10.5, 4.5): i32; }; diff --git a/test/wcc/data/r956_modqual_mq_f64_i64_destr/case.ww b/test/wcc/data/r956_modqual_mq_f64_i64_destr/case.ww new file mode 100644 index 00000000..d30b7b4c --- /dev/null +++ b/test/wcc/data/r956_modqual_mq_f64_i64_destr/case.ww @@ -0,0 +1,15 @@ +//ww:run +package myf; +export fn frexp(n: f64) (f64, i64) = { + if (n == 0.0) { return (0.0, 0i64); }; + return (n, 1i64); +}; +package main; +import myf; +export fn main() i32 = { + let (frac, exp) = myf.frexp(8.0); + let g: f64 = frac + 1.0; + if (g != 9.0) { return 1; }; + if (exp != 1i64) { return 2; }; + return 0; +}; diff --git a/test/wcc/data/r956_modqual_mq_f64_str_destr/case.ww b/test/wcc/data/r956_modqual_mq_f64_str_destr/case.ww new file mode 100644 index 00000000..87b11a0e --- /dev/null +++ b/test/wcc/data/r956_modqual_mq_f64_str_destr/case.ww @@ -0,0 +1,15 @@ +//ww:run-exit 4 +package myf; +export fn fs(n: f64) (f64, str) = { + if (n == 0.0) { return (n, "x"); }; + return (n, "hello"); +}; +package main; +import myf; +export fn main() i32 = { + let (f, s) = myf.fs(4.0); + let g: f64 = f + 0.0; + if (g != 4.0) { return 1; }; + if (s.len != 5) { return 2; }; + return (f: i32); +}; diff --git a/test/wcc/data/r956_modqual_mq_i64_bool_destr/case.ww b/test/wcc/data/r956_modqual_mq_i64_bool_destr/case.ww new file mode 100644 index 00000000..63934ea0 --- /dev/null +++ b/test/wcc/data/r956_modqual_mq_i64_bool_destr/case.ww @@ -0,0 +1,14 @@ +//ww:run-exit 15 +package myf; +export fn addi64(a: i64, b: i64) (i64, bool) = { + let s: i64 = a + b; + return (s, false); +}; +package main; +import myf; +export fn main() i32 = { + let (res, ov) = myf.addi64(7i64, 8i64); + if (res != 15i64) { return 1; }; + if (ov) { return 2; }; + return (res: i32); +}; diff --git a/test/wcc/data/r956_modqual_mq_nondestr_shadow/case.ww b/test/wcc/data/r956_modqual_mq_nondestr_shadow/case.ww new file mode 100644 index 00000000..f34bf4a7 --- /dev/null +++ b/test/wcc/data/r956_modqual_mq_nondestr_shadow/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 10 +package beta; +export fn dup() (i64, i64) = { return (3i64, 7i64); }; +package main; +import beta; +export fn main() i32 = { + let r = beta.dup(); + if (r.1 != 7i64) { return 1; }; + return (r.0: i32) + (r.1: i32); +}; +package alpha; +export fn dup() (i64, str) = { return (9i64, "wrong"); }; diff --git a/test/wcc/data/r957_abort_bare/case.ww b/test/wcc/data/r957_abort_bare/case.ww new file mode 100644 index 00000000..219f4e66 --- /dev/null +++ b/test/wcc/data/r957_abort_bare/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 1 +package main; +export fn main() i32 = { + abort(); + return 0; +}; diff --git a/test/wcc/data/r957_abort_msg/case.ww b/test/wcc/data/r957_abort_msg/case.ww new file mode 100644 index 00000000..beda0900 --- /dev/null +++ b/test/wcc/data/r957_abort_msg/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 1 +package main; +export fn main() i32 = { + abort("boom\n"); + return 0; +}; diff --git a/test/wcc/data/r957_assert_fail_msg/case.ww b/test/wcc/data/r957_assert_fail_msg/case.ww new file mode 100644 index 00000000..0239db9d --- /dev/null +++ b/test/wcc/data/r957_assert_fail_msg/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 1 +package main; +export fn main() i32 = { + assert(false, "assert fired\n"); + return 0; +}; diff --git a/test/wcc/data/r957_assert_fail_nomsg/case.ww b/test/wcc/data/r957_assert_fail_nomsg/case.ww new file mode 100644 index 00000000..64d709ae --- /dev/null +++ b/test/wcc/data/r957_assert_fail_nomsg/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 1 +package main; +export fn main() i32 = { + assert(1 == 2); + return 0; +}; diff --git a/test/wcc/data/r957_assert_imported_mod/case.ww b/test/wcc/data/r957_assert_imported_mod/case.ww new file mode 100644 index 00000000..a65c4aa1 --- /dev/null +++ b/test/wcc/data/r957_assert_imported_mod/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package m; +export fn f() i32 = { + assert(3 > 2, "m.f invariant"); + return 42; +}; +package main; +import m; +export fn main() i32 = { return m.f(); }; diff --git a/test/wcc/data/r957_assert_pass/case.ww b/test/wcc/data/r957_assert_pass/case.ww new file mode 100644 index 00000000..b46d44bc --- /dev/null +++ b/test/wcc/data/r957_assert_pass/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 42 +package main; +export fn main() i32 = { + assert(1 + 1 == 2); + assert(2 > 1, "never fires"); + return 42; +}; diff --git a/test/wcc/data/r957_assert_reject_abort_arity/case.ww b/test/wcc/data/r957_assert_reject_abort_arity/case.ww new file mode 100644 index 00000000..2c3846b6 --- /dev/null +++ b/test/wcc/data/r957_assert_reject_abort_arity/case.ww @@ -0,0 +1,6 @@ +//ww:error "abort: at most one arg" +package main; +export fn main() i32 = { + abort("a", "b"); + return 0; +}; diff --git a/test/wcc/data/r957_assert_reject_abort_nonstr/case.ww b/test/wcc/data/r957_assert_reject_abort_nonstr/case.ww new file mode 100644 index 00000000..5514c364 --- /dev/null +++ b/test/wcc/data/r957_assert_reject_abort_nonstr/case.ww @@ -0,0 +1,6 @@ +//ww:error "abort: message must be str" +package main; +export fn main() i32 = { + abort(42); + return 0; +}; diff --git a/test/wcc/data/r957_assert_reject_assert_arity/case.ww b/test/wcc/data/r957_assert_reject_assert_arity/case.ww new file mode 100644 index 00000000..322d41c1 --- /dev/null +++ b/test/wcc/data/r957_assert_reject_assert_arity/case.ww @@ -0,0 +1,6 @@ +//ww:error "assert: at most two args" +package main; +export fn main() i32 = { + assert(true, "m", "extra"); + return 0; +}; diff --git a/test/wcc/data/r957_assert_reject_nonbool/case.ww b/test/wcc/data/r957_assert_reject_nonbool/case.ww new file mode 100644 index 00000000..e35002fc --- /dev/null +++ b/test/wcc/data/r957_assert_reject_nonbool/case.ww @@ -0,0 +1,6 @@ +//ww:error "assert: cond must be bool" +package main; +export fn main() i32 = { + assert("not a bool"); + return 0; +}; diff --git a/test/wcc/data/r957_assert_shadow_samemod/case.ww b/test/wcc/data/r957_assert_shadow_samemod/case.ww new file mode 100644 index 00000000..48b3620c --- /dev/null +++ b/test/wcc/data/r957_assert_shadow_samemod/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +let g: i32 = 0; +fn assert(b: bool) void = { g = 7; }; +export fn main() i32 = { + assert(false); + return g; +}; diff --git a/test/wcc/data/r957_assert_shadow_xmod/case.ww b/test/wcc/data/r957_assert_shadow_xmod/case.ww new file mode 100644 index 00000000..1f45a85a --- /dev/null +++ b/test/wcc/data/r957_assert_shadow_xmod/case.ww @@ -0,0 +1,9 @@ +//ww:run-exit 42 +package m; +export fn assert(b: bool, msg: str) void = { }; +package main; +import m; +export fn main() i32 = { + assert(false, "routed to m.assert"); + return 42; +}; diff --git a/test/wcc/data/r961_neg_align_of/case.ww b/test/wcc/data/r961_neg_align_of/case.ww new file mode 100644 index 00000000..0883c06b --- /dev/null +++ b/test/wcc/data/r961_neg_align_of/case.ww @@ -0,0 +1,3 @@ +//ww:error "cannot take align of unsized type 'opaque'" +package main; +export fn main() i32 = { return align(opaque): i32; }; diff --git a/test/wcc/data/r961_neg_size_nested_array/case.ww b/test/wcc/data/r961_neg_size_nested_array/case.ww new file mode 100644 index 00000000..f0ac1360 --- /dev/null +++ b/test/wcc/data/r961_neg_size_nested_array/case.ww @@ -0,0 +1,3 @@ +//ww:error c "unsized type 'opaque' cannot be an array element" ww "cannot take size of unsized type 'opaque'" +package main; +export fn main() i32 = { return size([4]opaque): i32; }; diff --git a/test/wcc/data/r961_neg_size_nested_struct/case.ww b/test/wcc/data/r961_neg_size_nested_struct/case.ww new file mode 100644 index 00000000..9fdd6fc3 --- /dev/null +++ b/test/wcc/data/r961_neg_size_nested_struct/case.ww @@ -0,0 +1,3 @@ +//ww:error c "unsized type 'opaque' cannot be a struct field" ww "cannot take size of unsized type 'opaque'" +package main; +export fn main() i32 = { return size(struct { x: opaque }): i32; }; diff --git a/test/wcc/data/r961_neg_size_of/case.ww b/test/wcc/data/r961_neg_size_of/case.ww new file mode 100644 index 00000000..178847f9 --- /dev/null +++ b/test/wcc/data/r961_neg_size_of/case.ww @@ -0,0 +1,3 @@ +//ww:error "cannot take size of unsized type 'opaque'" +package main; +export fn main() i32 = { return size(opaque): i32; }; diff --git a/test/wcc/data/r961_neg_size_tagged/case.ww b/test/wcc/data/r961_neg_size_tagged/case.ww new file mode 100644 index 00000000..0db9c5ac --- /dev/null +++ b/test/wcc/data/r961_neg_size_tagged/case.ww @@ -0,0 +1,3 @@ +//ww:error c "unsized type 'opaque' cannot be a tagged union member" ww "cannot take size of unsized type 'opaque'" +package main; +export fn main() i32 = { return size((opaque | i32)): i32; }; diff --git a/test/wcc/data/r961_neg_size_tuple/case.ww b/test/wcc/data/r961_neg_size_tuple/case.ww new file mode 100644 index 00000000..b932fd3c --- /dev/null +++ b/test/wcc/data/r961_neg_size_tuple/case.ww @@ -0,0 +1,3 @@ +//ww:error c "unsized type 'opaque' cannot be a tuple member" ww "cannot take size of unsized type 'opaque'" +package main; +export fn main() i32 = { return size((opaque, i32)): i32; }; diff --git a/test/wcc/data/r961_pos_ptr_opaque/case.ww b/test/wcc/data/r961_pos_ptr_opaque/case.ww new file mode 100644 index 00000000..1a9d0469 --- /dev/null +++ b/test/wcc/data/r961_pos_ptr_opaque/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 42 +package main; +fn id(p: *opaque) *opaque = { return p; }; +export fn main() i32 = { + let n: i32 = 42; + let po: *opaque = (&n): *opaque; + let back: *i32 = id(po): *i32; + let w: i32 = size(*opaque): i32; + if (w != 8) { return 1; }; + return *back; +}; diff --git a/test/wcc/data/r961_pos_slice_opaque/case.ww b/test/wcc/data/r961_pos_slice_opaque/case.ww new file mode 100644 index 00000000..00813d69 --- /dev/null +++ b/test/wcc/data/r961_pos_slice_opaque/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 7 +package main; +export fn main() i32 = { + let s: []opaque; + let h: i32 = size([]opaque): i32; + if (h != 24) { return 1; }; + return s.len: i32 + 7; +}; diff --git a/test/wcc/data/r978_compound_deref_div_neg_dividend/case.ww b/test/wcc/data/r978_compound_deref_div_neg_dividend/case.ww new file mode 100644 index 00000000..ffdd3076 --- /dev/null +++ b/test/wcc/data/r978_compound_deref_div_neg_dividend/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let arr: [1]i64; + arr[0] = -50i64; + let p: *i64 = &arr[0]; + *p /= 3i64; + if (arr[0] == -16i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_compound_deref_div_unsigned/case.ww b/test/wcc/data/r978_compound_deref_div_unsigned/case.ww new file mode 100644 index 00000000..af56c430 --- /dev/null +++ b/test/wcc/data/r978_compound_deref_div_unsigned/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let arr: [1]u64; + arr[0] = 0x8000000000000001u64; + let p: *u64 = &arr[0]; + *p /= 2u64; + if (arr[0] == 0x4000000000000000u64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_compound_deref_mod_neg_dividend/case.ww b/test/wcc/data/r978_compound_deref_mod_neg_dividend/case.ww new file mode 100644 index 00000000..af351fef --- /dev/null +++ b/test/wcc/data/r978_compound_deref_mod_neg_dividend/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let arr: [1]i64; + arr[0] = -50i64; + let p: *i64 = &arr[0]; + *p %= 3i64; + if (arr[0] == -2i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_compound_ident_local_div_neg_dividend/case.ww b/test/wcc/data/r978_compound_ident_local_div_neg_dividend/case.ww new file mode 100644 index 00000000..0c286a6e --- /dev/null +++ b/test/wcc/data/r978_compound_ident_local_div_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = -100i64; + a /= 7i64; + if (a == -14i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_compound_ident_local_div_neg_divisor/case.ww b/test/wcc/data/r978_compound_ident_local_div_neg_divisor/case.ww new file mode 100644 index 00000000..7caf9696 --- /dev/null +++ b/test/wcc/data/r978_compound_ident_local_div_neg_divisor/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = 100i64; + a /= -7i64; + if (a == -14i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_compound_ident_local_div_unsigned/case.ww b/test/wcc/data/r978_compound_ident_local_div_unsigned/case.ww new file mode 100644 index 00000000..9c7d5b3b --- /dev/null +++ b/test/wcc/data/r978_compound_ident_local_div_unsigned/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u64 = 0x8000000000000001u64; + a /= 2u64; + if (a == 0x4000000000000000u64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_compound_ident_local_mod_neg_dividend/case.ww b/test/wcc/data/r978_compound_ident_local_mod_neg_dividend/case.ww new file mode 100644 index 00000000..d7b338a9 --- /dev/null +++ b/test/wcc/data/r978_compound_ident_local_mod_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = -100i64; + a %= 7i64; + if (a == -2i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i16_div_int16_min_by_two/case.ww b/test/wcc/data/r978_i16_div_int16_min_by_two/case.ww new file mode 100644 index 00000000..de72070c --- /dev/null +++ b/test/wcc/data/r978_i16_div_int16_min_by_two/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i16 = -32768i16; + let b: i16 = 2i16; + if (a / b == -16384i16) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i16_div_neg_dividend/case.ww b/test/wcc/data/r978_i16_div_neg_dividend/case.ww new file mode 100644 index 00000000..3929afb1 --- /dev/null +++ b/test/wcc/data/r978_i16_div_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i16 = -100i16; + let b: i16 = 7i16; + if (a / b == -14i16) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i16_mod_neg_dividend/case.ww b/test/wcc/data/r978_i16_mod_neg_dividend/case.ww new file mode 100644 index 00000000..7255d14f --- /dev/null +++ b/test/wcc/data/r978_i16_mod_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i16 = -100i16; + let b: i16 = 7i16; + if (a % b == -2i16) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i32_div_int32_min_by_two/case.ww b/test/wcc/data/r978_i32_div_int32_min_by_two/case.ww new file mode 100644 index 00000000..04974e1d --- /dev/null +++ b/test/wcc/data/r978_i32_div_int32_min_by_two/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i32 = -2147483648i32; + let y: i32 = 2i32; + if (x / y == -1073741824i32) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i32_div_neg_dividend/case.ww b/test/wcc/data/r978_i32_div_neg_dividend/case.ww new file mode 100644 index 00000000..4b1dd149 --- /dev/null +++ b/test/wcc/data/r978_i32_div_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i32 = -100i32; + let y: i32 = 7i32; + if (x / y == -14i32) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i32_mod_int32_min_by_two/case.ww b/test/wcc/data/r978_i32_mod_int32_min_by_two/case.ww new file mode 100644 index 00000000..87c0d8a8 --- /dev/null +++ b/test/wcc/data/r978_i32_mod_int32_min_by_two/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i32 = -2147483648i32; + let y: i32 = 2i32; + if (x % y == 0i32) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i32_mod_neg_dividend/case.ww b/test/wcc/data/r978_i32_mod_neg_dividend/case.ww new file mode 100644 index 00000000..168a3a0a --- /dev/null +++ b/test/wcc/data/r978_i32_mod_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let x: i32 = -100i32; + let y: i32 = 7i32; + if (x % y == -2i32) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_div_both_negative/case.ww b/test/wcc/data/r978_i64_div_both_negative/case.ww new file mode 100644 index 00000000..b88c45a5 --- /dev/null +++ b/test/wcc/data/r978_i64_div_both_negative/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = -50i64; + let b: i64 = -3i64; + if (a / b == 16i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_div_both_positive/case.ww b/test/wcc/data/r978_i64_div_both_positive/case.ww new file mode 100644 index 00000000..cb518df5 --- /dev/null +++ b/test/wcc/data/r978_i64_div_both_positive/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = 50i64; + let b: i64 = 3i64; + if (a / b == 16i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_div_int64_min_by_two/case.ww b/test/wcc/data/r978_i64_div_int64_min_by_two/case.ww new file mode 100644 index 00000000..f5a00ebd --- /dev/null +++ b/test/wcc/data/r978_i64_div_int64_min_by_two/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = (-9223372036854775807i64) - 1i64; + let b: i64 = 2i64; + if (a / b == -4611686018427387904i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_div_neg_dividend/case.ww b/test/wcc/data/r978_i64_div_neg_dividend/case.ww new file mode 100644 index 00000000..2eefa958 --- /dev/null +++ b/test/wcc/data/r978_i64_div_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = -100i64; + let b: i64 = 1000000000i64; + if (a / b == 0i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_div_neg_divisor/case.ww b/test/wcc/data/r978_i64_div_neg_divisor/case.ww new file mode 100644 index 00000000..fcba02ef --- /dev/null +++ b/test/wcc/data/r978_i64_div_neg_divisor/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = 50i64; + let b: i64 = -3i64; + if (a / b == -16i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_mod_both_negative/case.ww b/test/wcc/data/r978_i64_mod_both_negative/case.ww new file mode 100644 index 00000000..46f0d5dc --- /dev/null +++ b/test/wcc/data/r978_i64_mod_both_negative/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = -50i64; + let b: i64 = -3i64; + if (a % b == -2i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_mod_both_positive/case.ww b/test/wcc/data/r978_i64_mod_both_positive/case.ww new file mode 100644 index 00000000..d06e6e9d --- /dev/null +++ b/test/wcc/data/r978_i64_mod_both_positive/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = 50i64; + let b: i64 = 3i64; + if (a % b == 2i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_mod_int64_min_by_two/case.ww b/test/wcc/data/r978_i64_mod_int64_min_by_two/case.ww new file mode 100644 index 00000000..fc1d8522 --- /dev/null +++ b/test/wcc/data/r978_i64_mod_int64_min_by_two/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = (-9223372036854775807i64) - 1i64; + let b: i64 = 2i64; + if (a % b == 0i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_mod_neg_dividend/case.ww b/test/wcc/data/r978_i64_mod_neg_dividend/case.ww new file mode 100644 index 00000000..5ba8b611 --- /dev/null +++ b/test/wcc/data/r978_i64_mod_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = -100i64; + let b: i64 = 1000000000i64; + if (a % b == -100i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i64_mod_neg_divisor/case.ww b/test/wcc/data/r978_i64_mod_neg_divisor/case.ww new file mode 100644 index 00000000..1d383728 --- /dev/null +++ b/test/wcc/data/r978_i64_mod_neg_divisor/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = 50i64; + let b: i64 = -3i64; + if (a % b == 2i64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i8_div_int8_min_by_two/case.ww b/test/wcc/data/r978_i8_div_int8_min_by_two/case.ww new file mode 100644 index 00000000..490a60f3 --- /dev/null +++ b/test/wcc/data/r978_i8_div_int8_min_by_two/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i8 = -128i8; + let b: i8 = 2i8; + if (a / b == -64i8) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i8_div_neg_dividend/case.ww b/test/wcc/data/r978_i8_div_neg_dividend/case.ww new file mode 100644 index 00000000..02151748 --- /dev/null +++ b/test/wcc/data/r978_i8_div_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i8 = -100i8; + let b: i8 = 7i8; + if (a / b == -14i8) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_i8_mod_neg_dividend/case.ww b/test/wcc/data/r978_i8_mod_neg_dividend/case.ww new file mode 100644 index 00000000..d771b0e6 --- /dev/null +++ b/test/wcc/data/r978_i8_mod_neg_dividend/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i8 = -100i8; + let b: i8 = 7i8; + if (a % b == -2i8) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_mixed_unsigned_rhs_picks_unsigned/case.ww b/test/wcc/data/r978_mixed_unsigned_rhs_picks_unsigned/case.ww new file mode 100644 index 00000000..452d1ef1 --- /dev/null +++ b/test/wcc/data/r978_mixed_unsigned_rhs_picks_unsigned/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: i64 = 100i64; + let b: u64 = 7u64; + if ((a: u64) / b == 14u64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_u16_div_high_bit_set/case.ww b/test/wcc/data/r978_u16_div_high_bit_set/case.ww new file mode 100644 index 00000000..c7fa2e9b --- /dev/null +++ b/test/wcc/data/r978_u16_div_high_bit_set/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u16 = 0xFFFFu16; + let b: u16 = 2u16; + if (a / b == 0x7FFFu16) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_u32_div_high_bit_set/case.ww b/test/wcc/data/r978_u32_div_high_bit_set/case.ww new file mode 100644 index 00000000..2fe9905c --- /dev/null +++ b/test/wcc/data/r978_u32_div_high_bit_set/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u32 = 0x80000001u32; + let b: u32 = 2u32; + if (a / b == 0x40000000u32) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_u32_mod_high_bit_set/case.ww b/test/wcc/data/r978_u32_mod_high_bit_set/case.ww new file mode 100644 index 00000000..396c01d0 --- /dev/null +++ b/test/wcc/data/r978_u32_mod_high_bit_set/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u32 = 0x80000001u32; + let b: u32 = 2u32; + if (a % b == 1u32) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_u64_div_high_bit_set/case.ww b/test/wcc/data/r978_u64_div_high_bit_set/case.ww new file mode 100644 index 00000000..ff21fd91 --- /dev/null +++ b/test/wcc/data/r978_u64_div_high_bit_set/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u64 = 0x8000000000000001u64; + let b: u64 = 2u64; + if (a / b == 0x4000000000000000u64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_u64_mod_high_bit_set/case.ww b/test/wcc/data/r978_u64_mod_high_bit_set/case.ww new file mode 100644 index 00000000..400b1564 --- /dev/null +++ b/test/wcc/data/r978_u64_mod_high_bit_set/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u64 = 0x8000000000000001u64; + let b: u64 = 2u64; + if (a % b == 1u64) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r978_u8_div_high_bit_set/case.ww b/test/wcc/data/r978_u8_div_high_bit_set/case.ww new file mode 100644 index 00000000..b67ea10b --- /dev/null +++ b/test/wcc/data/r978_u8_div_high_bit_set/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 42 +package main; +fn main() i32 = { + let a: u8 = 0xFFu8; + let b: u8 = 2u8; + if (a / b == 0x7Fu8) { return 42; }; + return 0; +}; diff --git a/test/wcc/data/r989_ampfncollide_loud/case.ww b/test/wcc/data/r989_ampfncollide_loud/case.ww new file mode 100644 index 00000000..21590bd6 --- /dev/null +++ b/test/wcc/data/r989_ampfncollide_loud/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +// Current-module &fn lookup must beat a later same-leaf declaration. +package beta; +export type hfn = fn(x: i32) i32; +export fn handler(x: i32) i32 = { return x + 41; }; +export fn usebeta() i32 = { let p: *hfn = &handler; return (*p)(1); }; +package gamma; +export fn handler(s: str) str = { return s; }; +package main; +import beta; +import gamma; +fn main() int = { return beta.usebeta(): int; }; diff --git a/test/wcc/data/r989_ampfncollide_silent/case.ww b/test/wcc/data/r989_ampfncollide_silent/case.ww new file mode 100644 index 00000000..6412bf7a --- /dev/null +++ b/test/wcc/data/r989_ampfncollide_silent/case.ww @@ -0,0 +1,12 @@ +//ww:error "not assignable" +// A foreign-signature slot must not capture the current module's fn by leaf. +package beta; +export type gfn = fn(s: str) str; +export fn handler(x: i32) i32 = { return x + 41; }; +export fn usebeta() i32 = { let p: *gfn = &handler; if (p == p) { return 1; }; return 0; }; +package gamma; +export fn handler(s: str) str = { return s; }; +package main; +import beta; +import gamma; +fn main() int = { return beta.usebeta(): int; }; diff --git a/test/wcc/data/r989_callarg_array_into_ptr/case.ww b/test/wcc/data/r989_callarg_array_into_ptr/case.ww new file mode 100644 index 00000000..8824fb75 --- /dev/null +++ b/test/wcc/data/r989_callarg_array_into_ptr/case.ww @@ -0,0 +1,4 @@ +//ww:error "not assignable" +package main; +fn takesptr(p: *int) void = { return; }; +export fn main() int = { let a: [3]int = [1, 2, 3]; takesptr(a); return 0; }; diff --git a/test/wcc/data/r989_callarg_fn_addr_reject/case.ww b/test/wcc/data/r989_callarg_fn_addr_reject/case.ww new file mode 100644 index 00000000..69594d3b --- /dev/null +++ b/test/wcc/data/r989_callarg_fn_addr_reject/case.ww @@ -0,0 +1,6 @@ +//ww:error "not assignable" +package main; +type myfn = fn() int; +fn g() int = { return 7; }; +fn use_it(f: myfn) int = { return f(); }; +export fn main() int = { return use_it(&g); }; diff --git a/test/wcc/data/r989_callarg_fn_bare/case.ww b/test/wcc/data/r989_callarg_fn_bare/case.ww new file mode 100644 index 00000000..259f5d03 --- /dev/null +++ b/test/wcc/data/r989_callarg_fn_bare/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 7 +package main; +type myfn = fn() int; +fn g() int = { return 7; }; +fn use_it(f: myfn) int = { return f(); }; +export fn main() int = { return use_it(g); }; diff --git a/test/wcc/data/r989_callarg_fn_cast/case.ww b/test/wcc/data/r989_callarg_fn_cast/case.ww new file mode 100644 index 00000000..2863a218 --- /dev/null +++ b/test/wcc/data/r989_callarg_fn_cast/case.ww @@ -0,0 +1,6 @@ +//ww:run-exit 7 +package main; +type myfn = fn() int; +fn g() int = { return 7; }; +fn use_it(f: myfn) int = { return f(); }; +export fn main() int = { return use_it(g: myfn); }; diff --git a/test/wcc/data/r989_callarg_fn_match_sig/case.ww b/test/wcc/data/r989_callarg_fn_match_sig/case.ww new file mode 100644 index 00000000..1c235d89 --- /dev/null +++ b/test/wcc/data/r989_callarg_fn_match_sig/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +fn g() int = { return 5; }; +export fn main() int = { let p: fn() int = g; return p(); }; diff --git a/test/wcc/data/r989_callarg_fn_mismatch_sig/case.ww b/test/wcc/data/r989_callarg_fn_mismatch_sig/case.ww new file mode 100644 index 00000000..a59f2670 --- /dev/null +++ b/test/wcc/data/r989_callarg_fn_mismatch_sig/case.ww @@ -0,0 +1,4 @@ +//ww:error "not assignable" +package main; +fn h() str = { return ""; }; +export fn main() int = { let p: fn() int = h; return 0; }; diff --git a/test/wcc/data/r989_callarg_let_slice_scalar/case.ww b/test/wcc/data/r989_callarg_let_slice_scalar/case.ww new file mode 100644 index 00000000..899ac5e0 --- /dev/null +++ b/test/wcc/data/r989_callarg_let_slice_scalar/case.ww @@ -0,0 +1,3 @@ +//ww:error "not assignable" +package main; +export fn main() int = { let xs: []int = 5; return 0; }; diff --git a/test/wcc/data/r989_callarg_scalar_control/case.ww b/test/wcc/data/r989_callarg_scalar_control/case.ww new file mode 100644 index 00000000..28d068cb --- /dev/null +++ b/test/wcc/data/r989_callarg_scalar_control/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +fn takesint(x: int) int = { return x; }; +export fn main() int = { return takesint(7); }; diff --git a/test/wcc/data/r989_callarg_scalar_for_slice/case.ww b/test/wcc/data/r989_callarg_scalar_for_slice/case.ww new file mode 100644 index 00000000..7002275b --- /dev/null +++ b/test/wcc/data/r989_callarg_scalar_for_slice/case.ww @@ -0,0 +1,4 @@ +//ww:error "not assignable" +package main; +fn takesslice(xs: []int) void = { return; }; +export fn main() int = { let n: int = 5; takesslice(n); return 0; }; diff --git a/test/wcc/data/r989_callarg_slice_borrow/case.ww b/test/wcc/data/r989_callarg_slice_borrow/case.ww new file mode 100644 index 00000000..b090d8cb --- /dev/null +++ b/test/wcc/data/r989_callarg_slice_borrow/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +fn takesslice(xs: []int) int = { return len(xs): int; }; +export fn main() int = { + let a: [3]int = [1, 2, 3]; + if (takesslice(a) != 3) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r989_callarg_spread_accept/case.ww b/test/wcc/data/r989_callarg_spread_accept/case.ww new file mode 100644 index 00000000..c2e50d39 --- /dev/null +++ b/test/wcc/data/r989_callarg_spread_accept/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +type inner = (int | str); +fn take(x: (...inner | bool)) void = { return; }; +export fn main() int = { take(42); return 0; }; diff --git a/test/wcc/data/r989_callarg_str_for_int/case.ww b/test/wcc/data/r989_callarg_str_for_int/case.ww new file mode 100644 index 00000000..f99bb34d --- /dev/null +++ b/test/wcc/data/r989_callarg_str_for_int/case.ww @@ -0,0 +1,4 @@ +//ww:error "not assignable" +package main; +fn takesint(x: int) void = { return; }; +export fn main() int = { let s: str = "hi"; takesint(s); return 0; }; diff --git a/test/wcc/data/r989_cata_arrlen_const/case.ww b/test/wcc/data/r989_cata_arrlen_const/case.ww new file mode 100644 index 00000000..614e8ff9 --- /dev/null +++ b/test/wcc/data/r989_cata_arrlen_const/case.ww @@ -0,0 +1,3 @@ +//ww:run +package main; +export fn main() i32 = { let xs: [3]u8; xs[0] = 1u8; return 0; }; diff --git a/test/wcc/data/r989_cata_arrlen_runtime/case.ww b/test/wcc/data/r989_cata_arrlen_runtime/case.ww new file mode 100644 index 00000000..ea9b66a9 --- /dev/null +++ b/test/wcc/data/r989_cata_arrlen_runtime/case.ww @@ -0,0 +1,3 @@ +//ww:error "array length must be an integer literal" +package main; +export fn main() i32 = { let n: i32 = 3; let xs: [n]u8; xs[0] = 77u8; return n; }; diff --git a/test/wcc/data/r989_cata_break_continue_control/case.ww b/test/wcc/data/r989_cata_break_continue_control/case.ww new file mode 100644 index 00000000..e7637c92 --- /dev/null +++ b/test/wcc/data/r989_cata_break_continue_control/case.ww @@ -0,0 +1,11 @@ +//ww:run-exit 5 +package main; +export fn main() i32 = { + let i: i32 = 0; + for (i < 10) { + i = i + 1; + if (i == 3) { continue; }; + if (i == 5) { break; }; + }; + return i; +}; diff --git a/test/wcc/data/r989_cata_break_else_outside/case.ww b/test/wcc/data/r989_cata_break_else_outside/case.ww new file mode 100644 index 00000000..8b73bfd4 --- /dev/null +++ b/test/wcc/data/r989_cata_break_else_outside/case.ww @@ -0,0 +1,6 @@ +//ww:error "break outside loop" +package main; +export fn main() void = { + let i: i32 = 0; + for (i < 1) { i = i + 1; } else { break; }; +}; diff --git a/test/wcc/data/r989_cata_break_outside/case.ww b/test/wcc/data/r989_cata_break_outside/case.ww new file mode 100644 index 00000000..07c625ae --- /dev/null +++ b/test/wcc/data/r989_cata_break_outside/case.ww @@ -0,0 +1,3 @@ +//ww:error "break outside loop" +package main; +export fn main() void = { break; }; diff --git a/test/wcc/data/r989_cata_continue_outside/case.ww b/test/wcc/data/r989_cata_continue_outside/case.ww new file mode 100644 index 00000000..61b8d4cf --- /dev/null +++ b/test/wcc/data/r989_cata_continue_outside/case.ww @@ -0,0 +1,3 @@ +//ww:error "continue outside loop" +package main; +export fn main() void = { continue; }; diff --git a/test/wcc/data/r989_cata_int_ops/case.ww b/test/wcc/data/r989_cata_int_ops/case.ww new file mode 100644 index 00000000..34b1777b --- /dev/null +++ b/test/wcc/data/r989_cata_int_ops/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 8 +package main; +export fn main() i32 = { + let a: i32 = 3; let b: i32 = 4; let c: i32 = (a + b) & 7; + if (a < b) { c = c + 1; }; + return c; +}; diff --git a/test/wcc/data/r989_cata_massign_alias/case.ww b/test/wcc/data/r989_cata_massign_alias/case.ww new file mode 100644 index 00000000..e3da2b1b --- /dev/null +++ b/test/wcc/data/r989_cata_massign_alias/case.ww @@ -0,0 +1,5 @@ +//ww:error "multi-assign rhs is not a tuple" +package main; +type pair = (i64, str); +fn f() pair = { return (7i64, "hey"); }; +export fn main() i32 = { let a: i64 = 0i64; let s: str = ""; a, s = f(); return 0; }; diff --git a/test/wcc/data/r989_cata_massign_scalar/case.ww b/test/wcc/data/r989_cata_massign_scalar/case.ww new file mode 100644 index 00000000..bb05f085 --- /dev/null +++ b/test/wcc/data/r989_cata_massign_scalar/case.ww @@ -0,0 +1,4 @@ +//ww:error "multi-assign rhs is not a tuple" +package main; +fn g() i64 = { return 7i64; }; +export fn main() i32 = { let a: i64 = 0i64; let s: i64 = 0i64; a, s = g(); return 0; }; diff --git a/test/wcc/data/r989_cata_massign_tuple/case.ww b/test/wcc/data/r989_cata_massign_tuple/case.ww new file mode 100644 index 00000000..d987edae --- /dev/null +++ b/test/wcc/data/r989_cata_massign_tuple/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 7 +package main; +fn f() (i64, i64) = { return (3i64, 4i64); }; +export fn main() i32 = { let a: i64 = 0i64; let b: i64 = 0i64; a, b = f(); return (a + b): i32; }; diff --git a/test/wcc/data/r989_cata_match_mixed_yield/case.ww b/test/wcc/data/r989_cata_match_mixed_yield/case.ww new file mode 100644 index 00000000..624a027c --- /dev/null +++ b/test/wcc/data/r989_cata_match_mixed_yield/case.ww @@ -0,0 +1,8 @@ +//ww:error "match arm yields" +package main; +fn pick(b: bool) (i32 | str) = { if (b) { return 7; }; return "x"; }; +export fn main() i32 = { + let v: (i32 | str) = pick(true); + let r = match (v) { case i32 => yield 7; case str => yield "oops"; }; + return 0; +}; diff --git a/test/wcc/data/r989_cata_match_same_yield/case.ww b/test/wcc/data/r989_cata_match_same_yield/case.ww new file mode 100644 index 00000000..300a3ebb --- /dev/null +++ b/test/wcc/data/r989_cata_match_same_yield/case.ww @@ -0,0 +1,8 @@ +//ww:run-exit 9 +package main; +fn pick(b: bool) (i32 | str) = { if (b) { return 4; }; return "x"; }; +export fn main() i32 = { + let v: (i32 | str) = pick(true); + let r: i32 = match (v) { case i32 => yield 9; case let s: str => yield 5; }; + return r; +}; diff --git a/test/wcc/data/r989_cata_size_localvar/case.ww b/test/wcc/data/r989_cata_size_localvar/case.ww new file mode 100644 index 00000000..a2212c04 --- /dev/null +++ b/test/wcc/data/r989_cata_size_localvar/case.ww @@ -0,0 +1,3 @@ +//ww:error "unknown type 'v'" +package main; +export fn main() i32 = { let v: i32 = 5; return size(v): i32; }; diff --git a/test/wcc/data/r989_cata_size_type/case.ww b/test/wcc/data/r989_cata_size_type/case.ww new file mode 100644 index 00000000..29ea0881 --- /dev/null +++ b/test/wcc/data/r989_cata_size_type/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 4 +package main; +export fn main() i32 = { return size(i32): i32; }; diff --git a/test/wcc/data/r989_cata_str_bitand/case.ww b/test/wcc/data/r989_cata_str_bitand/case.ww new file mode 100644 index 00000000..0636fb6a --- /dev/null +++ b/test/wcc/data/r989_cata_str_bitand/case.ww @@ -0,0 +1,3 @@ +//ww:error "bitwise on non-integer type" +package main; +export fn main() i32 = { let a: str = "x"; let b: str = "y"; let n: i32 = (a & b): i32; return n; }; diff --git a/test/wcc/data/r989_cata_str_lt/case.ww b/test/wcc/data/r989_cata_str_lt/case.ww new file mode 100644 index 00000000..d23a26c3 --- /dev/null +++ b/test/wcc/data/r989_cata_str_lt/case.ww @@ -0,0 +1,3 @@ +//ww:error "ordered comparison on non-numeric" +package main; +export fn main() i32 = { let a: str = "x"; let b: str = "y"; if (a < b) { return 1; }; return 0; }; diff --git a/test/wcc/data/r989_cata_str_plus/case.ww b/test/wcc/data/r989_cata_str_plus/case.ww new file mode 100644 index 00000000..f2b4d75d --- /dev/null +++ b/test/wcc/data/r989_cata_str_plus/case.ww @@ -0,0 +1,3 @@ +//ww:error "arithmetic on non-numeric type" +package main; +export fn main() i32 = { let a: str = "x"; let b: str = "y"; let c: str = a + b; return c.len: i32; }; diff --git a/test/wcc/data/r989_cata_tilde_str/case.ww b/test/wcc/data/r989_cata_tilde_str/case.ww new file mode 100644 index 00000000..557d854a --- /dev/null +++ b/test/wcc/data/r989_cata_tilde_str/case.ww @@ -0,0 +1,3 @@ +//ww:error "~ on non-integer" +package main; +export fn main() i32 = { let a: str = "x"; let n: i32 = (~a): i32; return n; }; diff --git a/test/wcc/data/r989_cata_try_single/case.ww b/test/wcc/data/r989_cata_try_single/case.ww new file mode 100644 index 00000000..45dfc4ef --- /dev/null +++ b/test/wcc/data/r989_cata_try_single/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 5 +package main; +type e = !void; +fn g() (i32 | e) = { return 5; }; +export fn main() i32 = { let x = g()!; return x; }; diff --git a/test/wcc/data/r989_cata_try_spread_multisuccess/case.ww b/test/wcc/data/r989_cata_try_spread_multisuccess/case.ww new file mode 100644 index 00000000..27789505 --- /dev/null +++ b/test/wcc/data/r989_cata_try_spread_multisuccess/case.ww @@ -0,0 +1,6 @@ +//ww:error "multi-success union unwired" +package main; +type inner = (i32 | bool); +type e = !void; +fn g() (...inner | e) = { return true; }; +export fn main() i32 = { let x = g()!; return 0; }; diff --git a/test/wcc/data/r989_cata_tuple_match/case.ww b/test/wcc/data/r989_cata_tuple_match/case.ww new file mode 100644 index 00000000..a3af4bd4 --- /dev/null +++ b/test/wcc/data/r989_cata_tuple_match/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 3 +package main; +export fn main() i32 = { let t: (i32, i32) = (1, 2); return t.0 + t.1; }; diff --git a/test/wcc/data/r989_cata_tuple_overlong/case.ww b/test/wcc/data/r989_cata_tuple_overlong/case.ww new file mode 100644 index 00000000..1bba14c7 --- /dev/null +++ b/test/wcc/data/r989_cata_tuple_overlong/case.ww @@ -0,0 +1,7 @@ +//ww:error c "not assignable to declared" ww "tuple literal has 3 elements" +package main; + +export fn main() i32 = { + let t: (i32, i32) = (1, 2, 3); + return 0; +}; diff --git a/test/wcc/data/r989_cata_tuple_short/case.ww b/test/wcc/data/r989_cata_tuple_short/case.ww new file mode 100644 index 00000000..bf375d11 --- /dev/null +++ b/test/wcc/data/r989_cata_tuple_short/case.ww @@ -0,0 +1,7 @@ +//ww:error c "not assignable to declared" ww "tuple literal has 2 elements" +package main; + +export fn main() i32 = { + let t: (i32, i32, i32) = (1, 2); + return 0; +}; diff --git a/test/wcc/data/r989_declns_builtin_redecl/case.ww b/test/wcc/data/r989_declns_builtin_redecl/case.ww new file mode 100644 index 00000000..676868ff --- /dev/null +++ b/test/wcc/data/r989_declns_builtin_redecl/case.ww @@ -0,0 +1,10 @@ +//ww:run-exit 7 +package main; +type nomem = !void; +fn g() (i32 | nomem) = { return 7; }; +export fn main() i32 = { + match (g()) { + case let v: i32 => return v; + case nomem => return 99; + }; +}; diff --git a/test/wcc/data/r989_declns_dup_def/case.ww b/test/wcc/data/r989_declns_dup_def/case.ww new file mode 100644 index 00000000..bc00b114 --- /dev/null +++ b/test/wcc/data/r989_declns_dup_def/case.ww @@ -0,0 +1,5 @@ +//ww:error "duplicate def D" +package main; +def D: i32 = 1; +def D: i32 = 2; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r989_declns_dup_fn/case.ww b/test/wcc/data/r989_declns_dup_fn/case.ww new file mode 100644 index 00000000..f8399894 --- /dev/null +++ b/test/wcc/data/r989_declns_dup_fn/case.ww @@ -0,0 +1,5 @@ +//ww:error "duplicate fn foo" +package main; +fn foo() i32 = { return 1; }; +fn foo() i32 = { return 2; }; +export fn main() i32 = { return foo(); }; diff --git a/test/wcc/data/r989_declns_dup_let/case.ww b/test/wcc/data/r989_declns_dup_let/case.ww new file mode 100644 index 00000000..efad3401 --- /dev/null +++ b/test/wcc/data/r989_declns_dup_let/case.ww @@ -0,0 +1,5 @@ +//ww:error "duplicate let g" +package main; +let g: i32 = 1; +let g: i32 = 2; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r989_defercap_17/case.ww b/test/wcc/data/r989_defercap_17/case.ww new file mode 100644 index 00000000..8c175d0c --- /dev/null +++ b/test/wcc/data/r989_defercap_17/case.ww @@ -0,0 +1,11 @@ +//ww:run +package main; +let cnt: i32 = 0; +fn bump() void = { cnt = cnt + 1; }; +fn doit() void = { + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); defer bump(); +}; +export fn main() i32 = { doit(); if (cnt == 17) { return 0; }; return 1; }; diff --git a/test/wcc/data/r989_defercap_at_32/case.ww b/test/wcc/data/r989_defercap_at_32/case.ww new file mode 100644 index 00000000..2487d3a5 --- /dev/null +++ b/test/wcc/data/r989_defercap_at_32/case.ww @@ -0,0 +1,15 @@ +//ww:run +package main; +let cnt: i32 = 0; +fn bump() void = { cnt = cnt + 1; }; +fn doit() void = { + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); +}; +export fn main() i32 = { doit(); if (cnt == 32) { return 0; }; return 1; }; diff --git a/test/wcc/data/r989_defercap_over_33/case.ww b/test/wcc/data/r989_defercap_over_33/case.ww new file mode 100644 index 00000000..8d1263ee --- /dev/null +++ b/test/wcc/data/r989_defercap_over_33/case.ww @@ -0,0 +1,16 @@ +//ww:error "cgen: too many defers in one function" +package main; +let cnt: i32 = 0; +fn bump() void = { cnt = cnt + 1; }; +fn doit() void = { + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); defer bump(); defer bump(); defer bump(); + defer bump(); +}; +export fn main() i32 = { doit(); if (cnt == 33) { return 0; }; return 1; }; diff --git a/test/wcc/data/r989_fmt_idx_2147483648/case.ww b/test/wcc/data/r989_fmt_idx_2147483648/case.ww new file mode 100644 index 00000000..2232cf3d --- /dev/null +++ b/test/wcc/data/r989_fmt_idx_2147483648/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 255 +package main; +import fmt; +import io; +export fn main() i32 = { + let buf: [64]u8; + let r: (str | io.error) = fmt.bsprintf(buf[0:64], "{2147483648}", 42i64); + match (r) { + case let s: str => { return 0; }; + case let e: io.error => { return 1; }; + }; +}; diff --git a/test/wcc/data/r989_fmt_idx_2147483649/case.ww b/test/wcc/data/r989_fmt_idx_2147483649/case.ww new file mode 100644 index 00000000..094df3a2 --- /dev/null +++ b/test/wcc/data/r989_fmt_idx_2147483649/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 255 +package main; +import fmt; +import io; +export fn main() i32 = { + let buf: [64]u8; + let r: (str | io.error) = fmt.bsprintf(buf[0:64], "{2147483649}", 42i64); + match (r) { + case let s: str => { return 0; }; + case let e: io.error => { return 1; }; + }; +}; diff --git a/test/wcc/data/r989_fmt_idx_9999999999/case.ww b/test/wcc/data/r989_fmt_idx_9999999999/case.ww new file mode 100644 index 00000000..1d1a44c0 --- /dev/null +++ b/test/wcc/data/r989_fmt_idx_9999999999/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 255 +package main; +import fmt; +import io; +export fn main() i32 = { + let buf: [64]u8; + let r: (str | io.error) = fmt.bsprintf(buf[0:64], "{9999999999}", 42i64); + match (r) { + case let s: str => { return 0; }; + case let e: io.error => { return 1; }; + }; +}; diff --git a/test/wcc/data/r989_fmt_prec_2147483647/case.ww b/test/wcc/data/r989_fmt_prec_2147483647/case.ww new file mode 100644 index 00000000..95441a0b --- /dev/null +++ b/test/wcc/data/r989_fmt_prec_2147483647/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 7 +package main; +import fmt; +import io; +export fn main() i32 = { + let buf: [64]u8; + let r: (str | io.error) = fmt.bsprintf(buf[0:64], "{:.2147483647}", "ok"); + match (r) { + case let s: str => { if (s.len == 2) { return 7; }; return 8; }; + case let e: io.error => { return 1; }; + }; +}; diff --git a/test/wcc/data/r989_fmt_width_2147483648/case.ww b/test/wcc/data/r989_fmt_width_2147483648/case.ww new file mode 100644 index 00000000..d63f5159 --- /dev/null +++ b/test/wcc/data/r989_fmt_width_2147483648/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 255 +package main; +import fmt; +import io; +export fn main() i32 = { + let buf: [64]u8; + let r: (str | io.error) = fmt.bsprintf(buf[0:64], "{:2147483648}", 42i64); + match (r) { + case let s: str => { return 0; }; + case let e: io.error => { return 1; }; + }; +}; diff --git a/test/wcc/data/r989_intoverflow_dec_huge/case.ww b/test/wcc/data/r989_intoverflow_dec_huge/case.ww new file mode 100644 index 00000000..ec7f5113 --- /dev/null +++ b/test/wcc/data/r989_intoverflow_dec_huge/case.ww @@ -0,0 +1,7 @@ +//ww:error "bad integer literal" +// 989_intoverflow_reject dec_huge: 2^128-1 must not wrap modulo u64. +package main; +export fn main() i32 = { + let x: u64 = 340282366920938463463374607431768211455u64; + return x: i32; +}; diff --git a/test/wcc/data/r989_intoverflow_dec_overflow/case.ww b/test/wcc/data/r989_intoverflow_dec_overflow/case.ww new file mode 100644 index 00000000..3ce1e089 --- /dev/null +++ b/test/wcc/data/r989_intoverflow_dec_overflow/case.ww @@ -0,0 +1,7 @@ +//ww:error "bad integer literal" +// 989_intoverflow_reject dec_overflow: a 21-digit decimal exceeds u64. +package main; +export fn main() i32 = { + let x: u64 = 99999999999999999999u64; + return x: i32; +}; diff --git a/test/wcc/data/r989_intoverflow_hex_overflow/case.ww b/test/wcc/data/r989_intoverflow_hex_overflow/case.ww new file mode 100644 index 00000000..30db69b8 --- /dev/null +++ b/test/wcc/data/r989_intoverflow_hex_overflow/case.ww @@ -0,0 +1,7 @@ +//ww:error "bad integer literal" +// 989_intoverflow_reject hex_overflow: the smallest 65-bit hex shape. +package main; +export fn main() i32 = { + let x: u64 = 0x1ffffffffffffffffu64; + return x: i32; +}; diff --git a/test/wcc/data/r989_intoverflow_u64max_dec_ok/case.ww b/test/wcc/data/r989_intoverflow_u64max_dec_ok/case.ww new file mode 100644 index 00000000..a3d3faad --- /dev/null +++ b/test/wcc/data/r989_intoverflow_u64max_dec_ok/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 7 +package main; +export fn main() i32 = { + let x: u64 = 18446744073709551615u64; + if (x == 18446744073709551615u64) { return 7; }; + return 0; +}; diff --git a/test/wcc/data/r989_intoverflow_u64max_hex_ok/case.ww b/test/wcc/data/r989_intoverflow_u64max_hex_ok/case.ww new file mode 100644 index 00000000..17c33614 --- /dev/null +++ b/test/wcc/data/r989_intoverflow_u64max_hex_ok/case.ww @@ -0,0 +1,7 @@ +//ww:run-exit 9 +package main; +export fn main() i32 = { + let x: u64 = 0xffffffffffffffffu64; + if (x == 18446744073709551615u64) { return 9; }; + return 0; +}; diff --git a/test/wcc/data/r989_libprecond_decodedsize_aligned/case.ww b/test/wcc/data/r989_libprecond_decodedsize_aligned/case.ww new file mode 100644 index 00000000..2ad4c407 --- /dev/null +++ b/test/wcc/data/r989_libprecond_decodedsize_aligned/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +import encoding.base64; +export fn main() int = { + let c: i32 = base64.decodedsize(8i32); + if (c != 6i32) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r989_libprecond_u32n_one/case.ww b/test/wcc/data/r989_libprecond_u32n_one/case.ww new file mode 100644 index 00000000..0807d910 --- /dev/null +++ b/test/wcc/data/r989_libprecond_u32n_one/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +import math.random; +export fn main() int = { + let g: random.random = random.init(1u64); + let x: u32 = random.u32n(&g, 1u32); + if (x >= 1u32) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r989_libprecond_u32n_valid/case.ww b/test/wcc/data/r989_libprecond_u32n_valid/case.ww new file mode 100644 index 00000000..126d0651 --- /dev/null +++ b/test/wcc/data/r989_libprecond_u32n_valid/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +import math.random; +export fn main() int = { + let g: random.random = random.init(1u64); + let x: u32 = random.u32n(&g, 10u32); + if (x >= 10u32) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r989_libprecond_u64n_one/case.ww b/test/wcc/data/r989_libprecond_u64n_one/case.ww new file mode 100644 index 00000000..7aeec3a3 --- /dev/null +++ b/test/wcc/data/r989_libprecond_u64n_one/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +import math.random; +export fn main() int = { + let g: random.random = random.init(1u64); + let x: u64 = random.u64n(&g, 1u64); + if (x >= 1u64) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r989_libprecond_u64n_valid/case.ww b/test/wcc/data/r989_libprecond_u64n_valid/case.ww new file mode 100644 index 00000000..6f81d1b5 --- /dev/null +++ b/test/wcc/data/r989_libprecond_u64n_valid/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +import math.random; +export fn main() int = { + let g: random.random = random.init(1u64); + let x: u64 = random.u64n(&g, 10u64); + if (x >= 10u64) { return 1; }; + return 0; +}; diff --git a/test/wcc/data/r989_loopcap_at_16/case.ww b/test/wcc/data/r989_loopcap_at_16/case.ww new file mode 100644 index 00000000..f5de6453 --- /dev/null +++ b/test/wcc/data/r989_loopcap_at_16/case.ww @@ -0,0 +1,13 @@ +//ww:run +// Exactly LOOP_MAX nested loops remain accepted. +package main; +export fn main() i32 = { + let n: i32 = 0; + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + n = 1; + }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; + return 0; +}; diff --git a/test/wcc/data/r989_loopcap_over_17/case.ww b/test/wcc/data/r989_loopcap_over_17/case.ww new file mode 100644 index 00000000..cddea92a --- /dev/null +++ b/test/wcc/data/r989_loopcap_over_17/case.ww @@ -0,0 +1,13 @@ +//ww:error "cgen: loop nesting too deep" +// One loop beyond LOOP_MAX must fail loud rather than corrupting loop labels. +package main; +export fn main() i32 = { + let n: i32 = 0; + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { for (n < 1) { for (n < 1) { for (n < 1) { + for (n < 1) { n = 1; + }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; + return 0; +}; diff --git a/test/wcc/data/r989_m1union_all_arms/case.ww b/test/wcc/data/r989_m1union_all_arms/case.ww new file mode 100644 index 00000000..2dbaadef --- /dev/null +++ b/test/wcc/data/r989_m1union_all_arms/case.ww @@ -0,0 +1,25 @@ +//ww:run-exit 219 +package main; +import encoding.utf8; +fn classify(d: *utf8.decoder) int = { + match (utf8.next(d)) { + case let r: rune => return 1; + case let dn: utf8.done => return 2; + case let m: utf8.more => return 3; + case let e: utf8.invalid => return 4; + }; + return 0; +}; +export fn main() int = { + let g: []u8 = [65u8]; + let dg = utf8.decode(g); + let a = classify(&dg); + let b = classify(&dg); + let bad: []u8 = [255u8]; + let db = utf8.decode(bad); + let c = classify(&db); + let tr: []u8 = [195u8]; + let dt = utf8.decode(tr); + let e = classify(&dt); + return a * 1000 + b * 100 + c * 10 + e; +}; diff --git a/test/wcc/data/r989_m1union_done/case.ww b/test/wcc/data/r989_m1union_done/case.ww new file mode 100644 index 00000000..3ea56414 --- /dev/null +++ b/test/wcc/data/r989_m1union_done/case.ww @@ -0,0 +1,18 @@ +//ww:run-exit 2 +package main; +import encoding.utf8; +fn classify(d: *utf8.decoder) int = { + match (utf8.next(d)) { + case let r: rune => return 1; + case let dn: utf8.done => return 2; + case let m: utf8.more => return 3; + case let e: utf8.invalid => return 4; + }; + return 0; +}; +export fn main() int = { + let s: []u8 = [65u8]; + let d = utf8.decode(s); + classify(&d); + return classify(&d); +}; diff --git a/test/wcc/data/r989_m1union_invalid/case.ww b/test/wcc/data/r989_m1union_invalid/case.ww new file mode 100644 index 00000000..4d6abcd9 --- /dev/null +++ b/test/wcc/data/r989_m1union_invalid/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 4 +package main; +import encoding.utf8; +fn classify(d: *utf8.decoder) int = { + match (utf8.next(d)) { + case let r: rune => return 1; + case let dn: utf8.done => return 2; + case let m: utf8.more => return 3; + case let e: utf8.invalid => return 4; + }; + return 0; +}; +export fn main() int = { + let s: []u8 = [255u8]; + let d = utf8.decode(s); + return classify(&d); +}; diff --git a/test/wcc/data/r989_m1union_more/case.ww b/test/wcc/data/r989_m1union_more/case.ww new file mode 100644 index 00000000..c4ac212c --- /dev/null +++ b/test/wcc/data/r989_m1union_more/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 3 +package main; +import encoding.utf8; +fn classify(d: *utf8.decoder) int = { + match (utf8.next(d)) { + case let r: rune => return 1; + case let dn: utf8.done => return 2; + case let m: utf8.more => return 3; + case let e: utf8.invalid => return 4; + }; + return 0; +}; +export fn main() int = { + let s: []u8 = [195u8]; + let d = utf8.decode(s); + return classify(&d); +}; diff --git a/test/wcc/data/r989_m1union_rune/case.ww b/test/wcc/data/r989_m1union_rune/case.ww new file mode 100644 index 00000000..9c415463 --- /dev/null +++ b/test/wcc/data/r989_m1union_rune/case.ww @@ -0,0 +1,17 @@ +//ww:run-exit 1 +package main; +import encoding.utf8; +fn classify(d: *utf8.decoder) int = { + match (utf8.next(d)) { + case let r: rune => return 1; + case let dn: utf8.done => return 2; + case let m: utf8.more => return 3; + case let e: utf8.invalid => return 4; + }; + return 0; +}; +export fn main() int = { + let s: []u8 = [65u8]; + let d = utf8.decode(s); + return classify(&d); +}; diff --git a/test/wcc/data/r989_nullableglobal_as/case.ww b/test/wcc/data/r989_nullableglobal_as/case.ww new file mode 100644 index 00000000..389f1f3a --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_as/case.ww @@ -0,0 +1,7 @@ +//ww:error "nullable-global storage unimplemented (task #15)" +package main; +type np = (*i64 | void); +let gv: i64 = 7; +let g: np = &gv; +fn ck() int = { let p: *i64 = g as *i64; return (*p): int; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_nullableglobal_inline/case.ww b/test/wcc/data/r989_nullableglobal_inline/case.ww new file mode 100644 index 00000000..b708a379 --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_inline/case.ww @@ -0,0 +1,6 @@ +//ww:error "nullable-global storage unimplemented (task #15)" +package main; +let gv: i64 = 7; +let g: (*i64 | void) = &gv; +fn ck() int = { match (g) { case let p: *i64 => return (*p): int; case void => return 9; }; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_nullableglobal_is/case.ww b/test/wcc/data/r989_nullableglobal_is/case.ww new file mode 100644 index 00000000..c392ede6 --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_is/case.ww @@ -0,0 +1,7 @@ +//ww:error "nullable-global storage unimplemented (task #15)" +package main; +type np = (*i64 | void); +let gv: i64 = 7; +let g: np = &gv; +fn ck() int = { if (g is *i64) { return 0; }; return 12; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_nullableglobal_match/case.ww b/test/wcc/data/r989_nullableglobal_match/case.ww new file mode 100644 index 00000000..ce5b5e00 --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_match/case.ww @@ -0,0 +1,7 @@ +//ww:error "nullable-global storage unimplemented (task #15)" +package main; +type np = (*i64 | void); +let gv: i64 = 7; +let g: np = &gv; +fn ck() int = { match (g) { case let p: *i64 => return (*p): int; case void => return 9; }; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_nullableglobal_nil_init/case.ww b/test/wcc/data/r989_nullableglobal_nil_init/case.ww new file mode 100644 index 00000000..863afa28 --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_nil_init/case.ww @@ -0,0 +1,7 @@ +//ww:error "nullable-global storage unimplemented (task #15)" +package main; +type np = (*i64 | void); +let gv: i64 = 7; +let g: np = nil; +fn ck() int = { match (g) { case let p: *i64 => return (*p): int; case void => return 9; }; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_nullableglobal_nonnull_control/case.ww b/test/wcc/data/r989_nullableglobal_nonnull_control/case.ww new file mode 100644 index 00000000..a66a9a6e --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_nonnull_control/case.ww @@ -0,0 +1,5 @@ +//ww:run +package main; +let g: (i64 | bool) = 5; +fn ck() int = { if (g is i64) { return 0; }; return 12; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_nullableglobal_plain_ptr_control/case.ww b/test/wcc/data/r989_nullableglobal_plain_ptr_control/case.ww new file mode 100644 index 00000000..c4e66742 --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_plain_ptr_control/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +let p: *i64 = nil; +export fn main() int = { if (p == nil) { return 5; }; return 9; }; diff --git a/test/wcc/data/r989_nullableglobal_void_init/case.ww b/test/wcc/data/r989_nullableglobal_void_init/case.ww new file mode 100644 index 00000000..9c9b6adb --- /dev/null +++ b/test/wcc/data/r989_nullableglobal_void_init/case.ww @@ -0,0 +1,7 @@ +//ww:error "nullable-global storage unimplemented (task #15)" +package main; +type np = (*i64 | void); +let gv: i64 = 7; +let g: np = void; +fn ck() int = { match (g) { case let p: *i64 => return (*p): int; case void => return 9; }; }; +export fn main() int = { return ck(); }; diff --git a/test/wcc/data/r989_tagderef_ampeq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_ampeq_tagged_deref/case.ww new file mode 100644 index 00000000..b90baa0c --- /dev/null +++ b/test/wcc/data/r989_tagderef_ampeq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p &= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_careteq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_careteq_tagged_deref/case.ww new file mode 100644 index 00000000..70d5c69a --- /dev/null +++ b/test/wcc/data/r989_tagderef_careteq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p ^= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_lshifteq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_lshifteq_tagged_deref/case.ww new file mode 100644 index 00000000..0db39392 --- /dev/null +++ b/test/wcc/data/r989_tagderef_lshifteq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p <<= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_minuseq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_minuseq_tagged_deref/case.ww new file mode 100644 index 00000000..46057ce4 --- /dev/null +++ b/test/wcc/data/r989_tagderef_minuseq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p -= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_percenteq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_percenteq_tagged_deref/case.ww new file mode 100644 index 00000000..e6df8d9c --- /dev/null +++ b/test/wcc/data/r989_tagderef_percenteq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p %= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_pipeeq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_pipeeq_tagged_deref/case.ww new file mode 100644 index 00000000..26015cec --- /dev/null +++ b/test/wcc/data/r989_tagderef_pipeeq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p |= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_plain_store_control/case.ww b/test/wcc/data/r989_tagderef_plain_store_control/case.ww new file mode 100644 index 00000000..228f1ea3 --- /dev/null +++ b/test/wcc/data/r989_tagderef_plain_store_control/case.ww @@ -0,0 +1,9 @@ +//ww:run +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p = 9; + if (v is int) { return 0; }; + return 1; +}; diff --git a/test/wcc/data/r989_tagderef_pluseq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_pluseq_tagged_deref/case.ww new file mode 100644 index 00000000..1674bb75 --- /dev/null +++ b/test/wcc/data/r989_tagderef_pluseq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p += 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_rshifteq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_rshifteq_tagged_deref/case.ww new file mode 100644 index 00000000..0063820b --- /dev/null +++ b/test/wcc/data/r989_tagderef_rshifteq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p >>= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_scalar_int_control/case.ww b/test/wcc/data/r989_tagderef_scalar_int_control/case.ww new file mode 100644 index 00000000..a22ccf89 --- /dev/null +++ b/test/wcc/data/r989_tagderef_scalar_int_control/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 8 +package main; +export fn main() int = { let v: int = 7; let p = &v; *p += 1; return *p; }; diff --git a/test/wcc/data/r989_tagderef_scalar_u8_control/case.ww b/test/wcc/data/r989_tagderef_scalar_u8_control/case.ww new file mode 100644 index 00000000..b45e7097 --- /dev/null +++ b/test/wcc/data/r989_tagderef_scalar_u8_control/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 8 +package main; +export fn main() int = { let v: u8 = 7; let p = &v; *p += 1; return (*p): int; }; diff --git a/test/wcc/data/r989_tagderef_slasheq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_slasheq_tagged_deref/case.ww new file mode 100644 index 00000000..688c5517 --- /dev/null +++ b/test/wcc/data/r989_tagderef_slasheq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p /= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagderef_stareq_tagged_deref/case.ww b/test/wcc/data/r989_tagderef_stareq_tagged_deref/case.ww new file mode 100644 index 00000000..8ee05b00 --- /dev/null +++ b/test/wcc/data/r989_tagderef_stareq_tagged_deref/case.ww @@ -0,0 +1,8 @@ +//ww:error "assign-resolver: tagged field not wired (rule-7)" +package main; +export fn main() int = { + let v: (int | bool) = 7; + let p = &v; + *p *= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagplace_gident_pluseq/case.ww b/test/wcc/data/r989_tagplace_gident_pluseq/case.ww new file mode 100644 index 00000000..1ca21ff6 --- /dev/null +++ b/test/wcc/data/r989_tagplace_gident_pluseq/case.ww @@ -0,0 +1,4 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +let g: (int | bool) = 7; +export fn main() int = { g += 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_gidx_careteq/case.ww b/test/wcc/data/r989_tagplace_gidx_careteq/case.ww new file mode 100644 index 00000000..89ad1514 --- /dev/null +++ b/test/wcc/data/r989_tagplace_gidx_careteq/case.ww @@ -0,0 +1,4 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +let gs: [3](int | bool) = [1, 2, 3]; +export fn main() int = { gs[0] ^= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_gidx_pluseq/case.ww b/test/wcc/data/r989_tagplace_gidx_pluseq/case.ww new file mode 100644 index 00000000..5d6b34c3 --- /dev/null +++ b/test/wcc/data/r989_tagplace_gidx_pluseq/case.ww @@ -0,0 +1,4 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +let gs: [3](int | bool) = [1, 2, 3]; +export fn main() int = { gs[0] += 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_gidx_stareq/case.ww b/test/wcc/data/r989_tagplace_gidx_stareq/case.ww new file mode 100644 index 00000000..ffaf9aaf --- /dev/null +++ b/test/wcc/data/r989_tagplace_gidx_stareq/case.ww @@ -0,0 +1,4 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +let gs: [3](int | bool) = [1, 2, 3]; +export fn main() int = { gs[0] *= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_careteq/case.ww b/test/wcc/data/r989_tagplace_ident_careteq/case.ww new file mode 100644 index 00000000..5a17e05e --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_careteq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g ^= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_lshifteq/case.ww b/test/wcc/data/r989_tagplace_ident_lshifteq/case.ww new file mode 100644 index 00000000..b61f0e11 --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_lshifteq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g <<= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_minuseq/case.ww b/test/wcc/data/r989_tagplace_ident_minuseq/case.ww new file mode 100644 index 00000000..ff7a8128 --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_minuseq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g -= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_pipeeq/case.ww b/test/wcc/data/r989_tagplace_ident_pipeeq/case.ww new file mode 100644 index 00000000..c6b166ec --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_pipeeq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g |= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_pluseq/case.ww b/test/wcc/data/r989_tagplace_ident_pluseq/case.ww new file mode 100644 index 00000000..f808e290 --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_pluseq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g += 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_slasheq/case.ww b/test/wcc/data/r989_tagplace_ident_slasheq/case.ww new file mode 100644 index 00000000..296776e5 --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_slasheq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g /= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_ident_stareq/case.ww b/test/wcc/data/r989_tagplace_ident_stareq/case.ww new file mode 100644 index 00000000..b24c55b8 --- /dev/null +++ b/test/wcc/data/r989_tagplace_ident_stareq/case.ww @@ -0,0 +1,3 @@ +//ww:error "ident compound on tagged not wired (#21/rule-7)" +package main; +export fn main() int = { let g: (int | bool) = 7; g *= 1; return 0; }; diff --git a/test/wcc/data/r989_tagplace_lidx_lshifteq/case.ww b/test/wcc/data/r989_tagplace_lidx_lshifteq/case.ww new file mode 100644 index 00000000..8bd0502b --- /dev/null +++ b/test/wcc/data/r989_tagplace_lidx_lshifteq/case.ww @@ -0,0 +1,7 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +export fn main() int = { + let a: [3](int | bool) = [1, 2, 3]; + a[0] <<= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagplace_lidx_minuseq/case.ww b/test/wcc/data/r989_tagplace_lidx_minuseq/case.ww new file mode 100644 index 00000000..fb1a37d6 --- /dev/null +++ b/test/wcc/data/r989_tagplace_lidx_minuseq/case.ww @@ -0,0 +1,7 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +export fn main() int = { + let a: [3](int | bool) = [1, 2, 3]; + a[0] -= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagplace_lidx_pipeeq/case.ww b/test/wcc/data/r989_tagplace_lidx_pipeeq/case.ww new file mode 100644 index 00000000..bfe41f28 --- /dev/null +++ b/test/wcc/data/r989_tagplace_lidx_pipeeq/case.ww @@ -0,0 +1,7 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +export fn main() int = { + let a: [3](int | bool) = [1, 2, 3]; + a[0] |= 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagplace_lidx_pluseq/case.ww b/test/wcc/data/r989_tagplace_lidx_pluseq/case.ww new file mode 100644 index 00000000..d8740503 --- /dev/null +++ b/test/wcc/data/r989_tagplace_lidx_pluseq/case.ww @@ -0,0 +1,7 @@ +//ww:error "indexed-lvalue compound on tagged element not wired (#133/rule-7)" +package main; +export fn main() int = { + let a: [3](int | bool) = [1, 2, 3]; + a[0] += 1; + return 0; +}; diff --git a/test/wcc/data/r989_tagplace_plain_gidx_control/case.ww b/test/wcc/data/r989_tagplace_plain_gidx_control/case.ww new file mode 100644 index 00000000..baf2bf55 --- /dev/null +++ b/test/wcc/data/r989_tagplace_plain_gidx_control/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +let gs: [3](int | bool) = [1, 2, 3]; +export fn main() int = { + gs[0] = 9; + if (gs[0] is int) { return 0; }; + return 1; +}; diff --git a/test/wcc/data/r989_tagplace_plain_ident_control/case.ww b/test/wcc/data/r989_tagplace_plain_ident_control/case.ww new file mode 100644 index 00000000..1bdeb7b7 --- /dev/null +++ b/test/wcc/data/r989_tagplace_plain_ident_control/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() int = { + let g: (int | bool) = 7; + g = 9; + if (g is int) { return 0; }; + return 1; +}; diff --git a/test/wcc/data/r989_tagplace_plain_lidx_control/case.ww b/test/wcc/data/r989_tagplace_plain_lidx_control/case.ww new file mode 100644 index 00000000..17825cba --- /dev/null +++ b/test/wcc/data/r989_tagplace_plain_lidx_control/case.ww @@ -0,0 +1,8 @@ +//ww:run +package main; +export fn main() int = { + let a: [3](int | bool) = [1, 2, 3]; + a[0] = 9; + if (a[0] is int) { return 0; }; + return 1; +}; diff --git a/test/wcc/data/r989_tagplace_scalar_ident_control/case.ww b/test/wcc/data/r989_tagplace_scalar_ident_control/case.ww new file mode 100644 index 00000000..88d04934 --- /dev/null +++ b/test/wcc/data/r989_tagplace_scalar_ident_control/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 8 +package main; +export fn main() int = { let g: int = 7; g += 1; return g; }; diff --git a/test/wcc/data/r989_tagplace_scalar_index_control/case.ww b/test/wcc/data/r989_tagplace_scalar_index_control/case.ww new file mode 100644 index 00000000..9cb4a516 --- /dev/null +++ b/test/wcc/data/r989_tagplace_scalar_index_control/case.ww @@ -0,0 +1,3 @@ +//ww:run-exit 8 +package main; +export fn main() int = { let a: [3]int = [7, 0, 0]; a[0] += 1; return a[0]; }; diff --git a/test/wcc/data/r989_tagsubset_concrete_spread/case.ww b/test/wcc/data/r989_tagsubset_concrete_spread/case.ww new file mode 100644 index 00000000..9fab6e10 --- /dev/null +++ b/test/wcc/data/r989_tagsubset_concrete_spread/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type formattable = (int | str | bool); +type field = (...formattable | bool); +fn take(f: field) int = { return 0; }; +export fn main() int = { take(42); take("hi"); return 0; }; diff --git a/test/wcc/data/r989_tagsubset_flatten_subset/case.ww b/test/wcc/data/r989_tagsubset_flatten_subset/case.ww new file mode 100644 index 00000000..cfbbeef1 --- /dev/null +++ b/test/wcc/data/r989_tagsubset_flatten_subset/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type inner = (bool | str); +type flat = (int | bool | str); +fn f(x: inner) flat = { return x; }; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r989_tagsubset_nested_wrap/case.ww b/test/wcc/data/r989_tagsubset_nested_wrap/case.ww new file mode 100644 index 00000000..d2b0a9d1 --- /dev/null +++ b/test/wcc/data/r989_tagsubset_nested_wrap/case.ww @@ -0,0 +1,16 @@ +//ww:run-exit 42 +package main; +type inner = (bool | str); +type outer = (int | inner); +fn wrap(x: inner) outer = { return x; }; +export fn main() int = { + let v: inner = "hi"; + let o: outer = wrap(v); + match (o) { + case let i: int => { return 1; }; + case let n: inner => match (n) { + case let b: bool => { return 2; }; + case let s: str => { return 42; }; + }; + }; +}; diff --git a/test/wcc/data/r989_tagsubset_slice_subset/case.ww b/test/wcc/data/r989_tagsubset_slice_subset/case.ww new file mode 100644 index 00000000..5d6a204a --- /dev/null +++ b/test/wcc/data/r989_tagsubset_slice_subset/case.ww @@ -0,0 +1,6 @@ +//ww:run +package main; +type a = (int | []u8); +type b = (int | bool | []u8); +fn f(x: a) b = { return x; }; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r989_tagsubset_spread_named_case/case.ww b/test/wcc/data/r989_tagsubset_spread_named_case/case.ww new file mode 100644 index 00000000..44dbd154 --- /dev/null +++ b/test/wcc/data/r989_tagsubset_spread_named_case/case.ww @@ -0,0 +1,11 @@ +//ww:error "not a variant" +package main; +type e1 = (bool | int); +type sp = (str | ...e1); +fn f(x: sp) int = { + match (x) { + case let s: str => { return 1; }; + case let e: e1 => { return 2; }; + }; +}; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r989_tagsubset_spread_wider/case.ww b/test/wcc/data/r989_tagsubset_spread_wider/case.ww new file mode 100644 index 00000000..fa159ec2 --- /dev/null +++ b/test/wcc/data/r989_tagsubset_spread_wider/case.ww @@ -0,0 +1,7 @@ +//ww:run +package main; +type e1 = (bool | int); +type sp = (str | ...e1); +type big = (str | bool | int | f64); +fn g(x: sp) big = { return x; }; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r989_tagsubset_wide_narrow/case.ww b/test/wcc/data/r989_tagsubset_wide_narrow/case.ww new file mode 100644 index 00000000..03ce4425 --- /dev/null +++ b/test/wcc/data/r989_tagsubset_wide_narrow/case.ww @@ -0,0 +1,6 @@ +//ww:error "not assignable" +package main; +type big = (int | bool | str); +type small = (int | bool); +fn f(b: big) small = { return b; }; +export fn main() int = { return 0; }; diff --git a/test/wcc/data/r989_trycallcollide_call/case.ww b/test/wcc/data/r989_trycallcollide_call/case.ww new file mode 100644 index 00000000..65f6e8fb --- /dev/null +++ b/test/wcc/data/r989_trycallcollide_call/case.ww @@ -0,0 +1,13 @@ +//ww:run-exit 42 +package beta; +export type berr = !void; +export fn op() (i32 | berr) = { return 5; }; +export fn user() (i32 | berr) = { let v: i32 = op()?; return v + 37; }; +package gamma; +export type gerr1 = !void; +export type gerr2 = !u8; +export fn op() (i32 | gerr1 | gerr2) = { return 0; }; +package main; +import beta; +import gamma; +fn main() int = { match (beta.user()) { case let n: i32 => return n: int; case berr => return 99; }; }; diff --git a/test/wcc/data/r989_trycallcollide_control/case.ww b/test/wcc/data/r989_trycallcollide_control/case.ww new file mode 100644 index 00000000..c85e367d --- /dev/null +++ b/test/wcc/data/r989_trycallcollide_control/case.ww @@ -0,0 +1,12 @@ +//ww:run-exit 42 +package beta; +export type berr = !void; +export fn op() (i32 | berr) = { return 5; }; +export fn user() (i32 | berr) = { let v: i32 = op()?; return v + 37; }; +package gamma; +export type gerr1 = !void; +export fn other() (i32 | gerr1) = { return 0; }; +package main; +import beta; +import gamma; +fn main() int = { match (beta.user()) { case let n: i32 => return n: int; case berr => return 99; }; }; diff --git a/test/wcc/data/r989_unknowndecl_clean_ok/case.ww b/test/wcc/data/r989_unknowndecl_clean_ok/case.ww new file mode 100644 index 00000000..4c4ed3d1 --- /dev/null +++ b/test/wcc/data/r989_unknowndecl_clean_ok/case.ww @@ -0,0 +1,4 @@ +//ww:run-exit 5 +package main; +fn helper() i32 = { return 5; }; +export fn main() i32 = { return helper(); }; diff --git a/test/wcc/data/r989_unknowndecl_decls_ok/case.ww b/test/wcc/data/r989_unknowndecl_decls_ok/case.ww new file mode 100644 index 00000000..429f5fa8 --- /dev/null +++ b/test/wcc/data/r989_unknowndecl_decls_ok/case.ww @@ -0,0 +1,5 @@ +//ww:run-exit 3 +package main; +def K: i32 = 3; +type t = i32; +export fn main() i32 = { let x: t = K; return x: i32; }; diff --git a/test/wcc/data/r989_unknowndecl_misspelled_fn/case.ww b/test/wcc/data/r989_unknowndecl_misspelled_fn/case.ww new file mode 100644 index 00000000..77d5415d --- /dev/null +++ b/test/wcc/data/r989_unknowndecl_misspelled_fn/case.ww @@ -0,0 +1,4 @@ +//ww:error "expected top-level decl" +package main; +fnn helper() i32 = { return 42; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r989_unknowndecl_stray_block/case.ww b/test/wcc/data/r989_unknowndecl_stray_block/case.ww new file mode 100644 index 00000000..2eeddc51 --- /dev/null +++ b/test/wcc/data/r989_unknowndecl_stray_block/case.ww @@ -0,0 +1,4 @@ +//ww:error "expected top-level decl" +package main; +gizmo foo { let a = 1; let b = 2; }; +export fn main() i32 = { return 0; }; diff --git a/test/wcc/data/r989_unknowndecl_stray_idents/case.ww b/test/wcc/data/r989_unknowndecl_stray_idents/case.ww new file mode 100644 index 00000000..d732d2ca --- /dev/null +++ b/test/wcc/data/r989_unknowndecl_stray_idents/case.ww @@ -0,0 +1,4 @@ +//ww:error "expected top-level decl" +package main; +bogus token here; +export fn main() i32 = { return 0; };