Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 0a7314835850e701278bbf94ddc69891ef88543d)
+++ src/Parser/DeclarationNode.cc	(revision 679e6444520adec6880c7a60221345ec1ab3458a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul  6 06:56:08 2018
-// Update Count     : 1088
+// Last Modified On : Wed Jul 18 22:50:27 2018
+// Update Count     : 1096
 //
 
@@ -56,4 +56,5 @@
 		builtin( NoBuiltinType ),
 		type( nullptr ),
+		inLine( false ),
 		bitfieldWidth( nullptr ),
 		hasEllipsis( false ),
@@ -104,4 +105,5 @@
 	newnode->builtin = NoBuiltinType;
 	newnode->type = maybeClone( type );
+	newnode->inLine = inLine;
 	newnode->storageClasses = storageClasses;
 	newnode->funcSpecs = funcSpecs;
@@ -1007,18 +1009,19 @@
 							if ( ReferenceToType * aggr = dynamic_cast<ReferenceToType *>( dwt->get_type() ) ) {
 								if ( aggr->name.find("anonymous") == std::string::npos ) {
-									bool isInline = false;
-									if (cur->type->kind == TypeData::Aggregate || cur->type->kind == TypeData::AggregateInst) {
-										if (cur->type->kind == TypeData::Aggregate) {
-											isInline = cur->type->aggregate.inLine;
-										} else {
-											isInline = cur->type->aggInst.inLine;
-											if ( TypeData * aggr = cur->type->aggInst.aggregate ) {
-												if ( aggr->kind == TypeData::Aggregate ) {
-													isInline = isInline || aggr->aggregate.inLine;
-												}
-											}
-										}
-									}
-									if (! isInline) {
+									// bool isInline = false;
+									// if (cur->type->kind == TypeData::Aggregate || cur->type->kind == TypeData::AggregateInst) {
+									// 	if (cur->type->kind == TypeData::Aggregate) {
+									// 		isInline = cur->type->aggregate.inLine;
+									// 	} else {
+									// 		isInline = cur->type->aggInst.inLine;
+									// 		if ( TypeData * aggr = cur->type->aggInst.aggregate ) {
+									// 			if ( aggr->kind == TypeData::Aggregate ) {
+									// 				isInline = isInline || aggr->aggregate.inLine;
+									// 			}
+									// 		}
+									// 	}
+									// }
+									// if (! isInline) {
+									if ( ! cur->inLine ) {
 										// temporary: warn about anonymous member declarations of named types, since this conflicts with the syntax for the forward declaration of an anonymous type
 										SemanticWarning( cur->location, Warning::AggrForwardDecl, aggr->name.c_str() );
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 0a7314835850e701278bbf94ddc69891ef88543d)
+++ src/Parser/ParseNode.h	(revision 679e6444520adec6880c7a60221345ec1ab3458a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun  6 16:17:18 2018
-// Update Count     : 843
+// Last Modified On : Wed Jul 18 17:35:55 2018
+// Update Count     : 844
 //
 
@@ -331,4 +331,5 @@
 	TypeData * type;
 
+	bool inLine;
 	Type::FuncSpecifiers funcSpecs;
 	Type::StorageClasses storageClasses;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 0a7314835850e701278bbf94ddc69891ef88543d)
+++ src/Parser/TypeData.cc	(revision 679e6444520adec6880c7a60221345ec1ab3458a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 12 13:52:09 2018
-// Update Count     : 606
+// Last Modified On : Wed Jul 18 17:51:18 2018
+// Update Count     : 607
 //
 
@@ -76,5 +76,4 @@
 		aggregate.parent = nullptr;
 		aggregate.anon = false;
-		aggregate.inLine = false;
 		break;
 	  case AggregateInst:
@@ -83,5 +82,4 @@
 		aggInst.params = nullptr;
 		aggInst.hoistType = false;
-		aggInst.inLine = false;
 		break;
 	  case Symbolic:
@@ -221,5 +219,4 @@
 		newtype->aggregate.body = aggregate.body;
 		newtype->aggregate.anon = aggregate.anon;
-		newtype->aggregate.inLine = aggregate.inLine;
 		newtype->aggregate.tagged = aggregate.tagged;
 		newtype->aggregate.parent = aggregate.parent ? new string( *aggregate.parent ) : nullptr;
@@ -229,5 +226,4 @@
 		newtype->aggInst.params = maybeClone( aggInst.params );
 		newtype->aggInst.hoistType = aggInst.hoistType;
-		newtype->aggInst.inLine = aggInst.inLine;
 		break;
 	  case Enum:
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 0a7314835850e701278bbf94ddc69891ef88543d)
+++ src/Parser/TypeData.h	(revision 679e6444520adec6880c7a60221345ec1ab3458a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 12 14:00:09 2018
-// Update Count     : 193
+// Last Modified On : Wed Jul 18 17:31:15 2018
+// Update Count     : 194
 //
 
@@ -37,5 +37,4 @@
 		bool body;
 		bool anon;
-		bool inLine;
 
 		bool tagged;
@@ -47,5 +46,4 @@
 		ExpressionNode * params;
 		bool hoistType;
-		bool inLine;
 	};
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 0a7314835850e701278bbf94ddc69891ef88543d)
+++ src/Parser/parser.yy	(revision 679e6444520adec6880c7a60221345ec1ab3458a)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 12 16:16:25 2018
-// Update Count     : 3756
+// Last Modified On : Thu Jul 19 10:21:43 2018
+// Update Count     : 3808
 //
 
@@ -338,6 +338,6 @@
 %type<decl> exception_declaration
 
-%type<decl> field_declaration field_declaration_list_opt field_declarator_opt field_declaring_list
-%type<en> field field_list field_name fraction_constants_opt
+%type<decl> field_declaration_list_opt field_declaration field_declaring_list_opt field_declarator field_abstract_list field_abstract_opt
+%type<en> field field_name_list field_name fraction_constants_opt
 
 %type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr
@@ -352,5 +352,5 @@
 %type<decl> cfa_array_parameter_1st_dimension
 
-%type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list
+%type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list cfa_field_abstract_list
 %type<decl> cfa_function_declaration cfa_function_return cfa_function_specifier
 
@@ -492,13 +492,14 @@
 	;
 
-identifier:
-	IDENTIFIER
-	| ATTR_IDENTIFIER									// CFA
-	| quasi_keyword
-	;
-
 no_attr_identifier:
 	IDENTIFIER
 	| quasi_keyword
+	| '@'												// CFA
+		{ Token tok = { new string( DeclarationNode::anonymous.newName() ), yylval.tok.loc }; $$ = tok; }
+	;
+
+identifier:
+	no_attr_identifier
+	| ATTR_IDENTIFIER									// CFA
 	;
 
@@ -541,5 +542,5 @@
 	| type_name '.' no_attr_identifier					// CFA, nested type
 		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
-	| type_name '.' '[' field_list ']'					// CFA, nested type / tuple field selector
+	| type_name '.' '[' field_name_list ']'				// CFA, nested type / tuple field selector
 		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| GENERIC '(' assignment_expression ',' generic_assoc_list ')' // C11
@@ -594,5 +595,5 @@
 	| postfix_expression FLOATING_FRACTIONconstant		// CFA, tuple index
 		{ $$ = new ExpressionNode( build_fieldSel( $1, build_field_name_FLOATING_FRACTIONconstant( *$2 ) ) ); }
-	| postfix_expression '.' '[' field_list ']'			// CFA, tuple field selector
+	| postfix_expression '.' '[' field_name_list ']'	// CFA, tuple field selector
 		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $4 ) ) ); }
 	| postfix_expression ARROW no_attr_identifier
