From 44456d294c827525c9f23a1c5dafa213c656ddfe Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 6 May 2010 06:35:23 +0000 Subject: [PATCH] simplify EmitAggMemberInitializer a bit and make it work in 32-bit mode, fixing PR7063. llvm-svn: 103171 --- clang/lib/CodeGen/CGClass.cpp | 5 ++-- .../CodeGenCXX/array-value-initialize.cpp | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp index f3f4d424789b..72d95b8556c9 100644 --- a/clang/lib/CodeGen/CGClass.cpp +++ b/clang/lib/CodeGen/CGClass.cpp @@ -397,10 +397,9 @@ static void EmitAggMemberInitializer(CodeGenFunction &CGF, // Generate: if (loop-index < number-of-elements) fall to the loop body, // otherwise, go to the block after the for-loop. uint64_t NumElements = Array->getSize().getZExtValue(); - llvm::Value * NumElementsPtr = - llvm::ConstantInt::get(llvm::Type::getInt64Ty(CGF.getLLVMContext()), - NumElements); llvm::Value *Counter = CGF.Builder.CreateLoad(IndexVar); + llvm::Value *NumElementsPtr = + llvm::ConstantInt::get(Counter->getType(), NumElements); llvm::Value *IsLess = CGF.Builder.CreateICmpULT(Counter, NumElementsPtr, "isless"); diff --git a/clang/test/CodeGenCXX/array-value-initialize.cpp b/clang/test/CodeGenCXX/array-value-initialize.cpp index 5fe6c2022d8f..8a3d5ff8b6f5 100644 --- a/clang/test/CodeGenCXX/array-value-initialize.cpp +++ b/clang/test/CodeGenCXX/array-value-initialize.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -emit-llvm -o - %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s +// RUN: %clang_cc1 -triple i386-apple-darwin -emit-llvm -o - %s // PR5463 extern "C" int printf(...); @@ -21,8 +22,31 @@ struct Foo { S sbar_[5]; }; -int main(void) -{ +int test1(void) { Foo a; } +// PR7063 + + +struct Unit +{ + Unit() {} + Unit(const Unit& v) {} +}; + + +struct Stuff +{ + Unit leafPos[1]; +}; + + +int main() +{ + + Stuff a; + Stuff b = a; + + return 0; +} \ No newline at end of file