summaryrefslogtreecommitdiff
path: root/Source/Provers
diff options
context:
space:
mode:
authorGravatar MichalMoskal <unknown>2010-08-18 00:54:22 +0000
committerGravatar MichalMoskal <unknown>2010-08-18 00:54:22 +0000
commit024e1669cac41a45ba0d825035a25d32a1562a67 (patch)
tree09df808ad88aa3977b4997f2b8ef4323e167d365 /Source/Provers
parenta54af4e97ccf24b7bd8802d7411b67bc2b4c5e55 (diff)
Fix stack overflow introduced in my previous checkin. Make /typeEncoding:m use separate Z3 type per Boogie type
Diffstat (limited to 'Source/Provers')
-rw-r--r--Source/Provers/Z3/TypeDeclCollector.cs26
1 files changed, 13 insertions, 13 deletions
diff --git a/Source/Provers/Z3/TypeDeclCollector.cs b/Source/Provers/Z3/TypeDeclCollector.cs
index 5dfa6468..7cdc6f4f 100644
--- a/Source/Provers/Z3/TypeDeclCollector.cs
+++ b/Source/Provers/Z3/TypeDeclCollector.cs
@@ -174,7 +174,18 @@ void ObjectInvariant()
+ expr + ") (QID bvconv" + bits + ") (EQ " + expr + " x)))");
KnownTypes.Add(type, true);
+ return;
+ }
+
+ if (type.IsBool || type.IsInt)
+ return;
+
+ if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.Monomorphic) {
+ AddDeclaration("(DEFTYPE " + TypeToString(type) + ")");
+ KnownTypes.Add(type, true);
+ return;
}
+
}
public override bool Visit(VCExprNAry node, bool arg) {
@@ -235,7 +246,7 @@ void ObjectInvariant()
decl += ")";
AddDeclaration(decl);
- if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.Monomorphic) {
+ if (CommandLineOptions.Clo.MonomorphicArrays && !CommandLineOptions.Clo.UseArrayTheory) {
var sel = SimplifyLikeExprLineariser.SelectOpName(node);
if (!KnownSelectFunctions.ContainsKey(name)) {
@@ -338,18 +349,7 @@ void ObjectInvariant()
//
}
- // What happens in base.Visit() just seems wrong. It seems to use some hack to enumerate
- // recursive children of current node, which doesn't seem to work for nested store expressions
- // (the store expressions themselves get skipped).
- var res = StandardResult(node, arg);
- foreach (VCExpr n in node)
- {
- n.Accept(this, arg);
- }
-
- return res;
-
- // return base.Visit(node, arg);
+ return base.Visit(node, arg);
}
private string ExtractBuiltin(Function f) {