Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 9a705dc89354e53ad54ff8ee372e6cc20c210e1e)
+++ src/SynTree/Expression.cc	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
@@ -52,5 +52,4 @@
 Expression::~Expression() {
 	delete env;
-	delete result;
 }
 
@@ -74,6 +73,4 @@
 ConstantExpr::ConstantExpr( const ConstantExpr &other) : Expression( other ), constant( other.constant ) {
 }
-
-ConstantExpr::~ConstantExpr() {}
 
 void ConstantExpr::print( std::ostream &os, Indenter indent ) const {
@@ -120,8 +117,4 @@
 }
 
-VariableExpr::~VariableExpr() {
-	// don't delete the declaration, since it points somewhere else in the tree
-}
-
 VariableExpr * VariableExpr::functionPointer( FunctionDecl * func ) {
 	VariableExpr * funcExpr = new VariableExpr( func );
@@ -150,9 +143,4 @@
 }
 
-SizeofExpr::~SizeofExpr() {
-	delete expr;
-	delete type;
-}
-
 void SizeofExpr::print( std::ostream &os, Indenter indent) const {
 	os << "Sizeof Expression on: ";
@@ -176,9 +164,4 @@
 }
 
-AlignofExpr::~AlignofExpr() {
-	delete expr;
-	delete type;
-}
-
 void AlignofExpr::print( std::ostream &os, Indenter indent) const {
 	os << "Alignof Expression on: ";
@@ -196,8 +179,4 @@
 UntypedOffsetofExpr::UntypedOffsetofExpr( const UntypedOffsetofExpr &other ) :
 	Expression( other ), type( maybeClone( other.type ) ), member( other.member ) {}
-
-UntypedOffsetofExpr::~UntypedOffsetofExpr() {
-	delete type;
-}
 
 void UntypedOffsetofExpr::print( std::ostream &os, Indenter indent) const {
@@ -217,8 +196,4 @@
 	Expression( other ), type( maybeClone( other.type ) ), member( other.member ) {}
 
-OffsetofExpr::~OffsetofExpr() {
-	delete type;
-}
-
 void OffsetofExpr::print( std::ostream &os, Indenter indent) const {
 	os << "Offsetof Expression on member " << member->name << " of ";
@@ -234,6 +209,4 @@
 OffsetPackExpr::OffsetPackExpr( const OffsetPackExpr &other ) : Expression( other ), type( maybeClone( other.type ) ) {}
 
-OffsetPackExpr::~OffsetPackExpr() { delete type; }
-
 void OffsetPackExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Offset pack expression on ";
@@ -252,10 +225,4 @@
 AttrExpr::AttrExpr( const AttrExpr &other ) :
 		Expression( other ), attr( maybeClone( other.attr ) ), expr( maybeClone( other.expr ) ), type( maybeClone( other.type ) ), isType( other.isType ) {
-}
-
-AttrExpr::~AttrExpr() {
-	delete attr;
-	delete expr;
-	delete type;
 }
 
@@ -280,8 +247,4 @@
 
 CastExpr::CastExpr( const CastExpr &other ) : Expression( other ), arg( maybeClone( other.arg ) ), isGenerated( other.isGenerated ) {
-}
-
-CastExpr::~CastExpr() {
-	delete arg;
 }
 
@@ -335,8 +298,4 @@
 }
 
-VirtualCastExpr::~VirtualCastExpr() {
-	delete arg;
-}
-
 void VirtualCastExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Virtual Cast of:" << std::endl << indent+1;
@@ -361,9 +320,4 @@
 }
 
-UntypedMemberExpr::~UntypedMemberExpr() {
-	delete aggregate;
-	delete member;
-}
-
 void UntypedMemberExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Untyped Member Expression, with field: " << std::endl << indent+1;
@@ -392,9 +346,4 @@
 }
 
-MemberExpr::~MemberExpr() {
-	// don't delete the member declaration, since it points somewhere else in the tree
-	delete aggregate;
-}
-
 void MemberExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Member Expression, with field: " << std::endl;
@@ -412,9 +361,4 @@
 		Expression( other ), function( maybeClone( other.function ) ) {
 	cloneAll( other.args, args );
-}
-
-UntypedExpr::~UntypedExpr() {
-	delete function;
-	deleteAll( args );
 }
 
@@ -465,6 +409,4 @@
 }
 
-NameExpr::~NameExpr() {}
-
 void NameExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Name: " << get_name();
