From: Eli Friedman Date: Fri, 9 Mar 2012 03:06:56 +0000 (+0000) Subject: Make sure constant emission handles initializer lists with strings correctly. Part... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8b42ab718d89ce458145118ec2071edd28b66a9a;p=clang Make sure constant emission handles initializer lists with strings correctly. Part of . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152370 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index 61c10bbe4f..fb019f4d00 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/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/test/CodeGenCXX/static-init.cpp b/test/CodeGenCXX/static-init.cpp index 9e2673cc96..2db54c2c8b 100644 --- a/test/CodeGenCXX/static-init.cpp +++ b/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" };