@@ -602,5 +603,5 @@
 	| postfix_expression ARROW INTEGERconstant			// CFA, tuple index
 		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_constantInteger( *$3 ) ) ); }
-	| postfix_expression ARROW '[' field_list ']'		// CFA, tuple field selector
+	| postfix_expression ARROW '[' field_name_list ']'	// CFA, tuple field selector
 		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $4 ) ) ); }
 	| postfix_expression ICR
@@ -629,12 +630,13 @@
 	// empty
 		{ $$ = nullptr; }
-	// | '@'												// use default argument
-	// 	{ $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); }
+	| '?'												// CFA, default parameter
+		{ SemanticError( yylloc, "Default parameter for argument is currently unimplemented." ); $$ = nullptr; }
+	 	// { $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); }
 	| assignment_expression
 	;
 
-field_list:												// CFA, tuple field selector
+field_name_list:										// CFA, tuple field selector
 	field
-	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
+	| field_name_list ',' field					{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
@@ -643,13 +645,13 @@
 	| FLOATING_DECIMALconstant field
 		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_FLOATING_DECIMALconstant( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); }
-	| FLOATING_DECIMALconstant '[' field_list ']'
+	| FLOATING_DECIMALconstant '[' field_name_list ']'
 		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_FLOATING_DECIMALconstant( *$1 ) ), build_tuple( $3 ) ) ); }
 	| field_name '.' field
 		{ $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
-	| field_name '.' '[' field_list ']'
+	| field_name '.' '[' field_name_list ']'
 		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $4 ) ) ); }
 	| field_name ARROW field
 		{ $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
-	| field_name ARROW '[' field_list ']'
+	| field_name ARROW '[' field_name_list ']'
 		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $4 ) ) ); }
 	;
