diff --git a/compiler2/ustring.hh b/compiler2/ustring.hh
index 02acb2598714776403047e5fb89df33b713587c0..0df60ceaa34d410c658670db028218bc7071cf1e 100644
--- a/compiler2/ustring.hh
+++ b/compiler2/ustring.hh
@@ -21,6 +21,7 @@
 #define _Common_ustring_HH
 
 #include <string.h>
+#include <limits.h>
 
 class string;
 
@@ -53,9 +54,9 @@ private:
 
 public:
 
-  /** The largest possible value of type size_t. That is, size_t(-1). */
+  /** The largest possible string length that can theoretically fit into the memory. */
   static const size_t max_string_len =
-    (-1 - sizeof(ustring_struct)) / sizeof(universal_char) + 1;
+    (UINT_MAX - sizeof(ustring_struct)) / sizeof(universal_char) + 1;
 
   /** Constructs an empty string. */
   ustring() : val_ptr(0) { init_struct(0); }