Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 66b6f662a2e12cde4f4840dee5965d87868c80c2)
+++ src/Parser/DeclarationNode.cc	(revision 028e512be20300213fad0a5edd77bf82e1312b98)
@@ -1053,5 +1053,4 @@
 					unionDecl = dynamic_cast<ast::UnionDecl *>( decl );
 
-					decl->location = cur->location;
 					*out++ = decl;
 
@@ -1121,5 +1120,4 @@
 						} // if
 					} // if
-					decl->location = cur->location;
 					*out++ = decl;
 				} // if
Index: src/Parser/DeclarationNode.h
===================================================================
--- src/Parser/DeclarationNode.h	(revision 66b6f662a2e12cde4f4840dee5965d87868c80c2)
+++ src/Parser/DeclarationNode.h	(revision 028e512be20300213fad0a5edd77bf82e1312b98)
@@ -177,4 +177,12 @@
 }
 
+template<typename NodeType>
+NodeType * strict_next( NodeType * node ) {
+	ParseNode * next = node->get_next();
+	if ( nullptr == next ) return nullptr;
+	if ( NodeType * ret = dynamic_cast<NodeType *>( next ) ) return ret;
+	SemanticError( next->location, "internal error, non-homogeneous nodes founds in buildList processing." );
+}
+
 // This generic buildList is here along side its overloads.
 template<typename AstType, typename NodeType,
@@ -184,24 +192,14 @@
 	SemanticErrorException errors;
 	std::back_insert_iterator<Container<ast::ptr<AstType>, Args...>> out( output );
-	NodeType * cur = firstNode;
-
-	while ( cur ) {
+
+	for ( NodeType * cur = firstNode ; cur ; cur = strict_next( cur ) ) {
 		try {
-			if ( auto result = dynamic_cast<AstType *>( maybeBuild( cur ) ) ) {
-				*out++ = result;
-			} else {
-				assertf(false, __PRETTY_FUNCTION__ );
-				SemanticError( cur->location, "type specifier declaration in forall clause is currently unimplemented." );
-			} // if
-		} catch( SemanticErrorException & e ) {
+			AstType * node = dynamic_cast<AstType *>( maybeBuild( cur ) );
+			assertf( node, "buildList: Did not build node of correct type." );
+			*out++ = node;
+		} catch ( SemanticErrorException & e ) {
 			errors.append( e );
 		} // try
-		ParseNode * temp = cur->get_next();
-		// Should not return nullptr, then it is non-homogeneous:
-		cur = dynamic_cast<NodeType *>( temp );
-		if ( !cur && temp ) {
-			SemanticError( temp->location, "internal error, non-homogeneous nodes founds in buildList processing." );
-		} // if
-	} // while
+	} // for
 	if ( ! errors.isEmpty() ) {
 		throw errors;
