Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 1b31345292deaf79f2d56840d77c38c98d8d206c)
+++ src/CodeGen/CodeGenerator.cc	(revision c2ce235057f98752b61e14874034b2d792b4f1b7)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 14 17:10:21 2016
+// Last Modified On : Wed Apr 27 11:59:36 2016
 // Update Count     : 255
 //
@@ -239,4 +239,5 @@
 				  case OT_INFIXASSIGN:
 				  case OT_CTOR:
+				  case OT_DTOR:
 					{
 						assert( arg != applicationExpr->get_args().end() );
@@ -273,27 +274,23 @@
 
 				  case OT_CTOR:
+				  case OT_DTOR:
 					if ( applicationExpr->get_args().size() == 1 ) {
-						// the expression fed into a single parameter constructor may contain
-						// side effects - output as a void expression
+						// the expression fed into a single parameter constructor or destructor
+						// may contain side effects - output as a void expression
 						output << "((void)(";
 						(*arg++)->accept( *this );
-						output << ")) /* ?{} */";
+						output << ")) /* " << opInfo.inputName << " */";
 					} else if ( applicationExpr->get_args().size() == 2 ) {
-						// intrinsic constructors are essentially bitwise assignment
+						// intrinsic two parameter constructors are essentially bitwise assignment
 						output << "(";
 						(*arg++)->accept( *this );
 						output << opInfo.symbol;
 						(*arg)->accept( *this );
-						output << ") /* ?{} */";
+						output << ") /* " << opInfo.inputName << " */";
 					} else {
-						// not constructors with 0 or more than 2 parameters
+						// no constructors with 0 or more than 2 parameters
 						assert( false );
 					}
 					break;
-
-				  case OT_DTOR:
-				  // intrinsic destructors do nothing - don't generate any code
-				  output << " /* " << dynamic_cast<VariableExpr*>(applicationExpr->get_function())->get_var()->get_name() << " */";
-				  break;
 
 				  case OT_PREFIX:
@@ -360,8 +357,24 @@
 					assert( false );
 
-					case OT_CTOR:
-					case OT_DTOR:
-					// intrinsic constructors should never be called
-					// intrinsic destructors do nothing
+
+				  case OT_CTOR:
+				  case OT_DTOR:
+					if ( untypedExpr->get_args().size() == 1 ) {
+						// the expression fed into a single parameter constructor or destructor
+						// may contain side effects - output as a void expression
+						output << "((void)(";
+						(*arg++)->accept( *this );
+						output << ")) /* " << opInfo.inputName << " */";
+					} else if ( untypedExpr->get_args().size() == 2 ) {
+						// intrinsic two parameter constructors are essentially bitwise assignment
+						output << "(";
+						(*arg++)->accept( *this );
+						output << opInfo.symbol;
+						(*arg)->accept( *this );
+						output << ") /* " << opInfo.inputName << " */";
+					} else {
+						// no constructors with 0 or more than 2 parameters
+						assert( false );
+					}
 					break;
 
