diff options
-rw-r--r-- | lib/CodeGen/CGDecl.cpp | 2 | ||||
-rw-r--r-- | test/CodeGen/const-init.c | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 8ce196b64e..5017ce720c 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -203,7 +203,7 @@ CodeGenFunction::AddInitializerToGlobalBlockVarDecl(const VarDecl &D, // the global to match the initializer. (We have to do this // because some types, like unions, can't be completely represented // in the LLVM type system.) - if (GV->getType() != Init->getType()) { + if (GV->getType()->getElementType() != Init->getType()) { llvm::GlobalVariable *OldGV = GV; GV = new llvm::GlobalVariable(CGM.getModule(), Init->getType(), diff --git a/test/CodeGen/const-init.c b/test/CodeGen/const-init.c index c7a53be02c..ac26b65e68 100644 --- a/test/CodeGen/const-init.c +++ b/test/CodeGen/const-init.c @@ -117,9 +117,14 @@ struct g22 {int x;} __attribute((packed)); struct g23 {char a; short b; char c; struct g22 d;}; struct g23 g24 = {1,2,3,4}; -// CHECK: @__func__.g25 = private constant [4 x i8] c"g25\00" // CHECK: @g25.g26 = internal global i8* getelementptr inbounds ([4 x i8]* @__func__.g25, i32 0, i32 0) +// CHECK: @__func__.g25 = private constant [4 x i8] c"g25\00" int g25() { static const char *g26 = __func__; return *g26; } + +// CHECK: @g27.x = internal global i8* bitcast (i8** @g27.x to i8*), align 4 +void g27() { // PR8073 + static void *x = &x; +} |