[PCH] When serializing Stmts, keep track of when sub statements are referenced again and
in such a case just write out a reference of a previously serialized Stmt, instead
of serializing it all over again.

This saves memory + space + [de]serializing time, and avoids blowing up memory
with pathological cases. rdar://10293911

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142696 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/PCH/designated-init.c.h b/test/PCH/designated-init.c.h
new file mode 100644
index 0000000..63b1f79
--- /dev/null
+++ b/test/PCH/designated-init.c.h
@@ -0,0 +1,42 @@
+static void *FooToken = &FooToken;
+static void *FooTable[256] = {
+    [0x3] = (void *[256]) { // 1
+        [0x5b] = (void *[256]) { // 2
+            [0x81] = (void *[256]) { // 3
+                [0x42] = (void *[256]) { // 4
+                    [0xa2] = (void *[256]) { // 5
+                        [0xe] = (void *[256]) { // 6
+                            [0x20] = (void *[256]) { // 7
+                                [0xd7] = (void *[256]) { // 8
+                                    [0x39] = (void *[256]) { // 9
+                                        [0xf1] = (void *[256]) { // 10
+                                            [0xa4] = (void *[256]) { // 11
+                                                [0xa8] = (void *[256]) { // 12
+                                                    [0x21] = (void *[256]) { // 13
+                                                        [0x86] = (void *[256]) { // 14
+                                                            [0x1d] = (void *[256]) { // 15
+                                                                [0xdc] = (void *[256]) { // 16
+                                                                    [0xa5] = (void *[256]) { // 17
+                                                                        [0xef] = (void *[256]) { // 18
+                                                                            [0x9] = (void *[256]) { // 19
+                                                                                [0x34] = &FooToken,
+                                                                            },
+                                                                        },
+                                                                    },
+                                                                },
+                                                            },
+                                                        },
+                                                    },
+                                                },
+                                            },
+                                        },
+                                    },
+                                },
+                            },
+                        },
+                    },
+                },
+            },
+        },
+    }
+};