From effcd47eef464765c84130b667ef296da104756e Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Fri, 9 Mar 2012 03:06:56 +0000 Subject: [PATCH] Make sure constant emission handles initializer lists with strings correctly. Part of . llvm-svn: 152370 --- clang/lib/CodeGen/CGExprConstant.cpp | 4 +++- clang/test/CodeGenCXX/static-init.cpp | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index 61c10bbe4f32..fb019f4d00ab 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -763,7 +763,9 @@ public: llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) { unsigned NumInitElements = ILE->getNumInits(); - if (NumInitElements == 1 && ILE->getType() == ILE->getInit(0)->getType() && + if (NumInitElements == 1 && + CGM.getContext().hasSameUnqualifiedType(ILE->getType(), + ILE->getInit(0)->getType()) && (isa(ILE->getInit(0)) || isa(ILE->getInit(0)))) return Visit(ILE->getInit(0)); diff --git a/clang/test/CodeGenCXX/static-init.cpp b/clang/test/CodeGenCXX/static-init.cpp index 9e2673cc967d..2db54c2c8b51 100644 --- a/clang/test/CodeGenCXX/static-init.cpp +++ b/clang/test/CodeGenCXX/static-init.cpp @@ -1,6 +1,7 @@ // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s // CHECK: @_ZZ1hvE1i = internal global i32 0, align 4 +// CHECK: @base_req = global [4 x i8] c"foo\00", align 1 // CHECK: @_ZZN5test1L6getvarEiE3var = internal constant [4 x i32] [i32 1, i32 0, i32 2, i32 4], align 16 // CHECK: @_ZZ2h2vE1i = linkonce_odr global i32 0 @@ -59,3 +60,6 @@ namespace test1 { void test() { (void) getvar(2); } } + +// Make sure we emit the initializer correctly for the following: +char base_req[] = { "foo" };