Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/CodeGen/CodeGenerator.cc	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -83,5 +83,5 @@
 	}
 
-	CodeGenerator::CodeGenerator( std::ostream & os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) {}
+	CodeGenerator::CodeGenerator( std::ostream & os, bool mangle ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), mangle( mangle ) {}
 
 	CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
@@ -95,5 +95,6 @@
 	}
 
-	string mangleName( DeclarationWithType * decl ) {
+	string CodeGenerator::mangleName( DeclarationWithType * decl ) {
+		if ( ! mangle ) return decl->get_name();
 		if ( decl->get_mangleName() != "" ) {
 			// need to incorporate scope level in order to differentiate names for destructors
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/CodeGen/CodeGenerator.h	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -30,5 +30,5 @@
 		static int tabsize;
 
-		CodeGenerator( std::ostream &os );
+		CodeGenerator( std::ostream &os, bool mangle = true );
 		CodeGenerator( std::ostream &os, std::string, int indent = 0, bool infun = false );
 		CodeGenerator( std::ostream &os, char *, int indent = 0, bool infun = false );
@@ -114,4 +114,5 @@
 		std::ostream &output;
 		LabelPrinter printLabels;
+		bool mangle = true;
 
 		void printDesignators( std::list< Expression * > & );
@@ -119,4 +120,5 @@
 		void handleAggregate( AggregateDecl *aggDecl );
 		void handleTypedef( NamedTypeDecl *namedType );
+		std::string mangleName( DeclarationWithType * decl );
 	}; // CodeGenerator
 
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/CodeGen/GenType.cc	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// GenType.cc -- 
+// GenType.cc --
 //
 // Author           : Richard C. Bilson
@@ -28,8 +28,8 @@
 	class GenType : public Visitor {
 	  public:
-		GenType( const std::string &typeString );
+		GenType( const std::string &typeString, bool mangle = true );
 		std::string get_typeString() const { return typeString; }
 		void set_typeString( const std::string &newValue ) { typeString = newValue; }
-  
+
 		virtual void visit( FunctionType *funcType );
 		virtual void visit( VoidType *voidType );
@@ -42,19 +42,20 @@
 		virtual void visit( TypeInstType *typeInst );
 		virtual void visit( VarArgsType *varArgsType );
-  
+
 	  private:
 		void handleQualifiers( Type *type );
 		void genArray( const Type::Qualifiers &qualifiers, Type *base, Expression *dimension, bool isVarLen, bool isStatic );
-  
+
 		std::string typeString;
+		bool mangle = true;
 	};
 
-	std::string genType( Type *type, const std::string &baseString ) {
-		GenType gt( baseString );
+	std::string genType( Type *type, const std::string &baseString, bool mangle ) {
+		GenType gt( baseString, mangle );
 		type->accept( gt );
 		return gt.get_typeString();
 	}
 
-	GenType::GenType( const std::string &typeString ) : typeString( typeString ) {}
+	GenType::GenType( const std::string &typeString, bool mangle ) : typeString( typeString ), mangle( mangle ) {}
 
 	void GenType::visit( VoidType *voidType ) {
@@ -100,5 +101,5 @@
 		} // if
 		if ( dimension != 0 ) {
-			CodeGenerator cg( os );
+			CodeGenerator cg( os, mangle );
 			dimension->accept( cg );
 		} else if ( isVarLen ) {
@@ -109,5 +110,5 @@
 
 		typeString = os.str();
-  
+
 		base->accept( *this );
 	}
@@ -142,5 +143,5 @@
 			} // if
 		} // if
-  
+
 		/************* parameters ***************/
 
@@ -154,5 +155,5 @@
 			} // if
 		} else {
-			CodeGenerator cg( os );
+			CodeGenerator cg( os, mangle );
 			os << "(" ;
 
@@ -164,5 +165,5 @@
 			os << ")";
 		} // if
-  
+
 		typeString = os.str();
 
Index: src/CodeGen/GenType.h
===================================================================
--- src/CodeGen/GenType.h	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/CodeGen/GenType.h	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -21,5 +21,5 @@
 
 namespace CodeGen {
-	std::string genType( Type *type, const std::string &baseString );
+	std::string genType( Type *type, const std::string &baseString, bool mangle = true );
 } // namespace CodeGen
 
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/InitTweak/FixInit.cc	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -735,5 +735,5 @@
 			for ( DeclarationWithType * member : unhandled ) {
 				// emit a warning for each unhandled member
-				warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name() ), ", member ", member->get_name(), " may not have been ", isConstructor( funcDecl->get_name() ) ? "constructed" : "destructed" );
+				warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", member->get_name(), " may not have been ", isConstructor( funcDecl->get_name() ) ? "constructed" : "destructed" );
 			}
 
@@ -789,5 +789,5 @@
 		void WarnStructMembers::visit( MemberExpr * memberExpr ) {
 			if ( ! checkWarnings( function ) ) return;
-			if ( ! isConstructor( function->get_name() ) );
+			if ( ! isConstructor( function->get_name() ) ) return;
 
 			if ( ApplicationExpr * deref = dynamic_cast< ApplicationExpr * >( memberExpr->get_aggregate() ) ) {
@@ -797,5 +797,5 @@
 							if ( unhandled.count( memberExpr->get_member() ) ) {
 								// emit a warning because a member was used before it was constructed
-								warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name() ), ", member ", memberExpr->get_member()->get_name(), " used before being constructed" );
+								warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", memberExpr->get_member()->get_name(), " used before being constructed" );
 							}
 						}
Index: src/tests/.expect/ctorWarnings.txt
===================================================================
--- src/tests/.expect/ctorWarnings.txt	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
+++ src/tests/.expect/ctorWarnings.txt	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -0,0 +1,7 @@
+CFA Version 1.0.0 (debug)
+Warning: in void ?{}(struct A *a, int x), member z may not have been constructed
+Warning: in void ?{}(struct B *b), member a2 used before being constructed
+Warning: in void ?{}(struct B *b), member a2 may not have been constructed
+Warning: in void ?{}(struct B *b), member a3 may not have been constructed
+Warning: in void ^?{}(struct B *b), member a2 may not have been destructed
+Warning: in void ^?{}(struct B *b), member a3 may not have been destructed
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/tests/Makefile.am	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -62,2 +62,5 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+ctorWarnings: ctorWarnings.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o /dev/null 2> ${@}
+
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 0555f4bcb3f9d01c36c8df66c8417c065804176b)
+++ src/tests/Makefile.in	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -670,4 +670,7 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+ctorWarnings: ctorWarnings.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o /dev/null 2> ${@}
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
Index: src/tests/ctorWarnings.c
===================================================================
--- src/tests/ctorWarnings.c	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
+++ src/tests/ctorWarnings.c	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -0,0 +1,26 @@
+struct A {
+  int x, y, z;
+};
+
+void ?{}(A * a, int x) {
+  (&a->x){ x+999 };
+  a->y = 0; // not technically a constructor, but okay
+} // z never constructed
+
+struct B {
+  A a1, a2, a3;
+};
+
+void ?{}(B * b) {
+  b->a2 = (A) { 2 }; // a2 used before constructed
+  (&b->a1){ 1 };
+} // a2, a3 never constructed
+
+void ^?{}(B * b) {
+  b->a2 = (A) { 0 };
+  ^(&b->a1){};
+} // a2, a3 never destructed
+
+int main() {
+  B b;
+}
