WebCore fails to link due to changes in Objective-C++ ABI in trunk clang
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Aug 2013 16:56:31 +0000 (16:56 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Aug 2013 16:56:31 +0000 (16:56 +0000)
<http://webkit.org/b/120183>
<rdar://problem/14764114>

Reviewed by Eric Carlson.

The trunk version of clang made an ABI change for Objective-C++
parameters that caused WebCore to fail to link.  The short-term
fix is to change the parameter type from id<protocol> to just id
and add an ASSERT that the parameter still conforms to the
protocol.

* platform/DragData.h:
(DragDataRef): Change typedef from id<NSDragInfo> to id.
* platform/mac/DragDataMac.mm:
(WebCore::DragData::DragData): Add ASSERT that checks that the
DragDataRef object implements the NSDragInfo protocol.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@154493 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/DragData.h
Source/WebCore/platform/mac/DragDataMac.mm

index 547259f4de8d95d66595b71cd0f63262932e2b43..e55e55875e27f5956444ebfccb6f1d5cda4b819e 100644 (file)
@@ -1,3 +1,23 @@
+2013-08-23  David Kilzer  <ddkilzer@apple.com>
+
+        WebCore fails to link due to changes in Objective-C++ ABI in trunk clang
+        <http://webkit.org/b/120183>
+        <rdar://problem/14764114>
+
+        Reviewed by Eric Carlson.
+
+        The trunk version of clang made an ABI change for Objective-C++
+        parameters that caused WebCore to fail to link.  The short-term
+        fix is to change the parameter type from id<protocol> to just id
+        and add an ASSERT that the parameter still conforms to the
+        protocol.
+
+        * platform/DragData.h:
+        (DragDataRef): Change typedef from id<NSDragInfo> to id.
+        * platform/mac/DragDataMac.mm:
+        (WebCore::DragData::DragData): Add ASSERT that checks that the
+        DragDataRef object implements the NSDragInfo protocol.
+
 2013-08-23  Andreas Kling  <akling@apple.com>
 
         RenderLayerCompositor::m_renderView should be a reference.
index 644492670d9b778c6e6e26bd009ec38e79d75155..9a5f8475c3800fc4331f316cd9317ad17a203e01 100644 (file)
@@ -41,7 +41,8 @@
 #ifdef __OBJC__ 
 #import <Foundation/Foundation.h>
 #import <AppKit/NSDragging.h>
-typedef id <NSDraggingInfo> DragDataRef;
+// Use id instead of id <NSDraggingInfo> here due to clang ABI change. See <rdar://problem/14764114>.
+typedef id DragDataRef;
 #else
 typedef void* DragDataRef;
 #endif
index 94f865a4a496af9c240b6db24b0ab285b01b9bdd..fbbba38e077d358bc4a32c968dfd9ac5607536f8 100644 (file)
@@ -51,6 +51,7 @@ DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPo
     , m_applicationFlags(flags)
     , m_pasteboardName([[m_platformDragData draggingPasteboard] name])
 {
+    ASSERT([data conformsToProtocol:@protocol(NSDraggingInfo)]);
 }
 
 DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition,