Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 101e0bd58a8e0c34b449fd0a68b51abc97b85acc)
+++ src/Parser/DeclarationNode.cc	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Sep 14 23:13:28 2016
-// Update Count     : 502
+// Last Modified On : Thu Sep 15 23:36:02 2016
+// Update Count     : 515
 //
 
@@ -31,13 +31,13 @@
 
 // These must remain in the same order as the corresponding DeclarationNode enumerations.
-const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "NoStorageClass" };
-const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic", "NoQualifier" };
-const char *DeclarationNode::basicTypeName[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicType" };
-const char *DeclarationNode::complexTypeName[] = { "_Complex", "_Imaginary", "NoComplexType" };
-const char *DeclarationNode::signednessName[] = { "signed", "unsigned", "NoSignedness" };
-const char *DeclarationNode::lengthName[] = { "short", "long", "long long", "NoLength" };
-const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" };
-const char *DeclarationNode::typeClassName[] = { "otype", "dtype", "ftype" };
-const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
+const char * DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "NoStorageClass" };
+const char * DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic", "NoQualifier" };
+const char * DeclarationNode::basicTypeName[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicType" };
+const char * DeclarationNode::complexTypeName[] = { "_Complex", "_Imaginary", "NoComplexType" };
+const char * DeclarationNode::signednessName[] = { "signed", "unsigned", "NoSignedness" };
+const char * DeclarationNode::lengthName[] = { "short", "long", "long long", "NoLength" };
+const char * DeclarationNode::aggregateName[] = { "struct", "union", "context" };
+const char * DeclarationNode::typeClassName[] = { "otype", "dtype", "ftype" };
+const char * DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
 
 UniqueName DeclarationNode::anonymous( "__anonymous" );
@@ -70,6 +70,6 @@
 }
 
-DeclarationNode *DeclarationNode::clone() const {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::clone() const {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = maybeClone( type );
 	newnode->name = name;
@@ -139,6 +139,6 @@
 }
 
-DeclarationNode *DeclarationNode::newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newFunction( std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body, bool newStyle ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
 
@@ -163,5 +163,5 @@
 
 DeclarationNode * DeclarationNode::newQualifier( Qualifier q ) {
-	DeclarationNode *newnode = new DeclarationNode;
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData();
 	newnode->type->qualifiers[ q ] = 1;
@@ -169,6 +169,6 @@
 } // DeclarationNode::newQualifier
 
-DeclarationNode * DeclarationNode::newForall( DeclarationNode *forall ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newForall( DeclarationNode * forall ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Unknown );
 	newnode->type->forall = forall;
@@ -177,10 +177,5 @@
 
 DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	//switch (sc) {
-	//	case Inline: newnode->isInline = true; break;
-	//	case Noreturn: newnode->isNoreturn = true; break;
-	//	default: newnode->storageClass = sc; break;
-	//}
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->storageClass = sc;
 	return newnode;
@@ -188,5 +183,5 @@
 
 DeclarationNode * DeclarationNode::newBasicType( BasicType bt ) {
-	DeclarationNode *newnode = new DeclarationNode;
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Basic );
 	newnode->type->basictype = bt;
@@ -195,5 +190,5 @@
 
 DeclarationNode * DeclarationNode::newComplexType( ComplexType ct ) {
-	DeclarationNode *newnode = new DeclarationNode;
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Basic );
 	newnode->type->complextype = ct;
@@ -202,5 +197,5 @@
 
 DeclarationNode * DeclarationNode::newSignedNess( Signedness sn ) {
-	DeclarationNode *newnode = new DeclarationNode;
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Basic );
 	newnode->type->signedness = sn;
@@ -209,5 +204,5 @@
 
 DeclarationNode * DeclarationNode::newLength( Length lnth ) {
-	DeclarationNode *newnode = new DeclarationNode;
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Basic );
 	newnode->type->length = lnth;
@@ -215,6 +210,6 @@
 } // DeclarationNode::newLength
 
-DeclarationNode * DeclarationNode::newFromTypedef( std::string *name ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newFromTypedef( std::string * name ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::SymbolicInst );
 	newnode->type->symbolic.name = assign_strptr( name );
@@ -224,6 +219,6 @@
 } // DeclarationNode::newFromTypedef
 
-DeclarationNode * DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newAggregate( Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Aggregate );
 	newnode->type->aggregate.kind = kind;
@@ -238,6 +233,6 @@
 } // DeclarationNode::newAggregate
 
-DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newEnum( std::string * name, DeclarationNode * constants ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
 	newnode->type = new TypeData( TypeData::Enum );
@@ -250,6 +245,6 @@
 } // DeclarationNode::newEnum
 
-DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newEnumConstant( std::string * name, ExpressionNode * constant ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
 	newnode->enumeratorValue.reset( constant );
@@ -258,12 +253,12 @@
 } // DeclarationNode::newEnumConstant
 
-DeclarationNode *DeclarationNode::newName( std::string *name ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newName( std::string * name ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
 	return newnode;
 } // DeclarationNode::newName
 
-DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newFromTypeGen( std::string * name, ExpressionNode * params ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::SymbolicInst );
 	newnode->type->symbolic.name = assign_strptr( name );
@@ -273,8 +268,9 @@
 } // DeclarationNode::newFromTypeGen
 
-DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newTypeParam( TypeClass tc, std::string * name ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
 	newnode->type = new TypeData( TypeData::Variable );
+//	newnode->type = nullptr;
 	newnode->variable.tyClass = tc;
 	newnode->variable.name = newnode->name;
@@ -282,6 +278,6 @@
 } // DeclarationNode::newTypeParam
 
-DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newTrait( std::string * name, DeclarationNode * params, DeclarationNode * asserts ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Aggregate );
 	newnode->type->aggregate.kind = Trait;
@@ -292,6 +288,6 @@
 } // DeclarationNode::newTrait
 
-DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newTraitUse( std::string * name, ExpressionNode * params ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::AggregateInst );
 	newnode->type->aggInst.aggregate = new TypeData( TypeData::Aggregate );
@@ -302,6 +298,6 @@
 } // DeclarationNode::newTraitUse
 
-DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newTypeDecl( std::string * name, DeclarationNode * typeParams ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
 	newnode->type = new TypeData( TypeData::Symbolic );
@@ -312,16 +308,16 @@
 } // DeclarationNode::newTypeDecl
 
-DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newPointer( DeclarationNode * qualifiers ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Pointer );
 	return newnode->addQualifiers( qualifiers );
 } // DeclarationNode::newPointer
 
-DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newArray( ExpressionNode * size, DeclarationNode * qualifiers, bool isStatic ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Array );
 	newnode->type->array.dimension = size;
 	newnode->type->array.isStatic = isStatic;
-	if ( newnode->type->array.dimension == 0 || newnode->type->array.dimension->isExpressionType<ConstantExpr *>() ) {
+	if ( newnode->type->array.dimension == 0 || newnode->type->array.dimension->isExpressionType<ConstantExpr * >() ) {
 		newnode->type->array.isVarLen = false;
 	} else {
@@ -331,6 +327,6 @@
 } // DeclarationNode::newArray
 
-DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newVarArray( DeclarationNode * qualifiers ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Array );
 	newnode->type->array.dimension = 0;
@@ -340,12 +336,12 @@
 }
 
-DeclarationNode *DeclarationNode::newBitfield( ExpressionNode *size ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newBitfield( ExpressionNode * size ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->bitfieldWidth = size;
 	return newnode;
 }
 
-DeclarationNode *DeclarationNode::newTuple( DeclarationNode *members ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newTuple( DeclarationNode * members ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Tuple );
 	newnode->type->tuple = members;
@@ -353,6 +349,6 @@
 }
 
-DeclarationNode *DeclarationNode::newTypeof( ExpressionNode *expr ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newTypeof( ExpressionNode * expr ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Typeof );
 	newnode->type->typeexpr = expr;
@@ -361,5 +357,5 @@
 
 DeclarationNode * DeclarationNode::newBuiltinType( BuiltinType bt ) {
-	DeclarationNode *newnode = new DeclarationNode;
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Builtin );
 	newnode->builtin = bt;
@@ -367,7 +363,8 @@
 } // DeclarationNode::newBuiltinType
 
-DeclarationNode *DeclarationNode::newAttr( std::string *name, ExpressionNode *expr ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newAttr( std::string * name, ExpressionNode * expr ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Attr );
+//	newnode->type = nullptr;
 	newnode->attr.name = assign_strptr( name );
 	newnode->attr.expr = expr;
@@ -375,7 +372,8 @@
 }
 
-DeclarationNode *DeclarationNode::newAttr( std::string *name, DeclarationNode *type ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::newAttr( std::string * name, DeclarationNode * type ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Attr );
+//	newnode->type = nullptr;
 	newnode->attr.name = assign_strptr( name );
 	newnode->attr.type = type;
@@ -389,5 +387,5 @@
 } // appendError
 
-void DeclarationNode::checkQualifiers( const TypeData *src, const TypeData *dst ) {
+void DeclarationNode::checkQualifiers( const TypeData * src, const TypeData * dst ) {
 	TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers; // optimization
 
@@ -401,5 +399,5 @@
 } // DeclarationNode::checkQualifiers
 
-void DeclarationNode::checkStorageClasses( DeclarationNode *q ) {
+void DeclarationNode::checkStorageClasses( DeclarationNode * q ) {
 	if ( storageClass != NoStorageClass && q->storageClass != NoStorageClass ) {
 		if ( storageClass == q->storageClass ) {		// duplicate qualifier
@@ -413,5 +411,5 @@
 } // DeclarationNode::copyStorageClasses
 
-DeclarationNode *DeclarationNode::copyStorageClasses( DeclarationNode *q ) {
+DeclarationNode * DeclarationNode::copyStorageClasses( DeclarationNode * q ) {
 	isInline = isInline || q->isInline;
 	isNoreturn = isNoreturn || q->isNoreturn;
@@ -424,5 +422,5 @@
 } // DeclarationNode::copyStorageClasses
 
-static void addQualifiersToType( TypeData *&src, TypeData *dst ) {
+static void addQualifiersToType( TypeData *&src, TypeData * dst ) {
 	if ( src->forall && dst->kind == TypeData::Function ) {
 		if ( dst->forall ) {
@@ -443,5 +441,5 @@
 } // addQualifiersToType
 
-DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) {
+DeclarationNode * DeclarationNode::addQualifiers( DeclarationNode * q ) {
 	if ( ! q ) return this;
 
@@ -550,5 +548,5 @@
 }
 
-DeclarationNode *DeclarationNode::addType( DeclarationNode *o ) {
+DeclarationNode * DeclarationNode::addType( DeclarationNode * o ) {
 	if ( o ) {
 		checkStorageClasses( o );
@@ -584,6 +582,6 @@
 }
 
-DeclarationNode *DeclarationNode::addTypedef() {
-	TypeData *newtype = new TypeData( TypeData::Symbolic );
+DeclarationNode * DeclarationNode::addTypedef() {
+	TypeData * newtype = new TypeData( TypeData::Symbolic );
 	newtype->symbolic.params = 0;
 	newtype->symbolic.isTypedef = true;
@@ -594,5 +592,5 @@
 }
 
-DeclarationNode *DeclarationNode::addAssertions( DeclarationNode *assertions ) {
+DeclarationNode * DeclarationNode::addAssertions( DeclarationNode * assertions ) {
 	assert( type );
 	switch ( type->kind ) {
@@ -618,15 +616,15 @@
 }
 
-DeclarationNode *DeclarationNode::addName( std::string *newname ) {
+DeclarationNode * DeclarationNode::addName( std::string * newname ) {
 	name = assign_strptr( newname );
 	return this;
 }
 
-DeclarationNode *DeclarationNode::addBitfield( ExpressionNode *size ) {
+DeclarationNode * DeclarationNode::addBitfield( ExpressionNode * size ) {
 	bitfieldWidth = size;
 	return this;
 }
 
-DeclarationNode *DeclarationNode::addVarArgs() {
+DeclarationNode * DeclarationNode::addVarArgs() {
 	assert( type );
 	hasEllipsis = true;
@@ -634,5 +632,5 @@
 }
 
-DeclarationNode *DeclarationNode::addFunctionBody( StatementNode *body ) {
+DeclarationNode * DeclarationNode::addFunctionBody( StatementNode * body ) {
 	assert( type );
 	assert( type->kind == TypeData::Function );
@@ -643,5 +641,5 @@
 }
 
-DeclarationNode *DeclarationNode::addOldDeclList( DeclarationNode *list ) {
+DeclarationNode * DeclarationNode::addOldDeclList( DeclarationNode * list ) {
 	assert( type );
 	assert( type->kind == TypeData::Function );
@@ -651,8 +649,8 @@
 }
 
-static void setBase( TypeData *&type, TypeData *newType ) {
+static void setBase( TypeData *&type, TypeData * newType ) {
 	if ( type ) {
-		TypeData *prevBase = type;
-		TypeData *curBase = type->base;
+		TypeData * prevBase = type;
+		TypeData * curBase = type->base;
 		while ( curBase != 0 ) {
 			prevBase = curBase;
@@ -665,5 +663,5 @@
 }
 
-DeclarationNode *DeclarationNode::addPointer( DeclarationNode *p ) {
+DeclarationNode * DeclarationNode::addPointer( DeclarationNode * p ) {
 	if ( p ) {
 		assert( p->type->kind == TypeData::Pointer );
@@ -675,5 +673,5 @@
 }
 
-DeclarationNode *DeclarationNode::addArray( DeclarationNode *a ) {
+DeclarationNode * DeclarationNode::addArray( DeclarationNode * a ) {
 	if ( a ) {
 		assert( a->type->kind == TypeData::Array );
@@ -685,5 +683,5 @@
 }
 
-DeclarationNode *DeclarationNode::addNewPointer( DeclarationNode *p ) {
+DeclarationNode * DeclarationNode::addNewPointer( DeclarationNode * p ) {
 	if ( p ) {
 		assert( p->type->kind == TypeData::Pointer );
@@ -712,7 +710,7 @@
 }
 
-static TypeData *findLast( TypeData *a ) {
+static TypeData * findLast( TypeData * a ) {
 	assert( a );
-	TypeData *cur = a;
+	TypeData * cur = a;
 	while ( cur->base ) {
 		cur = cur->base;
@@ -721,8 +719,8 @@
 }
 
-DeclarationNode *DeclarationNode::addNewArray( DeclarationNode *a ) {
+DeclarationNode * DeclarationNode::addNewArray( DeclarationNode * a ) {
 	if ( a ) {
 		assert( a->type->kind == TypeData::Array );
-		TypeData *lastArray = findLast( a->type );
+		TypeData * lastArray = findLast( a->type );
 		if ( type ) {
 			switch ( type->kind ) {
@@ -748,6 +746,6 @@
 }
 
-DeclarationNode *DeclarationNode::addParamList( DeclarationNode *params ) {
-	TypeData *ftype = new TypeData( TypeData::Function );
+DeclarationNode * DeclarationNode::addParamList( DeclarationNode * params ) {
+	TypeData * ftype = new TypeData( TypeData::Function );
 	ftype->function.params = params;
 	setBase( type, ftype );
@@ -755,5 +753,5 @@
 }
 
-static TypeData *addIdListToType( TypeData *type, DeclarationNode *ids ) {
+static TypeData * addIdListToType( TypeData * type, DeclarationNode * ids ) {
 	if ( type ) {
 		if ( type->kind != TypeData::Function ) {
@@ -764,5 +762,5 @@
 		return type;
 	} else {
-		TypeData *newtype = new TypeData( TypeData::Function );
+		TypeData * newtype = new TypeData( TypeData::Function );
 		newtype->function.idList = ids;
 		return newtype;
@@ -770,10 +768,10 @@
 }
 
-DeclarationNode *DeclarationNode::addIdList( DeclarationNode *ids ) {
+DeclarationNode * DeclarationNode::addIdList( DeclarationNode * ids ) {
 	type = addIdListToType( type, ids );
 	return this;
 }
 
-DeclarationNode *DeclarationNode::addInitializer( InitializerNode *init ) {
+DeclarationNode * DeclarationNode::addInitializer( InitializerNode * init ) {
 	//assert
 	initializer = init;
@@ -781,7 +779,7 @@
 }
 
-DeclarationNode *DeclarationNode::cloneBaseType( string *newName ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	TypeData *srcType = type;
+DeclarationNode * DeclarationNode::cloneBaseType( string * newName ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	TypeData * srcType = type;
 	while ( srcType->base ) {
 		srcType = srcType->base;
@@ -806,13 +804,13 @@
 }
 
-DeclarationNode *DeclarationNode::cloneBaseType( DeclarationNode *o ) {
+DeclarationNode * DeclarationNode::cloneBaseType( DeclarationNode * o ) {
 	if ( o ) {
 		o->copyStorageClasses( this );
 		if ( type ) {
-			TypeData *srcType = type;
+			TypeData * srcType = type;
 			while ( srcType->base ) {
 				srcType = srcType->base;
 			} // while
-			TypeData *newType = srcType->clone();
+			TypeData * newType = srcType->clone();
 			if ( newType->kind == TypeData::AggregateInst ) {
 				// don't duplicate members
@@ -838,19 +836,20 @@
 }
 
-DeclarationNode *DeclarationNode::cloneType( string *newName ) {
-	DeclarationNode *newnode = new DeclarationNode;
+DeclarationNode * DeclarationNode::cloneType( string * newName ) {
+	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = maybeClone( type );
 	assert( storageClass == NoStorageClass );
 	newnode->copyStorageClasses( this );
+	assert( newName );
 	newnode->name = assign_strptr( newName );
 	return newnode;
 }
 
-DeclarationNode *DeclarationNode::cloneType( DeclarationNode *o ) {
+DeclarationNode * DeclarationNode::cloneType( DeclarationNode * o ) {
 	if ( o ) {
 		assert( storageClass == NoStorageClass );
 		o->copyStorageClasses( this );
 		if ( type ) {
-			TypeData *newType = type->clone();
+			TypeData * newType = type->clone();
 			if ( ! o->type ) {
 				o->type = newType;
@@ -865,9 +864,9 @@
 }
 
-DeclarationNode *DeclarationNode::extractAggregate() const {
+DeclarationNode * DeclarationNode::extractAggregate() const {
 	if ( type ) {
-		TypeData *ret = typeextractAggregate( type );
+		TypeData * ret = typeextractAggregate( type );
 		if ( ret ) {
-			DeclarationNode *newnode = new DeclarationNode;
+			DeclarationNode * newnode = new DeclarationNode;
 			newnode->type = ret;
 			return newnode;
@@ -877,21 +876,21 @@
 }
 
-void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList ) {
+void buildList( const DeclarationNode * firstNode, std::list< Declaration * > &outputList ) {
 	SemanticError errors;
 	std::back_insert_iterator< std::list< Declaration * > > out( outputList );
-	const DeclarationNode *cur = firstNode;
+	const DeclarationNode * cur = firstNode;
 	while ( cur ) {
 		try {
-			if ( DeclarationNode *extr = cur->extractAggregate() ) {
+			if ( DeclarationNode * extr = cur->extractAggregate() ) {
 				// handle the case where a structure declaration is contained within an object or type declaration
-				Declaration *decl = extr->build();
+				Declaration * decl = extr->build();
 				if ( decl ) {
-					*out++ = decl;
+					* out++ = decl;
 				} // if
 				delete extr;
 			} // if
-			Declaration *decl = cur->build();
+			Declaration * decl = cur->build();
 			if ( decl ) {
-				*out++ = decl;
+				* out++ = decl;
 			} // if
 		} catch( SemanticError &e ) {
@@ -905,21 +904,21 @@
 }
 
-void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ) {
+void buildList( const DeclarationNode * firstNode, std::list< DeclarationWithType * > &outputList ) {
 	SemanticError errors;
 	std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );
-	const DeclarationNode *cur = firstNode;
+	const DeclarationNode * cur = firstNode;
 	while ( cur ) {
 		try {
-			Declaration *decl = cur->build();
+			Declaration * decl = cur->build();
 			if ( decl ) {
-				if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
-					*out++ = dwt;
-				} else if ( StructDecl *agg = dynamic_cast< StructDecl * >( decl ) ) {
-					StructInstType *inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
-					*out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
+				if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
+					* out++ = dwt;
+				} else if ( StructDecl * agg = dynamic_cast< StructDecl * >( decl ) ) {
+					StructInstType * inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
+					* out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
 					delete agg;
-				} else if ( UnionDecl *agg = dynamic_cast< UnionDecl * >( decl ) ) {
-					UnionInstType *inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
-					*out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
+				} else if ( UnionDecl * agg = dynamic_cast< UnionDecl * >( decl ) ) {
+					UnionInstType * inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
+					* out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
 				} // if
 			} // if
@@ -934,11 +933,11 @@
 }
 
-void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ) {
+void buildTypeList( const DeclarationNode * firstNode, std::list< Type * > &outputList ) {
 	SemanticError errors;
 	std::back_insert_iterator< std::list< Type * > > out( outputList );
-	const DeclarationNode *cur = firstNode;
+	const DeclarationNode * cur = firstNode;
 	while ( cur ) {
 		try {
-			*out++ = cur->buildType();
+			* out++ = cur->buildType();
 		} catch( SemanticError &e ) {
 			errors.append( e );
@@ -951,5 +950,5 @@
 }
 
-Declaration *DeclarationNode::build() const {
+Declaration * DeclarationNode::build() const {
 	if ( ! error.empty() ) throw SemanticError( error + " in declaration of ", this );
 	if ( type ) {
@@ -969,5 +968,5 @@
 }
 
-Type *DeclarationNode::buildType() const {
+Type * DeclarationNode::buildType() const {
 	assert( type );
 
@@ -976,5 +975,5 @@
 		return new EnumInstType( buildQualifiers( type ), type->enumeration.name );
 	  case TypeData::Aggregate: {
-		  ReferenceToType *ret;
+		  ReferenceToType * ret;
 		  switch ( type->aggregate.kind ) {
 			case DeclarationNode::Struct:
@@ -994,5 +993,5 @@
 	  }
 	  case TypeData::Symbolic: {
-		  TypeInstType *ret = new TypeInstType( buildQualifiers( type ), type->symbolic.name, false );
+		  TypeInstType * ret = new TypeInstType( buildQualifiers( type ), type->symbolic.name, false );
 		  buildList( type->symbolic.actuals, ret->get_parameters() );
 		  return ret;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 101e0bd58a8e0c34b449fd0a68b51abc97b85acc)
+++ src/Parser/TypeData.cc	(revision ba7aa2de23109eea3961fea88a1aeeeb3989db22)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 12 21:11:22 2016
-// Update Count     : 377
+// Last Modified On : Thu Sep 15 23:05:01 2016
+// Update Count     : 384
 //
 
@@ -487,6 +487,4 @@
 		return new VarArgsType( buildQualifiers( td ) );
 	  case TypeData::Attr:
-		assert( false );
-		return buildAttr( td );
 	  case TypeData::Symbolic:
 	  case TypeData::Enum:
