From: Fariborz Jahanian Date: Mon, 3 Jan 2011 19:23:18 +0000 (+0000) Subject: Consider zero-length array of structs when X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f96bdf409fc9e5570e35aaf8a9167265e63d58d8;p=clang 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 --- 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"