unbreak overflow detection in gcc 4.4.3 (4.x?)
diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c
index 1a16ba8..7794bd4 100644
--- a/skeletons/GeneralizedTime.c
+++ b/skeletons/GeneralizedTime.c
@@ -314,7 +314,8 @@
 		while(fd > frac_digits)
 			fv /= 10, fd--;
 		while(fd < frac_digits) {
-			int new_fv = fv * 10;
+			int volatile new_fv = fv * 10;
+			/* GCC 4.x is being too smart without volatile */
 			if(new_fv / 10 != fv) {
 				/* Too long precision request */
 				fv = 0;
@@ -441,7 +442,8 @@
 		 */
 		for(buf++; buf < end; buf++) {
 			int v = *buf;
-			int new_fvalue;
+			int volatile new_fvalue;
+			/* GCC 4.x is being too smart without volatile */
 			switch(v) {
 			case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
 			case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index 5b10315..e7a5ba6 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -396,7 +396,9 @@
 			}
 
 		    {
-			long new_value = value * 10;
+			long volatile new_value = value * 10;
+			/* GCC 4.x optimizes (new_value) without `volatile'
+			 * so the following check does not detect overflow. */
 
 			if(new_value / 10 != value)
 				/* Overflow */
diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
index 0d7043e..ed083f8 100644
--- a/skeletons/OBJECT_IDENTIFIER.c
+++ b/skeletons/OBJECT_IDENTIFIER.c
@@ -691,7 +691,8 @@
 			value = 0;
 		}
 		if(1) {
-			long new_value = value * 10;
+			long volatile new_value = value * 10;
+			/* GCC 4.x is being too smart without volatile */
 			if(new_value / 10 != value
 			|| (value = new_value + (*oid_text - 0x30)) < 0) {
 				/* Overflow */