Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision f64d9bc3d1151a54563d4b33bc6697f5b126435a)
+++ src/ResolvExpr/CurrentObject.cc	(revision 4b97770cddc6c963b957ff9691018b2a164df9af)
@@ -125,4 +125,5 @@
 			base = at->get_base();
 			memberIter = createMemberIterator( base );
+			if ( at->isVarLen ) throw SemanticError( "VLA initialization does not support @=", at );
 			setSize( at->get_dimension() );
 		}
@@ -135,7 +136,10 @@
 		void setSize( Expression * expr ) {
 			if ( ConstantExpr * constExpr = dynamic_cast< ConstantExpr * >( expr ) ) {
-				size = constExpr->intValue();
-				isVLA = false;
-				PRINT( std::cerr << "array type with size: " << size << std::endl; )
+				try {
+					size = constExpr->intValue();
+					PRINT( std::cerr << "array type with size: " << size << std::endl; )
+				} catch ( SemanticError & ) {
+					throw SemanticError( "Constant expression of non-integral type in array dimension: ", expr );
+				}
 			}	else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
 				setSize( castExpr->get_arg() ); // xxx - need to perform the conversion specified by the cast
@@ -145,5 +149,4 @@
 					if ( inst->baseEnum->valueOf( varExpr->var, value ) ) {
 						size = value;
-						isVLA = false;
 					}
 				}
@@ -157,5 +160,9 @@
 			// need to permit integer-constant-expressions, including: integer constants, enumeration constants, character constants, sizeof expressions, _Alignof expressions, cast expressions
 			if ( ConstantExpr * constExpr = dynamic_cast< ConstantExpr * >( expr ) ) {
-				index = constExpr->intValue();
+				try {
+					index = constExpr->intValue();
+				} catch( SemanticError & ) {
+					throw SemanticError( "Constant expression of non-integral type in array designator: ", expr );
+				}
 			} else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
 				setPosition( castExpr->get_arg() );
@@ -186,5 +193,5 @@
 		}
 
-		virtual operator bool() const { return ! isVLA && index < size; }
+		virtual operator bool() const { return index < size; }
 
 		virtual MemberIterator & bigStep() {
@@ -192,5 +199,5 @@
 			++index;
 			delete memberIter;
-			if ( ! isVLA && index < size ) memberIter = createMemberIterator( base );
+			if ( index < size ) memberIter = createMemberIterator( base );
 			else memberIter = nullptr;
 			return *this;
@@ -239,5 +246,4 @@
 		size_t index = 0;
 		size_t size = 0;
-		bool isVLA = true;
 		MemberIterator * memberIter = nullptr;
 	};
