]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/2008-07-30-redef-of-bitcasted-decl.c
Vendor import of clang RELEASE_360/rc2 tag r227651 (effectively, 3.6.0 RC2):
[FreeBSD/FreeBSD.git] / test / CodeGen / 2008-07-30-redef-of-bitcasted-decl.c
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 }