| author | |
| committer | |
| log | a05150e92d5925f14591d96220de3bb341be1154 |
| tree | 55d6d955dbaacf58c426106cca8f280736c3fd32 |
| parent | a3d04b92287082f9f51c906075d42d53a552c19d |
| signature |
closes #40044 files changed, 19 insertions(+), 2 deletions(-)
src/analyze.cpp+1-1| ... | ... | @@ -9243,6 +9243,7 @@ bool type_is_numeric(ZigType *ty) { |
| 9243 | 9243 | case ZigTypeIdComptimeInt: |
| 9244 | 9244 | case ZigTypeIdInt: |
| 9245 | 9245 | case ZigTypeIdFloat: |
| 9246 | case ZigTypeIdUndefined: | |
| 9246 | 9247 | return true; |
| 9247 | 9248 | |
| 9248 | 9249 | case ZigTypeIdVector: |
| ... | ... | @@ -9255,7 +9256,6 @@ bool type_is_numeric(ZigType *ty) { |
| 9255 | 9256 | case ZigTypeIdPointer: |
| 9256 | 9257 | case ZigTypeIdArray: |
| 9257 | 9258 | case ZigTypeIdStruct: |
| 9258 | case ZigTypeIdUndefined: | |
| 9259 | 9259 | case ZigTypeIdNull: |
| 9260 | 9260 | case ZigTypeIdOptional: |
| 9261 | 9261 | case ZigTypeIdErrorUnion: |
src/ir.cpp+3-1| ... | ... | @@ -14647,7 +14647,9 @@ never_mind_just_calculate_it_normally: |
| 14647 | 14647 | } |
| 14648 | 14648 | |
| 14649 | 14649 | |
| 14650 | if (op1_val->special == ConstValSpecialUndef || op2_val->special == ConstValSpecialUndef) { | |
| 14650 | if (op1_val->special == ConstValSpecialUndef || op2_val->special == ConstValSpecialUndef || | |
| 14651 | op1_val->type->id == ZigTypeIdUndefined || op2_val->type->id == ZigTypeIdUndefined) | |
| 14652 | { | |
| 14651 | 14653 | out_val->special = ConstValSpecialUndef; |
| 14652 | 14654 | return nullptr; |
| 14653 | 14655 | } |
test/compile_errors.zig+8| ... | ... | @@ -2,6 +2,14 @@ const tests = @import("tests.zig"); |
| 2 | 2 | const builtin = @import("builtin"); |
| 3 | 3 | |
| 4 | 4 | pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 5 | cases.add("comparing against undefined produces undefined value", | |
| 6 | \\export fn entry() void { | |
| 7 | \\ if (2 == undefined) {} | |
| 8 | \\} | |
| 9 | , &[_][]const u8{ | |
| 10 | "tmp.zig:2:11: error: use of undefined value here causes undefined behavior", | |
| 11 | }); | |
| 12 | ||
| 5 | 13 | cases.add("comptime ptrcast of zero-sized type", |
| 6 | 14 | \\fn foo() void { |
| 7 | 15 | \\ const node: struct {} = undefined; |
test/stage1/behavior/math.zig+7| ... | ... | @@ -671,3 +671,10 @@ test "vector comparison" { |
| 671 | 671 | S.doTheTest(); |
| 672 | 672 | comptime S.doTheTest(); |
| 673 | 673 | } |
| 674 | ||
| 675 | test "compare undefined literal with comptime_int" { | |
| 676 | var x = undefined == 1; | |
| 677 | // x is now undefined with type bool | |
| 678 | x = true; | |
| 679 | expect(x); | |
| 680 | } |