blob: 546590eba64c5f079876e21a0ce8d322dd1fd7a7 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -emit-llvm -o - %s
Daniel Dunbar9986eab2008-07-30 16:32:24 +00002// <rdar://problem/6108358>
3
4/* For posterity, the issue here begins initial "char []" decl for
5 * s. This is a tentative definition and so a global was being
6 * emitted, however the mapping in GlobalDeclMap referred to a bitcast
7 * of this global.
8 *
9 * The problem was that later when the correct definition for s is
10 * emitted we were doing a RAUW on the old global which was destroying
11 * the bitcast in the GlobalDeclMap (since it cannot be replaced
12 * properly), leaving a dangling pointer.
13 *
14 * The purpose of bar is just to trigger a use of the old decl
15 * sometime after the dangling pointer has been introduced.
16 */
17
18char s[];
19
20static void bar(void *db) {
21 eek(s);
22}
23
24char s[5] = "hi";
25
26int foo() {
27 bar(0);
28}