Instable evaluation of combined logical expressions

Jörg Bretschneider Joerg.Bretschneider at eas.iis.fraunhofer.de
Fri Feb 13 07:46:06 CST 2009


Bug report for Octave 3.0.3 configured for i686-pc-msdosmsvc

Description:
-----------

Octave seems to evaluate all expressions in combined logical condition
expressions,
i.e.    cond1 LOGICALOPERATOR cond2 (LOGICALOPERATOR ...)
even if the logical result of the condition is already determined by the
first condition
An error occurs if the syntactical validity of the second or further
conditions depends
on a FALSE value of the first condition, e.g. an index request into an
empty matrix.
It is not unusual to check the length of an array first in order to
request a condition
on some of its elements. The example works with Matlab for years, but
not Octave 3.0.x

Repeat-By:
---------

  x=[];   if ~isempty(x)   &   x(1) ~= 0,   disp('do something'),   end

Fix:
---
	A work around for this was to pose multiple separate IF conditions,
	but this is not the preferred way, as octave can easily understand
	that an AND expression is FALSE if its first condition is, as well
	as an OR expression is TRUE if its first condition is, there may be
	other instances but the first one is the most important case.
	I had to adapt hundreds of lines of M-code to make it compatible.


Configuration (please do not edit this section):
-----------------------------------------------

uname output:     Windows
configure opts:
Fortran compiler: fc-msvc
FFLAGS:           -O2
F2C:              @F2C@
F2CFLAGS:         @F2CFLAGS@
FLIBS:            -lhdf5 -lzlib -lf2c -lkernel32
CPPFLAGS:         -I.  -Ic:/Software/VCLibs/include
INCFLAGS:         -I. -I. -I./liboctave -I./src -I./libcruft/misc
C compiler:       cc-msvc, version
CFLAGS:           -O2 -MD
CPICFLAG:
C++ compiler:     cc-msvc, version
CXXFLAGS:         -O2 -EHs -MD
CXXPICFLAG:
LD_CXX:           cc-msvc
LDFLAGS:
LIBFLAGS:         -L.
RLD_FLAG:
BLAS_LIBS:        -llapack -lblas
FFTW_LIBS:        -lfftw3
LIBS:             -lreadline  -lncurses -lhdf5 -lzlib  -lws2_32 -lkernel32
LEXLIB:
LIBGLOB:          -lglob
SED:              /usr/bin/sed
DEFS:
-DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION=""
-DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DOCTAVE_SOURCE=1
-D_GNU_SOURCE=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1
-DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1
-DHAVE_MEMORY_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1
-DHAVE_UNISTD_H=1 -DSEPCHAR=';' -DSEPCHAR_STR=";" -D__NO_MATH_INLINES=1
-DCXX_NEW_FRIEND_TEMPLATE_DECL=1 -DCXX_ISO_COMPLIANT_LIBRARY=1
-DCXX_ABI=unknown -DHAVE_QHULL=1 -DHAVE_PCRE=1 -DHAVE_ZLIB_H=1
-DHAVE_ZLIB=1 -DHAVE_HDF5_H=1 -DHAVE_HDF5=1 -DHAVE_H5GGET_NUM_OBJS=1
-D_HDF5USEDLL_=1 -DHAVE_FFTW3=1 -DHAVE_GLPK_H=1 -DHAVE_GLPK=1
-DHAVE_CURL_CURL_H=1 -DHAVE_CURL=1 -DHAVE_IEEE754_DATA_FORMAT=1
-DF77_FUNC(name,NAME)=name ## _ -DF77_FUNC_(name,NAME)=name ## __
-DHAVE_BLAS=1 -DHAVE_SUITESPARSE_UMFPACK_H=1 -DHAVE_UMFPACK=1
-DUMFPACK_SEPARATE_SPLIT=1 -DHAVE_SUITESPARSE_COLAMD_H=1 -DHAVE_COLAMD=1
-DHAVE_SUITESPARSE_CCOLAMD_H=1 -DHAVE_CCOLAMD=1
-DHAVE_SUITESPARSE_CHOLMOD_H=1 -DHAVE_CHOLMOD=1
-DHAVE_SUITESPARSE_CS_H=1 -DHAVE_CXSPARSE=1 -Dmode_t=int -Dpid_t=int
-Duid_t=int -Dgid_t=int -DHAVE_DEV_T=1 -DHAVE_INO_T=1
-DHAVE_LONG_LONG_INT=1 -DHAVE_UNSIGNED_LONG_LONG_INT=1
-DHAVE_SIG_ATOMIC_T=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4
-DSIZEOF_LONG_LONG=8 -DHAVE_ALLOCA=1 -DNPOS=std::string::npos
-DHAVE_PLACEMENT_DELETE=1 -DSTDC_HEADERS=1 -DHAVE_ASSERT_H=1
-DHAVE_DIRECT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_INTTYPES_H=1
-DHAVE_LIMITS_H=1 -DHAVE_LOCALE_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STDINT_H=1
-DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_STAT_H=1
-DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTIME_H=1 -DHAVE_UNISTD_H=1
-DHAVE_VARARGS_H=1 -DHAVE_SSTREAM=1 -DHAVE_GLOB_H=1 -DHAVE_FNMATCH_H=1
-DHAVE_CONIO_H=1 -DHAVE_ATEXIT=1 -DHAVE_CHMOD=1 -DHAVE_DUP2=1
-DHAVE_EXECVP=1 -DHAVE_GETCWD=1 -DHAVE_GETPID=1 -DHAVE__KBHIT=1
-DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_PUTENV=1 -DHAVE_RAISE=1
-DHAVE_RENAME=1 -DHAVE_RMDIR=1 -DHAVE_SETLOCALE=1 -DHAVE_SETVBUF=1
-DHAVE_STAT=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRICMP=1
-DHAVE_STRNICMP=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1
-DHAVE_UTIME=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_VSNPRINTF=1
-DHAVE__CHMOD=1 -DHAVE__SNPRINTF=1 -DHAVE__UTIME32=1
-DOCTAVE_HAVE_BROKEN_STRPTIME=1 -D_USE_MATH_DEFINES=1
-DHAVE_LOADLIBRARY_API=1 -DENABLE_DYNAMIC_LINKING=1 -DHAVE__FINITE=1
-DHAVE__ISNAN=1 -DHAVE__COPYSIGN=1 -DHAVE_DECL_SIGNBIT=0
-DHAVE_STRUCT_STAT_ST_RDEV=1 -DHAVE_DECL_TZNAME=1 -DHAVE_TZNAME=1
-DCLOSEDIR_VOID=1 -DMKDIR_TAKES_ONE_ARG=1 -DUSE_READLINE=1
-DRETSIGTYPE=void -DHAVE_DECL_SYS_SIGLIST=0
-DMUST_REINSTALL_SIGHANDLERS=1 -DRETSIGTYPE_IS_VOID=1
-DGNUPLOT_BINARY="pgnuplot"


