;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. ;; RUN: wasm-opt %s --vacuum --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s ;; RUN: wasm-opt %s --ignore-implicit-traps --vacuum --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s --check-prefix=IIT ;; RUN: wasm-opt %s --traps-never-happen --vacuum --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s --check-prefix=TNH (module ;; CHECK: [fuzz-exec] calling trap ;; CHECK-NEXT: [trap unreachable] ;; IIT: [fuzz-exec] calling trap ;; IIT-NEXT: [trap unreachable] ;; TNH: [fuzz-exec] calling trap ;; TNH-NEXT: [trap unreachable] (func "trap" (unreachable) ) (memory 1 1) ;; CHECK: [fuzz-exec] calling load-trap ;; CHECK-NEXT: [trap highest > memory: 65536 > 65532] ;; IIT: [fuzz-exec] calling load-trap ;; IIT-NEXT: [trap highest > memory: 65536 > 65532] ;; TNH: [fuzz-exec] calling load-trap ;; TNH-NEXT: [trap highest > memory: 65536 > 65532] (func "load-trap" ;; This load traps, so this cannot be removed. But if either of ;; --ignore-implicit-traps or --traps-never-happen is set, this load is ;; assumed not to trap and we end up optimizing this out with --vacuum, ;; causes the trap behavior to change. This should not result in [fuzz-exec] ;; comparison failure. (drop (i32.load (i32.const 65536)) ) ) ) ;; CHECK: [fuzz-exec] calling trap ;; CHECK-NEXT: [trap unreachable] ;; CHECK: [fuzz-exec] calling load-trap ;; CHECK-NEXT: [trap highest > memory: 65536 > 65532] ;; CHECK-NEXT: [fuzz-exec] comparing load-trap ;; CHECK-NEXT: [fuzz-exec] comparing trap ;; IIT: [fuzz-exec] calling trap ;; IIT-NEXT: [trap unreachable] ;; IIT: [fuzz-exec] calling load-trap ;; IIT-NEXT: [fuzz-exec] comparing load-trap ;; IIT-NEXT: [fuzz-exec] comparing trap ;; TNH: [fuzz-exec] calling trap ;; TNH: [fuzz-exec] calling load-trap ;; TNH-NEXT: [fuzz-exec] comparing load-trap ;; TNH-NEXT: [fuzz-exec] comparing trap