* CVC4::theory::Interrupted no longer derives CVC4::Exception.
* Interrupted is only thrown if "safe" parameter is TRUE !
* UF returns one conflict (instead of waiting for Interrupted to be thrown).
* Minor build system work (quieter builds if V=0, better handling of build
profiles in configure)
# Unpack standard build types. Any particular options can be overriden with
# --enable/disable-X options
+if test -z "${OPTLEVEL+set}"; then OPTLEVEL=3; fi
+# our defaults for CXXFLAGS are better than autoconf's
+if test -z "${CXXFLAGS+set}"; then CXXFLAGS=; fi
case "$with_build" in
production) # highly optimized, no assertions, no tracing
CVC4CPPFLAGS=
- CVC4CXXFLAGS=-O3
+ CVC4CXXFLAGS=
CVC4LDFLAGS=
+ if test -z "${OPTLEVEL+set}" ; then OPTLEVEL=3 ; fi
if test -z "${enable_optimized+set}" ; then enable_optimized=yes ; fi
if test -z "${enable_debug_symbols+set}"; then enable_debug_symbols=yes ; fi
if test -z "${enable_assertions+set}" ; then enable_assertions=no ; fi
;;
debug) # unoptimized, debug symbols, assertions, tracing
CVC4CPPFLAGS=-DCVC4_DEBUG
- CVC4CXXFLAGS='-O0 -fno-inline -ggdb3'
+ CVC4CXXFLAGS='-fno-inline'
CVC4LDFLAGS=
if test -z "${enable_optimized+set}" ; then enable_optimized=no ; fi
if test -z "${enable_debug_symbols+set}"; then enable_debug_symbols=yes ; fi
;;
default) # moderately optimized, assertions, tracing
CVC4CPPFLAGS=
- CVC4CXXFLAGS=-O2
+ CVC4CXXFLAGS=
CVC4LDFLAGS=
- if test -z "${enable_optimized+set}" ; then enable_optimized=no ; fi
+ if test -z "${OPTLEVEL+set}" ; then OPTLEVEL=2 ; fi
+ if test -z "${enable_optimized+set}" ; then enable_optimized=yes ; fi
if test -z "${enable_debug_symbols+set}"; then enable_debug_symbols=yes ; fi
if test -z "${enable_assertions+set}" ; then enable_assertions=yes ; fi
if test -z "${enable_tracing+set}" ; then enable_tracing=yes ; fi
;;
competition) # maximally optimized, no assertions, no tracing, muzzled
CVC4CPPFLAGS=
- CVC4CXXFLAGS='-O9 -funroll-all-loops -fexpensive-optimizations -fno-enforce-eh-specs'
+ CVC4CXXFLAGS='-funroll-all-loops -fexpensive-optimizations -fno-enforce-eh-specs'
CVC4LDFLAGS=
- if test -z "${enable_optimized+set}" ; then enable_optimized=no ; fi
+ if test -z "${OPTLEVEL+set}" ; then OPTLEVEL=9 ; fi
+ if test -z "${enable_optimized+set}" ; then enable_optimized=yes ; fi
if test -z "${enable_debug_symbols+set}"; then enable_debug_symbols=no ; fi
if test -z "${enable_assertions+set}" ; then enable_assertions=no ; fi
if test -z "${enable_tracing+set}" ; then enable_tracing=no ; fi
AC_MSG_RESULT([$enable_optimized])
if test "$enable_optimized" = yes; then
- CVC4CXXFLAGS="$CVC4CXXFLAGS -O3"
+ CVC4CXXFLAGS="$CVC4CXXFLAGS -O$OPTLEVEL"
+else
+ CVC4CXXFLAGS="$CVC4CXXFLAGS -O0"
fi
AC_MSG_CHECKING([whether to include debugging symbols in libcvc4])
support_unit_tests='unit testing infrastructure enabled in build directory'
fi
+if test "$enable_optimized" = yes; then
+ optimized="yes, at level $OPTLEVEL"
+else
+ optimized="no"
+fi
+
cat <<EOF
CVC4 $VERSION
Build profile: $with_build
Build ID : $build_type
-Optimized : $enable_optimized
+Optimized : $optimized
Debug symbols: $enable_debug_symbols
Assertions : $enable_assertions
Tracing : $enable_tracing
kind_epilogue.h
@srcdir@/kind.h: mkkind kind_prologue.h kind_middle.h kind_epilogue.h builtin_kinds @top_srcdir@/src/theory/Makefile.in @top_srcdir@/src/theory/*/kinds
- chmod +x @srcdir@/mkkind
+ $(AM_V_at)chmod +x @srcdir@/mkkind
$(AM_V_GEN)(@srcdir@/mkkind \
@srcdir@/kind_prologue.h \
@srcdir@/kind_middle.h \
theoryof_table_epilogue.h
@srcdir@/theoryof_table.h: @srcdir@/mktheoryof theoryof_table_prologue.h theoryof_table_middle.h theoryof_table_epilogue.h @top_srcdir@/src/theory/Makefile.in @top_srcdir@/src/theory/*/kinds
- chmod +x @srcdir@/mktheoryof
+ $(AM_V_at)chmod +x @srcdir@/mktheoryof
$(AM_V_GEN)(@srcdir@/mktheoryof \
@srcdir@/theoryof_table_prologue.h \
@srcdir@/theoryof_table_middle.h \
d_conflictNode(context) {
}
- void conflict(TNode conflictNode, bool) throw(theory::Interrupted) {
+ void conflict(TNode conflictNode, bool safe) throw(theory::Interrupted) {
Debug("theory") << "EngineOutputChannel::conflict(" << conflictNode << ")" << std::endl;
d_conflictNode = conflictNode;
- throw theory::Interrupted();
+ if(safe) {
+ throw theory::Interrupted();
+ }
}
void propagate(TNode, bool) throw(theory::Interrupted) {
* @param effort the effort level to use
*/
inline bool check(theory::Theory::Effort effort) {
- bool ok = true;
+ d_theoryOut.d_conflictNode = Node::null();
try {
//d_bool.check(effort);
d_uf.check(effort);
//d_bv.check(effort);
} catch(const theory::Interrupted&) {
Debug("theory") << "TheoryEngine::check() => conflict" << std::endl;
- ok = false;
}
- return ok;
+ return d_theoryOut.d_conflictNode.get().isNull();
}
/**
if(sameCongruenceClass(left, right)){
Node remakeNeq = (*diseqIter).notNode();
Node conflict = constructConflict(remakeNeq);
- d_out->conflict(conflict, true);
+ d_out->conflict(conflict, false);
+ return;
}
}
}
#define __CVC4__EXCEPTION_H
#include <string>
-#include <iostream>
#include "cvc4_config.h"
namespace CVC4 {
#include <cstdarg>
#include <set>
-#include "util/exception.h"
-
namespace CVC4 {
/**
DebugC(std::ostream* os) : d_os(os) {}
void operator()(const char* tag, const char* s) {
- if(d_tags.find(std::string(tag)) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(std::string(tag)) != d_tags.end()) {
*d_os << s;
}
}
void operator()(const char* tag, const std::string& s) {
- if(d_tags.find(std::string(tag)) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(std::string(tag)) != d_tags.end()) {
*d_os << s;
}
}
void operator()(const std::string& tag, const char* s) {
- if(d_tags.find(tag) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(tag) != d_tags.end()) {
*d_os << s;
}
}
void operator()(const std::string& tag, const std::string& s) {
- if(d_tags.find(tag) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(tag) != d_tags.end()) {
*d_os << s;
}
}
void printf(std::string tag, const char* fmt, ...) __attribute__ ((format(printf, 3, 4)));
std::ostream& operator()(const char* tag) {
- if(d_tags.find(std::string(tag)) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(std::string(tag)) != d_tags.end()) {
return *d_os;
} else {
return null_os;
}
}
std::ostream& operator()(std::string tag) {
- if(d_tags.find(tag) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(tag) != d_tags.end()) {
return *d_os;
} else {
return null_os;
void printf(std::string tag, const char* fmt, ...) __attribute__ ((format(printf, 3, 4)));
std::ostream& operator()(const char* tag) {
- if(d_tags.find(tag) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(tag) != d_tags.end()) {
return *d_os;
} else {
return null_os;
}
std::ostream& operator()(std::string tag) {
- if(d_tags.find(tag) != d_tags.end()) {
+ if(!d_tags.empty() && d_tags.find(tag) != d_tags.end()) {
return *d_os;
} else {
return null_os;