summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAina Niemetz <aina.niemetz@gmail.com>2020-06-15 11:48:02 -0700
committerGitHub <noreply@github.com>2020-06-15 11:48:02 -0700
commitaf37e2c948c140dbee2421a3cb046e068cc5b0f8 (patch)
treea40c4ec35f088ae4877df774dccaa068bd8065a2
parent5de97c3efe8794bf7e39774686dca81a1982a8ed (diff)
BV: Add missing type check for INT_TO_BITVECTOR. (#4613)
Fixes #4130. This further makes an attempt at more consistent error printing.
-rw-r--r--src/main/main.cpp8
-rw-r--r--src/theory/bv/theory_bv_type_rules.h4
-rw-r--r--test/regress/CMakeLists.txt1
-rw-r--r--test/regress/regress0/bv/issue-4130.smt210
-rw-r--r--test/regress/regress0/sygus/pLTL-sygus-syntax-err.sy4
5 files changed, 21 insertions, 6 deletions
diff --git a/src/main/main.cpp b/src/main/main.cpp
index 96ba1bc93..3310a75bf 100644
--- a/src/main/main.cpp
+++ b/src/main/main.cpp
@@ -57,9 +57,9 @@ int main(int argc, char* argv[]) {
#ifdef CVC4_COMPETITION_MODE
*opts.getOut() << "unknown" << endl;
#endif
- cerr << "CVC4 Error:" << endl << e << endl << endl
- << "Please use --help to get help on command-line options."
- << endl;
+ cerr << "(error \"" << e << "\")" << endl
+ << endl
+ << "Please use --help to get help on command-line options." << endl;
} catch(Exception& e) {
#ifdef CVC4_COMPETITION_MODE
*opts.getOut() << "unknown" << endl;
@@ -68,7 +68,7 @@ int main(int argc, char* argv[]) {
{
*opts.getOut() << "(error \"" << e << "\")" << endl;
} else {
- *opts.getErr() << "CVC4 Error:" << endl << e << endl;
+ *opts.getErr() << "(error \"" << e << "\")" << endl;
}
if(opts.getStatistics() && pExecutor != NULL) {
pTotalTime->stop();
diff --git a/src/theory/bv/theory_bv_type_rules.h b/src/theory/bv/theory_bv_type_rules.h
index 97b7a8a8f..42b90cd29 100644
--- a/src/theory/bv/theory_bv_type_rules.h
+++ b/src/theory/bv/theory_bv_type_rules.h
@@ -339,6 +339,10 @@ class IntToBitVectorOpTypeRule
if (n.getKind() == kind::INT_TO_BITVECTOR_OP)
{
size_t bvSize = n.getConst<IntToBitVector>();
+ if (bvSize == 0)
+ {
+ throw TypeCheckingExceptionPrivate(n, "expecting bit-width > 0");
+ }
return nodeManager->mkFunctionType(nodeManager->integerType(),
nodeManager->mkBitVectorType(bvSize));
}
diff --git a/test/regress/CMakeLists.txt b/test/regress/CMakeLists.txt
index fb0b38143..0e6fc2646 100644
--- a/test/regress/CMakeLists.txt
+++ b/test/regress/CMakeLists.txt
@@ -360,6 +360,7 @@ set(regress_0_tests
regress0/bv/fuzz40.smtv1.smt2
regress0/bv/fuzz41.smtv1.smt2
regress0/bv/issue3621.smt2
+ regress0/bv/issue-4130.smt2
regress0/bv/int_to_bv_err_on_demand_1.smt2
regress0/bv/mul-neg-unsat.smt2
regress0/bv/mul-negpow2.smt2
diff --git a/test/regress/regress0/bv/issue-4130.smt2 b/test/regress/regress0/bv/issue-4130.smt2
new file mode 100644
index 000000000..aa4a13068
--- /dev/null
+++ b/test/regress/regress0/bv/issue-4130.smt2
@@ -0,0 +1,10 @@
+; EXPECT: (error "Parse Error: issue-4130.smt2:9.39: expecting bit-width > 0
+; EXPECT:
+; EXPECT: (assert (and (= a (bv2nat ((_ int2bv 0) a)))))
+; EXPECT: ^
+; EXPECT: ")
+; EXIT: 1
+(set-logic ALL)
+(declare-fun a () Int)
+(assert (and (= a (bv2nat ((_ int2bv 0) a)))))
+(check-sat)
diff --git a/test/regress/regress0/sygus/pLTL-sygus-syntax-err.sy b/test/regress/regress0/sygus/pLTL-sygus-syntax-err.sy
index 1b5690d3a..848ae0349 100644
--- a/test/regress/regress0/sygus/pLTL-sygus-syntax-err.sy
+++ b/test/regress/regress0/sygus/pLTL-sygus-syntax-err.sy
@@ -1,10 +1,10 @@
; REQUIRES: no-competition
; COMMAND-LINE: --sygus-out=status --sygus-rec-fun --lang=sygus2
-; EXPECT-ERROR: CVC4 Error:
-; EXPECT-ERROR: Parse Error: pLTL-sygus-syntax-err.sy:80.19: number of arguments does not match the constructor type
+; EXPECT-ERROR: (error "Parse Error: pLTL-sygus-syntax-err.sy:80.19: number of arguments does not match the constructor type
; EXPECT-ERROR:
; EXPECT-ERROR: (Op2 <O2> <F>)
; EXPECT-ERROR: ^
+; EXPECT-ERROR: ")
; EXIT: 1
(set-logic ALL)
(set-option :lang sygus2)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback