--- Merging r128619 into '.':
U    gcc/fold-const.c

llvm-svn: 128660
diff --git a/llvm-gcc-4.2/gcc/fold-const.c b/llvm-gcc-4.2/gcc/fold-const.c
index 8e0316e..3921ed2 100644
--- a/llvm-gcc-4.2/gcc/fold-const.c
+++ b/llvm-gcc-4.2/gcc/fold-const.c
@@ -12841,11 +12841,21 @@
 
    case ADDR_EXPR:
       {
-	tree base = get_base_address (TREE_OPERAND (t, 0));
+        tree targ0 = TREE_OPERAND (t, 0);
+	tree base = get_base_address (targ0);
 
 	if (!base)
 	  return false;
 
+        /* LLVM LOCAL begin */
+#ifdef ENABLE_LLVM
+        /* Support the "array ref with pointer base" extension. */
+        if (TREE_CODE (targ0) == ARRAY_REF &&
+            TREE_CODE (TREE_TYPE (TREE_OPERAND(targ0, 0))) != ARRAY_TYPE)
+          return false;
+#endif
+        /* LLVM LOCAL end */
+
 	/* Weak declarations may link to NULL.  */
 	if (VAR_OR_FUNCTION_DECL_P (base))
 	  return !DECL_WEAK (base);