From 985f73960ac76842da4b10c30ca87a282ff9aa31 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103171 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGClass.cpp | 5 ++-- test/CodeGenCXX/array-value-initialize.cpp | 30 +++++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index f3f4d42478..72d95b8556 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/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/test/CodeGenCXX/array-value-initialize.cpp b/test/CodeGenCXX/array-value-initialize.cpp index 5fe6c2022d..8a3d5ff8b6 100644 --- a/test/CodeGenCXX/array-value-initialize.cpp +++ b/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 -- 2.40.0