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.
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 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.
Created attachment 41781 [details] Fix using bitwise_cast Seems that using bitwise_cast fixes these compiler warnings.
Strange to see this warning. char* is supposed to be able to alias to anything, even under -fstrict-aliasing.
Can you run SunSpider before and after this patch and post the results?
Committed r50232