--- generic/tclExecute.c
+++ generic/tclExecute.c
@@ -5074,8 +5074,7 @@
     if (valuePtr->typePtr == &tclIntType) {
 	i = valuePtr->internalRep.longValue;
 	if (i < 0) {
-	    iResult = -i;
-	    if (iResult < 0) {
+	    if (i == LONG_MIN) {
 #ifdef TCL_WIDE_INT_IS_LONG
 		Tcl_SetObjResult(interp, Tcl_NewStringObj(
 			"integer value too large to represent", -1));
@@ -5094,6 +5093,7 @@
 #endif
 
 	    }
+	    iResult = -i;
 	} else {
 	    iResult = i;
 	}	    
