|  | // RUN: %clang_cc1 -emit-llvm -o - %s | 
|  | // <rdar://problem/6108358> | 
|  |  | 
|  | /* For posterity, the issue here begins initial "char []" decl for | 
|  | * s. This is a tentative definition and so a global was being | 
|  | * emitted, however the mapping in GlobalDeclMap referred to a bitcast | 
|  | * of this global. | 
|  | * | 
|  | * The problem was that later when the correct definition for s is | 
|  | * emitted we were doing a RAUW on the old global which was destroying | 
|  | * the bitcast in the GlobalDeclMap (since it cannot be replaced | 
|  | * properly), leaving a dangling pointer. | 
|  | * | 
|  | * The purpose of bar is just to trigger a use of the old decl | 
|  | * sometime after the dangling pointer has been introduced. | 
|  | */ | 
|  |  | 
|  | char s[]; | 
|  |  | 
|  | static void bar(void *db) { | 
|  | eek(s); | 
|  | } | 
|  |  | 
|  | char s[5] = "hi"; | 
|  |  | 
|  | int foo() { | 
|  | bar(0); | 
|  | } |