RESOLVED FIXED 27869
strict-aliasing warnings in JSFunction.h
https://bugs.webkit.org/show_bug.cgi?id=27869
Summary strict-aliasing warnings in JSFunction.h
Xan Lopez
Reported 2009-07-31 00:32:26 PDT
Created attachment 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.
Attachments
aliasing.patch (3.14 KB, patch)
2009-07-31 00:32 PDT, Xan Lopez
no flags
Fix using bitwise_cast (2.49 KB, patch)
2009-10-24 08:51 PDT, Martin Robinson
oliver: review+
Xan Lopez
Comment 1 2009-07-31 00:33:49 PDT
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).
Xan Lopez
Comment 2 2009-07-31 02:47:49 PDT
Comment on attachment 33861 [details] aliasing.patch 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.
Martin Robinson
Comment 3 2009-10-24 08:51:30 PDT
Created attachment 41781 [details] Fix using bitwise_cast Seems that using bitwise_cast fixes these compiler warnings.
Geoffrey Garen
Comment 4 2009-10-26 15:12:43 PDT
Strange to see this warning. char* is supposed to be able to alias to anything, even under -fstrict-aliasing.
Geoffrey Garen
Comment 5 2009-10-26 15:13:11 PDT
Can you run SunSpider before and after this patch and post the results?
Oliver Hunt
Comment 6 2009-10-28 13:19:49 PDT
Committed r50232
Note You need to log in before you can comment on or make changes to this bug.