Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision c2ca04d9fcb38436d3cecb12ea970191dac218ab)
+++ src/Parser/TypeData.cc	(revision f1917fb9af44421f08b63da0a9149e7f406d6842)
@@ -31,5 +31,5 @@
 using namespace std;
 
-TypeData::TypeData( Kind k ) : kind( k ), base( nullptr ), forall( nullptr ) /*, PTR1( (void*)(0xdeadbeefdeadbeef)), PTR2( (void*)(0xdeadbeefdeadbeef) ) */ {
+TypeData::TypeData( Kind k ) : location( yylloc ), kind( k ), base( nullptr ), forall( nullptr ) /*, PTR1( (void*)(0xdeadbeefdeadbeef)), PTR2( (void*)(0xdeadbeefdeadbeef) ) */ {
 	switch ( kind ) {
 	  case Unknown:
@@ -800,5 +800,5 @@
 	assert( td->base );
 	if ( td->symbolic.isTypedef ) {
-		ret = new TypedefDecl( name, scs, typebuild( td->base ), linkage );
+		ret = new TypedefDecl( name, td->location, scs, typebuild( td->base ), linkage );
 	} else {
 		ret = new TypeDecl( name, scs, typebuild( td->base ), TypeDecl::Dtype, true );
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision c2ca04d9fcb38436d3cecb12ea970191dac218ab)
+++ src/Parser/TypeData.h	(revision f1917fb9af44421f08b63da0a9149e7f406d6842)
@@ -76,4 +76,6 @@
 	};
 
+	CodeLocation location;
+
 	Kind kind;
 	TypeData * base;
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision c2ca04d9fcb38436d3cecb12ea970191dac218ab)
+++ src/SymTab/Validate.cc	(revision f1917fb9af44421f08b63da0a9149e7f406d6842)
@@ -857,5 +857,5 @@
 				type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() );
 			} // if
-			TypedefDeclPtr tyDecl( new TypedefDecl( aggDecl->get_name(), Type::StorageClasses(), type, aggDecl->get_linkage() ) );
+			TypedefDeclPtr tyDecl( new TypedefDecl( aggDecl->get_name(), aggDecl->location, Type::StorageClasses(), type, aggDecl->get_linkage() ) );
 			typedefNames[ aggDecl->get_name() ] = std::make_pair( std::move( tyDecl ), scopeLevel );
 		} // if
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision c2ca04d9fcb38436d3cecb12ea970191dac218ab)
+++ src/SynTree/Declaration.h	(revision f1917fb9af44421f08b63da0a9149e7f406d6842)
@@ -245,5 +245,7 @@
 	typedef NamedTypeDecl Parent;
   public:
-	TypedefDecl( const std::string &name, Type::StorageClasses scs, Type *type, LinkageSpec::Spec spec = LinkageSpec::Cforall ) : Parent( name, scs, type ) { set_linkage( spec ); }
+	TypedefDecl( const std::string &name, CodeLocation location, Type::StorageClasses scs, Type *type, LinkageSpec::Spec spec = LinkageSpec::Cforall )
+		: Parent( name, scs, type ) { set_linkage( spec ); this->location = location; }
+
 	TypedefDecl( const TypedefDecl &other ) : Parent( other ) {}
 
Index: src/main.cc
===================================================================
--- src/main.cc	(revision c2ca04d9fcb38436d3cecb12ea970191dac218ab)
+++ src/main.cc	(revision f1917fb9af44421f08b63da0a9149e7f406d6842)
@@ -282,4 +282,6 @@
 		} // if
 
+		CodeTools::fillLocations( translationUnit );
+
 		OPTPRINT( "resolve" )
 		ResolvExpr::resolve( translationUnit );
Index: src/tests/raii/.expect/dtor-early-exit-ERR2.txt
===================================================================
--- src/tests/raii/.expect/dtor-early-exit-ERR2.txt	(revision c2ca04d9fcb38436d3cecb12ea970191dac218ab)
+++ src/tests/raii/.expect/dtor-early-exit-ERR2.txt	(revision f1917fb9af44421f08b63da0a9149e7f406d6842)
@@ -1,3 +1,3 @@
-raii/dtor-early-exit.c:220:1 error: jump to label 'L2' crosses initialization of y Branch (Goto)
+raii/dtor-early-exit.c:217:1 error: jump to label 'L2' crosses initialization of y Branch (Goto)
   with target: L2
   with original target: L2
