Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 730591531f360bc32d76eb53bb048619f460a13c)
+++ src/Parser/ExpressionNode.cc	(revision 87b5bf0c846782d88723cd4784006befc064183c)
@@ -5,6 +5,6 @@
 // file "LICENCE" distributed with Cforall.
 //
-// ExpressionNode.cc -- 
-// 
+// ExpressionNode.cc --
+//
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:17:07 2015
@@ -12,5 +12,5 @@
 // Last Modified On : Mon Jun 13 14:46:17 2016
 // Update Count     : 307
-// 
+//
 
 #include <cassert>
@@ -231,5 +231,5 @@
 	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
 	value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
-	
+
 	delete newValue;									// allocated by lexer
 	return this;
@@ -347,5 +347,5 @@
 
 	if ( isArrayIndex ) {
-		// need to traverse entire structure and change any instances of 0 or 1 to 
+		// need to traverse entire structure and change any instances of 0 or 1 to
 		// ConstantExpr
 		DesignatorFixer fixer;
@@ -440,5 +440,5 @@
 }
 
-CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ) {
+CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
 	ParseNode *cur = other.arguments;
 	while ( cur ) {
@@ -608,5 +608,5 @@
 		{
 			assert( args.size() == 2 );
-			
+
 			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args() ) ) {
 				NameExpr *member = dynamic_cast<NameExpr *>( args.back() );
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 730591531f360bc32d76eb53bb048619f460a13c)
+++ src/Parser/ParseNode.h	(revision 87b5bf0c846782d88723cd4784006befc064183c)
@@ -28,4 +28,5 @@
 //#include "SynTree/Declaration.h"
 #include "Common/UniqueName.h"
+#include "SynTree/Label.h"
 
 class ExpressionNode;
@@ -284,8 +285,8 @@
 	virtual void printOneLine( std::ostream &, int indent = 0) const;
 
-	const std::list< std::string > &get_labels() const { return labels; };
+	const std::list< Label > &get_labels() const { return labels; };
 	void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
   private:
-	std::list< std::string > labels;
+	std::list< Label > labels;
 };
 
@@ -532,5 +533,5 @@
 	ExpressionNode *output, *input;
 	ConstantNode *clobber;
-	std::list<std::string> gotolabels;
+	std::list< Label > gotolabels;
 };
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 730591531f360bc32d76eb53bb048619f460a13c)
+++ src/Parser/StatementNode.cc	(revision 87b5bf0c846782d88723cd4784006befc064183c)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// StatementNode.cc -- 
+// StatementNode.cc --
 //
 // Author           : Rodolfo G. Esteves
@@ -27,6 +27,6 @@
 
 const char *StatementNode::StType[] = {
-	"Exp",   "If",       "Switch", "Case",    "Default",  "Choose",   "Fallthru", 
-	"While", "Do",       "For", 
+	"Exp",   "If",       "Switch", "Case",    "Default",  "Choose",   "Fallthru",
+	"While", "Do",       "For",
 	"Goto",  "Continue", "Break",  "Return",  "Throw",
 	"Try",   "Catch",    "Finally", "Asm",
@@ -62,5 +62,5 @@
 StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {
 	this->control = ( t == Default ) ? 0 : control;
-} 
+}
 
 StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {}
@@ -74,5 +74,5 @@
 
 StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) {
-	StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s ); 
+	StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s );
 	ret->addDeclaration( d );
 	ret->setCatchRest( catchRestP );
@@ -101,5 +101,5 @@
 StatementNode *StatementNode::add_label( const std::string *l ) {
 	if ( l != 0 ) {
-		labels.push_front( *l ); 
+		labels.push_front( *l );
 		delete l;
 	} // if
@@ -156,5 +156,5 @@
 			control->print( os, indent );
 			os << endl;
-		} else 
+		} else
 			os << string( indent, ' ' ) << "Null Statement" << endl;
 		break;
@@ -177,5 +177,5 @@
 		if ( block ) {
 			os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
-			block->printList( os, indent + 2 * ParseNode::indent_by );  
+			block->printList( os, indent + 2 * ParseNode::indent_by );
 		} // if
 		if ( target ) {
@@ -258,5 +258,5 @@
 	  case Fallthru:
 		return new FallthruStmt( labs );
-	  case Case: 
+	  case Case:
 		return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
 	  case Default:
@@ -394,5 +394,5 @@
 		os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl;
 		os << string( indent + 2 * ParseNode::indent_by, ' ' );
-		for ( std::list<std::string>::const_iterator i = gotolabels.begin();; ) {
+		for ( std::list<Label>::const_iterator i = gotolabels.begin();; ) {
 			os << *i;
 			i++;
@@ -426,5 +426,5 @@
 }
 
-Statement *NullStmtNode::build() const { 
+Statement *NullStmtNode::build() const {
 	return new NullStmt;
 }
