C5917 Removed Dead Assignment Of Deed

When a person dies, beneficiaries might learn that the decedent made a deed that conflicts with the specific wording in his will. Generally, a deed will override the will. However, which legal document prevails also depends on state property laws and whether the state has adopted the Uniform Probate Code.

Life Assignment

A life assignment is an arrangement in which one person gives another person the right to live at a property until he dies, and then the property passes to the remainderman, or beneficiary. This arrangement allows for possession of a property and ownership of the property to be split between two or more parties. Individuals routinely use this type of arrangement to provide for a spouse or other dependent, then pass the property onto heirs. The advantage of having a life estate is that the property can avoid going through the long and tedious probate process.

Deeds

A deed transfers legal ownership of a property from one party to another. A life assignment transfers the legal interest to the remainderman and possession to a different party. Assuming that the deed is properly recorded in the county where the property is located, the deed effectively transfers all legal interests to the property, with the exception of any conditions provided in the deed. If a life estate deed is perfected prior to the grantor's death, he does not own the property at the time of his death, so his last will and testament will not apply.

Last Will and Testament

A last will and testament disposes of the property that a person has in her estate at the time of her death. If a person has executed a deed before her death, that property is not part of the person's probate estate and is not subject to any instructions under the will.

Ademption

A gift that is specifically bequeathed in a will can be destroyed by the process of ademption. This legal term is effectively revoking a gift by destruction, sale or gift to another. The property can be adeemed if the decedent doesn't own it at death. If the specific bequest is not in the decedent's possession when he dies, the named beneficiary does not receive the asset or its cash equivalent.

Uniform Probate Code

Deeds generally override wills in states that recognize common law for their established property laws. However, many states have adopted the Uniform Probate Code. The UPC typically allows for the sale of the specifically-bequeathed property, with proceeds going to the intended beneficiary, so the will can override a deed in this scenario.

 

About the Author

Samantha Kemp is a lawyer for a general practice firm. She has been writing professionally since 2009. Her articles focus on legal issues, personal finance, business and education. Kemp acquired her JD from the University of Arkansas School of Law. She also has degrees in economics and business and teaching.

Photo Credits

  • Jupiterimages/liquidlibrary/Getty Images

In compiler theory, dead code elimination (also known as DCE, dead code removal, dead code stripping, or dead code strip) is a compiler optimization to remove code which does not affect the program results. Removing such code has several benefits: it shrinks program size, an important consideration in some contexts, and it allows the running program to avoid executing irrelevant operations, which reduces its running time. It can also enable further optimizations by simplifying program structure. Dead code includes code that can never be executed (unreachable code), and code that only affects dead variables (written to, but never read again), that is, irrelevant to the program.

Examples[edit]

Consider the following example written in C.

intfoo(void){inta=24;intb=25;/* Assignment to dead variable */intc;c=a*4;returnc;b=24;/* Unreachable code */return0;}

Simple analysis of the uses of values would show that the value of after the first assignment is not used inside . Furthermore, is declared as a local variable inside , so its value cannot be used outside . Thus, the variable is dead and an optimizer can reclaim its storage space and eliminate its initialization.

Furthermore, because the first return statement is executed unconditionally, no feasible execution path reaches the second assignment to . Thus, the assignment is unreachable and can be removed. If the procedure had a more complex control flow, such as a label after the return statement and a elsewhere in the procedure, then a feasible execution path might exist to the assignment to .

Also, even though some calculations are performed in the function, their values are not stored in locations accessible outside the scope of this function. Furthermore, given the function returns a static value (96), it may be simplified to the value it returns (this simplification is called constant folding).

Most advanced compilers have options to activate dead code elimination, sometimes at varying levels. A lower level might only remove instructions that cannot be executed. A higher level might also not reserve space for unused variables. Yet a higher level might determine instructions or functions that serve no purpose and eliminate them.

A common use of dead code elimination is as an alternative to optional code inclusion via a preprocessor. Consider the following code.

intmain(void){inta=5;intb=6;intc;c=a*(b/2);if(0){/* DEBUG */printf("%d\n",c);}returnc;}

