Author: mren Date: Sat Feb 20 23:31:05 2016 New Revision: 261466 URL: http://llvm.org/viewvc/llvm-project?rev=261466&view=rev Log: Class Property: Fix a crash with old ABI when generating metadata in classes.
rdar://23891898 Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp cfe/trunk/test/CodeGenObjC/metadata-class-properties.m Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=261466&r1=261465&r2=261466&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original) +++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Sat Feb 20 23:31:05 2016 @@ -3446,8 +3446,10 @@ CGObjCMac::EmitClassExtension(const ObjC llvm::Constant *Values[3]; Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); - Values[1] = nullptr; - if (!isClassProperty) + if (isClassProperty) { + llvm::Type *PtrTy = CGM.Int8PtrTy; + Values[1] = llvm::Constant::getNullValue(PtrTy); + } else Values[1] = BuildWeakIvarLayout(ID, CharUnits::Zero(), InstanceSize, hasMRCWeakIvars); if (isClassProperty) Modified: cfe/trunk/test/CodeGenObjC/metadata-class-properties.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/metadata-class-properties.m?rev=261466&r1=261465&r2=261466&view=diff ============================================================================== --- cfe/trunk/test/CodeGenObjC/metadata-class-properties.m (original) +++ cfe/trunk/test/CodeGenObjC/metadata-class-properties.m Sat Feb 20 23:31:05 2016 @@ -6,6 +6,9 @@ // CHECK: @"\01l_OBJC_$_CLASS_PROP_LIST_Foo_$_Category" = private global {{.*}} section "__DATA, __objc_const", align 8 // CHECK: @"\01l_OBJC_$_CATEGORY_Foo_$_Category" = private global %struct._category_t { {{.*}} @"\01l_OBJC_$_CLASS_PROP_LIST_Foo_$_Category" {{.*}} }, section "__DATA, __objc_const", align 8 +// CHECK: @"\01l_OBJC_$_CLASS_PROP_LIST_C" = private global {{.*}} section "__DATA, __objc_const", align 8 +// CHECK: @"\01l_OBJC_METACLASS_RO_$_C" = private global %struct._class_ro_t { {{.*}} @"\01l_OBJC_$_CLASS_PROP_LIST_C" {{.*}} }, section "__DATA, __objc_const", align 8 + // CHECK: !{i32 1, !"Objective-C Class Properties", i32 64} // CHECK-FRAGILE: @"OBJC_$_CLASS_PROP_PROTO_LIST_Proto" = private global {{.*}} section "__OBJC,__property,regular,no_dead_strip", align 8 @@ -13,6 +16,9 @@ // CHECK-FRAGILE: @"\01l_OBJC_$_CLASS_PROP_LIST_Foo_Category" = private global {{.*}} section "__OBJC,__property,regular,no_dead_strip", align 8 // CHECK-FRAGILE: @OBJC_CATEGORY_Foo_Category = private global %struct._objc_category { {{.*}}, i32 64, {{.*}} @"\01l_OBJC_$_CLASS_PROP_LIST_Foo_Category" {{.*}} }, section "__OBJC,__category,regular,no_dead_strip", align 8 +// CHECK-FRAGILE: @"\01l_OBJC_$_CLASS_PROP_LIST_C" = private global {{.*}} section "__OBJC,__property,regular,no_dead_strip", align 8 +// CHECK-FRAGILE: @OBJC_CLASSEXT_C = private global %struct._objc_class_extension { {{.*}} @"\01l_OBJC_$_CLASS_PROP_LIST_C" {{.*}} }, section "__OBJC,__class_ext,regular,no_dead_strip", align 8 + // CHECK-FRAGILE: !{i32 1, !"Objective-C Class Properties", i32 64} @interface Foo @end @@ -26,3 +32,11 @@ @implementation Foo (Category) +(int)proto_property { return 0; } @end + +__attribute__((objc_root_class)) +@interface C +@property(class, readonly) int p; +@end +@implementation C ++(int)p { return 1; } +@end _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits