About: Undefined value is a research topic. Over the lifetime, 21 publications have been published within this topic receiving 545 citations. The topic is also known as: undefined.
TL;DR: Memcheck detects a wide range of memory errors in programs as they run, and improves on that of previous tools by being accurate to the level of individual bits, giving Memcheck a low false positive and false negative rate.
Abstract: We present Memcheck, a tool that has been implemented with the dynamic binary instrumentation framework Valgrind. Memcheck detects a wide range of memory errors in programs as they run. This paper focuses on one kind of error that Memcheck detects: undefined value errors. Such errors are common, and often cause bugs that are hard to find in programs written in languages such as C, C++ and Fortran. Memcheck's definedness checking improves on that of previous tools by being accurate to the level of individual bits. This accuracy gives Memcheck a low false positive and false negative rate.
The definedness checking involves shadowing every bit of data in registers and memory with a second bit that indicates if the bit has a defined value. Every value-creating operation is instrumented with a shadow operation that propagates shadow bits appropriately. Memcheck uses these shadow bits to detect uses of undefined values that could adversely affect a program's behaviour.
Under Memcheck, programs typically run 20-30 times slower than normal. This is fast enough to use with large programs. Memcheck finds many errors in real programs, and has been used during the past two years by thousands of programmers on a wide range of systems, including OpenOffice, Mozilla, Opera, KDE, GNOME, MySQL, Perl, Samba, The GIMP, and Unreal Tournament.
TL;DR: This paper presents efficient origin tracking of unusable values; it shows how to record where these values come into existence, correctly propagate them, and report them if they cause an error.
Abstract: Programs sometimes crash due to unusable values, for example, when Java and C# programs dereference null pointers and when C and C++ programs use undefined values to affect program behavior. A stack trace produced on such a crash identifies the effect of the unusable value, not its cause, and is often not much help to the programmer. This paper presents efficient origin tracking of unusable values; it shows how to record where these values come into existence, correctly propagate them, and report them if they cause an error. The key idea is value piggybacking: when the original program stores an unusable value, value piggybacking instead stores origin information in the spare bits of the unusable value. Modest compiler support alters the program to propagate these modified values through operations such as assignments and comparisons. We evaluate two implementations: the first tracks null pointer origins in a JVM, and the second tracks undefined value origins in a memory-checking tool built with Valgrind. These implementations show that origin tracking via value piggybacking is fast and often useful, and in the Java case, has low enough overhead for use in a production environment.
TL;DR: In this paper, the authors study the variety generated by the 3-element algebra associated with conditional logic and obtain the following results for this variety: a finite complete set of laws; a detailed description of free algebras as sets of ordered, rooted, labelled, binary trees; a representation theorem for the algebra in this variety, analogous to that for Boolean algebra, and a recursive formula and an asymptotic approximation for the orders of the finitely generated free algebra.
Abstract: Conditional logic is the non-commutative regular extension of Boolean logic to 3 truth values; the third truth value stands for “undefined” or “non-terminating evaluation” In conditional logic, expressions are evaluated from left to right and evaluation stops as soon as the answer may be obtained For example, “x and y” is false wheneverx is false, undefined wheneverx is undefined and takes the value ofy wheneverx is true In this paper we study the variety generated by the 3-element algebra associated with conditional logic We obtain the following results for this variety: a finite complete set of laws; a detailed description of free algebras as sets of ordered, rooted, labelled, binary trees; a representation theorem for the algebras in this variety, analogous to that for Boolean algebras and a recursive formula and an asymptotic approximation for the orders of the finitely-generated free algebras
TL;DR: It is shown that the results of Demetrovics about the maximal number of minimal keys on unbounded domains do not hold for finite domains and lower bounds for the size of minimum-sized Armstrong relations are derived.
TL;DR: This paper addresses data-flow analysis on an intermediate model (Petri nets extended with state variables) into which process algebra specifications can be translated automatically and addresses important issues, such as avoiding the introduction of useless reset operations and handling shared read-only variables that children processes inherit from their parents.
Abstract: Data-flow analysis to identify dead variables and reset them to an undefined value is an effective technique for fighting state explosion in the enumerative verification of concurrent systems. Although this technique is well-adapted to imperative languages, it is not directly applicable to value-passing process algebras, in which variables cannot be reset explicitly due to the single-assignment constraints of the functional programming style. This paper addresses this problem by performing data-flow analysis on an intermediate model (Petri nets extended with state variables) into which process algebra specifications can be translated automatically. It also addresses important issues, such as avoiding the introduction of useless reset operations and handling shared read-only variables that children processes inherit from their parents.