Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision f43df7359a563135ee2a3401a290c3f7ccdeccf5)
+++ src/Parser/ExpressionNode.cc	(revision b3f252a219989f7ab8f2f00efbcad32b69910b55)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Sep  1 22:57:24 2017
-// Update Count     : 625
+// Last Modified On : Sun Sep  3 22:21:21 2017
+// Update Count     : 639
 //
 
@@ -218,16 +218,28 @@
 } // build_constantChar
 
-ConstantExpr * build_constantStr( string & str ) {
+Expression * build_constantStr( string & str ) {
 	string units;										// units
 	sepString( str, units, '"' );						// separate constant from units
 
-	ArrayType * at = new ArrayType( noQualifiers, new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ),
+	BasicType::Kind strtype = BasicType::Char;			// default string type
+	switch ( str[0] ) {									// str has >= 2 characters, i.e, null string ""
+	  case 'u':
+		if ( str[1] == '8' ) break;						// utf-8 characters
+		strtype = BasicType::ShortUnsignedInt;
+		break;
+	  case 'U':
+		strtype = BasicType::UnsignedInt;
+		break;
+	  case 'L':
+		strtype = BasicType::SignedInt;
+		break;
+	} // switch
+	ArrayType * at = new ArrayType( noQualifiers, new BasicType( Type::Qualifiers( Type::Const ), strtype ),
 									new ConstantExpr( Constant::from_ulong( str.size() + 1 - 2 ) ), // +1 for '\0' and -2 for '"'
 									false, false );
-	ConstantExpr * ret = new ConstantExpr( Constant( at, str, (unsigned long long int)0 ) ); // constant 0 is ignored for pure string value
-// ROB: type mismatch
-	// if ( units.length() != 0 ) {
-	// 	ret = new UntypedExpr( new NameExpr( units ), { ret } );
-	// } // if
+	Expression * ret = new ConstantExpr( Constant( at, str, (unsigned long long int)0 ) ); // constant 0 is ignored for pure string value
+	if ( units.length() != 0 ) {
+		ret = new UntypedExpr( new NameExpr( units ), { ret } );
+	} // if
 
 	delete &str;										// created by lex
@@ -410,5 +422,5 @@
 } // build_range
 
-Expression * build_asmexpr( ExpressionNode * inout, ConstantExpr * constraint, ExpressionNode * operand ) {
+Expression * build_asmexpr( ExpressionNode * inout, Expression * constraint, ExpressionNode * operand ) {
 	return new AsmExpr( maybeMoveBuild< Expression >( inout ), constraint, maybeMoveBuild< Expression >(operand) );
 } // build_asmexpr
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision f43df7359a563135ee2a3401a290c3f7ccdeccf5)
+++ src/Parser/ParseNode.h	(revision b3f252a219989f7ab8f2f00efbcad32b69910b55)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 31 17:42:49 2017
-// Update Count     : 797
+// Last Modified On : Sun Sep  3 19:24:34 2017
+// Update Count     : 799
 //
 
@@ -165,5 +165,5 @@
 Expression * build_constantFloat( std::string &str );
 Expression * build_constantChar( std::string &str );
-ConstantExpr * build_constantStr( std::string &str );
+Expression * build_constantStr( std::string &str );
 Expression * build_field_name_FLOATINGconstant( const std::string & str );
 Expression * build_field_name_fraction_constants( Expression * fieldName, ExpressionNode * fracts );
@@ -197,5 +197,5 @@
 Expression * build_func( ExpressionNode * function, ExpressionNode * expr_node );
 Expression * build_range( ExpressionNode * low, ExpressionNode * high );
-Expression * build_asmexpr( ExpressionNode * inout, ConstantExpr * constraint, ExpressionNode * operand );
+Expression * build_asmexpr( ExpressionNode * inout, Expression * constraint, ExpressionNode * operand );
 Expression * build_valexpr( StatementNode * s );
 Expression * build_compoundLiteral( DeclarationNode * decl_node, InitializerNode * kids );
@@ -330,5 +330,5 @@
 	bool hasEllipsis;
 	LinkageSpec::Spec linkage;
-	ConstantExpr *asmName;
+	Expression *asmName;
 	std::list< Attribute * > attributes;
 	InitializerNode * initializer;
@@ -413,5 +413,5 @@
 Statement * build_finally( StatementNode * stmt );
 Statement * build_compound( StatementNode * first );
-Statement * build_asmstmt( bool voltile, ConstantExpr * instruction, ExpressionNode * output = nullptr, ExpressionNode * input = nullptr, ExpressionNode * clobber = nullptr, LabelNode * gotolabels = nullptr );
+Statement * build_asmstmt( bool voltile, Expression * instruction, ExpressionNode * output = nullptr, ExpressionNode * input = nullptr, ExpressionNode * clobber = nullptr, LabelNode * gotolabels = nullptr );
 WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when );
 WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when, WaitForStmt * existing );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision f43df7359a563135ee2a3401a290c3f7ccdeccf5)
+++ src/Parser/StatementNode.cc	(revision b3f252a219989f7ab8f2f00efbcad32b69910b55)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 17 16:01:31 2017
-// Update Count     : 345
+// Last Modified On : Fri Sep  1 23:25:23 2017
+// Update Count     : 346
 //
 
@@ -300,5 +300,5 @@
 }
 
-Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) {
+Statement *build_asmstmt( bool voltile, Expression *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) {
 	std::list< Expression * > out, in;
 	std::list< ConstantExpr * > clob;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision f43df7359a563135ee2a3401a290c3f7ccdeccf5)
+++ src/Parser/TypeData.cc	(revision b3f252a219989f7ab8f2f00efbcad32b69910b55)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 15:12:51 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Mon Aug 14 10:41:00 2017
-// Update Count     : 568
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Sep  1 23:13:38 2017
+// Update Count     : 569
 //
 
@@ -814,5 +814,5 @@
 } // buildTypeof
 
-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 ) {
+Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, Expression *asmName, Initializer * init, std::list< Attribute * > attributes ) {
 	if ( td->kind == TypeData::Function ) {
 		if ( td->function.idList ) {					// KR function ?
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision f43df7359a563135ee2a3401a290c3f7ccdeccf5)
+++ src/Parser/TypeData.h	(revision b3f252a219989f7ab8f2f00efbcad32b69910b55)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 15:18:36 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Mon Aug 14 10:38:00 2017
-// Update Count     : 189
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Sep  1 23:33:45 2017
+// Update Count     : 190
 //
 
@@ -118,5 +118,5 @@
 TupleType * buildTuple( const TypeData * );
 TypeofType * buildTypeof( const TypeData * );
-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 * >() );
+Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec, Expression * 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 f43df7359a563135ee2a3401a290c3f7ccdeccf5)
+++ src/Parser/parser.yy	(revision b3f252a219989f7ab8f2f00efbcad32b69910b55)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 30 07:04:19 2017
-// Update Count     : 2740
+// Last Modified On : Sun Sep  3 20:43:19 2017
+// Update Count     : 2742
 //
 
@@ -100,5 +100,5 @@
 	StatementNode * sn;
 	WaitForStmt * wfs;
-	ConstantExpr * constant;
+	Expression * constant;
 	IfCtl * ifctl;
 	ForCtl * fctl;
