Author: ahatanak Date: Mon Mar 13 23:00:52 2017 New Revision: 297702 URL: http://llvm.org/viewvc/llvm-project?rev=297702&view=rev Log: [CodeGen][ObjC] Fix a bug where the type of an ivar wasn't encoded correctly.
This fixes PR30413. Patch by David Lobron. Added: cfe/trunk/test/CodeGenObjC/ivar-type-encoding.m Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCGNU.cpp?rev=297702&r1=297701&r2=297702&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGObjCGNU.cpp (original) +++ cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Mon Mar 13 23:00:52 2017 @@ -2207,7 +2207,7 @@ void CGObjCGNU::GenerateClass(const ObjC IvarNames.push_back(MakeConstantString(IVD->getNameAsString())); // Get the type encoding for this ivar std::string TypeStr; - Context.getObjCEncodingForType(IVD->getType(), TypeStr); + Context.getObjCEncodingForType(IVD->getType(), TypeStr, IVD); IvarTypes.push_back(MakeConstantString(TypeStr)); // Get the offset uint64_t BaseOffset = ComputeIvarBaseOffset(CGM, OID, IVD); Added: cfe/trunk/test/CodeGenObjC/ivar-type-encoding.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/ivar-type-encoding.m?rev=297702&view=auto ============================================================================== --- cfe/trunk/test/CodeGenObjC/ivar-type-encoding.m (added) +++ cfe/trunk/test/CodeGenObjC/ivar-type-encoding.m Mon Mar 13 23:00:52 2017 @@ -0,0 +1,35 @@ +// RUN: %clang_cc1 -S -emit-llvm -fobjc-runtime=gcc -o - %s | FileCheck %s + +@protocol NSCopying +@end + +@interface NSObject { + struct objc_object *isa; +} ++ (id) new; +- (id) init; +@end + +@interface NSString : NSObject <NSCopying> ++ (NSString *)foo; +@end + +@interface TestClass : NSObject { +@public + NSString *_stringIvar; + int _intIvar; +} +@end +@implementation TestClass + +@end + +int main() { + TestClass *c = [TestClass new]; + return 0; +} + +// CHECK: @0 = private unnamed_addr constant [12 x i8] c"_stringIvar\00" +// CHECK: @1 = private unnamed_addr constant [12 x i8] c"@\22NSString\22\00" +// CHECK: @2 = private unnamed_addr constant [9 x i8] c"_intIvar\00" +// CHECK: @3 = private unnamed_addr constant [2 x i8] c"i\00" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits