From f96bdf409fc9e5570e35aaf8a9167265e63d58d8 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 3 Jan 2011 19:23:18 +0000 Subject: [PATCH] Consider zero-length array of structs when computing ivar layouts for objc-gc. Fixes // rdar://8800513 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122762 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGObjCMac.cpp | 2 +- test/CodeGenObjC/ivar-layout-array0-struct.m | 22 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenObjC/ivar-layout-array0-struct.m diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 66913c8ee2..2a27e91925 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -3681,7 +3681,7 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCImplementationDecl *OI, assert(!FQT->isUnionType() && "layout for array of unions not supported"); - if (FQT->isRecordType()) { + if (FQT->isRecordType() && ElCount) { int OldIndex = IvarsInfo.size() - 1; int OldSkIndex = SkipIvars.size() -1; diff --git a/test/CodeGenObjC/ivar-layout-array0-struct.m b/test/CodeGenObjC/ivar-layout-array0-struct.m new file mode 100644 index 0000000000..4300db3641 --- /dev/null +++ b/test/CodeGenObjC/ivar-layout-array0-struct.m @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fobjc-gc -triple x86_64-apple-darwin -O0 -S %s -o %t-64.s +// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s + +// rdar://8800513 +@interface NSObject { + id isa; +} +@end + +typedef struct { + id b; +} st; + +@interface Test : NSObject { + int a; + st b[0]; +} +@end + +@implementation Test @end +// CHECK-LP64: L_OBJC_CLASS_NAME_4: +// CHECK-LP64-NEXT: .asciz "\001\020" -- 2.50.1