Because the expression 0 will always evaluate to false, the code inside the if statement can never be executed, and dead code elimination would remove it entirely from the optimized program. This technique is common in debugging to optionally activate blocks of code; using an optimizer with dead code elimination eliminates the need for using a preprocessor to perform the same task.

In practice, much of the dead code that an optimizer finds is created by other transformations in the optimizer. For example, the classic techniques for operator strength reduction insert new computations into the code and render the older, more expensive computations dead.[1] Subsequent dead code elimination removes those calculations and completes the effect (without complicating the strength-reduction algorithm).

Historically, dead code elimination was performed using information derived from data-flow analysis.[2] An algorithm based on static single assignment form (SSA) appears in the original journal article on SSA form by Ron Cytron et al.[3] Robert Shillingsburg (aka Shillner) improved on the algorithm and developed a companion algorithm for removing useless control-flow operations.[4]

Dynamic dead code elimination[edit]

Dead code is normally considered dead unconditionally. Therefore, it is reasonable attempting to remove dead code through dead code elimination at compile time.

However, in practice it is also common for code sections to represent dead or unreachable code only under certain conditions, which may not be known at the time of compilation or assembly. Such conditions may be imposed by different runtime environments (for example different versions of an operating system, or different sets and combinations of drivers or services loaded in a particular target environment), which may require different sets of special cases in the code, but at the same time become conditionally dead code for the other cases.[5] Also, the software (for example, a driver or resident service) may be configurable to include or exclude certain features depending on user preferences, rendering unused code portions useless in a particular scenario.[5] While modular software may be developed to dynamically load libraries on demand only, in most cases, it is not possible to load only the relevant routines from a particular library, and even if this would be supported, a routine may still include code sections which can be considered dead code in a given scenario, but could not be ruled out at compile time, already.

The techniques used to dynamically detect demand, identify and resolve dependencies, remove such conditionally dead code, and to recombine the remaining code at load or runtime are called dynamic dead code elimination[5][6][7][8][9][10][11][12] or dynamic dead instruction elimination.[13]

Most programming languages, compilers and operating systems offer no or little more support than dynamic loading of libraries and late linking, therefore software utilizing dynamic dead code elimination is very rare with languages compiled ahead-of-time or written in assembly language.[6][9] However, language implementations doing just-in-time compilation may dynamically optimize for dead code elimination.[12][14][15]

Although with a rather different focus, similar approaches are sometimes also utilized for dynamic software updating and hot patching.

See also[edit]

References[edit]

