Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 68fe077a5764a46debddf5a5dc89ef3614748ccd)
+++ src/Parser/DeclarationNode.cc	(revision ddfd945b741f2ed2bdb7c54fa54688244b98c7de)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 07:59:40 2017
-// Update Count     : 1003
+// Last Modified On : Thu Mar 16 08:37:57 2017
+// Update Count     : 1006
 //
 
@@ -33,5 +33,4 @@
 
 // These must remain in the same order as the corresponding DeclarationNode enumerations.
-const char * DeclarationNode::FuncSpecifiers::Names[] = { "inline", "fortran", "_Noreturn", "NoFunctionSpecifierNames" };
 const char * DeclarationNode::basicTypeNames[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicTypeNames" };
 const char * DeclarationNode::complexTypeNames[] = { "_Complex", "_Imaginary", "NoComplexTypeNames" };
@@ -186,5 +185,5 @@
 } // DeclarationNode::newStorageClass
 
-DeclarationNode * DeclarationNode::newFuncSpecifier( FuncSpecifiers fs ) {
+DeclarationNode * DeclarationNode::newFuncSpecifier( Type::FuncSpecifiers fs ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->funcSpecs = fs;
@@ -448,7 +447,7 @@
 void DeclarationNode::checkSpecifiers( DeclarationNode * src ) {
 	if ( (funcSpecs.val & src->funcSpecs.val) != 0 ) {	// duplicates ?
-		for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) { // find duplicates
+		for ( unsigned int i = 0; i < Type::NumFuncSpecifier; i += 1 ) { // find duplicates
 			if ( funcSpecs[i] && src->funcSpecs[i] ) {
-				appendError( error, string( "duplicate " ) + FuncSpecifiers::Names[i] );
+				appendError( error, string( "duplicate " ) + Type::FuncSpecifiers::Names[i] );
 			} // if
 		} // for
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 68fe077a5764a46debddf5a5dc89ef3614748ccd)
+++ src/Parser/ParseNode.h	(revision ddfd945b741f2ed2bdb7c54fa54688244b98c7de)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 07:46:33 2017
-// Update Count     : 772
+// Last Modified On : Thu Mar 16 08:32:43 2017
+// Update Count     : 776
 //
 
@@ -201,28 +201,4 @@
 class DeclarationNode : public ParseNode {
   public:
-	enum { Inline = 1 << 0, Noreturn = 1 << 1, Fortran = 1 << 2, NumFuncSpecifier = 3 };
-	union FuncSpecifiers {
-		static const char * Names[];
-		unsigned int val;
-		struct {
-			bool is_inline : 1;
-			bool is_noreturn : 1;
-			bool is_fortran : 1;
-		};
-		FuncSpecifiers() : val( 0 ) {}
-		FuncSpecifiers( unsigned int val ) : val( val ) {}
-		bool operator[]( unsigned int i ) const { return val & (1 << i); }
-		bool any() const { return val != 0; }
-		void print( std::ostream & os ) const {
-			if ( (*this).any() ) {						// any function specifiers ?
-				for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) {
-					if ( (*this)[i] ) {
-						os << FuncSpecifiers::Names[i] << ' ';
-					} // if
-				} // for
-			} // if
-		}
-	}; // FuncSpecifiers
-
 	enum BasicType { Void, Bool, Char, Int, Float, Double, LongDouble, NoBasicType };
 	enum ComplexType { Complex, Imaginary, NoComplexType };
@@ -242,5 +218,5 @@
 
 	static DeclarationNode * newStorageClass( Type::StorageClasses );
-	static DeclarationNode * newFuncSpecifier( FuncSpecifiers );
+	static DeclarationNode * newFuncSpecifier( Type::FuncSpecifiers );
 	static DeclarationNode * newTypeQualifier( Type::Qualifiers );
 	static DeclarationNode * newBasicType( BasicType );
@@ -339,6 +315,6 @@
 	TypeData * type;
 
+	Type::FuncSpecifiers funcSpecs;
 	Type::StorageClasses storageClasses;
-	FuncSpecifiers funcSpecs;
 
 	ExpressionNode * bitfieldWidth;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 68fe077a5764a46debddf5a5dc89ef3614748ccd)
+++ src/Parser/TypeData.cc	(revision ddfd945b741f2ed2bdb7c54fa54688244b98c7de)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 07:54:50 2017
-// Update Count     : 558
+// Last Modified On : Thu Mar 16 08:32:42 2017
+// Update Count     : 559
 //
 
@@ -778,5 +778,5 @@
 } // buildTypeof
 
-Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, DeclarationNode::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
+Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
 	if ( td->kind == TypeData::Function ) {
 		if ( td->function.idList ) {					// KR function ?
@@ -814,5 +814,5 @@
 			break;
 		  default:
-			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType * >( buildDecl( td->base, "", Type::StorageClasses(), nullptr, DeclarationNode::FuncSpecifiers(), LinkageSpec::Cforall, nullptr ) ) );
+			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType * >( buildDecl( td->base, "", Type::StorageClasses(), nullptr, Type::FuncSpecifiers(), LinkageSpec::Cforall, nullptr ) ) );
 		} // switch
 	} else {
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 68fe077a5764a46debddf5a5dc89ef3614748ccd)
+++ src/Parser/TypeData.h	(revision ddfd945b741f2ed2bdb7c54fa54688244b98c7de)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 07:53:41 2017
-// Update Count     : 184
+// Last Modified On : Thu Mar 16 08:32:39 2017
+// Update Count     : 185
 //
 
@@ -109,5 +109,5 @@
 TupleType * buildTuple( const TypeData * );
 TypeofType * buildTypeof( const TypeData * );
-Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, DeclarationNode::FuncSpecifiers funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
+Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
 FunctionType * buildFunction( const TypeData * );
 void buildKRFunction( const TypeData::Function_t & function );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 68fe077a5764a46debddf5a5dc89ef3614748ccd)
+++ src/Parser/parser.yy	(revision ddfd945b741f2ed2bdb7c54fa54688244b98c7de)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 08:00:59 2017
-// Update Count     : 2309
+// Last Modified On : Thu Mar 16 08:36:17 2017
+// Update Count     : 2310
 //
 
@@ -1460,9 +1460,9 @@
 		// Put function specifiers here to simplify parsing rules, but separate them semantically.
 	| INLINE											// C99
-		{ $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Inline ); }
+		{ $$ = DeclarationNode::newFuncSpecifier( Type::Inline ); }
 	| FORTRAN											// C99
-		{ $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Fortran ); }
+		{ $$ = DeclarationNode::newFuncSpecifier( Type::Fortran ); }
 	| NORETURN											// C11
-		{ $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Noreturn ); }
+		{ $$ = DeclarationNode::newFuncSpecifier( Type::Noreturn ); }
 	;
 
