Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Declaration.h	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Jan 07 14:48:44 2016
-// Update Count     : 34
+// Last Modified On : Wed Jan 13 16:11:49 2016
+// Update Count     : 36
 //
 
@@ -91,6 +91,4 @@
 	Expression *get_bitfieldWidth() const { return bitfieldWidth; }
 	void set_bitfieldWidth( Expression *newValue ) { bitfieldWidth = newValue; }
-	ExprStmt * get_ctor() const { return ctor; }
-	void set_ctor( ExprStmt * newValue ) { ctor = newValue; }
 
 	virtual ObjectDecl *clone() const { return new ObjectDecl( *this ); }
@@ -103,5 +101,4 @@
 	Initializer *init;
 	Expression *bitfieldWidth;
-	ExprStmt * ctor;
 };
 
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Initializer.cc	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Jan 07 15:00:18 2016
-// Update Count     : 23
+// Last Modified On : Wed Jan 13 15:31:45 2016
+// Update Count     : 28
 //
 
@@ -79,4 +79,30 @@
 		(*i)->print( os, indent + 2 );
 }
+
+
+ConstructorInit::ConstructorInit( Expression * ctor, Initializer * init ) : Initializer( true ), ctor( ctor ), init( init ) {}
+ConstructorInit::~ConstructorInit() {
+	delete ctor;
+	delete init;
+}
+
+ConstructorInit *ConstructorInit::clone() const {
+	return new ConstructorInit( *this );
+}
+
+void ConstructorInit::print( std::ostream &os, int indent ) {
+	os << std::endl << std::string(indent, ' ') << "Constructor initializer: ";
+	if ( ctor ) {
+		os << " initially constructed with ";
+		ctor->print( os, indent+2 );
+	} // if
+
+	if ( init ) {
+		os << " with fallback C-style initializer: ";
+		init->print( os, indent+2 );
+	}
+}
+
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Initializer.h	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Jan 07 13:33:20 2016
-// Update Count     : 5
+// Last Modified On : Wed Jan 13 15:29:53 2016
+// Update Count     : 17
 //
 
@@ -103,4 +103,28 @@
 };
 
+// ConstructorInit represents an initializer that is either a constructor expression or
+// a C-style initializer.
+class ConstructorInit : public Initializer {
+  public:
+	ConstructorInit( Expression * ctor, Initializer * init );
+	virtual ~ConstructorInit();
+
+	void set_ctor( Expression * newValue ) { ctor = newValue; }
+	Expression * get_ctor() const { return ctor; }
+	void set_init( Initializer * newValue ) { init = newValue; }
+	Initializer * get_init() const { return init; }
+
+	virtual ConstructorInit *clone() const;
+	virtual void accept( Visitor &v ) { v.visit( this ); }
+	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual void print( std::ostream &os, int indent = 0 );
+
+  private:
+	Expression * ctor;
+	// C-style initializer made up of SingleInit and ListInit nodes to use as a fallback
+	// if an appropriate constructor definition is not found by the resolver
+	Initializer * init;
+};
+
 #endif // INITIALIZER_H
 
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Mutator.cc	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Mutator.cc -- 
+// Mutator.cc --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 25 19:21:33 2015
-// Update Count     : 11
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jan 13 15:32:29 2016
+// Update Count     : 15
 //
 
@@ -419,4 +419,10 @@
 }
 
