Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision dadc1b5f06cc67e49418f26b9adb6ce3fa51ab34)
+++ src/Parser/DeclarationNode.cc	(revision f39096c3636af52a8eb6491cdeab71fff3f2ea8c)
@@ -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;
@@ -804,4 +804,5 @@
 					*out++ = decl;
 				} // if
+				delete extr;
 			} // if
 			Declaration *decl = cur->build();
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision dadc1b5f06cc67e49418f26b9adb6ce3fa51ab34)
+++ src/Parser/ParseNode.h	(revision f39096c3636af52a8eb6491cdeab71fff3f2ea8c)
@@ -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/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision dadc1b5f06cc67e49418f26b9adb6ce3fa51ab34)
+++ src/Parser/TypeData.cc	(revision f39096c3636af52a8eb6491cdeab71fff3f2ea8c)
@@ -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;
