Revision: 128707
Author:   clattner
Date:     2007-06-21 16:49:16 -0700 (Thu, 21 Jun 2007)

Log Message:
-----------
Check in Rafael's hack that works around PR1521, allowing bootstrap on x86-64.
This should be reverted when PR1521 is fixed.

Modified Paths:
--------------
    apple-local/branches/llvm/gcc/c-lex.c

Modified: apple-local/branches/llvm/gcc/c-lex.c
===================================================================
--- apple-local/branches/llvm/gcc/c-lex.c       2007-06-21 23:28:14 UTC (rev 
128706)
+++ apple-local/branches/llvm/gcc/c-lex.c       2007-06-21 23:49:16 UTC (rev 
128707)
@@ -818,6 +818,36 @@
   return itk_none;
 }
 
+/* APPLE LOCAL begin llvm hack for PR1521 */
+#define PART_PRECISION (sizeof (cpp_num_part) * CHAR_BIT)
+/* Sign extend a number, with PRECISION significant bits and all
+   others assumed clear, to fill out a cpp_num structure.  */
+static cpp_num
+my_cpp_num_sign_extend (cpp_num num, size_t precision)
+{
+  if (num.high)
+    printf("%lu\n", num.high);
+  if (!num.unsignedp)
+    {
+      if (precision > PART_PRECISION)
+       {
+         precision -= PART_PRECISION;
+         if (precision < PART_PRECISION
+             && (num.high & (cpp_num_part) 1 << (precision - 1)))
+           num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
+       }
+      else if (num.low & (cpp_num_part) 1 << (precision - 1))
+       {
+         if (precision < PART_PRECISION)
+           num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
+         num.high = ~(cpp_num_part) 0;
+       }
+    }
+
+  return num;
+}
+/* APPLE LOCAL llvm end */
+
 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib.  */
 static tree
 interpret_integer (const cpp_token *token, unsigned int flags)
@@ -828,7 +858,8 @@
   cpp_options *options = cpp_get_options (parse_in);
 
   integer = cpp_interpret_integer (parse_in, token, flags);
-  integer = cpp_num_sign_extend (integer, options->precision);
+  /* APPLE LOCAL llvm hack for PR1521 */
+  integer = my_cpp_num_sign_extend (integer, options->precision);
 
   /* The type of a constant with a U suffix is straightforward.  */
   if (flags & CPP_N_UNSIGNED)


_______________________________________________
llvm-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to