+Initializer *Mutator::mutate( ConstructorInit *ctorInit ) {
+	ctorInit->set_ctor( maybeMutate( ctorInit->get_ctor(), *this ) );
+	ctorInit->set_init( maybeMutate( ctorInit->get_init(), *this ) );
+	return ctorInit;
+}
+
 Subrange *Mutator::mutate( Subrange *subrange ) {
 	return subrange;
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Mutator.h	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Mutator.h -- 
+// Mutator.h --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 19 22:26:16 2015
-// Update Count     : 8
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jan 13 15:24:26 2016
+// Update Count     : 9
 //
 #include <cassert>
@@ -62,5 +62,5 @@
 	virtual Expression* mutate( MemberExpr *memberExpr );
 	virtual Expression* mutate( VariableExpr *variableExpr );
-	virtual Expression* mutate( ConstantExpr *constantExpr ); 
+	virtual Expression* mutate( ConstantExpr *constantExpr );
 	virtual Expression* mutate( SizeofExpr *sizeofExpr );
 	virtual Expression* mutate( AlignofExpr *alignofExpr );
@@ -91,4 +91,5 @@
 	virtual Initializer* mutate( SingleInit *singleInit );
 	virtual Initializer* mutate( ListInit *listInit );
+	virtual Initializer* mutate( ConstructorInit *ctorInit );
 
 	virtual Subrange *mutate( Subrange *subrange );
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/ObjectDecl.cc	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Fri Jan 08 15:29:10 2016
-// Update Count     : 27
+// Last Modified On : Wed Jan 13 16:11:19 2016
+// Update Count     : 29
 //
 
@@ -25,9 +25,8 @@
 	set_isInline( isInline );
 	set_isNoreturn( isNoreturn );
-	set_ctor( NULL );
 }
 
 ObjectDecl::ObjectDecl( const ObjectDecl &other )
-	: Parent( other ), type( maybeClone( other.type ) ), init( maybeClone( other.init ) ), bitfieldWidth( maybeClone( other.bitfieldWidth ) ), ctor( maybeClone( other.ctor ) ) {
+	: Parent( other ), type( maybeClone( other.type ) ), init( maybeClone( other.init ) ), bitfieldWidth( maybeClone( other.bitfieldWidth ) ) {
 }
 
@@ -36,5 +35,4 @@
 	delete init;
 	delete bitfieldWidth;
-	delete ctor;
 }
 
@@ -67,9 +65,4 @@
 		os << " with bitfield width ";
 		bitfieldWidth->print( os );
-	} // if
-
-	if ( ctor ) {
-		os << " initially constructed with ";
-		ctor->print( os, indent );
 	} // if
 }
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/SynTree.h	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// SynTree.h -- 
+// SynTree.h --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 23 23:25:04 2015
-// Update Count     : 3
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jan 13 15:28:41 2016
+// Update Count     : 4
 //
 
@@ -99,4 +99,5 @@
 class SingleInit;
 class ListInit;
+class ConstructorInit;
 
 class Subrange;
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Visitor.cc	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Visitor.cc -- 
+// Visitor.cc --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 24 16:11:05 2015
-// Update Count     : 15
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jan 13 15:27:23 2016
+// Update Count     : 18
 //
 
@@ -353,4 +353,9 @@
 }
 
+void Visitor::visit( ConstructorInit *ctorInit ) {
+	maybeAccept( ctorInit->get_ctor(), *this );
+	maybeAccept( ctorInit->get_init(), *this );
+}
+
 void Visitor::visit( Subrange *subrange ) {}
 
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 974906e251002ce59f471dfb4e67195b82506d1c)
+++ src/SynTree/Visitor.h	(revision 71f4e4f59e25d1ae31af19227f4d2a8a9365bac7)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Visitor.h -- 
+// Visitor.h --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 23 23:22:23 2015
-// Update Count     : 4
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jan 13 15:24:05 2016
+// Update Count     : 5
 //
 
@@ -62,5 +62,5 @@
 	virtual void visit( MemberExpr *memberExpr );
 	virtual void visit( VariableExpr *variableExpr );
-	virtual void visit( ConstantExpr *constantExpr ); 
+	virtual void visit( ConstantExpr *constantExpr );
 	virtual void visit( SizeofExpr *sizeofExpr );
 	virtual void visit( AlignofExpr *alignofExpr );
@@ -91,4 +91,5 @@
 	virtual void visit( SingleInit *singleInit );
 	virtual void visit( ListInit *listInit );
+	virtual void visit( ConstructorInit *ctorInit );
 
 	virtual void visit( Subrange *subrange );
