Diagnostic and cause
LinkDivision or remainder by zero
- Family
- topaz
- Phase
- run
- Code
TPZ4002
Cause and conditions
Integer division or remainder faults when its evaluated divisor is zero.
Related rule: Trigger and repairResponse
Require a nonzero divisor before dividing or taking a remainder. The repair passes one to the same function.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 517-525 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 55-55 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 162-162 - compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 39-67 - compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 205-214 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 331-363 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 157-164 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 38-57 - compiler/crates/topaz_cli/src/compile/direct_run.rs at
151141d7bb44· 37-77 - TPZ4002 at
f42fbeb4f27e - TPZ4002 repair at
151141d7bb44
Compiler phase: runtime.
Compiler explanation: An integer division or remainder operation used zero as the divisor.
Message templates are Pending. The explanation above is not an observed CLI message.
Observed for the candidate in Topaz 5.21.3. Execution
- error[TPZ4002]: integer division by zero
The divisor of an int division or remainder evaluates to zero. The shared checked arithmetic leaf detects this before performing the operation.
Trigger and repair
Integer division or remainder faults when its evaluated divisor is zero.
Source evidence
- compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 39-67 - compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 205-214 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 331-363 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 157-164 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 38-57 - compiler/crates/topaz_cli/src/compile/direct_run.rs at
151141d7bb44· 37-77 - TPZ4002 at
f42fbeb4f27e - TPZ4002 repair at
151141d7bb44
Response
LinkRequire a nonzero divisor before dividing or taking a remainder. The repair passes one to the same function.
Reproduction and verification
LinkProduct diagnostic test
Linkfunction divide(divisor: int) -> int {42 / divisor}divide(0)
Expected result
Expected result
The separate diagnostic product test validates this command, runtime diagnostic, or filesystem setup. The shared example runner does not execute that assertion plan.
Run topaz run example..
Expect exit status 1, empty standard output, and TPZ4002.
The divisor of an int division or remainder evaluates to zero. The shared checked arithmetic leaf detects this before performing the operation.
The primary location is example..
Expect exactly one diagnostic.
The diagnostic product test checks these expectations with the same files and command.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 517-525 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 55-55 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 162-162 - compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 39-67 - compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 205-214 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 331-363 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 157-164 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 38-57 - compiler/crates/topaz_cli/src/compile/direct_run.rs at
151141d7bb44· 37-77 - TPZ4002 at
f42fbeb4f27e - TPZ4002 repair at
151141d7bb44
Corrected program
Linkfunction divide(divisor: int) -> int {42 / divisor}divide(1)
No stdout.
Expected result
Expected result
Execution completes. Exit code 0.
This program applies the repair described above. The verification status records whether it has been run.
Source evidence
- compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 39-67 - compiler/crates/topaz_value/src/value/operators.rs at
151141d7bb44· 205-214 - compiler/crates/topaz_product_runtime/src/runtime/evaluate.rs at
151141d7bb44· 331-363 - compiler/crates/topaz_value/src/lib.rs at
151141d7bb44· 157-164 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 38-57 - compiler/crates/topaz_cli/src/compile/direct_run.rs at
151141d7bb44· 37-77 - TPZ4002 at
f42fbeb4f27e - TPZ4002 repair at
151141d7bb44