You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/10/10 17:12:35 UTC

svn commit: r583506 - /harmony/enhanced/drlvm/trunk/vm/vmcore/include/Class.h

Author: gshimansky
Date: Wed Oct 10 08:12:35 2007
New Revision: 583506

URL: http://svn.apache.org/viewvc?rev=583506&view=rev
Log:
Applied patch from HARMONY-4923
[drlvm][em64t] Wrong change in HARMONY-4913


Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/Class.h

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/Class.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/Class.h?rev=583506&r1=583505&r2=583506&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/Class.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/Class.h Wed Oct 10 08:12:35 2007
@@ -1675,10 +1675,12 @@
      *         caller thread.*/
     ManagedObject* allocate_instance();
 
-    /** Calculates a size of the block allocated for the array, which is represented by 
+    /**
+	 * Calculates a size of the block allocated for the array, which is represented by 
      * the given class.
-     * @param[in] length - the length of the array
-     * @return The size of the array of specified length in bytes.*/
+     * @param[in] length the length of the array
+     * @return The size of the array of specified length in bytes, or 0 if the size is too big.
+	 */
     unsigned calculate_array_size(int length) const {
         if (length < 0) {
             return 0;
@@ -1696,14 +1698,13 @@
 
         // check overflow, we need:
         // first_elem_offset + (length << m_array_element_shift)
-        //      + GC_OBJECT_ALIGNMENT < NEXT_TO_HIGH_BIT_CLEAR_MASK
+        //      + GC_OBJECT_ALIGNMENT < NEXT_TO_HIGH_BIT_SET_MASK
         //
-        if (((NEXT_TO_HIGH_BIT_CLEAR_MASK - GC_OBJECT_ALIGNMENT - first_elem_offset)
-                    >> m_array_element_shift) < (unsigned)length) {
+        if (((NEXT_TO_HIGH_BIT_SET_MASK - GC_OBJECT_ALIGNMENT - first_elem_offset)
+                    >> m_array_element_shift) <= (unsigned)length) {
             // zero means overflow
             return 0;
         }
-
 
         unsigned size = first_elem_offset + (length << m_array_element_shift);
         size = (((size + (GC_OBJECT_ALIGNMENT - 1)) & (~(GC_OBJECT_ALIGNMENT - 1))));