| // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s \ |
| // RUN: -analyzer-config crosscheck-with-z3=true \ |
| // RUN: -analyzer-stats 2>&1 | FileCheck %s |
| |
| // REQUIRES: z3 |
| |
| // expected-error@1 {{Z3 refutation rate:1/2}} |
| |
| int accepting(int n) { |
| if (n == 4) { |
| n = n / (n-4); // expected-warning {{Division by zero}} |
| } |
| return n; |
| } |
| |
| int rejecting(int n, int x) { |
| // Let's make the path infeasible. |
| if (2 < x && x < 5 && x*x == x*x*x) { |
| // Have the same condition as in 'accepting'. |
| if (n == 4) { |
| n = x / (n-4); // no-warning: refuted |
| } |
| } |
| return n; |
| } |
| |
| // CHECK: 1 BugReporter - Number of times all reports of an equivalence class was refuted |
| // CHECK-NEXT: 1 BugReporter - Number of reports passed Z3 |
| // CHECK-NEXT: 1 BugReporter - Number of reports refuted by Z3 |
| |
| // CHECK: 1 Z3CrosscheckVisitor - Number of Z3 queries accepting a report |
| // CHECK-NEXT: 1 Z3CrosscheckVisitor - Number of Z3 queries rejecting a report |
| // CHECK-NEXT: 2 Z3CrosscheckVisitor - Number of Z3 queries done |