Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/Parser/DeclarationNode.cc	(revision 4e2b97109c2f3a8707de4cdb9e9d0a4fb27b63f1)
@@ -50,7 +50,7 @@
 	newnode->isInline = isInline;
 	newnode->isNoreturn = isNoreturn;
-	newnode->bitfieldWidth = bitfieldWidth;
+	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
 	newnode->hasEllipsis = hasEllipsis;
-	newnode->initializer = initializer;
+	newnode->initializer = maybeClone( initializer );
 	newnode->set_next( maybeClone( get_next() ) );
 	newnode->linkage = linkage;
@@ -823,4 +823,5 @@
 					*out++ = decl;
 				} // if
+				delete extr;
 			} // if
 			Declaration *decl = cur->build();
Index: src/Parser/LinkageSpec.cc
===================================================================
--- src/Parser/LinkageSpec.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/Parser/LinkageSpec.cc	(revision 4e2b97109c2f3a8707de4cdb9e9d0a4fb27b63f1)
@@ -5,6 +5,6 @@
 // file "LICENCE" distributed with Cforall.
 //
-// LinkageSpec.cc -- 
-// 
+// LinkageSpec.cc --
+//
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:22:09 2015
@@ -12,5 +12,5 @@
 // Last Modified On : Sun Aug 21 12:32:53 2016
 // Update Count     : 17
-// 
+//
 
 #include <string>
@@ -32,4 +32,5 @@
 
 std::string LinkageSpec::toString( LinkageSpec::Spec linkage ) {
+	assert( linkage >= 0 && linkage < LinkageSpec::NoOfSpecs );
 	static const char *linkageKinds[LinkageSpec::NoOfSpecs] = {
 		"intrinsic", "Cforall", "C", "automatically generated", "compiler built-in",
@@ -39,7 +40,8 @@
 
 bool LinkageSpec::isDecoratable( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
 	static bool decoratable[LinkageSpec::NoOfSpecs] = {
 		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
-			true,		true,		false,	true,		false, 
+			true,		true,		false,	true,		false,
 	};
 	return decoratable[spec];
@@ -47,7 +49,8 @@
 
 bool LinkageSpec::isGeneratable( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
 	static bool generatable[LinkageSpec::NoOfSpecs] = {
 		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
-			true,		true,		true,	true,		false, 
+			true,		true,		true,	true,		false,
 	};
 	return generatable[spec];
@@ -55,7 +58,8 @@
 
 bool LinkageSpec::isOverridable( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
 	static bool overridable[LinkageSpec::NoOfSpecs] = {
 		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
-			true,		false,		false,	true,		false, 
+			true,		false,		false,	true,		false,
 	};
 	return overridable[spec];
@@ -63,7 +67,8 @@
 
 bool LinkageSpec::isBuiltin( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
 	static bool builtin[LinkageSpec::NoOfSpecs] = {
 		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
-			true,		false,		false,	false,		true, 
+			true,		false,		false,	false,		true,
 	};
 	return builtin[spec];
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/Parser/ParseNode.h	(revision 4e2b97109c2f3a8707de4cdb9e9d0a4fb27b63f1)
@@ -109,5 +109,5 @@
 	ExpressionNode( const ExpressionNode &other );
 	virtual ~ExpressionNode() {}
-	virtual ExpressionNode *clone() const { assert( false ); return nullptr; }
+	virtual ExpressionNode *clone() const { return expr ? new ExpressionNode( expr->clone() ) : nullptr; }
 
 	bool get_extension() const { return extension; }
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/Parser/StatementNode.cc	(revision 4e2b97109c2f3a8707de4cdb9e9d0a4fb27b63f1)
@@ -44,5 +44,5 @@
 			agg = decl;
 		} // if
-		stmt.reset( new DeclStmt( noLabels, maybeBuild< Declaration >(agg) ) );
+		stmt.reset( new DeclStmt( noLabels, maybeMoveBuild< Declaration >(agg) ) );
 	} else {
 		assert( false );
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/Parser/TypeData.cc	(revision 4e2b97109c2f3a8707de4cdb9e9d0a4fb27b63f1)
@@ -182,5 +182,5 @@
 		break;
 	  case Array:
-		newtype->array->dimension = array->dimension;
+		newtype->array->dimension = maybeClone( array->dimension );
 		newtype->array->isVarLen = array->isVarLen;
 		newtype->array->isStatic = array->isStatic;
