From 36882c8f24c72d844a9079b73332ec17aa2d170f Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 12 May 2011 19:07:41 +0000 Subject: [PATCH] Use DW_AT_APPLE_objc_class_extension attribute to identify interfaces that represent class extension. Radar 9423077. llvm-svn: 131239 --- clang/lib/CodeGen/CGDebugInfo.cpp | 7 ++++++- .../test/CodeGenObjC/debug-info-class-extension.m | 15 +++++++++++++++ .../CodeGenObjC/debug-info-class-extension2.m | 14 ++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGenObjC/debug-info-class-extension.m create mode 100644 clang/test/CodeGenObjC/debug-info-class-extension2.m diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 3c411f4ffedd..3519cd1f385a 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -1241,9 +1241,14 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty, uint64_t Size = CGM.getContext().getTypeSize(Ty); uint64_t Align = CGM.getContext().getTypeAlign(Ty); + unsigned Flags = 0; + if (ID->getFirstClassExtension() || + (ID->getImplementation() && !ID->getImplementation()->ivar_empty())) + Flags |= llvm::DIDescriptor::FlagObjcClassExtension; + llvm::DIType RealDecl = DBuilder.createStructType(Unit, ID->getName(), DefUnit, - Line, Size, Align, 0, + Line, Size, Align, Flags, Elements, RuntimeLang); // Now that we have a real decl for the struct, replace anything using the diff --git a/clang/test/CodeGenObjC/debug-info-class-extension.m b/clang/test/CodeGenObjC/debug-info-class-extension.m new file mode 100644 index 000000000000..48e6f509d987 --- /dev/null +++ b/clang/test/CodeGenObjC/debug-info-class-extension.m @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fobjc-nonfragile-abi -masm-verbose -S -g %s -o - | FileCheck %s + +// CHECK: AT_APPLE_objc_class_extension + +@interface I1 +@end + +@implementation I1 { +int myi2; +} +int myi; +@end + +void foo(I1 *iptr) {} + diff --git a/clang/test/CodeGenObjC/debug-info-class-extension2.m b/clang/test/CodeGenObjC/debug-info-class-extension2.m new file mode 100644 index 000000000000..6b1a7f188f5a --- /dev/null +++ b/clang/test/CodeGenObjC/debug-info-class-extension2.m @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -fobjc-nonfragile-abi -masm-verbose -S -g %s -o - | FileCheck %s +// CHECK: AT_APPLE_objc_class_extension + +@interface Foo {} @end + +@interface Foo () { + int *bar; +} +@end + +@implementation Foo +@end + +void bar(Foo *fptr) {}