r216676 - Objective-C IRGen. Fixes an assertion crash caused by inconsistent

Fariborz Jahanian fjahanian at apple.com
Thu Aug 28 10:05:17 PDT 2014


Author: fjahanian
Date: Thu Aug 28 12:05:17 2014
New Revision: 216676

URL: http://llvm.org/viewvc/llvm-project?rev=216676&view=rev
Log:
Objective-C IRGen. Fixes an assertion crash caused by inconsistent
linkage related to generation of OBJC_SELECTOR_REFERENCES symbol 
needed in generation of call to 'super' in a class method.
// rdar://18150301

Added:
    cfe/trunk/test/CodeGenObjC/private-extern-selector-reference.m
Modified:
    cfe/trunk/lib/CodeGen/CGObjCMac.cpp

Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=216676&r1=216675&r2=216676&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Thu Aug 28 12:05:17 2014
@@ -6794,8 +6794,7 @@ CGObjCNonFragileABIMac::GenerateMessageS
   // If this is a class message the metaclass is passed as the target.
   llvm::Value *Target;
   if (IsClassMessage)
-      Target = EmitMetaClassRef(CGF, Class,
-                                (isCategoryImpl && Class->isWeakImported()));
+      Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
   else
     Target = EmitSuperClassRef(CGF, Class);
 

Added: cfe/trunk/test/CodeGenObjC/private-extern-selector-reference.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/private-extern-selector-reference.m?rev=216676&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenObjC/private-extern-selector-reference.m (added)
+++ cfe/trunk/test/CodeGenObjC/private-extern-selector-reference.m Thu Aug 28 12:05:17 2014
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -triple x86_64-apple-ios6.0.0 -emit-llvm -o - %s | FileCheck %s
+// rdar://18150301
+
+ at interface Query
++ (void)_configureCI;
+ at end
+
+__attribute__((visibility("default"))) __attribute__((availability(ios,introduced=7.0)))
+ at interface ObserverQuery : Query @end
+
+ at implementation ObserverQuery
++ (void)_configureCI {
+    [super _configureCI];
+}
+ at end
+
+// CHECK: @"OBJC_METACLASS_$_ObserverQuery" = global %struct._class_t
+// CHECK: @"\01L_OBJC_SELECTOR_REFERENCES_" = private externally_initialized global





More information about the cfe-commits mailing list