1 // RUN: %clang_cc1 -emit-llvm -o - %s 2 // <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 18 char s[]; 19 20 static void bar(void *db) { 21 eek(s); 22 } 23 24 char s[5] = "hi"; 25 26 int foo() { 27 bar(0); 28 } 29