Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions src/main/scala/Silicon.scala
Original file line number Diff line number Diff line change
Expand Up @@ -243,21 +243,21 @@ class Silicon(val reporter: Reporter, private var debugInfo: Seq[(String, Any)]

/*verifier.bookkeeper.*/elapsedMillis = System.currentTimeMillis() - /*verifier.bookkeeper.*/startTime

val failures =
results.flatMap(r => r :: r.previous.toList)
.collect{ case f: Failure => f } /* Ignore successes */
.pipe(allResults => {
/* If branchconditions are to be reported we collect the different failure contexts
* of all failures that report the same error (but on different branches, with different CounterExample)
* and put those into one failure */
if (config.enableBranchconditionReporting())
allResults.groupBy(failureFilterAndGroupingCriterion).map{case (_: String, fs:List[Failure]) =>
fs.head.message.failureContexts = fs.flatMap(_.message.failureContexts)
Failure(fs.head.message)
}.toList
else allResults.distinctBy(failureFilterAndGroupingCriterion)
})
.sortBy(failureSortingCriterion)
val failures = results
Comment thread
ArquintL marked this conversation as resolved.
.collect{ case f: Failure => f } /* Ignore successes */
.pipe(allResults => {
/* If branchconditions are to be reported we collect the different failure contexts
* of all failures that report the same error (but on different branches, with different CounterExample)
* and put those into one failure
*/
if (config.enableBranchconditionReporting())
allResults.groupBy(failureFilterAndGroupingCriterion).map{case (_: String, fs:List[Failure]) =>
fs.head.message.failureContexts = fs.flatMap(_.message.failureContexts)
Failure(fs.head.message)
}.toList
else allResults.distinctBy(failureFilterAndGroupingCriterion)
})
.sortBy(failureSortingCriterion)

// if (config.showStatistics.isDefined) {
// val proverStats = verifier.decider.statistics()
Expand Down
12 changes: 12 additions & 0 deletions src/main/scala/verifier/DefaultMainVerifier.scala
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ class DefaultMainVerifier(config: Config,
val functionVerificationResults = functionsSupporter.units.toList flatMap (function => {
val startTime = System.currentTimeMillis()
val results = functionsSupporter.verify(createInitialState(function, program, functionData, predicateData), function)
.flatMap(extractAllVerificationResults)
val elapsed = System.currentTimeMillis() - startTime
reporter report VerificationResultMessage(s"silicon", function, elapsed, condenseToViperResult(results))
logger debug s"Silicon finished verification of function `${function.name}` in ${viper.silver.reporter.format.formatMillisReadably(elapsed)} seconds with the following result: ${condenseToViperResult(results).toString}"
Expand All @@ -218,6 +219,7 @@ class DefaultMainVerifier(config: Config,
val predicateVerificationResults = predicateSupporter.units.toList flatMap (predicate => {
val startTime = System.currentTimeMillis()
val results = predicateSupporter.verify(createInitialState(predicate, program, functionData, predicateData), predicate)
.flatMap(extractAllVerificationResults)
val elapsed = System.currentTimeMillis() - startTime
reporter report VerificationResultMessage(s"silicon", predicate, elapsed, condenseToViperResult(results))
logger debug s"Silicon finished verification of predicate `${predicate.name}` in ${viper.silver.reporter.format.formatMillisReadably(elapsed)} seconds with the following result: ${condenseToViperResult(results).toString}"
Expand Down Expand Up @@ -246,6 +248,7 @@ class DefaultMainVerifier(config: Config,
_verificationPoolManager.queueVerificationTask(v => {
val startTime = System.currentTimeMillis()
val results = v.methodSupporter.verify(s, method)
.flatMap(extractAllVerificationResults)
val elapsed = System.currentTimeMillis() - startTime

reporter report VerificationResultMessage(s"silicon", method, elapsed, condenseToViperResult(results))
Expand All @@ -259,6 +262,7 @@ class DefaultMainVerifier(config: Config,
_verificationPoolManager.queueVerificationTask(v => {
val startTime = System.currentTimeMillis()
val results = v.cfgSupporter.verify(s, cfg)
.flatMap(extractAllVerificationResults)
val elapsed = System.currentTimeMillis() - startTime

reporter report VerificationResultMessage(s"silicon"/*, cfg*/, elapsed, condenseToViperResult(results))
Expand Down Expand Up @@ -513,4 +517,12 @@ class DefaultMainVerifier(config: Config,
}
results
}

/**
* In case Silicon encounters an expected error (i.e. `ErrorMessage.isExpected`), Silicon continues (until at most
* config.numberOfErrorsToReport() have been encountered (per member)).
* This function retrieves all errors that have been encountered and creates a verification result containing them.
Comment thread
ArquintL marked this conversation as resolved.
Outdated
*/
private def extractAllVerificationResults(res: VerificationResult): Seq[VerificationResult] =
res :: res.previous.toList
}