Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision d8c4fab272f2ae72b12e1733b551d14ecc326194)
+++ src/CodeGen/CodeGenerator.cc	(revision 30d91e4132fb7ec560dd389474deafbfd0d57555)
@@ -276,5 +276,5 @@
 		std::list< Declaration* > &memb = enumDecl->get_members();
 		if (enumDecl->base && ! memb.empty()) {
-			ObjectDecl * last = nullptr;
+			unsigned long long last_val = -1;
 			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
 				ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
@@ -284,16 +284,20 @@
 				output << mangleName( obj ) << " ";
 				output << " = ";
-				output << "(" << genType(enumDecl->base, "", options) << ")";;
-				if ( obj->get_init() ) {
-					obj->get_init()->accept( *visitor );
+				output << "(" << genType(enumDecl->base, "", options) << ")";
+				if ( (BasicType *)(enumDecl->base) && ((BasicType *)(enumDecl->base))->isWholeNumber() ) {
+					if ( obj->get_init() ) {
+						obj->get_init()->accept( *visitor );
+						last_val = ((ConstantExpr *)(((SingleInit *)(obj->init))->value))->constant.get_ival();
+					} else {
+						output << ++last_val;
+					} // if
 				} else {
-					if (last == nullptr) {
-						output << 0;
+					if ( obj->get_init() ) {
+						obj->get_init()->accept( *visitor ); 
 					} else {
-						output << mangleName(last) << " + 1";
+						// Should not reach here!
 					}
-				} // if—
+				}
 				output << ";" << endl;
-				last = obj;
 			} // for
 		} else {
