Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/CodeGen/CodeGenerator.cc	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 12 14:33:52 2015
-// Update Count     : 222
+// Last Modified On : Thu Sep 17 15:25:58 2015
+// Update Count     : 233
 //
 
@@ -190,5 +190,5 @@
 		if ( designators.size() == 0 ) return;
 		for ( DesignatorList::iterator iter = designators.begin(); iter != designators.end(); ++iter ) {
-			if ( NameExpr * nm = dynamic_cast< NameExpr * >( *iter ) ) {
+			if ( dynamic_cast< NameExpr * >( *iter ) ) {
 				// if expression is a name, then initializing aggregate member
 				output << ".";
@@ -258,5 +258,7 @@
 	      
 				  case OT_CALL:
-					// there are no intrinsic definitions of the function call operator
+				  case OT_CTOR:
+				  case OT_DTOR:
+					// there are no intrinsic definitions of the function call operator or constructors or destructors
 					assert( false );
 					break;
@@ -322,4 +324,6 @@
 	      
 				  case OT_CALL:
+					case OT_CTOR:
+					case OT_DTOR:
 					assert( false );
 					break;
@@ -392,13 +396,20 @@
 
 	void CodeGenerator::visit( CastExpr *castExpr ) {
-		output << "((";
-		if ( castExpr->get_results().empty() ) {
-			output << "void" ;
-		} else {
-			output << genType( castExpr->get_results().front(), "" );
-		} // if
-		output << ")";
-		castExpr->get_arg()->accept( *this );
-		output << ")";
+		// if the cast is to an lvalue type, then the cast
+		// should be dropped, since the result of a cast is
+		// never an lvalue in C
+		if ( castExpr->get_results().front()->get_isLvalue() ) {
+			castExpr->get_arg()->accept( *this );
+		} else {
+			output << "((";
+			if ( castExpr->get_results().empty() ) {
+				output << "void" ;
+			} else {
+				output << genType( castExpr->get_results().front(), "" );
+			} // if
+			output << ")";
+			castExpr->get_arg()->accept( *this );
+			output << ")";			
+		}
 	}
   
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/CodeGen/OperatorTable.cc	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun 23 17:41:14 2015
-// Update Count     : 5
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Oct 06 15:26:34 2015
+// Update Count     : 9
 //
 
@@ -21,4 +21,6 @@
 		const OperatorInfo tableValues[] = {
 			{	"?[?]",		"",		"_operator_index",				OT_INDEX			},
+			{	"?{}",		"",		"_constructor",					OT_CTOR				},
+			{	"^?{}",		"",		"_destructor",					OT_DTOR				}, // ~?{}, -?{}, !?{}, $?{}, ??{}, ^?{}, ?destroy, ?delete
 			{	"?()",		"",		"_operator_call",				OT_CALL				},
 			{	"?++",		"++",	"_operator_postincr",			OT_POSTFIXASSIGN	},
Index: src/CodeGen/OperatorTable.h
===================================================================
--- src/CodeGen/OperatorTable.h	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/CodeGen/OperatorTable.h	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun 23 16:09:27 2015
-// Update Count     : 3
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jun 24 16:17:57 2015
+// Update Count     : 5
 //
 
@@ -22,4 +22,6 @@
 	enum OperatorType {
 		OT_INDEX,
+		OT_CTOR,
+		OT_DTOR,
 		OT_CALL,
 		OT_PREFIX,
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/GenPoly/Specialize.cc	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 15:54:07 2015
-// Update Count     : 6
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Sep 22 14:04:13 2015
+// Update Count     : 15
 //
 
@@ -86,4 +86,5 @@
 
 	Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
+		assert( ! actual->get_results().empty() );
 		if ( needsSpecialization( formalType, actual->get_results().front(), env ) ) {
 			PointerType *ptrType;
@@ -167,4 +168,5 @@
 	Expression * Specialize::mutate( AddressExpr *addrExpr ) {
 		addrExpr->get_arg()->acceptMutator( *this );
+		assert( ! addrExpr->get_results().empty() );
 		addrExpr->set_arg( doSpecialization( addrExpr->get_results().front(), addrExpr->get_arg() ) );
 		return addrExpr;
@@ -173,5 +175,9 @@
 	Expression * Specialize::mutate( CastExpr *castExpr ) {
 		castExpr->get_arg()->acceptMutator( *this );
-		castExpr->set_arg( doSpecialization( castExpr->get_results().front(), castExpr->get_arg() ) );
+		if ( ! castExpr->get_results().empty() ) {
+			// this may not be the correct condition, but previously the next statement 
+			// was happening unchecked, causing a crash on a cast to void
+			castExpr->set_arg( doSpecialization( castExpr->get_results().front(), castExpr->get_arg() ) );		
+		}
 		return castExpr;
 	}
Index: src/MakeLibCfa.cc
===================================================================
--- src/MakeLibCfa.cc	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/MakeLibCfa.cc	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sat May 16 10:33:33 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 16:52:59 2015
-// Update Count     : 14
+// Last Modified By : Rob Schluntz
+// Last Modified On : Fri Jul 03 18:11:37 2015
+// Update Count     : 18
 // 
 
@@ -77,4 +77,6 @@
 				break;
 			}
+		  case CodeGen::OT_CTOR:
+		  case CodeGen::OT_DTOR:
 		  case CodeGen::OT_CONSTANT:
 		  case CodeGen::OT_LABELADDRESS:
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/Parser/ParseNode.h	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 12 13:27:11 2015
-// Update Count     : 172
+// Last Modified On : Wed Aug 19 15:59:27 2015
+// Update Count     : 174
 //
 
@@ -180,5 +180,6 @@
 				Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, 
 				ERAssn, OrAssn, Index, FieldSel, PFieldSel, Range,
-				UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress
+				UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
+				Ctor, Dtor,
 	};
 
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/SymTab/Indexer.h	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:38:55 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 05 13:51:39 2015
-// Update Count     : 4
+// Last Modified On : Thu Sep 17 16:05:38 2015
+// Update Count     : 5
 //
 
@@ -19,5 +19,4 @@
 #include <list>
 #include <string>
-#include <map>
 
 #include "SynTree/Visitor.h"
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 59cde210f46eaee3d1673caf45fb3bfa23e07935)
+++ src/SynTree/Expression.cc	(revision b0be06ac6a8827cfc7fbc52dee30e7ed931d8fcd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 12 14:02:45 2015
-// Update Count     : 30
+// Last Modified On : Wed Sep 02 12:07:10 2015
+// Update Count     : 33
 //
 
@@ -31,7 +31,6 @@
 Expression::Expression( Expression *_aname ) : env( 0 ), argName( _aname ) {}
 
-Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ) {
+Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ) {
 	cloneAll( other.results, results );
-	argName = other.get_argName();
 }
 
