Function isAlwaysVoid [src]

AstGen uses this to find out if Ref.void_value should be used in place of the result of a given instruction. This allows Sema to forego adding the instruction to the map after analysis.

Prototype

pub fn isAlwaysVoid(tag: Tag, data: Data) bool

Parameters

tag: Tagdata: Data

Source

pub fn isAlwaysVoid(tag: Tag, data: Data) bool { return switch (tag) { .dbg_stmt, .dbg_var_ptr, .dbg_var_val, .ensure_result_used, .ensure_result_non_error, .ensure_err_union_payload_void, .set_eval_branch_quota, .atomic_store, .store_node, .store_to_inferred_ptr, .validate_deref, .validate_destructure, .@"export", .set_runtime_safety, .memcpy, .memset, .check_comptime_control_flow, .@"defer", .defer_err_code, .save_err_ret_index, .restore_err_ret_index_unconditional, .restore_err_ret_index_fn_entry, .validate_struct_init_ty, .validate_struct_init_result_ty, .validate_ptr_struct_init, .validate_array_init_ty, .validate_array_init_result_ty, .validate_ptr_array_init, .validate_ref_ty, .validate_const, => true, .param, .param_comptime, .param_anytype, .param_anytype_comptime, .add, .addwrap, .add_sat, .add_unsafe, .alloc, .alloc_mut, .alloc_comptime_mut, .alloc_inferred, .alloc_inferred_mut, .alloc_inferred_comptime, .alloc_inferred_comptime_mut, .resolve_inferred_alloc, .make_ptr_const, .array_cat, .array_mul, .array_type, .array_type_sentinel, .vector_type, .elem_type, .indexable_ptr_elem_type, .vec_arr_elem_type, .indexable_ptr_len, .anyframe_type, .as_node, .as_shift_operand, .bit_and, .bitcast, .bit_or, .block, .block_comptime, .block_inline, .declaration, .suspend_block, .loop, .bool_br_and, .bool_br_or, .bool_not, .call, .field_call, .cmp_lt, .cmp_lte, .cmp_eq, .cmp_gte, .cmp_gt, .cmp_neq, .error_set_decl, .decl_ref, .decl_val, .load, .div, .elem_ptr, .elem_val, .elem_ptr_node, .elem_val_node, .elem_val_imm, .field_ptr, .field_val, .field_ptr_named, .field_val_named, .func, .func_inferred, .func_fancy, .has_decl, .int, .int_big, .float, .float128, .int_type, .is_non_null, .is_non_null_ptr, .is_non_err, .is_non_err_ptr, .ret_is_non_err, .mod_rem, .mul, .mulwrap, .mul_sat, .ref, .shl, .shl_sat, .shr, .str, .sub, .subwrap, .sub_sat, .negate, .negate_wrap, .typeof, .typeof_builtin, .xor, .optional_type, .optional_payload_safe, .optional_payload_unsafe, .optional_payload_safe_ptr, .optional_payload_unsafe_ptr, .err_union_payload_unsafe, .err_union_payload_unsafe_ptr, .err_union_code, .err_union_code_ptr, .ptr_type, .enum_literal, .decl_literal, .decl_literal_no_coerce, .merge_error_sets, .error_union_type, .bit_not, .error_value, .slice_start, .slice_end, .slice_sentinel, .slice_length, .slice_sentinel_ty, .import, .typeof_log2_int_type, .switch_block, .switch_block_ref, .switch_block_err_union, .union_init, .field_type_ref, .enum_from_int, .int_from_enum, .type_info, .size_of, .bit_size_of, .int_from_ptr, .align_of, .int_from_bool, .embed_file, .error_name, .sqrt, .sin, .cos, .tan, .exp, .exp2, .log, .log2, .log10, .abs, .floor, .ceil, .trunc, .round, .tag_name, .type_name, .frame_type, .frame_size, .int_from_float, .float_from_int, .ptr_from_int, .float_cast, .int_cast, .ptr_cast, .truncate, .has_field, .clz, .ctz, .pop_count, .byte_swap, .bit_reverse, .div_exact, .div_floor, .div_trunc, .mod, .rem, .shl_exact, .shr_exact, .bit_offset_of, .offset_of, .splat, .reduce, .shuffle, .atomic_load, .atomic_rmw, .mul_add, .builtin_call, .max, .min, .c_import, .@"resume", .@"await", .ret_err_value_code, .@"break", .break_inline, .condbr, .condbr_inline, .switch_continue, .compile_error, .ret_node, .ret_load, .ret_implicit, .ret_err_value, .ret_ptr, .ret_type, .@"unreachable", .repeat, .repeat_inline, .panic, .trap, .for_len, .@"try", .try_ptr, .opt_eu_base_ptr_init, .coerce_ptr_elem_ty, .struct_init_empty, .struct_init_empty_result, .struct_init_empty_ref_result, .struct_init_anon, .struct_init, .struct_init_ref, .struct_init_field_type, .struct_init_field_ptr, .array_init_anon, .array_init, .array_init_ref, .validate_array_init_ref_ty, .array_init_elem_type, .array_init_elem_ptr, => false, .extended => switch (data.extended.opcode) { .branch_hint, .breakpoint, .disable_instrumentation, .disable_intrinsics, => true, else => false, }, }; }