Skip to content

Commit 9ba092d

Browse files
committed
fix DA for global constants
1 parent 62d1d39 commit 9ba092d

File tree

4 files changed

+8
-11
lines changed

4 files changed

+8
-11
lines changed

src/main/scala/viper/gobra/Gobra.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ class Gobra extends GoVerifier with GoIdeVerifier {
318318
// by overflow checks (if enabled) because all overflows in constant declarations
319319
// can be found by the well-formedness checks.
320320
val startMs = System.currentTimeMillis()
321-
var transformations: Vector[InternalTransform] = Vector(CGEdgesTerminationTransform, ConstantPropagation)
321+
var transformations: Vector[InternalTransform] = Vector(CGEdgesTerminationTransform) ++ (if(config.enableDependencyAnalysis) Vector() else Vector(ConstantPropagation))
322322
if (config.checkOverflows) {
323323
transformations :+= OverflowChecksTransform
324324
}

src/main/scala/viper/gobra/translator/Translator.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ object Translator {
4646
val transformers: Seq[ViperTransformer] = Seq(
4747
new AssumeTransformer,
4848
new TerminationDomainTransformer,
49-
new DependencyAnalysisAnnotationTransformer(typeInfo)
49+
new DependencyAnalysisAnnotationTransformer(typeInfo, config)
5050
) ++ sifTransformer
5151

5252
val transformedTask = transformers.foldLeft[Either[Vector[VerifierError], BackendVerifier.Task]](Right(task)) {

src/main/scala/viper/gobra/translator/library/fixpoints/FixpointImpl.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class FixpointImpl extends Fixpoint {
3737
Seq(getFunc),
3838
Seq(getAxiom),
3939
Seq()
40-
)()
40+
)(pos, info, errT)
4141
_generatedDomains ::= domain
4242
}
4343

src/main/scala/viper/gobra/translator/transformers/DependencyAnalysisAnnotationTransformer.scala

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import viper.gobra.ast.frontend.PNode
44
import viper.gobra.ast.{frontend => gobra}
55
import viper.gobra.backend.BackendVerifier
66
import viper.gobra.dependencyAnalysis.GobraDependencyAnalysisAggregator
7+
import viper.gobra.frontend.Config
78
import viper.gobra.frontend.info.TypeInfo
89
import viper.gobra.reporting.Source.Verifier
910
import viper.gobra.reporting.Source.Verifier.GobraDependencyAnalysisInfo
@@ -12,12 +13,14 @@ import viper.silver.ast.utility.ViperStrategy
1213
import viper.silver.verifier.AbstractError
1314
import viper.silver.{ast => vpr}
1415

15-
class DependencyAnalysisAnnotationTransformer(typeInfo: TypeInfo) extends ViperTransformer {
16+
class DependencyAnalysisAnnotationTransformer(typeInfo: TypeInfo, config: Config) extends ViperTransformer {
1617

1718
private val gobraNodes: Iterable[GobraDependencyAnalysisInfo] = GobraDependencyAnalysisAggregator.identifyGobraNodes(typeInfo)
1819
private val positions = typeInfo.tree.root.positions.positions
1920

2021
override def transform(task: BackendVerifier.Task): Either[Seq[AbstractError], BackendVerifier.Task] = {
22+
if(!config.enableDependencyAnalysis) return Right(task)
23+
2124
val programWithAnalysisSources = addDependencyAnalysisSourceInfo(task.program)
2225
Right(task.copy(program = programWithAnalysisSources))
2326
}
@@ -30,14 +33,8 @@ class DependencyAnalysisAnnotationTransformer(typeInfo: TypeInfo) extends ViperT
3033
private def addDependencyAnalysisSourceInfo(p: vpr.Program): vpr.Program = {
3134
ViperStrategy.Slim({
3235
case member: vpr.Member =>
33-
val newInfo = getNewInfo(member, member.pos, {
34-
case _: gobra.PFunctionDecl | _: gobra.PMethodDecl
35-
| _: gobra.PDomainType | _: gobra.PPredType
36-
=> NoInfo
37-
case _ => disableDependencyAnalysis
38-
}, disableDependencyAnalysis)
36+
val newInfo = getNewInfo(member, member.pos, {_ => NoInfo}, disableDependencyAnalysis)
3937
member.withMeta((member.pos, newInfo, member.errT))
40-
4138
case stmt: vpr.Stmt =>
4239
val sourceInfo = stmt.info.getUniqueInfo[Verifier.Info]
4340
val depInfo = getDependencyAnalysisInfo(sourceInfo)

0 commit comments

Comments
 (0)