Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 70a06f62e367e9c06390ae334378318747bac089)
+++ src/CodeGen/CodeGenerator.cc	(revision 356189ae6aa5eeb5c37aa8f28f8cff067fb2f919)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 14 15:40:00 2016
+// Last Modified On : Thu Apr 14 17:10:21 2016
 // Update Count     : 255
 //
@@ -238,10 +238,12 @@
 				  case OT_POSTFIXASSIGN:
 				  case OT_INFIXASSIGN:
+				  case OT_CTOR:
 					{
 						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 );
@@ -266,19 +268,27 @@
 
 				  case OT_CALL:
-					// there are no intrinsic definitions of the function call operator or constructors or destructors
+					// there are no intrinsic definitions of the function call operator
 					assert( false );
 					break;
 
 				  case OT_CTOR:
-				  // it's just an optimization to disallow this, so for now let it through
-				  // since it makes autogenerating constructors a lot easier
-  				varExpr->accept( *this );
-					output << "(";
-					genCommaList( applicationExpr->get_args().begin(), applicationExpr->get_args().end() );
-					output << ")";
-
-				  // intrinsic constructors should never be called directly - they should be transformed back into Initializer nodes
-				  // assert(false);
-				  break;
+					if ( applicationExpr->get_args().size() == 1 ) {
+						// the expression fed into a single parameter constructor may contain
+						// side effects - output as a void expression
+						output << "((void)(";
+						(*arg++)->accept( *this );
+						output << ")) /* ?{} */";
+					} else if ( applicationExpr->get_args().size() == 2 ) {
+						// intrinsic constructors are essentially bitwise assignment
+						output << "(";
+						(*arg++)->accept( *this );
+						output << opInfo.symbol;
+						(*arg)->accept( *this );
+						output << ") /* ?{} */";
+					} else {
+						// not constructors with 0 or more than 2 parameters
+						assert( false );
+					}
+					break;
 
 				  case OT_DTOR:
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision 70a06f62e367e9c06390ae334378318747bac089)
+++ src/CodeGen/OperatorTable.cc	(revision 356189ae6aa5eeb5c37aa8f28f8cff067fb2f919)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Tue Oct 06 15:26:34 2015
+// Last Modified On : Thu Apr 14 16:48:27 2016
 // Update Count     : 9
 //
@@ -21,5 +21,5 @@
 		const OperatorInfo tableValues[] = {
 			{	"?[?]",		"",		"_operator_index",				OT_INDEX			},
-			{	"?{}",		"",		"_constructor",					OT_CTOR				},
+			{	"?{}",		"=",		"_constructor",					OT_CTOR				},
 			{	"^?{}",		"",		"_destructor",					OT_DTOR				},
 			{	"?()",		"",		"_operator_call",				OT_CALL				},
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 70a06f62e367e9c06390ae334378318747bac089)
+++ src/SymTab/Autogen.cc	(revision 356189ae6aa5eeb5c37aa8f28f8cff067fb2f919)
@@ -10,5 +10,5 @@
 // Created On       : Thu Mar 03 15:45:56 2016
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 14 16:00:16 2016
+// Last Modified On : Thu Apr 14 16:58:35 2016
 // Update Count     : 1
 //
@@ -59,9 +59,13 @@
 	}
 
+	bool isUnnamedBitfield( ObjectDecl * obj ) {
+		return obj != NULL && obj->get_name() == "" && obj->get_bitfieldWidth() != NULL;
+	}
+
 	template< typename OutputIterator >
 	void makeScalarFunction( Expression *src, ObjectDecl *dstParam, DeclarationWithType *member, std::string fname, OutputIterator out ) {
 		ObjectDecl *obj = dynamic_cast<ObjectDecl *>( member );
 		// unnamed bit fields are not copied as they cannot be accessed
-		if ( obj != NULL && obj->get_name() == "" && obj->get_bitfieldWidth() != NULL ) return;
+		if ( isUnnamedBitfield( obj ) ) return;
 
 		// want to be able to generate assignment, ctor, and dtor generically,
@@ -321,4 +325,8 @@
 			DeclarationWithType * member = dynamic_cast<DeclarationWithType *>( *i );
 			assert( member );
+			if ( isUnnamedBitfield( dynamic_cast< ObjectDecl * > ( member ) ) ) {
+				// don't make a function whose parameter is an unnamed bitfield
+				continue;
+			}
 			memCtorType->get_parameters().push_back( new ObjectDecl( member->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, member->get_type()->clone(), 0 ) );
 			FunctionDecl * ctor = new FunctionDecl( "?{}", functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, memCtorType->clone(), new CompoundStmt( noLabels ), true, false );
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 70a06f62e367e9c06390ae334378318747bac089)
+++ src/libcfa/fstream.c	(revision 356189ae6aa5eeb5c37aa8f28f8cff067fb2f919)
@@ -5,10 +5,10 @@
 // file "LICENCE" distributed with Cforall.
 //
-// fstream.c -- 
+// fstream.c --
 //
 // Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr  6 17:55:27 2016
+// Last Modified By : Rob Schluntz
+// Last Modified On : Thu Apr 14 17:04:24 2016
 // Update Count     : 176
 //
@@ -75,5 +75,5 @@
 	if ( fclose( (FILE *)(os->file) ) == EOF ) {
 		perror( IO_MSG "close output" );
-	} // if 
+	} // if
 } // close
 
@@ -139,5 +139,5 @@
 	if ( fclose( (FILE *)(is->file) ) == EOF ) {
 		perror( IO_MSG "close input" );
-	} // if 
+	} // if
 } // close
 
@@ -154,5 +154,5 @@
 	return is;
 } // read
-  
+
 ifstream *ungetc( ifstream * is, char c ) {
 	if ( fail( is ) ) {
