Bug 27869 - strict-aliasing warnings in JSFunction.h
: strict-aliasing warnings in JSFunction.h
Status: RESOLVED FIXED
: WebKit
JavaScriptCore
: 528+ (Nightly build)
: PC Linux
: P2 Normal
Assigned To:
:
:
:
:
  Show dependency treegraph
 
Reported: 2009-07-31 00:32 PST by
Modified: 2009-10-28 13:19 PST (History)


Attachments
aliasing.patch (3.14 KB, patch)
2009-07-31 00:32 PST, Xan Lopez
no flags Review Patch | Details | Formatted Diff | Diff
Fix using bitwise_cast (2.49 KB, patch)
2009-10-24 08:51 PST, Martin Robinson
oliver: review+
Review Patch | Details | Formatted Diff | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2009-07-31 00:32:26 PST
Created an attachment (id=33861) [details]
aliasing.patch

GCC gives me the following warnings when compiling with JSFunction.h:

In file included from ../../JavaScriptCore/runtime/JSFunction.cpp:27,
                 from ../../JavaScriptCore/AllInOneFile.cpp:36:
../../JavaScriptCore/runtime/JSFunction.h: In member function ‘JSC::JSValue (* JSC::JSFunction::nativeFunction())(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&)’:
../../JavaScriptCore/runtime/JSFunction.h:87: warning: dereferencing type-punned pointer will break strict-aliasing rules
../../JavaScriptCore/runtime/JSFunction.h: In member function ‘JSC::ScopeChain& JSC::JSFunction::scopeChain()’:
../../JavaScriptCore/runtime/JSFunction.h:104: warning: dereferencing type-punned pointer will break strict-aliasing rules
../../JavaScriptCore/runtime/JSFunction.h: In member function ‘void JSC::JSFunction::setScopeChain(const JSC::ScopeChain&)’:
../../JavaScriptCore/runtime/JSFunction.h:119: warning: dereferencing type-punned pointer will break strict-aliasing rules
../../JavaScriptCore/runtime/JSFunction.h: In member function ‘void JSC::JSFunction::setNativeFunction(JSC::JSValue (*)(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&))’:
../../JavaScriptCore/runtime/JSFunction.h:123: warning: dereferencing type-punned pointer will break strict-aliasing rules

The problem is that we are accessing a char array as NativeFunction* and ScopeChain*, which GCC deems to be incompatible pointers. Attached is the usual trick-solution for this, which is to use a union type and do all memory access through there. This was done with the help of Maciej on IRC, and he also suggested that we could do further cleanups here, so I'm attaching my current patch for discussion.
------- Comment #1 From 2009-07-31 00:33:49 PST -------
Actually, just looking at the patch now, the array member in the union is not needed anymore (it was used in previous iterations of the patch).
------- Comment #2 From 2009-07-31 02:47:49 PST -------
(From update of attachment 33861 [details])
This seems to introduce a crash in the JSFunction destructor (which calls the ScopeChain destructor). Maciej suggested something like this could happen, so this needs further investigation. Removing from the queue.
------- Comment #3 From 2009-10-24 08:51:30 PST -------
Created an attachment (id=41781) [details]
Fix using bitwise_cast

Seems that using bitwise_cast fixes these compiler warnings.
------- Comment #4 From 2009-10-26 15:12:43 PST -------
Strange to see this warning. char* is supposed to be able to alias to anything, even under -fstrict-aliasing.
------- Comment #5 From 2009-10-26 15:13:11 PST -------
Can you run SunSpider before and after this patch and post the results?
------- Comment #6 From 2009-10-28 13:19:49 PST -------
Committed r50232