| ... | @@ -1060,15 +1060,16 @@ fn analyzeBodyInner( | ... | @@ -1060,15 +1060,16 @@ fn analyzeBodyInner( |
| 1060 | .error_set_decl_anon => try sema.zirErrorSetDecl(block, inst, .anon), | 1060 | .error_set_decl_anon => try sema.zirErrorSetDecl(block, inst, .anon), |
| 1061 | .error_set_decl_func => try sema.zirErrorSetDecl(block, inst, .func), | 1061 | .error_set_decl_func => try sema.zirErrorSetDecl(block, inst, .func), |
| 1062 | | 1062 | |
| 1063 | .add => try sema.zirArithmetic(block, inst, .add), | 1063 | .add => try sema.zirArithmetic(block, inst, .add, true), |
| 1064 | .addwrap => try sema.zirArithmetic(block, inst, .addwrap), | 1064 | .addwrap => try sema.zirArithmetic(block, inst, .addwrap, true), |
| 1065 | .add_sat => try sema.zirArithmetic(block, inst, .add_sat), | 1065 | .add_sat => try sema.zirArithmetic(block, inst, .add_sat, true), |
| 1066 | .mul => try sema.zirArithmetic(block, inst, .mul), | 1066 | .add_unsafe=> try sema.zirArithmetic(block, inst, .add_unsafe, false), |
| 1067 | .mulwrap => try sema.zirArithmetic(block, inst, .mulwrap), | 1067 | .mul => try sema.zirArithmetic(block, inst, .mul, true), |
| 1068 | .mul_sat => try sema.zirArithmetic(block, inst, .mul_sat), | 1068 | .mulwrap => try sema.zirArithmetic(block, inst, .mulwrap, true), |
| 1069 | .sub => try sema.zirArithmetic(block, inst, .sub), | 1069 | .mul_sat => try sema.zirArithmetic(block, inst, .mul_sat, true), |
| 1070 | .subwrap => try sema.zirArithmetic(block, inst, .subwrap), | 1070 | .sub => try sema.zirArithmetic(block, inst, .sub, true), |
| 1071 | .sub_sat => try sema.zirArithmetic(block, inst, .sub_sat), | 1071 | .subwrap => try sema.zirArithmetic(block, inst, .subwrap, true), |
| | 1072 | .sub_sat => try sema.zirArithmetic(block, inst, .sub_sat, true), |
| 1072 | | 1073 | |
| 1073 | .div => try sema.zirDiv(block, inst), | 1074 | .div => try sema.zirDiv(block, inst), |
| 1074 | .div_exact => try sema.zirDivExact(block, inst), | 1075 | .div_exact => try sema.zirDivExact(block, inst), |
| ... | @@ -12887,6 +12888,7 @@ fn zirArithmetic( | ... | @@ -12887,6 +12888,7 @@ fn zirArithmetic( |
| 12887 | block: *Block, | 12888 | block: *Block, |
| 12888 | inst: Zir.Inst.Index, | 12889 | inst: Zir.Inst.Index, |
| 12889 | zir_tag: Zir.Inst.Tag, | 12890 | zir_tag: Zir.Inst.Tag, |
| | 12891 | safety: bool, |
| 12890 | ) CompileError!Air.Inst.Ref { | 12892 | ) CompileError!Air.Inst.Ref { |
| 12891 | const tracy = trace(@src()); | 12893 | const tracy = trace(@src()); |
| 12892 | defer tracy.end(); | 12894 | defer tracy.end(); |
| ... | @@ -12899,7 +12901,7 @@ fn zirArithmetic( | ... | @@ -12899,7 +12901,7 @@ fn zirArithmetic( |
| 12899 | const lhs = try sema.resolveInst(extra.lhs); | 12901 | const lhs = try sema.resolveInst(extra.lhs); |
| 12900 | const rhs = try sema.resolveInst(extra.rhs); | 12902 | const rhs = try sema.resolveInst(extra.rhs); |
| 12901 | | 12903 | |
| 12902 | return sema.analyzeArithmetic(block, zir_tag, lhs, rhs, sema.src, lhs_src, rhs_src, true); | 12904 | return sema.analyzeArithmetic(block, zir_tag, lhs, rhs, sema.src, lhs_src, rhs_src, safety); |
| 12903 | } | 12905 | } |
| 12904 | | 12906 | |
| 12905 | fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { | 12907 | fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | @@ -14250,7 +14252,7 @@ fn analyzeArithmetic( | ... | @@ -14250,7 +14252,7 @@ fn analyzeArithmetic( |
| 14250 | const maybe_rhs_val = try sema.resolveMaybeUndefValIntable(casted_rhs); | 14252 | const maybe_rhs_val = try sema.resolveMaybeUndefValIntable(casted_rhs); |
| 14251 | const rs: struct { src: LazySrcLoc, air_tag: Air.Inst.Tag } = rs: { | 14253 | const rs: struct { src: LazySrcLoc, air_tag: Air.Inst.Tag } = rs: { |
| 14252 | switch (zir_tag) { | 14254 | switch (zir_tag) { |
| 14253 | .add => { | 14255 | .add, .add_unsafe => { |
| 14254 | // For integers:intAddSat | 14256 | // For integers:intAddSat |
| 14255 | // If either of the operands are zero, then the other operand is | 14257 | // If either of the operands are zero, then the other operand is |
| 14256 | // returned, even if it is undefined. | 14258 | // returned, even if it is undefined. |