build.zig | 3 + src/AstGen.zig | 73 +- src/Module.zig | 392 +++++++- src/Sema.zig | 1565 ++++++++++++++++++++------------ src/Zir.zig | 21 +- src/print_zir.zig | 23 +- src/target.zig | 8 + src/type.zig | 22 +- test/behavior/align.zig | 5 +- test/behavior/bugs/1310.zig | 4 +- test/behavior/union.zig | 1 - test/cases/compile_errors/C_pointer_pointing_to_non_C_ABI_compatible_type_or_has_align_attr.zig | 14 + test/cases/compile_errors/C_pointer_to_anyopaque.zig | 11 + test/cases/compile_errors/align_n_expr_function_pointers_is_a_compile_error.zig | 9 + test/cases/compile_errors/array_access_of_non_array.zig | 15 + test/cases/compile_errors/array_access_with_non_integer_index.zig | 17 + test/cases/compile_errors/array_in_c_exported_function.zig | 16 + test/cases/compile_errors/asm_at_compile_time.zig | 2 +- test/cases/compile_errors/c_pointer_to_void.zig | 4 +- test/cases/compile_errors/call method on bound fn referring to var instance.zig | 2 +- test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig | 2 +- test/cases/compile_errors/capture_group_on_switch_prong_with_incompatible_payload_types.zig | 21 + test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig | 6 +- test/cases/compile_errors/container_init_with_non-type.zig | 2 +- test/cases/compile_errors/control_reaches_end_of_non-void_function.zig | 9 + test/cases/compile_errors/dereference_anyopaque.zig | 12 +- test/cases/compile_errors/directly_embedding_opaque_type_in_struct_and_union.zig | 38 + test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig | 13 + test/cases/compile_errors/endless_loop_in_function_evaluation.zig | 15 + test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig | 6 +- test/cases/compile_errors/export_function_with_comptime_parameter.zig | 9 + test/cases/compile_errors/export_generic_function.zig | 10 + test/cases/compile_errors/extern_function_with_comptime_parameter.zig | 20 + test/cases/compile_errors/extern_struct_with_extern-compatible_but_inferred_integer_tag_type.zig | 6 +- test/cases/compile_errors/extern_struct_with_non-extern-compatible_integer_tag_type.zig | 6 +- test/cases/compile_errors/extern_union_given_enum_tag_type.zig | 20 + test/cases/compile_errors/function_alignment_non_power_of_2.zig | 8 + test/cases/compile_errors/function_call_assigned_to_incorrect_type.zig | 1 + test/cases/compile_errors/function_parameter_is_opaque.zig | 30 + test/cases/compile_errors/function_ptr_alignment.zig | 28 + test/cases/compile_errors/function_returning_opaque_type.zig | 19 + test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig | 11 + test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig | 14 + test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig | 14 + test/cases/compile_errors/generic_function_instance_with_non-constant_expression.zig | 13 + test/cases/compile_errors/helpful_return_type_error_message.zig | 32 + test/cases/compile_errors/implicit_cast_from_array_to_mutable_slice.zig | 11 + test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig | 20 + test/cases/compile_errors/int-float_conversion_to_comptime_int-float.zig | 2 + test/cases/compile_errors/invalid_optional_type_in_extern_struct.zig | 4 +- test/cases/compile_errors/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig | 13 + test/cases/compile_errors/non-const_expression_function_call_with_struct_return_value_outside_function.zig | 2 +- test/cases/compile_errors/non-enum_tag_type_passed_to_union.zig | 13 + test/cases/compile_errors/non-integer_tag_type_to_automatic_union_enum.zig | 13 + test/cases/compile_errors/non-integer_tag_type_to_enum.zig | 13 + test/cases/compile_errors/non-pure_function_returns_type.zig | 2 +- test/cases/compile_errors/non_constant_expression_in_array_size.zig | 2 +- test/cases/compile_errors/opaque_type_with_field.zig | 11 + test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig | 18 + test/cases/compile_errors/pointer_to_noreturn.zig | 8 + test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig | 4 +- test/cases/compile_errors/stage1/aligned_variable_of_zero-bit_type.zig | 10 + test/cases/compile_errors/stage1/attempt_to_use_0_bit_type_in_extern_fn.zig | 17 + test/cases/compile_errors/stage1/implicit_casting_undefined_c_pointer_to_zig_pointer.zig | 11 + test/cases/compile_errors/stage1/issue_2687_coerce_from_undefined_array_pointer_to_slice.zig | 27 + test/cases/compile_errors/stage1/obj/C_pointer_pointing_to_non_C_ABI_compatible_type_or_has_align_attr.zig | 12 - test/cases/compile_errors/stage1/obj/C_pointer_to_anyopaque.zig | 11 - test/cases/compile_errors/stage1/obj/align_n_expr_function_pointers_is_a_compile_error.zig | 9 - test/cases/compile_errors/stage1/obj/aligned_variable_of_zero-bit_type.zig | 10 - test/cases/compile_errors/stage1/obj/array_access_of_non_array.zig | 15 - test/cases/compile_errors/stage1/obj/array_access_with_non_integer_index.zig | 17 - test/cases/compile_errors/stage1/obj/array_in_c_exported_function.zig | 14 - test/cases/compile_errors/stage1/obj/attempt_to_use_0_bit_type_in_extern_fn.zig | 17 - test/cases/compile_errors/stage1/obj/capture_group_on_switch_prong_with_incompatible_payload_types.zig | 21 - test/cases/compile_errors/stage1/obj/control_reaches_end_of_non-void_function.zig | 8 - test/cases/compile_errors/stage1/obj/directly_embedding_opaque_type_in_struct_and_union.zig | 29 - test/cases/compile_errors/stage1/obj/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig | 12 - test/cases/compile_errors/stage1/obj/endless_loop_in_function_evaluation.zig | 12 - test/cases/compile_errors/stage1/obj/export_function_with_comptime_parameter.zig | 9 - test/cases/compile_errors/stage1/obj/export_generic_function.zig | 10 - test/cases/compile_errors/stage1/obj/extern_function_with_comptime_parameter.zig | 11 - test/cases/compile_errors/stage1/obj/extern_union_given_enum_tag_type.zig | 20 - test/cases/compile_errors/stage1/obj/function_alignment_non_power_of_2.zig | 8 - test/cases/compile_errors/stage1/obj/function_parameter_is_opaque.zig | 29 - test/cases/compile_errors/stage1/obj/function_returning_opaque_type.zig | 19 - test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_enum_parameter.zig | 8 - test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_struct_parameter.zig | 12 - test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_union_parameter.zig | 12 - test/cases/compile_errors/stage1/obj/generic_function_instance_with_non-constant_expression.zig | 12 - test/cases/compile_errors/stage1/obj/implicit_cast_from_array_to_mutable_slice.zig | 11 - test/cases/compile_errors/stage1/obj/implicit_casting_undefined_c_pointer_to_zig_pointer.zig | 11 - test/cases/compile_errors/stage1/obj/implicitly_increasing_pointer_alignment.zig | 19 - test/cases/compile_errors/stage1/obj/issue_2687_coerce_from_undefined_array_pointer_to_slice.zig | 27 - test/cases/compile_errors/stage1/obj/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig | 13 - test/cases/compile_errors/stage1/obj/non-enum_tag_type_passed_to_union.zig | 13 - test/cases/compile_errors/stage1/obj/non-integer_tag_type_to_automatic_union_enum.zig | 13 - test/cases/compile_errors/stage1/obj/opaque_type_with_field.zig | 11 - test/cases/compile_errors/stage1/obj/pass_const_ptr_to_mutable_ptr_fn.zig | 17 - test/cases/compile_errors/stage1/obj/pointer_to_noreturn.zig | 8 - test/cases/compile_errors/stage1/obj/unknown_length_pointer_to_opaque.zig | 7 - test/cases/compile_errors/stage1/obj/unreachable_parameter.zig | 8 - test/cases/compile_errors/stage1/obj/use_anyopaque_as_return_type_of_fn_ptr.zig | 10 - test/cases/compile_errors/stage1/obj/use_implicit_casts_to_assign_null_to_non-nullable_pointer.zig | 14 - test/cases/compile_errors/stage1/obj/using_an_unknown_len_ptr_type_instead_of_array.zig | 13 - test/cases/compile_errors/stage1/obj/wrong_initializer_for_union_payload_of_type_type.zig | 16 - test/cases/compile_errors/stage1/obj/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig | 12 - test/cases/compile_errors/stage1/test/helpful_return_type_error_message.zig | 32 - test/cases/compile_errors/stage1/test/switching_with_non-exhaustive_enums.zig | 35 - test/cases/compile_errors/stage2/union_enum_field_missing.zig | 2 +- test/cases/compile_errors/stage2/union_extra_field.zig | 2 +- test/cases/compile_errors/switch_expression-missing_enumeration_prong.zig | 2 +- test/cases/compile_errors/switch_on_enum_with_1_field_with_no_prongs.zig | 2 +- test/cases/compile_errors/switching_with_non-exhaustive_enums.zig | 42 + test/cases/compile_errors/type_checking_function_pointers.zig | 6 +- test/cases/compile_errors/union_with_specified_enum_omits_field.zig | 2 +- test/cases/compile_errors/unknown_length_pointer_to_opaque.zig | 7 + test/cases/compile_errors/unreachable_parameter.zig | 8 + test/cases/compile_errors/use_anyopaque_as_return_type_of_fn_ptr.zig | 10 + test/cases/compile_errors/use_implicit_casts_to_assign_null_to_non-nullable_pointer.zig | 16 + test/cases/compile_errors/using_an_unknown_len_ptr_type_instead_of_array.zig | 13 + test/cases/compile_errors/wrong_initializer_for_union_payload_of_type_type.zig | 17 + test/cases/compile_errors/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig | 14 + test/cases/extern_variable_has_no_type.0.zig | 2 +- test/cases/x86_64-linux/assert_function.8.zig | 1 + test/cases/x86_64-macos/assert_function.8.zig | 1 + test/stage2/cbe.zig | 6 +- 126 files changed, 2189 insertions(+), 1364 deletions(-)