Use the right definition when emitting a global variable. Fixes PR5564.

llvm-svn: 94555
This commit is contained in:
Anders Carlsson
2010-01-26 17:43:42 +00:00
parent 7228117108
commit ca4a5459d8
3 changed files with 20 additions and 3 deletions

View File

@@ -979,7 +979,9 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
QualType ASTTy = D->getType();
bool NonConstInit = false;
if (D->getInit() == 0) {
const Expr *InitExpr = D->getDefinition();
if (!InitExpr) {
// This is a tentative definition; tentative definitions are
// implicitly initialized with { 0 }.
//
@@ -992,10 +994,10 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type");
Init = EmitNullConstant(D->getType());
} else {
Init = EmitConstantExpr(D->getInit(), D->getType());
Init = EmitConstantExpr(InitExpr, D->getType());
if (!Init) {
QualType T = D->getInit()->getType();
QualType T = InitExpr->getType();
if (getLangOptions().CPlusPlus) {
EmitCXXGlobalVarDeclInitFunc(D);
Init = EmitNullConstant(T);