Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision ebf5689b72f9bf111b7bb9c1c8b3c47899528e7f)
+++ src/SymTab/Validate.cc	(revision 52e2e3f68c44c96cbeb1faec1ab3dd555dbad896)
@@ -483,8 +483,10 @@
 
 	void ReturnChecker::visit( ReturnStmt * returnStmt ) {
+		// Previously this also checked for the existence of an expr paired with no return values on
+		// the  function return type. This is incorrect, since you can have an expression attached to
+		// a return statement in a void-returning function in C. The expression is treated as if it
+		// were cast to void.
 		if ( returnStmt->get_expr() == NULL && returnVals.size() != 0 ) {
 			throw SemanticError( "Non-void function returns no values: " , returnStmt );
-		} else if ( returnStmt->get_expr() != NULL && returnVals.size() == 0 ) {
-			throw SemanticError( "void function returns values: " , returnStmt );
 		}
 	}
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision ebf5689b72f9bf111b7bb9c1c8b3c47899528e7f)
+++ src/SynTree/Statement.cc	(revision 52e2e3f68c44c96cbeb1faec1ab3dd555dbad896)
@@ -399,8 +399,9 @@
 }
 
-ImplicitCtorDtorStmt::ImplicitCtorDtorStmt( const ImplicitCtorDtorStmt & other ) : Statement( other ), callStmt( other.callStmt ) {
+ImplicitCtorDtorStmt::ImplicitCtorDtorStmt( const ImplicitCtorDtorStmt & other ) : Statement( other ), callStmt( maybeClone( other.callStmt ) ) {
 }
 
 ImplicitCtorDtorStmt::~ImplicitCtorDtorStmt() {
+	delete callStmt;
 }
 
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision ebf5689b72f9bf111b7bb9c1c8b3c47899528e7f)
+++ src/tests/Makefile.am	(revision 52e2e3f68c44c96cbeb1faec1ab3dd555dbad896)
@@ -20,5 +20,5 @@
 
 .PHONY : list
-EXTRA_PROGRAMS = fstream_test vector_test avl_test Constant0-1DP Constant0-1ND Constant0-1NDDP # build but do not install
+EXTRA_PROGRAMS = fstream_test vector_test avl_test constant0-1DP constant0-1ND constant0-1NDDP # build but do not install
 
 fstream_test_SOURCES = fstream_test.c
@@ -27,5 +27,5 @@
 
 all-local :
-	python test.py vector_test avl_test Operators NumericConstants Expression Enum AsmName Array Typeof Cast
+	python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast
 
 all-tests :
@@ -38,10 +38,10 @@
 	python test.py --list
 
-Constant0-1DP : Constant0-1.c
+constant0-1DP : constant0-1.c
 	${CC} ${CFLAGS} -DDUPS ${<} -o ${@}
 
-Constant0-1ND : Constant0-1.c
+constant0-1ND : constant0-1.c
 	${CC} ${CFLAGS} -DNEWDECL ${<} -o ${@}
 
-Constant0-1NDDP : Constant0-1.c
+constant0-1NDDP : constant0-1.c
 	${CC} ${CFLAGS} -DNEWDECL -DDUPS ${<} -o ${@}
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision ebf5689b72f9bf111b7bb9c1c8b3c47899528e7f)
+++ src/tests/Makefile.in	(revision 52e2e3f68c44c96cbeb1faec1ab3dd555dbad896)
@@ -36,6 +36,6 @@
 POST_UNINSTALL = :
 EXTRA_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \
-	avl_test$(EXEEXT) Constant0-1DP$(EXEEXT) \
-	Constant0-1ND$(EXEEXT) Constant0-1NDDP$(EXEEXT)
+	avl_test$(EXEEXT) constant0-1DP$(EXEEXT) \
+	constant0-1ND$(EXEEXT) constant0-1NDDP$(EXEEXT)
 subdir = src/tests
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
@@ -48,13 +48,4 @@
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-Constant0_1DP_SOURCES = Constant0-1DP.c
-Constant0_1DP_OBJECTS = Constant0-1DP.$(OBJEXT)
-Constant0_1DP_LDADD = $(LDADD)
-Constant0_1ND_SOURCES = Constant0-1ND.c
-Constant0_1ND_OBJECTS = Constant0-1ND.$(OBJEXT)
-Constant0_1ND_LDADD = $(LDADD)
-Constant0_1NDDP_SOURCES = Constant0-1NDDP.c
-Constant0_1NDDP_OBJECTS = Constant0-1NDDP.$(OBJEXT)
-Constant0_1NDDP_LDADD = $(LDADD)
 am_avl_test_OBJECTS = avl_test.$(OBJEXT) avl0.$(OBJEXT) avl1.$(OBJEXT) \
 	avl2.$(OBJEXT) avl3.$(OBJEXT) avl4.$(OBJEXT) \
@@ -62,4 +53,13 @@
 avl_test_OBJECTS = $(am_avl_test_OBJECTS)
 avl_test_LDADD = $(LDADD)
+constant0_1DP_SOURCES = constant0-1DP.c
+constant0_1DP_OBJECTS = constant0-1DP.$(OBJEXT)
+constant0_1DP_LDADD = $(LDADD)
+constant0_1ND_SOURCES = constant0-1ND.c
+constant0_1ND_OBJECTS = constant0-1ND.$(OBJEXT)
+constant0_1ND_LDADD = $(LDADD)
+constant0_1NDDP_SOURCES = constant0-1NDDP.c
+constant0_1NDDP_OBJECTS = constant0-1NDDP.$(OBJEXT)
+constant0_1NDDP_LDADD = $(LDADD)
 am_fstream_test_OBJECTS = fstream_test.$(OBJEXT)
 fstream_test_OBJECTS = $(am_fstream_test_OBJECTS)
@@ -92,9 +92,9 @@
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = Constant0-1DP.c Constant0-1ND.c Constant0-1NDDP.c \
-	$(avl_test_SOURCES) $(fstream_test_SOURCES) \
+SOURCES = $(avl_test_SOURCES) constant0-1DP.c constant0-1ND.c \
+	constant0-1NDDP.c $(fstream_test_SOURCES) \
 	$(vector_test_SOURCES)
-DIST_SOURCES = Constant0-1DP.c Constant0-1ND.c Constant0-1NDDP.c \
-	$(avl_test_SOURCES) $(fstream_test_SOURCES) \
+DIST_SOURCES = $(avl_test_SOURCES) constant0-1DP.c constant0-1ND.c \
+	constant0-1NDDP.c $(fstream_test_SOURCES) \
 	$(vector_test_SOURCES)
 ETAGS = etags
@@ -261,7 +261,4 @@
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Constant0-1DP.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Constant0-1ND.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Constant0-1NDDP.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl-private.Po@am__quote@
@@ -272,4 +269,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl4.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl_test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constant0-1DP.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constant0-1ND.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constant0-1NDDP.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream_test.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_int.Po@am__quote@
@@ -634,5 +634,5 @@
 
 all-local :
-	python test.py vector_test avl_test Operators NumericConstants Expression Enum AsmName Array Typeof Cast
+	python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast
 
 all-tests :
@@ -645,11 +645,11 @@
 	python test.py --list
 
-Constant0-1DP : Constant0-1.c
+constant0-1DP : constant0-1.c
 	${CC} ${CFLAGS} -DDUPS ${<} -o ${@}
 
-Constant0-1ND : Constant0-1.c
+constant0-1ND : constant0-1.c
 	${CC} ${CFLAGS} -DNEWDECL ${<} -o ${@}
 
-Constant0-1NDDP : Constant0-1.c
+constant0-1NDDP : constant0-1.c
 	${CC} ${CFLAGS} -DNEWDECL -DDUPS ${<} -o ${@}
 
