Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 03e5d14fed7fb921c0dfadb3761247f19a7f91e8)
+++ src/CodeGen/CodeGenerator.cc	(revision ec798473c329cfa11338fd56ced73a7381697432)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 06 15:40:35 2016
-// Update Count     : 243
+// Last Modified On : Fri May 06 16:01:00 2016
+// Update Count     : 255
 //
 
@@ -67,5 +67,6 @@
 	string mangleName( DeclarationWithType *decl ) {
 		if ( decl->get_mangleName() != "" ) {
-			return decl->get_mangleName();
+			// need to incorporate scope level in order to differentiate names for destructors
+			return decl->get_scopedMangleName();
 		} else {
 			return decl->get_name();
@@ -233,5 +234,11 @@
 		printDesignators( init->get_designators() );
 		output << "{ ";
-		genCommaList( init->begin_initializers(), init->end_initializers() );
+		if ( init->begin_initializers() == init->end_initializers() ) {
+			// illegal to leave initializer list empty for scalar initializers,
+			// but always legal to have 0
+			output << "0";
+		} else {
+			genCommaList( init->begin_initializers(), init->end_initializers() );
+		}
 		output << " }";
 	}
@@ -251,10 +258,13 @@
 				  case OT_POSTFIXASSIGN:
 				  case OT_INFIXASSIGN:
+				  case OT_CTOR:
+				  case OT_DTOR:
 					{
 						assert( arg != applicationExpr->get_args().end() );
 						if ( AddressExpr *addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {
-
+							// remove & from first assignment/ctor argument
 							*arg = addrExpr->get_arg();
 						} else {
+							// no address-of operator, so must be a pointer - add dereference
 							UntypedExpr *newExpr = new UntypedExpr( new NameExpr( "*?" ) );
 							newExpr->get_args().push_back( *arg );
@@ -283,4 +293,25 @@
 					break;
 
+				  case OT_CTOR:
+				  case OT_DTOR:
+					if ( applicationExpr->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 ( applicationExpr->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;
+
 				  case OT_PREFIX:
 				  case OT_PREFIXASSIGN:
@@ -298,4 +329,5 @@
 					output << opInfo.symbol;
 					break;
+
 
 				  case OT_INFIX:
@@ -344,4 +376,25 @@
 				  case OT_CALL:
 					assert( false );
+
+
+				  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;
 
Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision 03e5d14fed7fb921c0dfadb3761247f19a7f91e8)
+++ src/CodeGen/FixNames.cc	(revision ec798473c329cfa11338fd56ced73a7381697432)
@@ -5,10 +5,10 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FixNames.cc -- 
+// FixNames.cc --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 23:36:42 2015
+// Last Modified By : Rob Schluntz
+// Last Modified On : Mon Apr 11 15:38:10 2016
 // Update Count     : 1
 //
@@ -26,4 +26,11 @@
 		virtual void visit( ObjectDecl *objectDecl );
 		virtual void visit( FunctionDecl *functionDecl );
+
+		virtual void visit( CompoundStmt *compoundStmt );
+
+	  private:
+		int scopeLevel = 1;
+
+		void fixDWT( DeclarationWithType *dwt );
 	};
 
@@ -33,8 +40,9 @@
 	}
 
-	void fixDWT( DeclarationWithType *dwt ) {
+	void FixNames::fixDWT( DeclarationWithType *dwt ) {
 		if ( dwt->get_name() != "" ) {
 			if ( LinkageSpec::isDecoratable( dwt->get_linkage() ) ) {
 				dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) );
+				dwt->set_scopeLevel( scopeLevel );
 			} // if
 		} // if
@@ -50,4 +58,10 @@
 		fixDWT( functionDecl );
 	}
+
+	void FixNames::visit( CompoundStmt *compoundStmt ) {
+		scopeLevel++;
+		Visitor::visit( compoundStmt );
+		scopeLevel--;
+	}
 } // namespace CodeGen
 
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision 03e5d14fed7fb921c0dfadb3761247f19a7f91e8)
+++ src/CodeGen/OperatorTable.cc	(revision ec798473c329cfa11338fd56ced73a7381697432)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// OperatorTable.cc -- 
+// OperatorTable.cc --
 //
 // 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 : Thu Apr 14 16:48:27 2016
+// Update Count     : 9
 //
 
@@ -21,4 +21,6 @@
 		const OperatorInfo tableValues[] = {
 			{	"?[?]",		"",		"_operator_index",				OT_INDEX			},
+			{	"?{}",		"=",		"_constructor",					OT_CTOR				},
+			{	"^?{}",		"",		"_destructor",					OT_DTOR				},
 			{	"?()",		"",		"_operator_call",				OT_CALL				},
 			{	"?++",		"++",	"_operator_postincr",			OT_POSTFIXASSIGN	},
Index: src/CodeGen/OperatorTable.h
===================================================================
--- src/CodeGen/OperatorTable.h	(revision 03e5d14fed7fb921c0dfadb3761247f19a7f91e8)
+++ src/CodeGen/OperatorTable.h	(revision ec798473c329cfa11338fd56ced73a7381697432)
@@ -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,
