Index: src/CodeTools/DeclStats.cc
===================================================================
--- src/CodeTools/DeclStats.cc	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
+++ src/CodeTools/DeclStats.cc	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
@@ -0,0 +1,32 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// DeclStats.cc --
+//
+// Author           : Aaron Moss
+// Created On       : Wed Jan 31 16:40:00 2016
+// Last Modified By : Aaron Moss
+// Last Modified On : Wed Jan 31 16:40:00 2016
+// Update Count     : 1
+//
+
+#include "DeclStats.h"
+
+#include <iostream>
+
+namespace CodeTools {
+
+	void printDeclStats( std::list< Declaration * > &translationUnit ) {
+		std::cout << "DeclStats not yet implemented." << std::endl;
+	}
+	
+} // namespace CodeTools
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/CodeTools/DeclStats.h
===================================================================
--- src/CodeTools/DeclStats.h	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
+++ src/CodeTools/DeclStats.h	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
@@ -0,0 +1,33 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// DeclStats.h -- Prints summary information about a translation unit's declarations.
+//
+// Author           : Aaron Moss
+// Created On       : Wed Jan 31 16:40:00 2016
+// Last Modified By : Aaron Moss
+// Last Modified On : Wed Jan 31 16:40:00 2016
+// Update Count     : 1
+//
+
+#ifndef DECLSTATS_H
+#define DECLSTATS_H
+
+#include "SynTree/SynTree.h"
+
+namespace CodeTools {
+
+	void printDeclStats( std::list< Declaration * > &translationUnit );
+	
+}  // namespace CodeTools
+
+#endif // DECLSTATS_H
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/CodeTools/module.mk
===================================================================
--- src/CodeTools/module.mk	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
+++ src/CodeTools/module.mk	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
@@ -0,0 +1,17 @@
+######################### -*- Mode: Makefile-Gmake -*- ########################
+##
+## Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+##
+## The contents of this file are covered under the licence agreement in the
+## file "LICENCE" distributed with Cforall.
+##
+## module.mk --
+##
+## Author           : Richard C. Bilson
+## Created On       : Mon Jun  1 17:49:17 2015
+## Last Modified By : Aaron Moss
+## Last Modified On : Wed Jan 31 16:36:00 2017
+## Update Count     : 2
+###############################################################################
+
+SRC += CodeTools/DeclStats.cc
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision de90452106c3d5de84ac42272ea726a798b31586)
+++ src/Makefile.am	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
@@ -26,4 +26,5 @@
 
 include CodeGen/module.mk
+include CodeTools/module.mk
 include Common/module.mk
 include ControlStruct/module.mk
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision de90452106c3d5de84ac42272ea726a798b31586)
+++ src/Makefile.in	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
@@ -24,4 +24,7 @@
 #SRC +=  ArgTweak/Rewriter.cc \
 #	ArgTweak/Mutate.cc
+
+######################### -*- Mode: Makefile-Gmake -*- ########################
+###############################################################################
 
 ######################### -*- Mode: Makefile-Gmake -*- ########################