@@ -1932,20 +1934,34 @@
 
 field_declaration:
-	type_specifier field_declaring_list ';'
-		{ $$ = distAttr( $1, $2 ); }
-	| EXTENSION type_specifier field_declaring_list ';'	// GCC
-		{ distExt( $3 ); $$ = distAttr( $2, $3 ); }		// mark all fields in list
-	| INLINE type_specifier field_declaring_list ';'	// CFA
-		{
-			if ( $2->type && ( $2->type->kind == TypeData::Aggregate || $2->type->kind == TypeData::AggregateInst ) ) {
-				if ( $2->type->kind == TypeData::Aggregate ) {
-					$2->type->aggregate.inLine = true;
-				} else {
-					$2->type->aggInst.inLine = true;
-				} // if
-				$$ = distAttr( $2, $3 );
+	type_specifier field_declaring_list_opt ';'
+		{
+			if ( $2 ) {									// field declarator ?
+				$$ = distAttr( $1, $2 );
+			} else if ( $1->type && $1->type->kind == TypeData::Aggregate && $1->type->aggregate.anon ) {
+				$$ = DeclarationNode::newName( nullptr );
+				$$ = distAttr( $1, $$ );				// mark all fields in list
 			} else {
-				SemanticError( yylloc, "inline qualifier only allowed for aggregate field declarations." ); $$ = nullptr;
-			} // if 
+				//SemanticError( yylloc, "Superfluous declaration, does not allocate storage." ); $$ = nullptr;
+				SemanticWarning( yylloc, Warning::SuperfluousDecl, "" );
+			} // if
+		}
+	| EXTENSION type_specifier field_declaring_list_opt ';'	// GCC
+		{
+			if ( $3 ) {									// field declarator ?
+				$$ = distAttr( $2, $3 );				// mark all fields in list
+				distExt( $3 );
+			} else if ( $2->type && $2->type->kind == TypeData::Aggregate && $2->type->aggregate.anon ) {
+				$$ = DeclarationNode::newName( nullptr );
+				$$ = distAttr( $2, $$ );				// mark all fields in list
+				distExt( $$ );
+			} else {
+				// SemanticError( yylloc, "Superfluous declaration, does not allocate storage." ); $$ = nullptr;
+				SemanticWarning( yylloc, Warning::SuperfluousDecl, "" );
+			} // if
+		}
+	| INLINE type_specifier field_abstract_list ';'		// CFA
+		{
+			$2->inLine = true;
+			$$ = distAttr( $2, $3 );					// mark all fields in list
 		}
 	| typedef_declaration ';'							// CFA
@@ -1953,38 +1969,55 @@
 	| EXTENSION cfa_field_declaring_list ';'			// GCC
 		{ distExt( $2 ); $$ = $2; }						// mark all fields in list
+	| INLINE cfa_field_abstract_list ';'				// CFA, new style field declaration
+		{ $$ = $2; }									// mark all fields in list
 	| cfa_typedef_declaration ';'						// CFA
 	| static_assert										// C11
 	;
 
+field_declaring_list_opt:
+	// empty
+		{ $$ = nullptr; }
+	| field_declarator
+	| field_declaring_list_opt ',' attribute_list_opt field_declarator
+		{ $$ = $1->appendList( $4->addQualifiers( $3 ) ); }
+	;
+
+field_declarator:
+	bit_subrange_size									// no field name
+		{ $$ = DeclarationNode::newBitfield( $1 ); }
+	| variable_declarator bit_subrange_size_opt
+		// A semantic check is required to ensure bit_subrange only appears on integral types.
+		{ $$ = $1->addBitfield( $2 ); }
+	| variable_type_redeclarator bit_subrange_size_opt
+		// A semantic check is required to ensure bit_subrange only appears on integral types.
+		{ $$ = $1->addBitfield( $2 ); }
+	;
+
+field_abstract_list:
+	field_abstract_opt
+	| field_abstract_list ',' attribute_list_opt field_abstract_opt
+		{ $$ = $1->appendList( $4->addQualifiers( $3 ) ); }
+	;
+
+field_abstract_opt:
+	// empty
+		{ $$ = DeclarationNode::newName( nullptr ); }
+	| bit_subrange_size									// no field name
+		// A semantic check is required to ensure bit_subrange only appears on integral types.
+		{ $$ = DeclarationNode::newBitfield( $1 ); }
+	| variable_abstract_declarator
+	;
+
 cfa_field_declaring_list:								// CFA, new style field declaration
-	cfa_abstract_declarator_tuple						// CFA, no field name
-	| cfa_abstract_declarator_tuple no_attr_identifier_or_type_name
+	cfa_abstract_declarator_tuple no_attr_identifier_or_type_name
 		{ $$ = $1->addName( $2 ); }
 	| cfa_field_declaring_list ',' no_attr_identifier_or_type_name
 		{ $$ = $1->appendList( $1->cloneType( $3 ) ); }
-	| cfa_field_declaring_list ','						// CFA, no field name
+	;
+
+cfa_field_abstract_list:								// CFA, new style field declaration
+	cfa_abstract_declarator_tuple
+	| cfa_field_abstract_list ','
 		{ $$ = $1->appendList( $1->cloneType( 0 ) ); }
-	;
-
-field_declaring_list:
-	field_declarator_opt
-	| field_declaring_list ',' attribute_list_opt field_declarator_opt
-		{ $$ = $1->appendList( $4->addQualifiers( $3 ) ); }
-	;
-
-field_declarator_opt:
-	// empty
-		{ $$ = DeclarationNode::newName( 0 ); /* XXX */ } // CFA, no field name
-	// '@'
-	// 	{ $$ = DeclarationNode::newName( new string( DeclarationNode::anonymous.newName() ) ); } // CFA, no field name
-	| bit_subrange_size									// no field name
-		{ $$ = DeclarationNode::newBitfield( $1 ); }
-	| variable_declarator bit_subrange_size_opt
-		// A semantic check is required to ensure bit_subrange only appears on base type int.
-		{ $$ = $1->addBitfield( $2 ); }
-	| variable_type_redeclarator bit_subrange_size_opt
-		// A semantic check is required to ensure bit_subrange only appears on base type int.
-		{ $$ = $1->addBitfield( $2 ); }
-	| variable_abstract_declarator						// CFA, no field name
 	;
 
@@ -2226,5 +2259,5 @@
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
 		{ $$ = new ExpressionNode( new RangeExpr( maybeMoveBuild< Expression >( $3 ), maybeMoveBuild< Expression >( $5 ) ) ); }
-	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
+	| '.' '[' push field_name_list pop ']'				// CFA, tuple field selector
 		{ $$ = $4; }
 	;
