Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 09928490678e146befd5d185f92f38d99e9431b3)
+++ src/SynTree/Expression.cc	(revision d55d7a68246b165aeaa9e161109032ddd07146d8)
@@ -93,5 +93,5 @@
 		return 0;
 	}
-	throw SemanticError( "Constant expression of non-integral type ", this );
+	throw SemanticError( this, "Constant expression of non-integral type " );
 }
 
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 09928490678e146befd5d185f92f38d99e9431b3)
+++ src/SynTree/Mutator.h	(revision d55d7a68246b165aeaa9e161109032ddd07146d8)
@@ -148,5 +148,4 @@
 			} // if
 		} catch( SemanticError &e ) {
-			e.set_location( (*i)->location );
 			errors.append( e );
 		} // try
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 09928490678e146befd5d185f92f38d99e9431b3)
+++ src/SynTree/Statement.cc	(revision d55d7a68246b165aeaa9e161109032ddd07146d8)
@@ -100,5 +100,5 @@
 	//actually this is a syntactic error signaled by the parser
 	if ( type == BranchStmt::Goto && target.empty() ) {
-		throw SemanticError("goto without target");
+		throw SemanticError( target.get_statement()->location, "goto without target");
 	}
 }
@@ -107,5 +107,5 @@
 	Statement(), computedTarget( computedTarget ), type( type ) {
 	if ( type != BranchStmt::Goto || computedTarget == nullptr ) {
-		throw SemanticError("Computed target not valid in branch statement");
+		throw SemanticError( computedTarget->location, "Computed target not valid in branch statement");
 	}
 }
@@ -203,5 +203,5 @@
 CaseStmt::CaseStmt( Expression *condition, const std::list<Statement *> &statements, bool deflt ) throw ( SemanticError ) :
 	Statement(), condition( condition ), stmts( statements ), _isDefault( deflt ) {
-	if ( isDefault() && condition != 0 ) throw SemanticError("default case with condition: ", condition);
+	if ( isDefault() && condition != 0 ) throw SemanticError( condition, "default case with condition: " );
 }
 
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 09928490678e146befd5d185f92f38d99e9431b3)
+++ src/SynTree/TypeSubstitution.h	(revision d55d7a68246b165aeaa9e161109032ddd07146d8)
@@ -98,5 +98,5 @@
 				} // if
 			} else {
-				throw SemanticError( toString( "Attempt to provide non-type parameter: ", toString( *actualIt ).c_str(), " for type parameter " ), formal );
+				throw SemanticError( formal, toString( "Attempt to provide non-type parameter: ", toString( *actualIt ).c_str(), " for type parameter " ) );
 			} // if
 		} else {
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 09928490678e146befd5d185f92f38d99e9431b3)
+++ src/SynTree/Visitor.h	(revision d55d7a68246b165aeaa9e161109032ddd07146d8)
@@ -142,5 +142,4 @@
 			}
 		} catch( SemanticError &e ) {
-			e.set_location( (*i)->location );
 			errors.append( e );
 		}