User-preferences (please do not edit this section):

  EDITOR = C:\Programme\Octave\tools\wscite\SciTE.exe
  EXEC_PATH =
C:\Programme\Octave\msys\bin;C:\Programme\Octave\libexec\octave\3.0.3\site\exec\i686-pc-msdosmsvc;C:\Programme\Octave\libexec\octave\api-v32\site\exec\i686-pc-msdosmsvc;C:\Programme\Octave\libexec\octave\site\exec\i686-pc-msdosmsvc;C:\Programme\Octave\libexec\octave\3.0.3\exec\i686-pc-msdosmsvc;C:\Programme\Octave\bin;C:\Programme\Octave;C:\Programme\MiKTeX
2.7\miktex\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\wbem;c:\programme\citrix\system32\citrix\ima;c:\programme\citrix\system32\citrix\ima\subsystems;C:\WINDOWS\system32\citrix\ima;c:\programme\citrix\system32;C:\MATLAB\R2008a\bin;C:\MATLAB\R2008a\bin\win32;c:\matlab\6p1\bin\win32;c:\matlab\6p5\bin\win32;C:\Programme\Altium
Designer 6\System;c:\Programme\Microsoft SQL
Server\90\Tools\binn\;C:\Programme\Enabler\Server\Bin;C:\Programme\Artisan
Software Tools\Artisan Real-time Studio\ItsShadow\Exe;C:\Enabler\Server\Bin
  IMAGE_PATH = .;C:\Programme\Octave\share\octave\3.0.3\imagelib
  PAGER = less
  PS1 = \s | \W\n>>
  PS2 = >
  PS4 = +
  beep_on_error = 0
  completion_append_char =
  crash_dumps_octave_core = 1
  echo_executing_commands = 0
  fixed_point_format = 0
  gnuplot_binary = pgnuplot
  gnuplot_command_end =

  gnuplot_command_plot = pl
  gnuplot_command_replot = rep
  gnuplot_command_splot = sp
  gnuplot_command_title = t
  gnuplot_command_using = u
  gnuplot_command_with = w
  history_file = h:\.octave_hist
  history_size = 1024
  ignore_function_time_stamp = system
  info_file = C:\Programme\Octave\share\info\octave.info
  info_program = info
  makeinfo_program = makeinfo
  max_recursion_depth = 256
  output_max_field_width = 5
  output_precision = 5
  page_output_immediately = 0
  page_screen_output = 1
  print_answer_id_name = 1
  print_empty_dimensions = 1
  save_precision = 16
  saving_history = 1
  sighup_dumps_octave_core = 1
  sigterm_dumps_octave_core = 1
  silent_functions = 0
  split_long_rows = 1
  string_fill_char =
  struct_levels_to_print = 2
  suppress_verbose_help_message = 0


-- 
Jörg Bretschneider

Fraunhofer-Institut für Integrierte Schaltungen
Institutsteil Entwurfsautomatisierung
Zeunerstr. 38,
01069 Dresden,
Germany

Tel. ++49(0)351/4640-749
Fax: ++49(0)351/4640-703
Joerg.Bretschneider at eas.iis.fraunhofer.de
www.eas.iis.fraunhofer.de

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3627 bytes
Desc: S/MIME Cryptographic Signature
Url : https://www-old.cae.wisc.edu/pipermail/bug-octave/attachments/20090213/09aa128d/attachment.bin 


More information about the Bug-octave mailing list