@@ -479,9 +421,4 @@
 LogicalExpr::LogicalExpr( const LogicalExpr &other ) :
 		Expression( other ), arg1( maybeClone( other.arg1 ) ), arg2( maybeClone( other.arg2 ) ), isAnd( other.isAnd ) {
-}
-
-LogicalExpr::~LogicalExpr() {
-	delete arg1;
-	delete arg2;
 }
 
@@ -499,10 +436,4 @@
 ConditionalExpr::ConditionalExpr( const ConditionalExpr &other ) :
 		Expression( other ), arg1( maybeClone( other.arg1 ) ), arg2( maybeClone( other.arg2 ) ), arg3( maybeClone( other.arg3 ) ) {
-}
-
-ConditionalExpr::~ConditionalExpr() {
-	delete arg1;
-	delete arg2;
-	delete arg3;
 }
 
@@ -542,8 +473,4 @@
 ImplicitCopyCtorExpr::~ImplicitCopyCtorExpr() {
 	set_env( nullptr ); // ImplicitCopyCtorExpr does not take ownership of an environment
-	delete callExpr;
-	deleteAll( tempDecls );
-	deleteAll( returnDecls );
-	deleteAll( dtors );
 }
 
@@ -570,8 +497,4 @@
 }
 
-ConstructorExpr::~ConstructorExpr() {
-	delete callExpr;
-}
-
 void ConstructorExpr::print( std::ostream &os, Indenter indent ) const {
 	os <<  "Constructor Expression: " << std::endl << indent+1;
@@ -588,8 +511,4 @@
 
 CompoundLiteralExpr::CompoundLiteralExpr( const CompoundLiteralExpr &other ) : Expression( other ), initializer( other.initializer->clone() ) {}
-
-CompoundLiteralExpr::~CompoundLiteralExpr() {
-	delete initializer;
-}
 
 void CompoundLiteralExpr::print( std::ostream &os, Indenter indent ) const {
@@ -618,13 +537,7 @@
 	cloneAll( other.dtors, dtors );
 }
-StmtExpr::~StmtExpr() {
-	delete statements;
-	deleteAll( dtors );
-	deleteAll( returnDecls );
-}
 void StmtExpr::computeResult() {
 	assert( statements );
 	std::list< Statement * > & body = statements->kids;
-	delete result;
 	result = nullptr;
 	if ( ! returnDecls.empty() ) {
@@ -669,9 +582,5 @@
 UniqueExpr::UniqueExpr( const UniqueExpr &other ) : Expression( other ), expr( maybeClone( other.expr ) ), object( maybeClone( other.object ) ), var( maybeClone( other.var ) ), id( other.id ) {
 }
-UniqueExpr::~UniqueExpr() {
-	delete expr;
-	delete object;
-	delete var;
-}
+
 void UniqueExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Unique Expression with id:" << id << std::endl << indent+1;
@@ -686,14 +595,7 @@
 InitAlternative::InitAlternative( Type * type, Designation * designation ) : type( type ), designation( designation ) {}
 InitAlternative::InitAlternative( const InitAlternative & other ) : type( maybeClone( other.type ) ), designation( maybeClone( other.designation ) ) {}
-InitAlternative::~InitAlternative() {
-	delete type;
-	delete designation;
-}
 
 UntypedInitExpr::UntypedInitExpr( Expression * expr, const std::list<InitAlternative> & initAlts ) : expr( expr ), initAlts( initAlts ) {}
 UntypedInitExpr::UntypedInitExpr( const UntypedInitExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ), initAlts( other.initAlts ) {}
-UntypedInitExpr::~UntypedInitExpr() {
-	delete expr;
-}
 
 void UntypedInitExpr::print( std::ostream & os, Indenter indent ) const {
@@ -713,8 +615,4 @@
 }
 InitExpr::InitExpr( const InitExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ), designation( maybeClone( other.designation) ) {}
-InitExpr::~InitExpr() {
-	delete expr;
-	delete designation;
-}
 
 void InitExpr::print( std::ostream & os, Indenter indent ) const {
@@ -730,7 +628,4 @@
 }
 DeletedExpr::DeletedExpr( const DeletedExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ), deleteStmt( other.deleteStmt ) {}
-DeletedExpr::~DeletedExpr() {
-	delete expr;
-}
 
 void DeletedExpr::print( std::ostream & os, Indenter indent ) const {