@@ -71,5 +74,6 @@
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk \
+DIST_COMMON = $(srcdir)/CodeGen/module.mk \
+	$(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk \
 	$(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \
 	$(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.am \
@@ -99,4 +103,5 @@
 	CodeGen/driver_cfa_cpp-FixMain.$(OBJEXT) \
 	CodeGen/driver_cfa_cpp-OperatorTable.$(OBJEXT) \
+	CodeTools/driver_cfa_cpp-DeclStats.$(OBJEXT) \
 	Common/driver_cfa_cpp-SemanticError.$(OBJEXT) \
 	Common/driver_cfa_cpp-UniqueName.$(OBJEXT) \
@@ -376,6 +381,7 @@
 	CodeGen/CodeGenerator.cc CodeGen/GenType.cc \
 	CodeGen/FixNames.cc CodeGen/FixMain.cc \
-	CodeGen/OperatorTable.cc Common/SemanticError.cc \
-	Common/UniqueName.cc Common/DebugMalloc.cc Common/Assert.cc \
+	CodeGen/OperatorTable.cc CodeTools/DeclStats.cc \
+	Common/SemanticError.cc Common/UniqueName.cc \
+	Common/DebugMalloc.cc Common/Assert.cc \
 	ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \
 	ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \
@@ -440,5 +446,5 @@
 .SUFFIXES:
 .SUFFIXES: .cc .ll .o .obj .yy
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -461,5 +467,5 @@
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
-$(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk:
+$(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -526,4 +532,12 @@
 CodeGen/driver_cfa_cpp-OperatorTable.$(OBJEXT):  \
 	CodeGen/$(am__dirstamp) CodeGen/$(DEPDIR)/$(am__dirstamp)
+CodeTools/$(am__dirstamp):
+	@$(MKDIR_P) CodeTools
+	@: > CodeTools/$(am__dirstamp)
+CodeTools/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) CodeTools/$(DEPDIR)
+	@: > CodeTools/$(DEPDIR)/$(am__dirstamp)
+CodeTools/driver_cfa_cpp-DeclStats.$(OBJEXT):  \
+	CodeTools/$(am__dirstamp) CodeTools/$(DEPDIR)/$(am__dirstamp)
 Common/$(am__dirstamp):
 	@$(MKDIR_P) Common
@@ -813,4 +827,5 @@
 	-rm -f CodeGen/driver_cfa_cpp-Generate.$(OBJEXT)
 	-rm -f CodeGen/driver_cfa_cpp-OperatorTable.$(OBJEXT)
+	-rm -f CodeTools/driver_cfa_cpp-DeclStats.$(OBJEXT)
 	-rm -f Common/driver_cfa_cpp-Assert.$(OBJEXT)
 	-rm -f Common/driver_cfa_cpp-DebugMalloc.$(OBJEXT)
@@ -922,4 +937,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/driver_cfa_cpp-Generate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/driver_cfa_cpp-OperatorTable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-Assert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-DebugMalloc.Po@am__quote@
@@ -1148,4 +1164,18 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o CodeGen/driver_cfa_cpp-OperatorTable.obj `if test -f 'CodeGen/OperatorTable.cc'; then $(CYGPATH_W) 'CodeGen/OperatorTable.cc'; else $(CYGPATH_W) '$(srcdir)/CodeGen/OperatorTable.cc'; fi`
 
+CodeTools/driver_cfa_cpp-DeclStats.o: CodeTools/DeclStats.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT CodeTools/driver_cfa_cpp-DeclStats.o -MD -MP -MF CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Tpo -c -o CodeTools/driver_cfa_cpp-DeclStats.o `test -f 'CodeTools/DeclStats.cc' || echo '$(srcdir)/'`CodeTools/DeclStats.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Tpo CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='CodeTools/DeclStats.cc' object='CodeTools/driver_cfa_cpp-DeclStats.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o CodeTools/driver_cfa_cpp-DeclStats.o `test -f 'CodeTools/DeclStats.cc' || echo '$(srcdir)/'`CodeTools/DeclStats.cc
+
+CodeTools/driver_cfa_cpp-DeclStats.obj: CodeTools/DeclStats.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT CodeTools/driver_cfa_cpp-DeclStats.obj -MD -MP -MF CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Tpo -c -o CodeTools/driver_cfa_cpp-DeclStats.obj `if test -f 'CodeTools/DeclStats.cc'; then $(CYGPATH_W) 'CodeTools/DeclStats.cc'; else $(CYGPATH_W) '$(srcdir)/CodeTools/DeclStats.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Tpo CodeTools/$(DEPDIR)/driver_cfa_cpp-DeclStats.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='CodeTools/DeclStats.cc' object='CodeTools/driver_cfa_cpp-DeclStats.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o CodeTools/driver_cfa_cpp-DeclStats.obj `if test -f 'CodeTools/DeclStats.cc'; then $(CYGPATH_W) 'CodeTools/DeclStats.cc'; else $(CYGPATH_W) '$(srcdir)/CodeTools/DeclStats.cc'; fi`
+
 Common/driver_cfa_cpp-SemanticError.o: Common/SemanticError.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Common/driver_cfa_cpp-SemanticError.o -MD -MP -MF Common/$(DEPDIR)/driver_cfa_cpp-SemanticError.Tpo -c -o Common/driver_cfa_cpp-SemanticError.o `test -f 'Common/SemanticError.cc' || echo '$(srcdir)/'`Common/SemanticError.cc
@@ -2631,4 +2661,6 @@
 	-rm -f CodeGen/$(DEPDIR)/$(am__dirstamp)
 	-rm -f CodeGen/$(am__dirstamp)
+	-rm -f CodeTools/$(DEPDIR)/$(am__dirstamp)
+	-rm -f CodeTools/$(am__dirstamp)
 	-rm -f Common/$(DEPDIR)/$(am__dirstamp)
 	-rm -f Common/$(am__dirstamp)
@@ -2664,5 +2696,5 @@
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
@@ -2710,5 +2742,5 @@
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
Index: src/main.cc
===================================================================
--- src/main.cc	(revision de90452106c3d5de84ac42272ea726a798b31586)
+++ src/main.cc	(revision 511aa69a6e75610ea62c64c7c06b12aa24bbc937)
@@ -35,4 +35,5 @@
 #include "CodeGen/FixNames.h"
 #include "CodeGen/FixMain.h"
+#include "CodeTools/DeclStats.h"
 #include "ControlStruct/Mutate.h"
 #include "SymTab/Validate.h"
@@ -61,4 +62,5 @@
 	bboxp = false,
 	ctorinitp = false,
+	declstatsp = false,
 	exprp = false,
 	expraltp = false,
@@ -212,4 +214,10 @@
 		} // if
 
+		if ( declstatsp ) {
+			CodeTools::printDeclStats( translationUnit );
+			deleteAll( translationUnit );
+			return 0;
+		}
+
 		// add the assignment statement after the initialization of a type parameter
 		OPTPRINT( "validate" )
@@ -339,5 +347,5 @@
 
 void parse_cmdline( int argc, char * argv[], const char *& filename ) {
-	enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
+	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
 
 	static struct option long_opts[] = {
@@ -346,4 +354,5 @@
 		{ "before-resolver", no_argument, 0, Bresolver },
 		{ "ctorinitfix", no_argument, 0, CtorInitFix },
+		{ "decl-stats", no_argument, 0, DeclStats },
 		{ "expr", no_argument, 0, Expr },
 		{ "expralt", no_argument, 0, ExprAlt },
@@ -365,5 +374,5 @@
 
 	int c;
-	while ( (c = getopt_long( argc, argv, "abBcefglmnpqrstTvyzD:F:", long_opts, &long_index )) != -1 ) {
+	while ( (c = getopt_long( argc, argv, "abBcdefglmnpqrstTvyzD:F:", long_opts, &long_index )) != -1 ) {
 		switch ( c ) {
 		  case Ast:
@@ -381,4 +390,8 @@
 		  case 'c':
 			ctorinitp = true;
+			break;
+		  case DeclStats:
+		  case 'd':
+		    declstatsp = true;
 			break;
 		  case Expr:
