Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision d8048301526ba0532b75eace3ea31d8259703ce2)
+++ src/Parser/TypeData.cc	(revision 7de22b2896d5b6c3d3aad6356b0c14da024e483a)
@@ -423,4 +423,33 @@
 	} // switch
 } // TypeData::print
+
+const std::string * TypeData::leafName() const {
+	switch ( kind ) {
+	  case Unknown:
+	  case Pointer:
+	  case Reference:
+	  case EnumConstant:
+	  case GlobalScope:
+	  case Array:
+	  case Basic:
+	  case Function:
+	  case AggregateInst:
+	  case Tuple:
+	  case Typeof:
+	  case Builtin:
+		assertf(false, "Tried to get leaf name from kind without a name: %d", kind);
+		break;
+	  case Aggregate:
+		return aggregate.name;
+	  case Enum:
+		return enumeration.name;
+	  case Symbolic:
+	  case SymbolicInst:
+		return symbolic.name;
+	  case Qualified:
+		return qualified.child->leafName();
+	} // switch
+	assert(false);
+}
 
 
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision d8048301526ba0532b75eace3ea31d8259703ce2)
+++ src/Parser/TypeData.h	(revision 7de22b2896d5b6c3d3aad6356b0c14da024e483a)
@@ -109,4 +109,6 @@
 	void print( std::ostream &, int indent = 0 ) const;
 	TypeData * clone() const;
+
+	const std::string * leafName() const;
 };
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision d8048301526ba0532b75eace3ea31d8259703ce2)
+++ src/Parser/parser.yy	(revision 7de22b2896d5b6c3d3aad6356b0c14da024e483a)
@@ -1867,5 +1867,6 @@
 	| aggregate_key attribute_list_opt type_name fred
 		{
-			typedefTable.makeTypedef( *$3->type->symbolic.name, forall ? TYPEGENname : TYPEDEFname ); // create typedef
+			// for type_name can be a qualified type name S.T, in which case only the last name in the chain needs a typedef (other names in the chain should already have one)
+			typedefTable.makeTypedef( *$3->type->leafName(), forall ? TYPEGENname : TYPEDEFname ); // create typedef
 			forall = false;								// reset
 		}