Further reading[edit]

  • Bodík, Rastislav; Gupta, Rajiv (June 1997). Partial dead code elimination using slicing transformations. Proceedings of the ACMSIGPLAN 1997 conference on Programming language design and implementation (PLDI '97). pp. 682–694. 
  • Aho, Alfred Vaino; Sethi, Ravi; Ullman, Jeffrey David (1986). Compilers - Principles, Techniques and Tools. Addison Wesley Publishing Company. ISBN 0-201-10194-7. 
  • Muchnick, Steven Stanley (1997). Advanced Compiler Design and Implementation. Morgan Kaufmann Publishers. ISBN 1-55860-320-4. 
  • Grune, Dick; Bal, Henri Elle; Jacobs, Ceriel J. H.; Langendoen, Koen G. (2000). Modern Compiler Design. John Wiley & Sons, Inc.ISBN 0-471-97697-0. 

External links[edit]

  1. ^Allen, Frances; Cocke, John; Kennedy, Ken (June 1981). "Reduction of Operator Strength". In Jones, Neil D.; Muchnick, Steven Stanley. Program Flow Analysis: Theory & Application. Prentice-Hall. ISBN 0137296819. 
  2. ^Kennedy, Ken (June 1981). "A Survey of Data-flow Analysis Techniques". In Jones, Neil D.; Muchnick, Steven Stanley. Program Flow Analysis: Theory & Application. Prentice-Hall. ISBN 0137296819. 
  3. ^Cytron, Ron K.; Ferrante, Jeanne; Rosen, Barry K.; Zadeck, F. Kenneth (1991). Efficiently Computing Static Single Assignment Form and the Program Dependence Graph. ACMTOPLAS 13(4). 
  4. ^Cooper, Keith D.; Torczon, Linda (2003) [2002-01-01]. Engineering a Compiler. Morgan Kaufmann. pp. 498ff. ISBN 978-1558606982. 
  5. ^ abcPaul, Matthias (2002-04-03). "[fd-dev] Ctrl+Alt+Del". Archived from the original on 2017-09-09. Retrieved 2017-09-09.  
  6. ^ abPaul, Matthias; Frinke, Axel C. (1997-10-13) [first published 1991], FreeKEYB - Enhanced DOS keyboard and console driver (User Manual) (v6.5 ed.)  (NB. FreeKEYB is a Unicode-based dynamically configurable successor of K3PLUS supporting most keyboard layouts, code pages, and country codes. Utilizing an off-the-shelf macro assembler as well as a framework of automatic pre- and post-processing analysis tools to generate dependency and code morphingmeta data to be embedded into the executable file alongside the binary code and a self-discarding, relaxing and relocating loader, the driver implements byte-level granular dynamic dead code elimination and relocation techniques at load-time as well as self-modifying code and reconfigurability at run-time to minimize its memory footprint downto close the canonical form depending on the underlying hardware, operating system, and driver configuration as well as the selected feature set and locale (about sixty configuration switches with hundreds of options for an almost unlimited number of possible combinations). This complexity and the dynamics are hidden from users, who deal with a single executable file just like they would do with a conventional driver. K3PLUS was an extended keyboard driver for DOS widely distributed in Germany at its time, with adaptations to a handful of other European languages available. It supported a sub-set of features already, but did not implement dynamic dead code eliminiation.)
  7. ^Paul, Matthias (2001-04-10). "[ANN] FreeDOS beta 6 released". de.comp.os.msdos (in German). Archived from the original on 2017-09-09. Retrieved 2017-07-02. 
  8. ^Paul, Matthias (2001-12-30). "KEYBOARD.SYS internal structure". comp.os.msdos.programmer. Archived from the original on 2017-09-09. Retrieved 2017-07-03.  
  9. ^ abPaul, Matthias; Frinke, Axel C. (2006-01-16), FreeKEYB - Advanced international DOS keyboard and console driver (User Manual) (v7 preliminary ed.) 
  10. ^Paul, Matthias (2002-02-02). "Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" [Loading drivers dynamically (Intra-segment offset relocation to load TSRs into the HMA)]. de.comp.os.msdos (in German). Archived from the original on 2017-09-09. Retrieved 2017-07-02. 
  11. ^Glew, Andy (2011-03-02). "Dynamic dead code elimination and hardware futures". [1][2]
  12. ^ abConway, Andrew (1995-12-04). "Cyclic data structures". comp.lang.functional. Archived from the original on 2017-09-09. Retrieved 2017-07-03.   (NB. Possibly the first public use of the term dynamic dead code elimination, though only conceptually and with a focus on lazy evaluation in functional languages.)
  13. ^Butts, J. Adam; Sohi, Guri (October 2002). "Dynamic Dead-Instruction Detection and Elimination"(PDF). San Jose, CA, USA: Computer Science Department, University of Wisconsin-Madison. ASPLOS X ACM 1-58113-574-2/02/0010. Retrieved 2017-06-23. 
  14. ^Johng, Yessong; Danielsson, Per; Ehnsiö, Per; Hermansson, Mats; Jolanki, Mika; Moore, Scott; Strander, Lars; Wettergren, Lars (2002). "Chapter 5. Java overview and iSeries implementation - 5.1.1. Miscellaneous components". Intentia Movex Java on the IBM iSeries Server - An Implementation Guide - Overview of Movex Java on the iSeries server - Movex Java on iSeries installation and configuration - Operational tips and techniques. Red Books. IBM Corp. p. 41. ISBN 0738424617. SG24-6545-00. Retrieved 2017-06-23. 
  15. ^Polito, Guillermo (2015). "Virtualization Support for Application Runtime Specialization and Extension - Programming Languages"(PDF). Universite des Sciences et Technologies de Lille. pp. 111–124. HAL Id: tel-01251173. Archived(PDF) from the original on 2017-06-23. Retrieved 2017-06-23. 

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *